准备工作:了解linux基础知识
1.history命令显示历史记录
用户正常退出shell时,系统会将敲过的命令存入.bash_history中。“!”与history有莫大的关联。
1)!!表示执行上一条命令
2)!n,n表示数字,表示执行history中第n条命令
3)!可以进行模糊匹配,如:!pass可以执行之前输过的passwd命令
2.别名alias
将复杂的命令赋值给一个简单的别名
1)alias显示当前系统已经存在的别名
2)设置别名,alias yx='fdisk -l',输入yx则可以执行fdisk -l命令。注意:如果将系统已存在的命令设置为其他命令的别名,会覆盖系统命令的含义,unalias取消别名
3.作业控制
ctrl+z暂停现在正在进行的工作,通过jobs来查看,fg前台运行和bg后台运行来恢复。jobs前面有显示作业的编号,fg或者bg加作业编号继续运行。
4.环境变量
PATH代表了所有常用命令的绝对路径,使得一些常用命令不用输入绝对路径就可以直接运行。
1)echo $PATH会显示当前设定的路径,以:分隔
2)如果要添加路径,则可以在家目录下的.bash_profile文件中的PATH末尾追加需要添加的路径,并且source .bash_profile使之生效。如:PATH=$PATH:$HOME/bin:/tmp
3)环境变量的显示和生效问题
a)env命令显示所有系统预设的环境变量,set命令显示系统预设变量和用户定义的变量
b)自定义变量只在当前shell中生效,bash新开一个shell之后自定义变量无效
c)可以用pstree | grep bash来查看当前的shell
d)如果想让变量在所有shell中生效,又不修改配置文件,可以在配置变量的shell中再用export在子shell中声明此变量
[root@localhost ~]# yx=xy
[root@localhost ~]# export yx
4)/etc/profile中加入export yx=xy,并且source /etc/profile 使得定义的变量在所有用户的所有shell中生效;而在用户家目录的.bashrc中写入export yx=xy并且读取之后,对当前用户的所有shell生效。
a)若变量内容带空格,则需要单引号括起来
[root@localhost ~]# yx='x y'
[root@localhost ~]# echo $yxx y
b)若变量内容带单引号,则需要双引号括起来
[root@localhost ~]# yx="x'y"
[root@localhost ~]# echo $yx
x'y
c)若变量内容带系统命令,并且希望echo 变量之后命令执行。则需要用反引号括起来
[root@localhost ~]# yx=`pwd`
[root@localhost ~]# echo $yx
/rootd)若变量内容需要引用其他变量,则其他变量要用双引号括起来
[root@localhost ~]# yx="$HOME"xy
[root@localhost ~]# echo $yx
/rootxy在这里要提一下,单引号会取消其中特殊字符的含义,而双引号不会
5)unset可以取消变量的赋值
5.通配符
1)*代表零个或者多个任意字符
2)?代表一个任意字符
3)\脱意字符,去除像*、?等这样字符的特殊含义,让他们变成单纯显示符
ls -d yx* 表示列出所有以yx开头的文件夹
ls -d yx\* 表示列出文件夹名为yx*的文件夹
注意:这里的脱意字符要和转义字符区分。转义字符利用\加常见的字母或数字来显示那些不能显示的ASCII字符。如:\t 表示tab键,\n 表示enter键
4)!$代表上一个命令最后的那个变量
5)|| 前面的命令执行成功则不执行第二条命令
6.管道符|
将前面命令执行所得到的结果丢给管道后面的命令,通常配合其他常用的命令一起使用
7.常用命令
1)wc命令。统计文件的行数、单词数、文件大小等信息。
a)
[root@localhost ~]# echo 'HELLO WORLD' > test.txt
[root@localhost ~]# cat test.txt | wc
1 2 121代表文件的行数,2代表文件内容的单词总数(以空格分隔),12代表文件的大小字节数
b)-l 统计文件行数
c)-c 统计文件字节数
d)-m 统计文件的字符数(包括字母、数字、特殊字符)
注意:每行的行末都会有一个隐藏的结束符$所以统计的时候会加上这个字符
e)-w 统计文件的单词数(以空格为分隔符)
f)-L 统计文件最长行的字符数(以字符计算长度)
2)cut命令。用来截取某个字段。
最常用的语法为:cut -d'分隔符' -f第几字段
其实不加单引号-d后面直接跟分隔符也是可以的,但是个人习惯加单引号,若分隔符为单引号',则用双引号将其括起来,如:
[root@localhost tmp]# cat test
a'b'c'd'e
[root@localhost tmp]# cat test | cut -d"'" -f3
ca)-c 显示每一行的第n个到第m个字符,如:
[root@localhost tmp]# cat test
Hello world
I am Bob
[root@localhost tmp]# cat test | cut -b1-7
Hello w
I am Bo
b)-s 不显示不包含分隔符的行,如:
[root@localhost tmp]# cat test
Hello world
I am Bob
#$%^
[root@localhost tmp]# cat test | cut -d' ' -f1 -s
Hello
I
3)sort命令。内容排序。
-t 分隔符 :作用跟cut的-d一个意思
-n :使用纯数字排序
-r :反向排序
-u :去重复
a)例:head -n5 /etc/passwd | sort -t: -k3 -n -r -u
[root@aca-CT-1-250 ~]# head -n5 /etc/passwd |sort -t: -k3 -n -r -u
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
4)uniq命令。去除重复行。
-c :统计重复的行数,并把行数写在前面
a)例:
[root@aca-CT-1-250 ~]# cat test
aaa
bbb
ccc
aaa[root@aca-CT-1-250 ~]# sort test | uniq -c
2 aaa
1 bbb
1 ccc
5)tee命令。相当于>,不同的是在重定向的同时在屏幕上输出,常用在|之后。
a)例:
[root@aca-CT-1-250 ~]# echo "hello" | tee test.txt
hello
6)tr命令。替换命令,用来替换文档中的内容。
-d:删除某个字符
-s:删除重复的字符
[root@aca-CT-1-250 ~]# cat test.txt
hello
[root@aca-CT-1-250 ~]# cat test.txt |tr [a-z] [A-Z]
HELLO
[root@aca-CT-1-250 ~]# cat test.txt |tr -d h
ello
[root@aca-CT-1-250 ~]# cat test.txt |tr -s l
helo