# Linux基础小笔记

操作系统:管理硬件和程序的一套系统软件

补: getconf LONG-BIT 查看系统位数

# 系统特点

Linux系统特点:

  • 开放性
  • 多用户
  • 多任务
  • 良好的用户界面
  • 设备独立性
  • 提供丰富的网络功能
  • 可靠的安全系统

# shell

用来接受用户从字符终端输入的命令,并调用对应用的程序去执行命令的程序 特点:

  • 用户通过命令和Linux进行交互的桥梁
  • Linux是通过shell来解释执行命令
  • shell是一个程序
  • Linux默认的shell命令是:bash

# 基础命令

查看系统时间:

date

格式化显示时间:

date+'%Y-%m-%d %H:%m:%s'

设置系统时间:

date -s 20161109    日期
date -s 21:05:50 时间
date -s '20161109 09:50'    日期+时间
1
2
3

查看发行版本:

cat /etc/issue
cat /etc/* release
1
2

查看内核版本:

uname -r

关机:

power off、halt、shutdown -h now、init 0

重启:

reboot、init 6、shutdown -r now

# 文件相关命令

文件系统是操作系统的一个功能,用于管理文件夹和文件;

Windows的文件结构是多个并列的树状结构,里面是文件夹、文件; 文件路径是大小写不区分的

Linux系统里面所有的东西都可以当作文件处理;

Linux文件名称:大小写敏感,无专用扩展名

没有C、D、E盘符,一切从/开始

查看磁盘分区大小:

df -h

显示当前地址:

pwd
特殊文件:
>根目录:/
当前目录:.
当前目录的父目录:..
1
2
3
4
5

ls查看文件和目录: 显示当前目录下的所有文件及文件夹包括隐藏的.和..等

ls -a

显示不隐藏的文件与文件夹的详细信息

ls -l

仅显示当前目录下的文件夹

ls -d

查看包括所有子目录的内容

ls -R

# 常用目录:

/etc:系统管理和配置文件
/home:用户主目录
/boot:Linux系统的内核文件放在该目录下面
/shin:系统管理命令
/root:系统管理员的主目录
/bin:常用可执行文件,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等
/dev:设备文件,如:/dev/cd0
/usr:用户级应用程序和文件几乎都在这儿
/proc:一个虚拟文件系统,放置的数据都是在内存当中
/tmp:公共的临时文件存储点,存放一些临时文件
/lib:一些库文件
1
2
3
4
5
6
7
8
9
10
11

# 文件夹(目录)操作常用命令:

cd /home:进入‘/home’目录
cd ..:返回上一级目录
cd:进入个人的主目录
cd -:返回上次所在目录
mkdir 文件名:创建目录
rm 目录名:删除目录,系统会先询问是否删除
rm -f 文件名:强行删除,系统不再提示
rm 文件名:删除文件,系统会先询问是否删除
rm -rf 目录名:强行删除目录下的所有文件、子目录下的所有文件和目录、删除文件夹本身。
1
2
3
4
5
6
7
8
9

# 查看文本文件内容:

cat:短文件
less:长文件
less常用参数:
k:向上一行
j:向下一行
page up:向上一页
page down:向下一页
q:退出
tail:从文件尾部查看文件,常用参数 -f
head:从文件开头查看文件,如:head -n file
echo '内容'>>文件名:在文件里写入数据
1
2
3
4
5
6
7
8
9
10
11

# 通配符:

*:所有文件
g*:文件名以‘g’开头的文件
b*.txt:以‘b’开头,中间有0-多个字符,并以‘.txt’结尾的文件
data???:以‘data’开头,其后紧接着3个字符的文件
[abc]*:文件名以‘a’‘b’‘c’开头的文件
1
2
3
4
5

# 创建文件:

(可以使用绝对路径和相对路径)

vi 文件名:可以顺便创建内容

touch 文件名

# 复制文件、目录

cp 文件名(当前目录复制)

cp f1 f2

cp 文件名 地址(目标是目录,产生同名文件)

cp f1 /home/haha

cp 文件名 地址的另一文件(目标是文件,可以改名)

cp f1 /home/haha/f2

cp 多个文件名 地址(源可以是多个文件)

cp f1 f2 //home/haha

注:如果f2存在,会被覆盖,除非-i,要求提示

cp -r d1 d2(d2是粘贴后的文件名)

cp -r f1 d2 /home/haha/d2(源可以是多个文件和目录)

# 移动、重命名文件和目录

源地址和目的地址相同就是重命名

mv f1 f2
mv d1/f1 d1/f2
1
2

源地址和目的地址不同

mv f1 d1/ :移动f1到d1
mv f1 d1/f2:移动且重命名
mv f1 f2 d1 d2:移动多个文件到d2
mv d1 d2:如果d2不存在,重命名目录;如果d2存在,移动目录
1
2
3
4

# 文件链接

和复制的区别:文件在磁盘中只有一个拷贝,节省磁盘空间

链接的种类:硬链接、软链接

ln dog dog-hard;
ln -s pig pig-soft
1
2

注: 对源文件的修改,软、硬链接文件内容也会被修改,因为指向同一个文件内容

硬链接

给文件创建一个副本,源文件名和连接文件名都指向相同的物理地址

软链接:(符号链接)

软链接的数据是所连接文件的路径名,类似Windows下的快捷方式

软链接和硬链接的区别

  • 对源文件删除(重命名)会导致软链接不可用,而硬链接不受影响
  • 硬链接不能跨物理设备,软链接可以
  • 硬链接不能关联目录,只能是文件,软链接可以

# 查找命令

which命令:查找某个命令的完整路径,也就是说是用来查找可执行文件的,如:

which grep

(查找grep命令的二进制文件路径)

whereis:快速查找程序的二进制问价,源代码文件和man手册文件的路径,如:

whereis grep

(查找grep的二进制文件,源代码文件,帮助文档找到)

find:在指定目录及其子目录下查找符合条件的指定文件,当我们忘了文件的位置,可以使用,如:

find 目录名 条件
常见条件:
-name:指定要被寻找的文件或目录名称,可用通配符
-type x:以文件类型作为寻找条件,文件类型x如下:
d:目录;f:文件;c:链接文件;c:字符设备文件;b:块文件
如:
find /temp -name "abc*" -type f
1
2
3
4
5
6
7

deff:比较文本文件差异,用在文件大致相同的情况下

格式:

diff -y 文件名1 文件名2
输出解释:
|:显示每个文件不同的行
<:显示左边文件比右边文件多出来的行
>:显示右边文件比左边文件多出来的行
1
2
3
4
5

grep:(大小写敏感,支持正则表达式搜索文本)

文本关键字搜索,在查看日志,查看命令输出时用

如:

grep root /var/log/message:查找/var/log/message文件中包含root的行
grep 'test 123' d*:显示所有以d开头的文件中包含test 123的行
grep 'test' a b c:显示在a、b、c文件中匹配test的行
grep root -r /log:在/log所有子目录子文件中搜索包含‘root’的行
grep '^test' /log.log:在log.log中以字符串‘test’开头的行
grep '$test' /log.log:在log.log中以字符串‘test’结尾的行
常用参数:
-c:只输出匹配行的行数
-i:不区分大小写
-n:显示匹配行及行号
-v:显示不报航匹配文本所有行
-F:指明pattern非正则表达式
1
2
3
4
5
6
7
8
9
10
11
12

wc:文件内容统计

wc -l /passwd:统计/passwd文件有多少行
wc -c //passwd:统计/passwd文件有多少字节
ps -ef|wc -l:显示进程有多少行
du:查看目录使用空间,文件使用空间,du -sh
df:查看文件系统使用空间 df -h
1
2
3
4
5

split:指定大小分割文件

split -l 5 abc.txt log:将abc.txt分为多个文件,每个文件包含5行,生成的文件前缀为log
cat abc.txta*>>abc.txt :把如abc.txtaa、abc.txtab、abc.txtac文件合为一个
1
2

# vi/vim

vi是所有Linux系统都提供的文本编辑器,它提供了一个窗口,通过它可以编辑文本文件

vim是vi的增强版本,支持vi的全部功能

  • 增强命令
  • 增强功能包括颜色标记功能

vi可分为三种操作模式,分别是:

1、命令模式(command mode)

2、插入模式(insert mode)

3、底线模式(last line mode)

三种工作模式,完成不同的任务

命令模式

刚进入时缺省状态:

  • 此时不可以直接去添加文字
  • 不能用退格删除文字
  • 可以控制屏幕光标的移动
  • 字符的删、复制、粘贴
  • 进入插入模式
  • 进入底线模式

插入模式

  • 在插入模式下可以对文件内容进行编辑
  • 在插入模式底部有个——insert——标记
  • 在命令模式下,可以输入下面的字符进行插入模式
i:插入,从目前光标所在之处插入所有输入的字符
a:增加,目前光标所在的下一个字处开始插入字符
o:插入新的一行,从行首开始输入文字
1
2
3

插入模式下,按Esc键,切换到命令模式

命令模式功能

光标移动
G:移动到文件的最后
gg:移动到文件的开头
0/^:光标移动到所在行的行首
$:光标移动到所在行的行尾
方向键:光标的上下左右移动/hjkl
Ctrl+f:下一页
Ctrl+b:上一页
x:删除,3x表示删除光标所在位置后的3个字符,包括光标所在位置
dw:删除光标所在位置的词尾的内容
dd:删除光标所在行,3dd表示删除光标所在位置往下的3行,包括光标所在行
yw:复制光标所在处到词尾的内容
yy:复制光标所在行
p:粘贴包括前面复制操作或删除操作的内容
r:取代光标所在处的字符
R:连续取代字符直到按Esc为止
u:假如误操作一个指令,可以马上按u,进行撤销,可以连续撤销
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

底线模式

先按Esc键进入命令模式后,再输入冒号:进入底线模式

在底线模式下,可以完成对文件的保存,内容替换,显示格式的设置等工作

底线模式功能——查找、定位

在命令模式下输入冒号
set nu:会在文件的每一行前面列出行号
set nonu:取消行号
(#):是你要输入的数字(不要括号,格式需要),再按回车,将跳到数字指定的行
/关键字:先按/,在输入你要寻找的字
可以输入n,进行向下连续查找
N:是往上查找
set ic:忽略大小写
set noic:不忽略大小写
set wrap:折行
set nowrap:不折行
1
2
3
4
5
6
7
8
9
10
11

字符替换

1,$s/string/replace/g
将全文的string字符串取代为replace字符串
其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认
也可以
%s/string/replace/g,都是一样的功能
1,20s/string/replace/g
1-20行的string替换为replace
#w filename:如果想摘取文章的某一段,存成另外一个文件,可用这个指令#代表符号,例如:
30,50 w nice
将您正在编辑文章的第30~50行存成nice这个文件
1
2
3
4
5
6
7
8
9
10

保存退出

:w filename 将文件另存为filename
:wq 保存文件并退出
:q!强制退出并不保存
1
2
3

# 重定向

包含:

  • 标准输入-》stdin——0
  • 标准输出-》stdout——1
  • 标准错误-》stderr——2

特点

  • 用户通过终端与shell交互
  • shell缺省打开了3个文件
  • 进程从stdin读取用户输入
  • 从stdout、stderr输入信息
  • 指向同一个设备文件——终端

重定向——标准输出(‘>’:覆盖;‘>>’:追加):

(有时不想输出到终端上)

ps -ef >out
也可以:ps -ef 1>out
1
2

重定向——标准错误:

(一段shell程序错误重定向)

ps -ef 2>err
例:
假如源文本为0123 -》./0123 >both 2>&1
同时重定向stdout和stderr到同一个文件
./0123 &>both (bash 4支持)
1
2
3
4
5

./0123>both 2>err

同时重定向stdout、stderr到不同文件

重定向——标准输入

(有时需要以文件里面读取内容,而不是终端设备)

rm -i both >./123

# 管道

(第一份命令的输出作为第二个命令的输入)

让stdout和stderr同时重定向到管道

both.py 2>&1|grep err

连续使用管道

ps -ef |grep python |grep -v grep

# 环境变量

shell环境变量:

Linux是一个多用户的操作系统,每一个用户登录系统后,都会有一个专用的运行环境,这个运行环境就是一组环境变量的定义,用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

env:查看环境变量

Path

  • 决定shell搜索命令的路径
  • 主要给shell用
  • Path值的路径的查找顺序
echo $Path
查看环境变量的值
export Path =./:$Path
1
2
3

配置环境变量

对所有用户生效
/etc/bashrc
对当前用户生效
~/.bashrc
配置生效命令
source /etc/bashrc
1
2
3
4
5
6

# 用户/用户组

  • 所有文件都属于一个特定的用户和一个特定的用户组
  • 每个文件都有一定的访问权限,用户限制不同用户和用户组的访问行为
  • 文件权限:read、write、execute

# 用户类型

  • root用户:创建用户:useradd 常用参数:-d 用户家目录;-g 用户所属组,例:useradd -g 组 用户
  • 普通用户:由超级用户创建及授权,并且可以登录到Linux系统执行某些任务
  • 系统用户:系统创建了若干用户,如:mail、ftp、bin等,默认情况下,系统用户不能登录

root用户可修改密码:

passwd 用户名
xxxxxx(输入密码)
1
2

创建用户后,密码是随机的

用户可以修改自己的密码(需要输入当前密码)-》直接passwd

只有root用户可以修改其他用户的密码

修改用户信息

usermod -g root xxx 修改用户的主组
usermod -G group(副组) xxx 添加用户副组(覆盖)
usermod -aG group(副组) xxx 追加用顾副组
usermod -L xxx 锁住用户
usermod -U xxx 解锁用户
usermod -c xx username 修改用户备注信息
usermod -l newname username 修改用户账号名称
1
2
3
4
5
6
7

用户查询

who:查询当前在线的用户
whoami:当前身份查询
group:查看用户的所属组
id:显示当前用户的信息
1
2
3
4

删除用户

userdel:如果加参数-r,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一并删除

例:

userdel A 删除用户A,但不删除其家目录及文件
userdel -r A 删除用户A,其家目录及文件一并删除
1
2

# 用户组

Linux系统中,每个用户账号至少属于一个组,每个组可以包括多个用户

管理组的常用命令有以下几个:(root用户才能执行)

  • groupadd 创建组
  • groupdel 删除组
  • usermod 修改用户所属组

##Linux 文件访问 对于一个文件来说,访问他的用户分为3中:

  • owner:文件所有者——rwx权限
  • group:文件所属工作组的用户(即owner的所属组用户)——rw-权限
  • other:其他用户——r--权限

# 改变文件访问权限(root/owner可改变)

chmod [who] [op] [permission] file
例:
chmod u+x file
who用户类型,内容为以下一项或多项
u:拥有者(user——owner)
g:group
o:owner
a:all

op表动作:
+:表示要加上permission指定的权利
-:表示要减去permission指定的权利

第二种写法:chmod u=rwx file=chmod u=rwx,g=rw,o=r file
第三种写法:chmod 775 file=chmod u=rwx,g=rwx,o=rx file
r=4  w=2  x=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 改变文件所有者和所属组

chown xx file 把文件的所有者变更为xx
chown newusername:group file 把文件的所有者变更为newusername,所属组变为group
1
2

chgrp:改变文件所属组(root、owner执行,且只能改变owner所在组)

例:

chgrp newgroup file 把文件所属组变更为newgroup
chgrp -R newgroup dirl 把,目录dirl以及下面所有的子目录和文件的所属组变更为newgroup
1
2

# 进程(shell就是一个进程)

正在运行的可执行文件,运行起来形成进程

# 查看进程(ps)

不带任何参数,同一个用户同一个终端

-ef  (通常和管道符使用)
e:表示所有进程
f:full-format  所有格式
axu:列出目前所有的正在内存当中的程序
1
2
3
4

补:

执行文件
./file  .file  sh file 

关闭运行文件:./zbox -s stop
改Apache端口:./zbox -ap 81
改数据库端口:./zbox -mp 3306
1
2
3
4
5
6

前台进程

shell是正在执行的和用户进行交互的进程叫前台进程

后台进程:+&

后台运行意味着不从标准输出读入字符

例:

vi abc &

列出后台进程jobs

fg <num> 将后台进程调到前台
Ctrl+z 可挂起进程,注意jobs显示状态是stopped
bg可让进程在后台执行
1
2
3

终止进程

自行终止:

  • 任务执行完
  • 用户让其退出:exit
  • 异常退出,比如程序中有除以0的代码

用户手动杀死进程:(只有ower和root才能杀死进程)

  • kill PID
  • kill -9 PID
  • Ctrl + c

# 定时任务

at:只能执行一次

crontab:周期性的执行

# at用法

时间格式:

04:00 2019-03-17 2019年3月17号的四点执行
now + 5 minutes 5分钟后执行
5pm +3days 三天后的下午5点执行
1
2
3
at now+5 days
at>echo 'good'>good.log
at><EOT> ctrl +d
生成对应的shell脚本放在目录 /var/spool/at/下面
1
2
3
4

atq:检查执行(root用户能查看所有用户的,非root用户只能查看自己的)

删除任务

atrm

# crontab

* * * * * command
分钟 小时 星期
crontab -e 进入vi编辑器
30 0 * * * backup
表示:在每个的凌晨0:30运行backup命令
* * * * * command >>地址路径 每分钟执行命令,并保存到指定目录
3,15 * * * command 第3分钟、第5分钟执行
3,5, 8-11 * * * command 在上午8点到11点的第3分钟和第5分钟执行
30 21 * * * command 每晚的21:30执行命令
默认放在/var/spool/cron/下面
1
2
3
4
5
6
7
8

crond检查执行

crontab -e 进去删除对应行

# 打包和压缩

打包:把文件和目录的结构和内容拷贝到一个文件里

压缩:把文件经过一些算法变成体积上更小的文件

# 打包(tar)

tar -cvf files a b c 打包文件
tar -cvf files dirl 打包目录
tar -tvf files 查看包内容
tar -xvf files -c dirl 解开包到指定目录
1
2
3
4

# 下载(源码包安装)

wget 网址
tar -zxvf 包名
./configure 配置
make 编译
make install 安装
1
2
3
4
5

RPM包安装:

rpm -ivh rpm软件包名

删除安装的软件

wget 网址
rpm -qa /grep 软件名
1
2

YUM安装

源:

/etc/yum.repos.d/*.repo
安装:yum install xx
删除:yum remove xx
列出已经安装的:yum list installed(available)
1
2
3
4

apt-get安装(与yum类似)

例:

apt -get install xx

# 压缩

gzip命令(不能压缩目录)

gzip A B 压缩1个/多个文件,压缩后,原来的文件会被替换为<name>.gz
gzip -r dirl 对文件夹下每个文件压缩
gzip -d file.gz 解压
tar -zcvf data.tar.gz file1,file2 打包并压缩
tar -zcvf data.tgz *.doc 打包并压缩
tar -zxvf data.tar.gz 解压缩
tar -ztvf data.tar.gz 查看压缩包
zip zipname.zip file1,file2 将文件都压缩到包里
unzip zipname 解压
1
2
3
4
5
6
7
8
9