RHCE的学习(17)

shell特性回顾

1.echo linux打印命令

参数

  • -n 取消输出后行末的换行符号
  • -e 支持反斜线控制的字符转换 \n \t !
控制字符作 用
\输出\本身 !
\a输出警告音
\b退格键,也就是向左删除键
\c取消输出行末的换行符。和“-n”选项一致
\eEsc键向右删除键
\f换页符
\n换行符
\r字符替换
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制 ASCII 码表输出字符。其中 0 为数字 0,nnn 是三位八进制数 eg:141 这个八制数在 ASCII 码中代表小写的"a",其他的以此类推echo -e "\0141\t\0142"
\xhh按照十六进制 ASCLL 码表输出字符。其中 hh 是两位十六进制数 [root@localhost ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66" a b c d e f #如果按照十六进制ASCII码同样可以输出

可以输出带颜色的字体:

  • 格式:echo -e "\e[字体控制;字体颜色或背景色 字符串内容 \e[0m"

  • \e[表示控制开始,\e[0m表示控制结束

  • 字体控制选项:1表示高亮,4表示下划线,5颜色闪烁

  • 颜色如下:字颜色:30-37 , 背景色:40-47

  • 解释一下这个命令:\e[字体控制选项;字体背景颜色;文字颜色m   字符串 \e[0m 代表颜色输出结束文字颜色:30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色。字体背景色:40m=黑色,41m=红色,42m=绿色,43m=黄色,44m=蓝色,45m=洋红,46m=青色,47m=白色。字体控制选项:1表示高亮,4表示下划线,5颜色闪烁

[root@server ~]# vim color.sh
echo -e "\e[30m 黑色字\e[0m"
echo -e "\e[1;31m 紅色字\e[0m"
echo -e "\e[32m 綠色字\e[0m"
echo -e "\e[33m 黃色字\e[0m"
echo -e "\e[34m 藍色字\e[0m"
echo -e "\e[35m 紫色字\e[0m"
echo -e "\e[36m 天藍字\e[0m"
echo -e "\e[37m 白色字\e[0m"
echo -e "\e[40;37m 黑底白字\e[0m"
echo -e "\e[41;37m 紅底白字\e[0m"
echo -e "\e[42;37m 綠底白字\e[0m"
echo -e "\e[43;37m 黃底白字\e[0m"
echo -e "\e[44;37m 藍底白字\e[0m"
echo -e "\e[45;37m 紫底白字\e[0m"
echo -e "\e[46;37m 天藍底白字\e[0m"
echo -e "\e[47;30m 白底黑字\e[0m"[root@server ~]# bash color.sh 

注意:三个顺序没有要求,但只能加一个m,且m加在最后一个选项,中间用;隔开注意:三个顺序没有要求,但只能加一个m,且m加在最后一个选项,中间用;隔开

2.printf

  • printf 命令模仿 C 程序库(library)里的 printf() 程序。
  • printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
  • printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。
  • 默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

printf 命令的语法:

printf  format-string  [arguments...]
printf   格式控制字符串   参数列表

参数说明:

  • format-string: 为格式控制字符串%10s %c %d %f

  • arguments: 为参数列表。

实例

[root@server ~]# echo "Hello, Shell"
[root@server ~]# printf  "Hello, Shell\n"
[root@server ~]# printf "%d %s\n" 1 "abc"
[root@server ~]# printf '%d %s\n' 1 "abc" # 单引号双引号效果一样
[root@server ~]# printf %s abcdef  # 没有双引号也可输出,没有\n会续连下一个提示符
[root@server ~]# printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg

接下来,我来用一个脚本来体现 printf 的强大功能:

实例

printf "%-10s %-8s %-4s\n"   姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
执行脚本,输出结果如下所示:
姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99
  • %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
  • %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
  • %-4.2f 指格式化为小数,其中 .2 指保留2位小数,4是总长度(如果不满4补空格,超出也全部显示)

实例

# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j# 如果没有 arguments(参数),那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"  
执行脚本,输出结果如下所示:
abcdefabc
defa b c
d e f
g h i
j and 0

3、命令执行顺序

  • 顺序执行: ;

[root@server ~]# date ; ls -l /etc/passwd
  • 前面命令执行不成功,后面的命令不执行: &&

[root@server ~]#id haha && userdel -r haha[root@server ~]# mkdir /mnt/iso && mount /dev/sr0 /mnt/iso
  • 前面命令成功,后面就不执行,如果前面不成功后面就执行: ||

[root@server ~]# mkdir  tt  ||  ls  /
[root@server ~]# mkdir  tt  ||  ls  /  # 可以再次执行
  • ! 非
  • &后台运行

4、命令与文件名补全:tab

命令别名

格式:
  • alias 别名=原命令

例:
[root@server ~]# alias  hi=history
[root@server ~]# hi
注意
  • 别名的优先级比命令高,命令执行时的顺序如下:

第一顺位:执行用绝对路径或相对路径执行的命令。
第二顺位:执行别名。
第三顺位:执行 Bash 的内部命令。
第四顺位:执行按照 $PATH 环境变量定义的目录查找顺序找到的第一个命令。
  • 为了让这个别名永久生效,可以把别名写入环境变量配置文件“~/.bashrc”。

[root@server ~]# cat   ~/.bashrc  # 在最下面增加

5、管道符

  • 符号:| ,当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道

  • 面试题1:提取系统网卡的IP地址信息

[root@server ~]# ip a  |  grep  ens32 | grep  inet | cut -d / -f1 | tr  -s  " " | cut -d " " -f3
# 显示ip信息 | 过滤包含ens32行 | 过滤包含inet行 | 以/作为分隔符取出第1部分 | 将多个空格压缩为1个空格 | 以空格为分隔符取出第3部分
  • 面试题2:显示内存的剩余数量

[root@server ~]# free  -h | grep Mem | tr -s " " | cut -d " " -f4
106Mi
[root@server ~]# free  -h | grep Mem | awk '{print $4}'   # 使用awk截取第4列
106Mi

6、exit退出程序

  • 作用:终止Shell程序的执行

  • 格式:exit 状态码

  • 状态码:该参数是一个整数值,其取值范围为0~255

  • 注意:Shell程序的退出状态码储存在系统变量$?中,因此,用户可以通过该变量取得Shell程序返回给父进程的退出状态码

  • 常见状态码:

    0----------------命令运行成功1----------------通知未知错误2----------------误用shell命令126--------------命令不可执行127--------------没有找到命令128--------------无效退出参数128+x------------linux信号x的严重错误130--------------命令通过Ctrl+C终止255--------------退出状态码越界
  • 演示在不同的情况下,程序返回不同的状态码

[root@server ~]# echo  "china"
china
[root@server ~]# echo  $?
0
[root@server ~]# ehco  "china"
bash: ehco: command not found...
Similar command is: 'echo'
[root@server ~]# echo  $?
127

7、通配符 (文件名通用匹配) 正则符 (文件内容,标准输出结果)

通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中。而正则表达式是操作字符串,以行尾单位来匹配字符串使用的

? 匹配一个任意字符 
`*` 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 
[a1b2] 匹配中括号中任意一个字符。 
[a-z] 匹配中括号中任意一个字符, -代表一个范围。 
[^a-z] 逻辑非,表示匹配不是中括号内的一个字符。
[a-z] [0-9] [a-zA-Z] [^0-9a-zA-Z]
{1,2,3,4}
mkdir  {1,2,3,4}~   代表当前用户的主目录
.   代表当前目录
..  代表当前目录的父目录
-   部分用法代表一个范围

[[:class:]]:匹配一个属于指定字符类中的字符,[:class:]表示一种字符类,比如数字、大小写字母等。

常用字符类:

[:alnum:] :匹配任意一个字母或者数字 ,传统UNIX写法: a-zA-Z0-9 
[:alpha:] :匹配任意一个字母,传统UNIX写法: a-zA-Z    [:alpha:]
[:digit:] :匹配任意一个数字,传统UNIX写法: 0-9 
[:lower:] : 匹配任意一个小写字母,传统UNIX写法: a-z 
[:upper:] : 匹配任意一个大写字母,传统UNIX写法:A-Z
[:space:] :空白字符
[:punct:] : 标点符号

注意事项:在使用专属字符集的时候,字符集之外还需要用 [ ] 来包含住,否则专用字符集不会生效,例

如 [[:space:]]

[root@HAHA ~]# grep '[[:upper:]]' a
AAA
BBB
CCC

通配符常用语法:

1、匹配任意长度的任意字符,就是说“什么都可以”。 
ll * 2、?:与任何单个字符匹配。
ll myfile?
​
3、[ ]:与?相似,可以匹配一个括号内的字符,也可以用“-”进行范围指定。 
myfile[12] #将与myfile1和myfile2匹配 
​
/etc/[0-9] 
#将列出 /etc 中以数字开头的所有文件。 
ls /tmp/[A-Za-z] #将列出/tmp中以大写字母或小写字母开头的所有文件。 4、[!]:括号内的“!”代表非的意思,即不与括弧中的字符匹配。 
rm myfile[!9]  #删除除了myfile9之外的名为myfile加一个字符的所有文件 5、{}生成序列 
touch file{1..9}.txt
#当前路径生成file1.txt~file9.txt。{a..f}代表a-f,不连续的使用,分 隔,比如f{1,3,5}.txt 6、使用{}备份 
cp file1.txt{,.bak} #将fiel1.txt复制一份叫file1.txt.bak
cp file{2,22}.txt #复制file2.txt为file22.txt

示例:

1、列出/etc/目录中不是以字母a到n开头的,并且以.conf结尾的文件 
ls /etc/[!a-n]*.conf 2、列出/etc/目录中以字母a到n开头的,并且以.conf结尾的文件
ls /etc/[a-n]*.conf 3、列出/bin/下以 c或k开头的文件名 
ls /bin/[ck]*
1、创建用户haha且用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
useradd haha && echo "haha" | passwd --stdin haha > /dev/null2、每个用户添加完成后,都要显示用户某某已经成功添加;
useradd user1 && echo "user1已经成功添加"
如果用户存在,就显示用户已存在;否则,就添加此用户;
(id user1 &>/dev/null &&  echo "user已存在") ||  useradd user1
​
如果用户不存在,就添加;否则,显示其已经存在;
!id user1 &>/dev/null &&  (useradd user1;echo user1 |passwd --stdin user1) || echo "用户已存在"
!id user1 &>/dev/null &&  (useradd user1 && echo user1 |passwd --stdin user1) || echo "用户已存在"
! id user1 && useradd user1 || echo "user1 exists."
如果用户不存在,添加并且给密码;否则,显示其已经存在;
​
练习,写一个脚本,完成以下要求:
1、添加1个用户user1;但要先判断用户是否存在,不存在而后再添加;
2、最后显示当前系统上共有多少个用户;
wc -l /etc/passwd
wc -l /etc/passwd | cut -d " " -f 1  (只显示数量,不显示文件名)
echo  当前系统一共有`wc -l /etc/passwd | cut -d " " -f 1`个用户
或者
echo  "当前系统一共有`wc -l /etc/passwd | cut -d ' ' -f 1`个用户"` `  反引号执行中间命令
' '  单引号,强引用符
" "  双引号,弱引用符

练习:写一个脚本

1、在当前主机编写脚本文件/history_max.sh显示主机执行频率最高的前5个命令.

history -wvim ~/.bash_historysort ~/.bash_history  | uniq -c | sort -n

2、判断主机是否存在rhel用户如果存在则设置密码为redhat,提示用户存在密码创建成功,如果不存在则创建用户并设置密码,提示用已成功创建。

id rhel &>/dev/null && (echo "redhat" | passwd --stdin rhel && echo 密码设置成功 ) || useradd rhel && (echo redhat | passwd --stdin rhel && echo 用户创建密码设置成功)

文件内容查看

cat 命令

  • 作用:查看文件内容,适合数据量较少

  • 格式:cat -参数 文件名

  • 参数:

    • -n:显示行号,加上

    • -b:文件中所有非空行增加行号,编号从1开始

  • 例1:

[root@server ~]# cat   /etc/passwd
[root@server ~]# cat   -n  /etc/passwd
  • 例2:将显示结果重定向输出到另一个文件中

[root@server ~]# touch  pwd.txt
[root@server ~]# cat  /etc/passwd  >  pwd.txt  # > 为重定向符
[root@server ~]# cat  pwd.txt
  • 合并文件:

[root@node1 ~]# touch  t1.txt  t2.txt  t3.txt
[root@node1 ~]# echo  "hello"  >  t1.txt
[root@node1 ~]# echo  "world"  >  t2.txt
[root@node1 ~]# cat  t1.txt  t2.txt  >  t3.txt
[root@node1 ~]# cat  t3.txt
hello
world
  • 注意:tac命令是倒置输出文件内容

tac

  • 作用:倒叙访问文件内容

  • 格式:tac 参数 文件名

  • 例如: tac /etc/passwd

more 命令

  • 作用:翻页查看文件内容,适合内容较多的文件查看

  • 格式:more 文件名

  • 注意:使用回车则一行一行查看,使用空格则整页查看,点击q键退出查看

[root@server ~]# more  -sp  /etc/passwd #  -sp  减少空白行,先清屏后输出

less命令

  • 作用:同more命令

  • 格式:less 文件名

  • 注意:可以使用上下键进行浏览,点击q退出浏览

head命令

  • 作用: 查看文档前n行的内容

  • 格式:head -数字 文件名

  • 例:

[root@server ~]# head  /etc/passwd    #  默认查看文档前10行内容
[root@server ~]# head -5 /etc/passwd

tail命令

  • 作用:查看文档后n行内容

  • 格式:tail -参数 文件名

  • 参数

    • -数字:查看倒数行数

    • -f:动态刷新, 实时显示日志文件并且能动态更新

  • 例:

[root@server ~]# tail  /etc/passwd     # 默认查看文档后10行内容
[root@server ~]# tail  -1  /etc/passwd
[root@server ~]# tail  -f  /var/log/messages   # 监视日志
[root@server ~]# head  -6 /etc/passwd | tail -1  # 查看第6行

文件中字符替换显示-tr

作用

  • tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出

格式

tr  -参数  替换内容  新内容
参数
  • -c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换

  • -d :删除指令字符

  • -s :缩减连续重复的字符成指定的单个字符

示例

  • 小写字母全部转换成大写字母

[root@server ~]# cat /etc/passwd  | tr a-z A-Z 
  • 提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d /  -f1 | tr -s ' ' | cut -d ' ' -f3

文本内容统计wc

作用
  • wc命令用于统计指定文本文件的行数、字数或字节数

格式
wc -参数 文件名
参数
选项作用
-l只显示行数
-w只显示单词数
-c只显示字节数
示例
  • 统计所有

[root@server ~]# wc  /etc/passwd37     88     2083 /etc/passwd
# 行数  单词数    字节数  
  • 配合管道符计算

[root@server ~]# ll / | wc -l   # 文件数
​
[root@server ~]# grep  "/bin/bash"  /etc/passwd  |  wc -l
​
[root@server ~]# cat /etc/passwd | cut -d ":" -f1 | wc -l

复制、移动文件cp,mv

复制文件或目录

格式
cp  -参数  源文件   目标文件
参数
选项功能
-a通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录
-d拷贝时保留链接
-f在覆盖已经存在的目标文件时不提示
-i在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝
-p除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中
-r若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名
示例
[root@server ~]# cd  ~
[root@server ~]# touch  t1.txt
[root@server ~]# cp  t1.txt   /
[root@server ~]# touch  t2.txt
[root@server ~]# cp  t2.txt   /t3.txt   # 另存为
[root@server ~]# cp  p1   /   # 报错,目录需加-r
[root@server ~]# cp  -r  p1  /
[root@server ~]# cp  -r   p2   /p3    # 目录另存为
​
[root@server ~]# mkdir  -p  /t1/t2/t3
[root@server ~]# cp -a /t1  ~
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  t1
[root@server ~]# cd t1
[root@server t1]# ls
t2
[root@server t1]# cd t2
[root@server t2]# ls
t3
[root@server t2]# ll
总用量 0
drwxr-xr-x 2 root root 6  4月 25 10:39 t3

移动文件或目录mv

作用
  • mv命令用于剪切或重命名文件

格式
mv [选项] 源文件名称 目标文件名称
注意
  • 剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。

  • 如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。

[root@server ~]# touch  t3.txt
[root@server ~]# mv  t3.txt   /etc   #源为文件,目标为目录 ,为移动
​
[root@server ~]# touch  t3.txt
[root@server ~]# mv  t3.txt   t4.txt  # 源为文件 ,目标为文件,位置不变,为改名

tar归档命令

格式
tar  -参数  [args]……
参数
常用参数
选项功能
-c创建.tar格式的包文件
-x释放.tar格式的包文件
-t查看包中的文件列表
必选参数
选项功能
-f用于指定打包文件名。 当与-c选项一起使用时,创建的tar包文件使用该选项指定的文件名 当与-x选项一起使用时,则释放该选项指定的tar包文件
辅助参数
选项功能
-v表示在命令执行时显示详细的提示信息
-p打包时保留文件及目录的权限
z调用gzip程序,以gzip格式压缩或解压缩文件(.tar.gz)
-j调用bzip2程序,以bzip2格式压缩或解压缩文件(.tar.bz2)
-J使用xz压缩或解压缩文件(.tar.xz),xz的压缩率通常比bzip2更高
-C(大写字母C)和-x选项一起使用,表示释放包时指定释放的目标路径
额外参数
# 打包时排除某个文件
tar cf 文件名.tar --exclude=路径/文件 路径
注:此处的路径前后需要保持保持一致,统一使用绝对路径或者相对路径
格式
打包
  • 作用:创建(非压缩的)打包文件,将指定的一个或多个文件或目录备份生成为一个指定的包文件

tar  cvf/cfv/-cvf  文件名.tar  要打包的目录或文件名
  • 列出包文件中的文件列表

tar  t[v]f  包文件名`
打包压缩
  • 作用:为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式

tar  czf/-czf 文件名.tar.gz  要打包压缩的目录或文件名……
tar  cjf/-cjf 文件名.tar.bz2  要打包压缩的目录或文件名……
tar  cJf/-cJf 文件名.tar.xz  要打包压缩的目录或文件名……
  • 提取包文件到指定目录

tar  xf/-xf/-xzf 文件名.tar.gz  [-C 目标路径]
tar  xf/-xf/-xjf 文件名.tar.bz2  [-C 目标路径]
tar  xf/-xf/-xJf 文件名.tar.xz  [-C 目标路径]
示例
  • 将/etc下所有内容打包压缩到/root目录中

[root@server ~]# tar   -cvf  taretc.tar.gz   /etc
  • 解压缩

[root@server ~]# mkdir temp
[root@server ~]# mv taretc.tar.gz  temp
[root@server ~]# cd temp
[root@server temp]# 
[root@server temp]# tar   -xvf  taretc.tar.gz
  • 注意:参数中-c 与 -x 不能同时使用

文件内容过滤显示—grep

作用:

  • 在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用

格式
grep   -参数  查找条件  文件名
参数
选项说明
-o只把查找的关键字显示出来
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v反向选择——仅列出没有“关键词”的行
-A-A 2 搜索时显示匹配到的那一行以及下2行
-B-B 2 搜索时显示匹配到的那一行以及上2行
-C-C 2 搜索时显示匹配到的那一行以及上下2行
-q以安静模式执行查找,找到匹配字符串时仅返回表示找到的退出状态码(找到0,未找到1),不输出匹配行内容
-w以单词模式查找,只会将完整且单独作为一个单词存在的字符串视为匹配对象

/etc/passwd文件含义

作用
  • 记录用户账户信息:共分为7段,使用冒号分割

含义
  • 文件内容意义:账户名:密码代号x:UID:GID:注释:家目录:SHELL

  • 第7列/sbin/nologin:不允许登录

示例
# 在passwd中检索包含root的行信息
[root@server ~]# grep   -n  “root”   /etc/passwd
​
# 在passwd检索不能登录的信息
[root@server ~]# grep  -n   "/sbin/nologin"   /etc/passwd
​
# 在passwd中检索可以登录的账户信息
[root@server ~]# grep  -nv   "/sbin/nologin"   /etc/passwd (反向)
​
# 检索包含“halt”的行及下3行信息
[root@server ~]# grep  -nA3  "halt"  /etc/passwd
​
# 检索包含“sshd”的行及上5行信息
[root@server ~]# grep  -nB5   “sshd”  /etc/passwd 
​
# 检索包含“ftp”的行及上下2行
[root@server ~]# grep   -nC2   “ftp”   /etc/passwd
​
# 检索不能登录的账户个数
[root@server ~]# grep   -c   “/sbin/nologin”  /etc/passwd  
# 相当于 grep  -n  “/sbin/nologin”  /etc/passwd | wc  -l
​
# 检索包含大小写字母d的行信息
[root@server ~]# grep  -ni  "d"  /etc/passwd
使用特殊符号匹配
匹配模式说明
grep h 文件名查找文件里有字符h的行
grep ^[q] 文件名匹配以q开始的行
grep ^[qf] 文件名匹配以q或者f开头的行
grep ^[ ^qf ] 文件名不匹配以q或者f开头的行
grep ^[0-9] 文件名匹配以数字开头的行
grep q$ 文件名匹配以q结束的行
grep ^$过滤空白行
grep -r h ./*如果要明确搜索当前目录中的子目录有h的行
grep -d s kip h ./*忽略当前目录下的子目录下的普通文件
[root@server ~]# grep  ^a /etc/passwd
​
[root@server ~]# grep  -n  “^root” /etc/passwd
​
[root@server ~]# grep  -n  "^#"  /etc/sos/sos.conf
​
[root@server ~]# grep  -n  [0-9]$  /etc/sos/sos.conf
​
[root@server ~]# grep  -n  ^$  /etc/sos/sos.conf

切割显示-cut

作用
  • cut命令用于按列提取文本内容

格式
cut  -d  "分隔符"  -f列数字  文件名
示例
  • /etc/passwd文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,如:

[root@server ~]# head  2 /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin
  • 基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可,但如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。

[root@kongd ~]# cut -d : -f1 /etc/passwd
root
bin
daemon
adm
lp
  • 例:提取内核版本号

[root@server ~]# uname -a | cut -d " " -f3
  • 例:提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d "/" -f1 | cut -d " " -f6
# 注意空格
  • 例:提取mac地址

[root@server ~]# ip a | grep link/ether | cut -d " " -f6

排序显示-sort

作用
  • sort命令用于对文本内容进行排序显示

格式:

sort  -参数  文件名
参数
选项作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围
示例
  • sort命令执行后默认会按照字母顺序进行排序

[root@server ~]# cat fruit.txt 
banana
pear
apple
orange
[root@server ~]# sort fruit.txt 
apple
banana
orange
pear
​
[root@server ~]# cat  /etc/passwd | cut -d : -f1 | sort  # 取出所有账户名
  • sort -u参数进行去重操作:

[root@server ~]# cat sort.txt 
Welcome to openlab.com
Red Hat certified
Welcome to openlab.com
Free Linux Lessons
Linux Course
[root@server ~]# sort -u sort.txt 
Free Linux Lessons
Red Hat certified
Welcome to openlab.com
  • 数字排序

[root@server ~]# cat number.txt 
45
12
3
98
82
67
24
56
9
[root@server ~]# sort -n number.txt 
​
[root@server ~]# sort -nr number.txt  # 降序
  • 下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子:

[root@kongd ~]# cat user.txt 
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
  • 上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序来搞定:

[root@server ~]# sort -t : -k 3 -n user.txt 
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd

去重显示-uniq

作用
  • uniq命令用于去除文本中连续的重复行

格式
uniq -参数 文件名
示例
  • 对比两个文本内容进行操作

[root@server ~]# cat uq1.txt 
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@kongd ~]# uniq uq1.txt 
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course

文件中字符替换显示-tr

作用
  • tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出

格式
tr  -参数  替换内容  新内容
参数
  • -c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换

  • -d :删除指令字符

  • -s :缩减连续重复的字符成指定的单个字符

示例
  • 小写字母全部转换成大写字母

[root@server ~]# cat /etc/passwd  | tr a-z A-Z 
  • 提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d /  -f1 | tr -s ' ' | cut -d ' ' -f3

例:

[root@localhost /]# echo helloworld | tr l 0 把l字符替换成0字符
he00owor0d
[root@localhost /]# echo helloworld | tr hl 0 把h以及l字符替换成0字符
[root@localhost /]# echo helloworld | tr l 01 把l字符替换成0字符
[root@localhost /]# echo helloworld | tr -t hl 0 等长字符替换;把h字符替换成0字符
[root@localhost /]# echo helloworld | tr -c l 0 反选定;除了l字符之外的字符替换成0字符
[root@localhost /]# echo helloworld | tr -d hl  删除字符;删除hl字符
[root@localhost /]# echo 1  2      3| tr -s " " " "  将多个连续重复字符替换为单个字符;
将多个连续重复的空格字符替换为单个空格字符
[root@localhost /]# df -h | tr -s " " " " | cut -d " " -f 4

面试重点:history

1、让history命令显示出执行用户、执行时间、执行用户IP

    vim /etc/bashrc# USER_IP 取ipUSER_IP=$(who -u -m | cut -d'(' -f2 | cut -d')' -f1)=$(who -u -m | awk '{print $NF}'|sed 's/[()]//g')# 定义history命令显示格式export HISTTIMEFORMAT="[%F %T] [$(whoami)] [$USER_IP] "下次登录生效,如果当前生效,使用source或.加载文件[root@system1 day1]# source /etc/profile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16817.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

NTIRE2024 | 修复一切图像RAIM: Restore All Image Model Challenge报告分析

论文/报告地址:NTIRE 2024 Restore Any Image Model (RAIM) in the Wild Challenge 0、写在前面 马上CVPR2024就要开幕,各大挑战赛的排名和详细报告也都出炉。近期留意到这个名字很屌的赛道,修复一切图像的模型,小米的团队的拿了…

【Visual Studio】设置文件目录

打开属性 输出目录:$(SolutionDir)bin\$(Platform)\$(Cinfiguration)\ 中间目录:$(SolutionDir)bin\intermediates\$(Platform)\$(Cinfiguration)\

基于Java的校园菜鸟驿站管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

Photoshop(PS)——人像磨皮

1.新建一个文件,背景为白色,将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来,选择第一个拷贝图层,选择滤镜---杂色---蒙尘与划痕 3.调整一下数值,大概能够模糊痘印痘坑,点击确定。 4.然后选择拷贝2图层…

Yocto - 使用Yocto开发嵌入式Linux系统_13 创建定制层

Creating Custom Layers 除了使用社区或供应商提供的现有图层外,我们还将在本章中学习如何为我们的产品创建图层。此外,我们还将了解如何创建机器定义和分布,并从中获益,从而更好地组织我们的源代码。 In addition to using exist…

第5章-总体设计 5.2 需求转化为规格

5.2 需求转化为规格 1.框式产品(1)业务规格,这需要满足客户期望、有市场竞争力、颗粒度最合理。(2)整框规格,包括电源、功耗、散热、可靠性的规格,要保证整款满足环境应用要求。(3&a…

kali上安装docker,并且生成centos7容器和创建apache容器后台运行

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明 文章目录 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明前言1. Ribbon 介绍1.1 LB(Load Balance 负载均衡) 2. Ribbon 原理2.2 Ribbon 机制 3. Spring Cloud Ribbon 实现负载均衡算法-应用实例4. 总结&#x…

约克VRF中央空调新天氟地水/天氟热水,做冬日生活的温暖守护者

随着冬季的悄然降临,现代人对居家环境的舒适性要求愈发提升,如何在寒冷的季节里营造一个温暖、静谧且健康的居住空间,成为了时下关注的焦点。面对冬日空气干燥、寒气侵袭的挑战,约克VRF中央空调凭借其氟系统和水系统的跨界融合,为家庭带来了纵享四季的恣意体验,让温暖与舒适触手…

计算机提示mfc140u.dll丢失的五种解决方法,了解mfc140u.dll错误的几种修复方法

当你尝试打开某些程序时,突然出现错误提示,告知你系统缺少 mfc140u.dll 文件,这可能让你感到困惑和无助。mfc140u.dll 是 Microsoft Foundation Class (MFC) 库的一部分,对于运行很多由 Visual Studio 2015 使用 MFC 开发的应用程…

【SSL-RL】自监督强化学习: 好奇心驱动探索 (CDE)算法

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

Windows系统 ElasticSearch,Kibana安装

目录 1.wins安装ElasticSearch2.将 elasticsearch 以服务的方式安装3. 在系统环境变量 Path 中添加如下路径4.启动点击即可5.双击 elasticsearch.bat 启动 elasticsearch 服务6.启动后第一次会显示一些配置信息,包括默认的用户密码 先记住 记不住的话可以重置密码7.验证安装结果…

《Probing the 3D Awareness of Visual Foundation Models》论文解析——单图像表面重建

一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…

P3-4.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计语句

知识要点:break、continue和goto辅助循环设计语句 视频: P3-4.1.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计语句 P3-4.2.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计…

灵神DAY3 KMP算法

具体解释: 1. 真前缀和真后缀的定义 前缀:字符串的起始部分。例如,字符串 s "aabcaa" 的前缀是 ""、"a"、"aa"、"aab"、"aabc"、"aabca"、"aabcaa"。 …

MySQL5.7.37安装配置

1.下载MySQL软件包并解压 2.配置环境变量 3.新建my.ini文件并输入信息 [mysqld] #端口号 port 3306 #mysql-5.7.27-winx64的路径 basedirC:\mysql-5.7.37\mysql-5.7.37-winx64 #mysql-5.7.27-winx64的路径\data datadirC:\mysql-5.7.37\mysql-5.7.37-winx64\data #最大连接数…

基于单片机的手持金属探测仪设计

本设计以STM32F103C8T6单片机为核心,通过金属线圈感应器来判断是否存在金属,控制OLED显示屏显示金属探测仪的灵敏度和参考值,通过电源模块将220V转化为3.3V对单片机进行供电,还可以通过按键对金属探测仪的灵敏度进行设置&#xff…

P1197 星球大战(并查集+逆向思维)

这是今天写的比较有价值的一道题,晚上写了大概一个多小时,主要还是在debug,出得很妙,好题👍 P1197 [JSOI2008] 星球大战 - 洛谷 | 计算机科学教育新生态 思路:如果我们按照顺序一个一个的去计算毁灭一个星…

深度学习驱动的蛋白质设计技术与前沿实践-从基础到尖端应用

RoseTTAFold,作为David Baker教授团队早期开发的蛋白质结构预测工具,在学术界与工业界广受认可。然而,随着时间推移,仅局限于预测已知结构的蛋白质并不能满足生物医药和生物工程领域对创新设计的需求。这促使David Baker教授团队继…

Linux 进程信号初识

目录 0.前言 1.什么是信号 1.1生活中的信号 1.2 OS中的信号 2.认识信号 2.1信号概念 2.2查看信号 2.3 signal函数 2.4代码示例 3. 信号处理方式 3.1 忽略信号 3.2 默认处理 3.3 自定义处理 4.小结 (图像由AI生成) 0.前言 在之前的学习中,我…