Linux学习笔记9
history命令
history
: 显示所有历史命令
history -c
: 清空命令记录
history -w
: 将当前历史写入历史记录文件中,重写历史文件内容
!!
: 执行上一条命令
[root@localhost ~]# ls -lh 123/
总用量 0
-rw-r--r-- 1 root root 0 4月 2 15:00 321.txt
[root@localhost ~]# !!
ls -lh 123/
总用量 0
-rw-r--r-- 1 root root 0 4月 2 15:00 321.txt
[root@localhost ~]#
!n
: 执行命令历史中的第n条命令
1013 ls -lh 123/
1014 history
[root@localhost ~]# !1013
ls -lh 123/
总用量 0
-rw-r--r-- 1 root root 0 4月 2 15:00 321.txt
[root@localhost ~]#
!字符串
: 执行历史记录中最近一次以该字符串开头的命令
1015 ls -lh 123/
1016 history
[root@localhost ~]# !ls
ls -lh 123/
总用量 0
-rw-r--r-- 1 root root 0 4月 2 15:00 321.txt
[root@localhost ~]#
!$
: 得到上一个命令的最后一个参数
[root@localhost ~]# echo "123456789" >> 123/321.txt
[root@localhost ~]# ls -lh 123/321.txt
-rw-r--r-- 1 root root 10 4月 3 13:56 123/321.txt
[root@localhost ~]# cat !$
cat 123/321.txt
123456789
[root@localhost ~]#
管道符的使用
|
: 将前一个命令的输出作为后一个指令的输入
[root@localhost ~]# cat /etc/passwd | wc -l
48
[root@localhost ~]#
错误重定向,错误追加重定向
2>
,2>>
[root@localhost ~]# ls a 2> /tmp/1.err
[root@localhost ~]#PS :该例子是将错误信息重定向到文件中。
变量
http://www.apelearn.com/study_v2/chapter13.html#id2
例:引号的用法
[root@localhost Desktop]# mydate="date is `date +%T`"
[root@localhost Desktop]# echo $mydate
date is 14:52:10
[root@localhost Desktop]# mydate='date is `date +%T`'
[root@localhost Desktop]# echo $mydate
date is `date +%T`
[root@localhost Desktop]#PS:单引号中的特殊字符全部失效,双引号不会取消特殊字符的作用。反引号可以得到命令运行结果。
PS:用户变量可以加入到用户家目录下的
.bashrc
文件里面,全局变量可以加入到/etc/profile
文件里面,然后用source 文件名
来更新。
系统环境变量与个人环境变量的配置文件
/etc/profile
: 这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。
/etc/bashrc
: 这个文件主要预设umask以及PS1。这个PS1就是在敲命令时,前面那串字符了。
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
\u
就是用户,\h
主机名,\W
则是当前目录,\$
就是那个 ‘#’ 了,如果是普通用户则显示为 ‘$’.除了两个系统级别的配置文件外,每个用户的主目录下还有几个这样的隐藏文件:
.bash_profile
:定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
.bashrc
:该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例可以将用户自定义的alias或者自定义变量写到这个文件中。
.bash_history
:记录命令历史用的。
.bash_logout
:当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。
Linux Shell中的特殊符号
cut命令
cut -d '分隔符' [-cf] n
选项:
-d
: 分隔符选项
-f
: 选择第几块
[root@localhost ~]# head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd | cut -d ':' -f1 | head -n3
root
bin
daemon
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | cut -d ':' -f7 | head -n3
/bin/bash
/sbin/nologin
/sbin/nologin
-c
: 选择第几个字符
[root@localhost ~]# head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd | cut -c1 | head -n3
r
b
d
[root@localhost ~]# cat /etc/passwd | cut -c1-5 | head -n3
root:
bin:x
daemo
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | cut -c1,2,5 | head -n3
ro:
bix
dao
[root@localhost ~]#PS:-c 后面可以是1个数字n,也可以是一个区间n1-n2,还可以是多个数字n1,n2,n3。
sort命令
sort [-t 分隔符] [-kn1,n2] [-nru]
这里的n1 < n2选项:
-t
分隔符 :作用跟cut的-d一个意思
-n
:使用纯数字排序
-r
:反向排序
-u
:去重复
-kn1,n2
:由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序例:以
:
做分隔符的第三个块,字典序升序排序
[root@localhost ~]# head -n5 /etc/passwd | sort -t : -k3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]#PS:如果选项加上
-n
,则是按数字大小排序例:以
:
做分隔符的第三到五个块,字典序降序排序
[root@localhost ~]# head -n5 /etc/passwd | sort -t : -k3,5 -r
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
[root@localhost ~]#
wc命令
用于统计文档的行数、字符数、词数,常用的选项为:
>
-l
:统计行数
-m
:统计字符数
-w
:统计词数
[root@localhost ~]# wc -l test/123.txt
337864 test/123.txt
[root@localhost ~]# wc -m test/123.txt
8090358 test/123.txt
[root@localhost ~]# wc -w test/123.txt
903417 test/123.txt
[root@localhost ~]# wc test/123.txt
337864 903417 10849826 test/123.txt
[root@localhost ~]#PS:wc 不跟任何选项,直接跟文档,则会把行数、词数、byte数依次输出。
uniq命令
去重复的行
-c
:统计重复的行数,并把行数写在前面例:统计重复行数
[root@localhost ~]# cat test.txt
123
123
321
321
111
111
111
2222
333
456
[root@localhost ~]# sort -n test.txt | uniq -c
3 111
2 123
2 321
1 333
1 456
1 2222
[root@localhost ~]#
PS:使用uniq 的前提是需要先给文件排序,否则不管用。
tee命令
后跟文件名,类似与重定向 “>”, 但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上。
[root@localhost ~]# echo "aaaaaaaaaaaaaaaaaaaaaaaaaaa" |tee testb.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost ~]# cat testb.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaPS:tee 常用语管道符 “|” 后。
tr命令
替换字符
选项:
-d
:删除某个字符,-d
后面跟要删除的字符
-s
:把重复的字符去掉例:小写变大写
[root@localhost ~]# head -n2 /etc/passwd |tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
[root@localhost ~]#PS:其局限性是只针对单个字符,一一对应替换。
split命令
切割文档
选项:
-b
:依据大小来分割文档,单位为byte
[root@localhost ~]# ls -lh test/123/
总用量 11M
-rw-r--r-- 1 root root 11M 4月 3 17:37 123.txt
drwxr-xr-x 2 root root 6 3月 31 17:03 321
[root@localhost ~]# split -b300000 test/123/123.txt
[root@localhost ~]# split -b3000000 test/123/123.txt test/123/new123
[root@localhost ~]# ls -lh test/123/
总用量 21M
-rw-r--r-- 1 root root 11M 4月 3 17:37 123.txt
drwxr-xr-x 2 root root 6 3月 31 17:03 321
-rw-r--r-- 1 root root 2.9M 4月 3 17:44 new123aa
-rw-r--r-- 1 root root 2.9M 4月 3 17:44 new123ab
-rw-r--r-- 1 root root 2.9M 4月 3 17:44 new123ac
-rw-r--r-- 1 root root 1.8M 4月 3 17:44 new123ad
[root@localhost ~]#PS:如果split不指定目标文件名,则会以xaa xab… 这样的文件名来存取切割后的文件。当然我们也可以指定目标文件名:
-l
:依据行数来分割文档
对比两个文件区别
diff test/123.txt test/123.txt
多条命令在一行执行
;
[root@localhost ~]# ls -d test*; touch test111; ls -d test*
test test1 test2 test3 testa testb.txt
test test1 test111 test2 test3 testa testb.txt
命令放在后台执行
&
: 如果想把一条命令放到后台执行的话,则需要加上这个符号。通常用于命令运行时间非常长的情况。
[root@localhost ~]# sleep 30 &
[1] 3260
[root@localhost ~]# jobs
[1]+ Running sleep 30 &
表示连续字符中任意一个
[]
[root@localhost ~]# ls -d test*
test test1 test111 test2 test3 testa testb.txt
[root@localhost ~]# ls -d test[1-3]
test1 test2 test3
[root@localhost ~]# ls -d test[1a3]
test1 test3 testa
[root@localhost ~]# ls -d test[0-9]
test1 test2 test3
[root@localhost ~]# ls -d test[0-9a-z]
test1 test2 test3 testa
与和或
command1 ; command2
command1 && command2
command1 || command2
使用 “
;
” 时,不管command1是否执行成功都会执行command2;使用 “
&&
” 时,只有command1执行成功后,command2才会执行,否则command2不执行;使用 “
||
” 时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。
参考《跟阿铭学Linux》