首页 > 其他分享 >RHCE的学习(17)

RHCE的学习(17)

时间:2024-11-15 20:17:55浏览次数:3  
标签:txt 17 passwd RHCE server 学习 etc echo root

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"  
执行脚本,输出结果如下所示:
abcdef

abc
def

a 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/null

2、每个用户添加完成后,都要显示用户某某已经成功添加;
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 -w

vim ~/.bash_history

sort ~/.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/passwd
  37     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 取ip
    USER_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

标签:txt,17,passwd,RHCE,server,学习,etc,echo,root
From: https://blog.csdn.net/Starry__Sky222/article/details/143680503

相关文章

  • 嵌入式硬件学习(一)
    文章目录一、ARM介绍1、ARM公司2、ARM各系列二、SOC概念三、ROM和RAM的分类四、编译流程五、大小端六、ARM的工作模式七、ARM寄存器基本介绍八、判断一个数是不是立即数一、ARM介绍1、ARM公司(1)主要设计ARM系列RISC处理器内核(2)授权ARM内核给生产和销售半导体的合作......
  • 多种智能优化算法优化正则化极限机器学习机(RELM)的数据回归预测
     正则化极限学习机(RELM)通过引入正则化项来约束模型复杂度,从而提高模型的泛化能力。然而,优化RELM的最优权值(即隐藏层到输出层的权重)仍然是提升其性能的关键。通过多种智能优化算法来优化RELM的最优权值,可以显著提升其在数据回归预测任务中的性能。以下是相关过程的基本原理和示......
  • 617. 合并二叉树
    题目链接解题思路分情况讨论即可两个头都是空,直接返回空若root1为空,直接返回root2若roo2为空,直接返回root1若都不空,则二者相加,得到一个新节点A,然后二者的左子树去合并,得到一个新左子树new_left,二者的右子树去合并,得到一个新右子树new_right,然后新节点的左儿子就是new_......
  • 大数据学习15之Scala集合与泛型
    1.概述        大部分编程语言都提供了数据结构对应的编程库,并称之为集合库(CollectionLibrary),Scala也不例外,且它还拥有以下优点:易用:灵活组合运用集合库提供的方法,可以解决大部分集合问题简洁:拜类型推断和函数式编程所赐,帮助程序员写出更简洁,更优雅的代码安全:......
  • 【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性
    【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析…【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析…文章目录【深度学习目标检测|YOLO算法5-2-3......
  • 前端技术对html5的新特性学习
    html5新元素目录html5新元素语义化元素音频标签视频标签语义化元素<article>:代表页面或应用中的一个独立内容区域,如博客帖子、论坛帖子或用户评论。它通常包含标题(<header>)、内容(段落、图片等)和页脚(<footer>)。<aside>:表示与页面主要内容稍微独立的内容区域,如侧边栏、广告、......
  • 2024-2025-1 20241401 《计算机基础与程序设计》 第八周学习总结
    班级链接2024计算机基础与程序设计作业要求第八周作业作业目标①功能设计与面向对象设计②面向对象设计过程③面向对象语言三要素④汇编、编译、解释、执行教材学习内容总结《计算机科学概论》第9章面向对象方法:介绍了面向对象(OOD)的基本概念,包括类和对......
  • 【SpringBoot每日学习 - 第二天】SpringApplication 启动类:方法篇一
    SpringApplication类是SpringBoot应用程序的核心类之一,负责启动和初始化整个SpringBoot应用。通过调用SpringApplication.run()方法,SpringBoot会启动嵌入式的Web服务器(如Tomcat)并创建Spring容器。SpringApplication类具有一系列方法和配置项,允许开发者自定......
  • 【SpringBoot每日学习 - 第一天】SpringApplication 启动类:属性篇
    SpringApplication类是SpringBoot应用启动的核心类之一,包含了大量的属性,控制着应用启动的各个方面。这些属性涵盖了从配置环境、应用上下文类型、Banner显示、启动日志、事件监听等多个方面。以下是SpringApplication类中重要属性的详细说明及其用途:静态属性DEFAUL......
  • C语言经典100题 学习笔记(更新中)
    第一题:有1、2、3、4四个数字,能组成多少互不相同且无重复数字的三位数?都是多少?#include<stdio.h>//有1、2、3、4四个数字//能组成多少互不相同且无重复数字的三位数?都是多少?intmain01(){ inta=0; intb=0; intc=0; intcount=0; for(a=1;a<5;a++) {......