1.1、shell特性
history 历史命令记录,root 用户默认存放文件~/.bash_history
默认存放1000条记录
查看记录数量 echo $HISTSIZE
!!
上条命令
!$
上条命令最后一个参数
!955
运行记录中第955条命令
!c
选择最近的一条以c开头的历史命令运行,从下向上查找
tab
补全命令和路径,按两下显示所有可补全的命令
设置别名alias aaa='ls -la'
取消别名unalias aaa
*
通配符 ls *.txt (会显示所有以.txt结尾的文件)
?
只匹配一个字符 ls ?.txt (会显示单个字符名的.txt 文件;如 1.txt)
|
管道符 将结果 赋予下一个命令(cat /etc/passwd|wc -l)
>
重定向(echo "jdsfjf" > 1.txt 会覆盖1.txt 的内容)
>>
追加重定向(不覆盖原有内容直接在原有内容上添加)
<
反向重定向(wc -l < 1.txt 把1.txt内容丢给命令处理)
2>
错误重定向(ls 111 2> 1.txt 将运行ls 111 提示的报错信息记录到 1.txt)
2>>
追加错误重定向 (ls 111 2>> 1.txt 在上次记录错误信息后,追加报错内容)
ctrl+z
暂停 jobs
查看暂定的进程数 fg
调到前台运行(+默认恢复的 fg 2
恢复 2的进程)bg
调到后台运行 jobs
中显示会有&符号
1.2、shell变量
-
系统变量:
env
查看系统环境变量echo $HOSTNAME
显示HOSTNAMT 变量的值(查看变量值或引用这个变量值需要添加$)
set
显示系统变量(会显示 系统变量、自定义变量以及额外的变量) -
用户自定义变量:
格式 a=1;b=2
变量名只能是 字母、数字、下划线,数字不能开头
注意:
- 大写、命令、关键字等 字符尽量不要用作变量名(系统变量为大写)
- 变量内容中有特殊字符,变量内容需要使用单引号(如:b='ls /tmp/' 空格为特殊字符)
- 变量内容需要使用其他命令运行的结果,可以使用反引号(如 which vim 结果为
/usr/bin/vim
;myvim=which vim
即echo $myvim= /usr/bin/vim
) - b="$a"12 (b的值=变量a的值增加12,如:a=1 、echo $b为112;c="$a"b、echo $c为1112)
bash 打开一个子shell exit退出子shell
shell中export a=1 子shell 可以调用a=1 (export 全局变量)
vim /etc/profile (所有的变量需要在所有的shell中生效 需要将这个变量加入这个文件)
unset a(删除变量值,a为自定义的变量名称)
1.3系统和用户的环境变量配置文件
用户、系统环境变量配置文件:
PATH HOME SELL
vim /etv/profile
(系统相关的 任何账户都生效)
vim /etc/bashrc
(可以设置PS1 值PS1='[u@h w]$ ' W绝对路径 w路径最后一个文件夹名 t 显示时间 如:[u@h w]$ ;设置umask)
vim /etc/profile.d
环境变量定义文件(自动定义pata变量 vim etc/profile.d/path.sh
,新建一个path.sh
的定义文件)
source /etc/profile
(使定义文件生效)
【root用户命令输入位置是 # 符号;普通用户是 $ 符号;所有环境变量不建议直接修改配置文件,建议 /etc/profile.d 文件夹下添加.sh文件】
-
家目录下的 部分文件
.bash_history 保存的命令历史
.bash_logout 用户退出时执行的命令,比如退出时删除历史命令,可以写入这个文件中
.bash_profile 用户自己的环境变量配置,只对当前用户生效
.bashrc 用户别名配置文件,当前用户生效
1.4、shell中特殊符号
特殊符号:
* 通配符(通配多位 ?只能通配一位字符)
# 配置文件、shell中 #这一行不运行,不生效;可以作为注释使用
脱异符号 (如:ls #1.txt 只运行了ls 未识别到#1.txt ls #1.txt将#1.txt作为文件名运行)
| 管道符 把一条命令的结果 丢给后面一条命令
$ 变量前添加这个符号,表示在使用这个变量
!$ 最后的意思(如:ls !$ 会调用最后输入ls 的参数命令)vim 中!$ 指最后一行,最后一个字符、行尾deng
; 运行在命令的中间(如:`ls 1.txt;ls 3.txt`同时运行两个命令)
~ 用户的家目录(ls ~ 相当与ls root)
& 把一个命令放到后台运行(如:sleep 2233 & 在后台运行sleep这个命令)
&&
> 重定向
>> 追加重定向
2> 错误重定向
2>>错误重定向
< 错误追加重定向 反重定向(将右侧的文档内容 重定向给左侧的命令)
[] 正则表达式中表示范围;命令中 ls [12].txt == ls 1.txt 2.txt ;ls [1-3].txt== ls 1.txt 2.txt 3.txt
1.5、cut命令
cut 将文件分段
cat /etc/passwd
-d:
以:号为分隔符;
-f 3
显示第三段,显示多段的-f 3,4
或-f 3,6,5
显示 3段 然后6段 然后显示5段;如:cut -d: -f 3 /etc/passwd
-c
显示第几个字符 如:cut -c 10 /etc/passwd
显示第10个字符 cut -c 1-10 /etc/passwd
显示1到10 的字符
1.6、sort命令
sort 排序使用 (默认以ASCII码 排序)
格式:sort /etc/passwd
-t
分隔符
-k
选择第几段(sort -t: -k3 /etc/passwd 以:为分隔符 按照第3段内容排序;范围值 3,4 不是cut的- 如:sort -t: -k3,5 显示3到5段的内容 )
-n
以数字排序 (如:sort -t: -k3 -n /etc/passwd)
-r
反序排序,最小的在下面
-u
排序去重复内容
-un
字母开头的会识别成重复内容,如skj1 a weotj 都会认为是重复内容,只显示数字内容
1.7、wc命令
-l 显示行数 (如:wc -l.txt)
-w 统计文本中word(单词)数量
-m 统计文本字符数(换行符也会被统计)
1.8、uniq和tee命令
uniq 去重复
-c 统计重复数量(格式:uniq -c 1.txt)
重复内容不在邻近行,无法去重复(sorf 2.txt |uniq -c 先排序,然后在去重复)
tee 重定向 并显示(格式:echo "1234" |tee 1.txt)
1.9、tr和split命令
-
tr替换字符
ls *.txt |tr 'a-z' 'A-Z' 将所有的.txt文件名中的小写替换成大
-
split 切割文件
split -p 50m 1.txt 按大小分隔(单位为B 不用写单位)
split -l 100 1.txt 按行分隔
自定义分隔后文件名: split -p 20 1.txt new_ (new_ 为分隔后文件 开头名称)
2.0、shell中连接符(并且、和、或者)
并且、或者(&& ||)
&&
左边命令执行成功后,才会运行右边的命令
||
左边命令执行不成功,才会执行右边的命令
;
左边命令执行成功与否,都会执行右边的命令