文章目录
1 管道符— “|”
将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用
管道符(pipe)用 “|” 这个界定符号表示,如果需要对linux命令的输出结果进行再次处理,就可以使用管道符+管道命令解决。 管道符 “|” 仅能处理由前一个命令执行后传来的正确信息,如果命令执行异常,无法对异常信息进行处理。
例如:通过ps命令可以查看系统中的进程,但如果需要查看指定进程,就需要在ps命令返回的结果中进行筛选,如查看java进程:
ps -aux | grep java
例如
# 求和
[root@fyr ~]# seq -s+ 100 //中间加上加号
[root@fyr ~]# seq -s+ 100 >log.txt //将log.txt中的信息交给bc 计算
[root@fyr ~]# bc < log.txt //bc就是计算命令
[root@fyr ~]# seq -s+ 100|bc //写脚本
2 重定向— “>、>>、<”
重定向就是使命令改变它所认定的标准输出
“>” 可将结果输出到文件中,该文件原有内容会被删除
“>>” 则将结果附加到文件中,原文件内容不会被删除
“<” 可以改变标准输入。如:
[root@fyr ~]# cat 1.txt >> 2.txt
#将1.txt文件的内容加在2.txt文件的后面
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim passwd.txt
121212
[root@localhost ~]# passwd --stdin zhangsan <passwd.txt
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向的意思就是 ,不通过标准输出到屏幕上,输出到你指定的位置
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1> 或者> | 将输出结果保存到指定的文件(覆盖原有内容) |
重定向输出 | >> | 将输出结果追加到指定的文件尾部 |
重定向标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
重定向标准错误输出 | 2>> | 标准错误输出结果追加到指定的文件尾部 |
混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |
混合输出 | 命令 1> 文件 2>&1 或者 命令 > 文件 2>&1 | 将标准输出、标准错误的内容保存到同一个文件中 |
例一
例二
2.1 输出重定向
1.命令 >> 文件 2>&1:以追加的方式,把正确输出和错误输出都保存在文件中
2.命令 &> 文件名:以覆盖的方式将正确和错误输出都保存在文件中
3.命令 &>> 文件名:以追加的方式将正确和错误输出都保存在文件中
4.命令>>文件A 2>>文件B:正确的输出到 A 文件中,错误的输出到 B 文件中
1代表 正确输入 2代表 错误输入
& 代表混合
注意:只要涉及到错误输出,> 或者 >> 两侧都不能有空格。
例如
不能将正确和错误一起显示出来
A [root@centos7 ~]# ls /data /xxx > /data/all.log 2>&1
B [root@centos7 ~]# ls /data /xxx 2> /data/all.log 1>&2
C [root@centos7 ~]# ls /data /xxx &> /data/all.log
D [root@centos7 ~]# ls /data /xxx >& /data/all.log
E [root@centos7 ~]# ls /data /xxx 2>&1 1> /data/all.log
E是错误的
3 连接符号— “;”
当有几个命令要连续执行时,我们可以把它们放在一行内,中间用 “;” 分开。
mkdir myfile;cp /tmp/myfile.txt myfile
#先建立一个目录myfile
#然后把myfile.txt拷贝到新建的目录中
4 后台执行— “&”
用户有时候执行命令要花很长时间,可能会影响做其他事情。最好的方法是将它放在后台执行。后台运行的程序在用户注销后系统还可以继续执行。当要把命令放在后台执行时,在命令的后面加上"&"。
5 Linux shell的&&和||
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。
当 $? == 0 时,表示执行成功;当 $? == 1 时,表示执行失败。
shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。
5.1 &&(命令执行控制)
语法格式如下:
command1 && command2 [&& command3 ...]
#命令之间使用 && 连接,实现逻辑与的功能。
#只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
#只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
5.2 ||(命令执行控制)
语法格式如下:
command1 || command2 [|| command3 ...]
#命令之间使用 || 连接,实现逻辑或的功能。
#只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
#只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。
shell 提供了两种方法(() 和 {})实现将几个命令合作一起执行,代替独立执行。这种方式并不能控制命令是否需要执行,仅是将多个单独的命令组合在一起执行,最终命令的返回值将由最后一条命令的返回值来决定。
5.3 () (命令组合)
语法格式如下:
(command1;command2[;command3...])
# 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
# () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
# 命令组合常和命令执行控制结合起来使用。
6 参数替换—xargs
由于很多命令不支持管道来传递参数,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
另外,许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
举例一:
单独使用 xargs是将键盘上的输入输出在屏幕上
[root@localhost opt]# ls /opt
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
#我不想固定后面的参数 /opt 我想把后面的参数使用命令生成变成活的
#简单来说就是只要可以加参数的命令后面的参数是可以使用xargs灵活改变的
#xargs默认 是读取键盘输入在输出出来,把输入的东西 传给下一个命令作为参数
[root@localhost opt]# xargs 或xargs echo(echo可以省略)
333
333
举例二:seq打印出10
[root@localhost opt]# seq 10
[root@localhost opt]# seq 10 |xargs 取消换行
1 2 3 4 5 6 7 8 9 10
[root@localhost opt]# seq 10 |xargs -n1 处理一个参数换行一次
举例三:将显示的结果全部删除
#不支持标准输出重定向
[root@localhost opt]# ls *.txt |rm
rm: 缺少操作数
Try 'rm --help' for more information.
[root@localhost opt]# touch {1..10}.txt
#
[root@localhost opt]# ls *.txt |xargs rm //将显示的结果全部删除
find 经常和 xargs 命令进行组合,形式如下:
[root@fyr opt]# find /etc/ -type d | wc -l
[root@fyr opt]# find /etc/ -type f | wc -l
[root@fyr opt]# find /etc/ ! -type f | wc -l
7 基本功能转换—tr
格式:tr [选项]... SET1 [SET2]
SET 是一组字符串,一般都可按照字面含义理解
-d | 删除 |
---|---|
-s | 压缩 |
案例一 |
[root@localhost ~]# tr 123 abc //只要出现123 就转换成abc
[root@localhost ~]# tr 12345678 abc //最后一个一直用
[root@localhost ~]# tr -d abc //删除
2a34bc
234
[root@localhost ~]# tr -s " "
1 2 3 4
1 2 3 4
[root@localhost ~]# tr -s "a"
案例二:面试题生成随机密码
[root@fyr ~]# cat /dev/urandom |tr -dc '[:alnum:]' | head -c12
案例三
[root@fyr ~]# cat 1.txt
aaaaa 11111
bbbbb 22222
[root@fyr ~]# cat 1.txt |tr -c "[a-z]" " " //用 空格替换除了小写字母之外的所有字符
[root@fyr ~]# cat 1.txt |tr -sc "[a-z]" " " //加s压缩
8 提取文本文件数据的指定列—cut
格式:cut [选项]... [文件]...
常用选项
-d (DELIMITER) | 指明分隔符,默认tab |
---|---|
-f | 想要获取的字段。 |
-c | 取字符 |
获取的字段
#: 第#个字段,例如 3
#,#[,#]:离散的多个字段,例如 1,3,6
#-#:连续的多个字段, 例如 1-6
混合使用:1-3,7
举例一
[root@fyr ~]# cut -d : -f1,3 /etc/passwd
//以冒号作为分隔的条件,取文件的第一列和第三列
案例二
[root@fyr ~]# ll | tail -n +2 | tr -s " "| cut -d " " -f3,9
//从第二行开始,将空行压缩成一个后,再以空格为分隔符,取第3 和第9列
案例三
[root@fyr ~]# df | tail -n +2 | tr -s " " | cut -d " " -f5 | tr -d %
# df |tail -n +2 不显示第一行字段
# tr -s " " 将多个空格压缩成一个
# cut -d " " -f5 已空格为分隔符,取第五列
# tr -d % 删除百分号
[root@fyr ~]# df | tail -n +2 | tr -s " " % | cut -d % -f5
# df |tail -n +2 不显示第一行字段
# tr -s " " 将多个空格压缩成一个后 将空格替换成%
# cut -d % -f5 已%为分隔符 取第5列
案例四
[root@fyr ~]# df |tail -n +2 |cut -c54
#使用字符取字段,-c 取当前字符的字段
#在xshell的左下角,复制会有字符个数
9 去重----uniq
格式:uniq [OPTION]... [FILE]...
-c | 显示每行重复出现的次数 |
---|---|
-d | 仅显示重复过的行 |
-u | 仅显示不曾重复的行 |
uniq常和sort 命令一起配合使用 |
案例一
[root@fyr ~]# cat 1.txt
[root@fyr ~]# uniq 1.txt //只会将连续的行去重
[root@fyr ~]# uniq -c 1.txt //显示出现次数
案例二:面试题,查看访问日志,找出访问前10名的用户
[root@localhost ~]# cat log|cut -d" " -f1
#先取地址
[root@localhost ~]#cat log | cut -d" " -f1 | sort
#再排序一样的ip地址在一起
[root@localhost ~]#cat log | cut -d" " -f1 | sort | uniq -c
#去重
[root@localhost ~]#cat log | cut -d" " -f1 | sort | uniq -c | sort -nr | head
#再数字排序,取前10 行
案例三:面试题 取两个文件一样或不一样的字段
[root@fyr ~]# cat 1.txt 2.txt
[root@fyr ~]# cat 1.txt 2.txt | uniq -d //直接使用 看不出来
[root@fyr ~]# cat 1.txt 2.txt | sort | uniq -d //一样的
[root@fyr ~]# cat 1.txt 2.txt | sort | uniq -u //不一样的
10 硬件信息及其他系统信息
10.1查看cpu—lscpu或cat /proc/cpuinfo
cat /proc/cpuinfo也可看查看到
[root@fyr ~]# lscpu
[root@fyr ~]# cat /proc/cpuinfo
10.2 查看内存大小—free或cat /proc/meminfo
[root@fyr ~]# free
[root@fyr ~]# cat /proc/meminfo
10.3查看硬盘和分区情况—lsblk或cat /proc/partitions
[root@fyr ~]# lsblk
[root@fyr ~]# cat /proc/partitions
10.4 查看机器架构—arch
[root@fyr ~]# arch
10.5 查看内核版本—uname -r
[root@fyr ~]# uname -r
10.6系统时间—date
date查看当前系统时间
-d | 你描述的日期,显示指定字符串所描述的时间,而非当前时间 |
---|---|
%F | 完整日期格式,等价于 %Y-%m-%d |
%T | 时间(24小时制)(hh:mm:ss) |
[root@fyr ~]# date -d '-1 day' +%F
[root@fyr ~]# date +%F
[root@fyr ~]# date -d '1 day ' +%F-%T
[root@fyr ~]# date -d "-3 day" 前三天
[root@fyr ~]# date -d "+3 day" 后三天