写这个博客,估计我也不会再看,就是记录下
一些快捷键
Ctrl + C | 终止命令,没啥说的 |
Ctrl + D | 输入结束符,cat > xxx 这种命令 |
Ctrl + S | 暂停屏幕的输出 |
Ctrl + Q | 恢复屏幕的输出 |
Ctrl + U | 删除输入命令 |
Ctrl + Z | 挂起进程并放入后台,jobs显示当前暂停的进程,bg,fg 调到前后台 |
通配符:
* | 0到无穷多个 |
? | 至少一个任意字符 |
[] | [abcd] abcd至少一个 |
[-] | [0-9] 代表所有字符 |
[^] | 代表非 |
数据流重定向:
< 标准输入, << 终止符
> 覆盖输出 , >> 追加输出
标准输入(stdin):代码为0,使用< <<
标准输出(stdout):代码为1,使用 > >>
标准错误输出(stderr):代码为2,使用 2> 或 2>>
find /home -name .bashrc > list_right 2> list_error # 标准输出和标准错误输出放在不同位置。
垃圾桶黑洞:其实也能没啥,就怕自己忘了路径,/dev/null
find /home -name .bashrc 2> /dev/null # 错误数据被丢到垃圾桶
将标准输出和标准错误输出输入到一起:
find /home -name .bashrc > list 2>&1 # 普遍用法
或
find /home -name .bashrc &> list # 个人喜欢
标准输入 < <<
cat > catfile # 创建个文件,并等待用户输入作为文件
testing
cat file test
# 按下 ctrl + d 结束输入
标准输入 <
cat > catfile < ~/.bashrc # 用stdin替代键盘的输入以建立新文件的流程
# 就是把原本由屏幕输入的内容变为由文件输入
标准输入 << 指定终止符,和ctrl + d 一个作用
[root@iz2zeczv3xrnm2jx6aayhxz test]# cat > catfile << "pp"
> abc
> opp
> ppp
> pp
命令执行的判断根据,&& ||
cmd1&&cmd2 | cmd1执行成功,开始执行cmd2;cmd1执行失败cmd2则不执行 |
cmd1 || cmd2 | cmd1执行失败才执行cmd2,cmd1执行成功不会执行cmd2 |
管道命令
管道命令仅能处理经由前面一个命令传来的正确信息,也就是标准输出的信息,对于标准错误并没有直接处理能力。
cut
cut
-d 后面接分割符,与-f一起使用
-f 根据-d 的分隔符将一段信息划分成为数段,用-f 取出第几段的意思
-c 以字符的单位取出固定字符区间
echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo ${PATH} | cut -d : -f 5
/root/bin
echo ${PATH} | cut -d ":" -f 5
/root/bin
# 加不加""无所谓
# 注意是3段和5段,不是3到5
echo ${PATH} | cut -d : -f 3,5
/usr/sbin:/root/bin
export | cut -c 12 # 代表截取第12个字符
export | cut -c 12- # 12往后
export | cut -c 12-15 # 12 到 15
grep
grep
-a 将二进制文件以文本文件的方式查找数据
-c 计算找到,查找字符的次数
-i 忽略大小写的不同,所以大小写视为相同
-n 输出行号
-v 反向选择,
last | grep root
last | grep -v root
last | grep -v root | cut -d ' ' -f 1
last | grep -v root | cut -d ' ' -f 1
sort
-f 忽略大小写
-b 忽略最前面的空格部分-M 以月份的名字来排序
-n 使用纯数字进行排序
-r 反向排序
-u 就是uniq,相同数据就出现一行
-t 分割符,默认tab键来分割
-k 以哪个区间来进行排序的意思
cat /etc/passwd | sort # 默认按照第一个字母进行排序
cat /etc/passwd | sort -t : -k 3 # 按照: 分割的第三段排序
cat /etc/passwd | sort -t : -k 3 -n # -n 指明按照第三栏,并且按照数字格式排序
uniq
-i 忽略大小写
-c 进行计数
last | cut -d ' ' -f 1 | sort | uniq # 去重
last | cut -d ' ' -f 1 | sort | uniq -c # 计算次数, 重复的次数
wc
-l 仅列出行
-w 仅列出多少字,或者说单词,以空格分割。
-m 多少字符
cat catfile | wc
3 4 21
行数 单词数 字符数
双向重定向:tee
tee 会同时将数据流分送到文件与屏幕
-a 以累加的方式,将数据加入到file当中
last | tee last.list | cut -d " " -f 1 先给文件一份,再给屏幕一份,实测必须先给文件,再给屏幕
tr 可以用来删除一段信息当中的文字,或是进行文字信息的替换
-d 删除信息当中的,后面的字符串
-s 替换重复的字符
last | tr '[a-z]' 'A-Z' # 将小写字母转换成大写
cat /etc/passwd | tr -d ":" # 将:删除
join 两个文件当中,有相同数据的那一行,才将它加在一起
-t join默认以空格字符分割数据,并且比对第一个栏位的数据
-i 忽略大小写
-1 这个数字1,代表第一个文件要用那个栏位分析的意思
-2 代表第二个文件要用哪个栏位分析的意思
[root@iz2zeczv3xrnm2jx6aayhxz test]# head -n 3 /etc/passwd /etc/shadow
==> /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
==> /etc/shadow <==
root:$6$czxmSZZEpX$q4CXU8JpkEO0pj4hqz2yHFRLyrZ7i5dowC944n1gJSc7qJq59vQ1rZXrCkHzufavtq5GzATgQJIhSUOBH.jKq0:18364:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
[root@iz2zeczv3xrnm2jx6aayhxz test]# join -t ":" /etc/passwd /etc/shadow | head -n 3 # 第三栏进行合并
root:x:0:0:root:/root:/bin/bash:$6$czxmSZZEpX$q4CXU8JpkEO0pj4hqz2yHFRLyrZ7i5dowC944n1gJSc7qJq59vQ1rZXrCkHzufavtq5GzATgQJIhSUOBH.jKq0:18364:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:17110:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:17110:0:99999:7:::
join -t ':' -1 4 /etc/passwd -2 3 /etc/group/ | head -n 3
# 合并前面文件的第四栏,和后面的第三栏
paste 直接将两行贴在一起,并且tab键隔开而已
-d 后面可以接分隔符, 默认tab来分割
- 如果file部分写成-,表示来自标准输入的数据
cat /etc/group | paste /etc/passwd /etc/shadow - | head -n 3
paste -d "-" te st # te st 是两个文件
划分命令: split, 就是将文件划分为几个更小的文件
-b 后面可接欲划分成的大小文件,
-l 以函数来进行划分
split -b 300k /etc/services services # 将这个文件划分为几个300k大小的文件
[root@iz2zeczv3xrnm2jx6aayhxz test]# ll
total 664
-rw-r--r-- 1 root root 307200 May 20 15:17 servicesaa
-rw-r--r-- 1 root root 307200 May 20 15:17 servicesab
-rw-r--r-- 1 root root 55893 May 20 15:17 servicesac
# 分成abc三个文件
cat services* >> servicesback
# 在合成一个 原来被分成的小部分的还在
ls -al / | split -l 10 - lsroot # 将文件按每个文件10行内容分割
# 重点是这个 - ,如果需要stdout和stdin 时,但偏偏有没有文件,
参数代换 xargs
-e 这是EOF的意思,后面可以接一个字符,当xargs分析到这个字符时,就会停止工作
-p 在执行每个命令时,都会询问使用者的意思
-n 后面接次数,每次command命令执行时,默认是以echo来进行echo进行输出
id root
uid=0(root) gid=0(root) groups=0(root)
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id
# 就是每次给id一个参数,否则或报错
关于 -
stdin和stdout可以用- 来替代
tar -cvf - /home | tar -xvf - -c /tmp/homeback
# 将/home里面的文件给它打包,但打包的数据不是记录到文件,而是拆送到stdout。