赞
踩
目录
1.1.1、read可以同时接受用户输入的多个值,赋值给多个变量
7.1、sort是一个排序的命令。默认情况下,根据每一一行的首字母进行排序。
8.3.1、查询访问本网站最多的IP地址,统计出访问量最大的3个IP地址
shelll里往文件里传递参数的方法:
1、read;2、位置变量;3、导入文件 --》while
python里往文件里传递参数的方法:
1、input;2、文件IO;3、位置变量,sys.argv。sys模块是专门对python进行处理的模块。什么叫做模块(库):就是一个.py文件,里边有很多函数。OS模块是专门对操作系统进行处理的模块。
- [root@fttsaxf ~]# read num
- 1
- [root@fttsaxf ~]# echo $num
- 1
- [root@fttsaxf while_import_file]# read -p "请输入用户名和密码:" u_name u_pwd
- 请输入用户名和密码:feng 123456
- [root@fttsaxf while_import_file]# echo $u_name
- feng
- [root@fttsaxf while_import_file]# echo $u_pwd
- 123456
$1、$2......
- [root@fttsaxf script]# cat position.sh
- #!/bin/bash
-
- echo "第一个位置变量 $1"
- echo "第二个位置变量 $2"
- echo "第三个位置变量 $3"
- echo "所有位置变量的内容:$*"
- echo "位置变量的数量:$#"
- echo "脚本名字是:$0"
- [root@fttsaxf script]# bash position.sh fan feng love
- 第一个位置变量 fan
- 第二个位置变量 feng
- 第三个位置变量 love
- 所有位置变量的内容:fan feng love
- 位置变量的数量:3
- 脚本名字是:position.sh

- [root@fttsaxf script]# cat casev2.sh
- #!/bin/bash
-
- case $1 in
- start)
- echo "启动程序"
- ;;
- stop)
- echo "关闭程序"
- ;;
- restart|reload)
- echo "重启程序"
- ;;
- *)
- echo "请检查输入是否正确"
- ;;
- esac
- [root@fttsaxf script]# bash casev2.sh start
- 启动程序
- [root@fttsaxf script]# bash casev2.sh stop
- 关闭程序
- [root@fttsaxf script]# bash casev2.sh reload
- 重启程序
- [root@fttsaxf script]# bash casev2.sh 1235
- 请检查输入是否正确

- [root@fttsaxf script]# cat position.py
- import sys
-
- # 输出所有的位置变量
- # sys.argv代表所有的位置变量 --》相当于shell里的$*
- print(sys.argv)
- print("#" * 50)
- # 使用for循环,一个一个的输出位置变量
- for i in sys.argv:
- print(i)
- [root@fttsaxf script]# python3 position.py feng liu shi jin
- ['position.py', 'feng', 'liu', 'shi', 'jin']
- ##################################################
- position.py
- feng
- liu
- shi
- jin

while无限循环的两种格式:
1、while : 注意:"while" 和 ":" 之间有一个空格
2、while true
- [root@fttsaxf while_import_file]# cat student_info.txt
- name age sex grade
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
- [root@fttsaxf while_import_file]# cat while_import_file.sh
- #!/bin/bash
-
- # 方法一:导入
- while read u_name u_age u_sex u_grade
- do
- echo -e "名字是$u_name \t性别是$u_sex \t年龄为$u_age \t分数是$u_grade"
- done < student_info.txt
-
- echo "#####################"
- # 方法二:
- cat student_info.txt | while read u_name u_age u_sex u_grade
- do
- echo -e "名字是$u_name \t性别是$u_sex \t年龄为$u_age \t分数是$u_grade"
- done
- [root@fttsaxf while_import_file]# bash while_import_file.sh
- 名字是name 性别是sex 年龄为age 分数是grade
- 名字是cali 性别是m 年龄为36 分数是80
- 名字是liyu 性别是m 年龄为24 分数是90
- 名字是ly 性别是f 年龄为20 分数是93
- #####################
- 名字是name 性别是sex 年龄为age 分数是grade
- 名字是cali 性别是m 年龄为36 分数是80
- 名字是liyu 性别是m 年龄为24 分数是90
- 名字是ly 性别是f 年龄为20 分数是93

[[]],双中括号。
- [root@fttsaxf rough_book]# cat if.sh
- read -p "请输入你的名字:" name
- if [[ $name == "root" ]] # 输入的判断条件两边必须要有空格
- then
- echo "welcome to login"
- else
- echo "请输入正确的用户名"
- fi
- [root@fttsaxf rough_book]# bash if.sh
- 请输入你的名字:root
- welcome to login
(()),双圆括号
- [root@fttsaxf while_import_file]# cat test
- #!/bin/bash
-
- if (( $1 > $2))
- then
- echo "第一个数大于第二个数"
- else
- echo "第一个数小于第二个数"
- fi
- [root@fttsaxf while_import_file]# bash test 1 2
- 第一个数小于第二个数
-
定义:连接左右两个命令,将左侧的命令的标准输出,作为右侧命令的标准输入
格式:cmd1 | cmd2...
默认情况下,管道会把前边正确的输出作为后边命令的输入
- [root@fttsaxf for_while.sh]# cat while.sh | grep "if"
- if ((k==3));then #;可以进行命令连接
- if ((k==8));then
- [root@fttsaxf for_while.sh]# cat while.shdfas | grep "if"
- cat: while.shdfas: 没有那个文件或目录
那怎么才能使错误的输出也能够作为后便命令的输入
进程和进程之间通信的方式:1、管道 pipe;2、socket文件
- [root@fttsaxf for_while.sh]# find / -type "p" # 在根目录下查找文件类型为管道的文件
- [root@fttsaxf for_while.sh]# ll /run/dmeventd-client
- prw-------. 1 root root 0 2月 12 10:59 /run/dmeventd-client
- '''
- - 表示普通的文本文件
- d 表示目录 directory
- l 表示链接文件 link
- p 表示管道文件 --》 存放在内存中
- c 表示字符设备文件 character
- b 表示块设备文件 block
- s 表示socket文件 --》 存放在磁盘中
- '''
图片说明:这个管道文件也是在内存中的,这样画只是为了方便理解。
[root@fttsaxf for_while.sh]# df -a
- [root@fttsaxf lucky_draw]# df -Th
- 文件系统 类型 容量 已用 可用 已用% 挂载点
- devtmpfs devtmpfs 898M 0 898M 0% /dev
- tmpfs tmpfs 910M 0 910M 0% /dev/shm
- tmpfs tmpfs 910M 9.7M 901M 2% /run
- tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
- /dev/mapper/centos-root xfs 17G 2.7G 15G 16% /
- /dev/sda1 xfs 1014M 151M 864M 15% /boot
- tmpfs tmpfs 182M 0 182M 0% /run/user/0
1、grep --》过滤
2、awk --》截取行里的字段,一个字段代表一列
3、sed --》替换
- [root@fttsaxf while_import_file]# cat student_info.txt
- name age sex grade
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
- [root@fttsaxf while_import_file]# cat student_info.txt | awk '{print $4}'
- grade
- 80
- 90
- 93
- '''
- awk 是截取命令
- '{}' 是固定的语法
- print 是awk里的命令,用来输出内容
- $4 表示第4个字段
- awk 默认的字段和字段之间的分隔符是空白(空格、tab、回车)
- '''
- [root@fttsaxf while_import_file]# cat student_info.txt | awk '{print $0$4}'
- name age sex gradegrade
- cali 36 m 8080
- liyu 24 m 9090
- ly 20 f 9393
- [root@fttsaxf while_import_file]# cat student_info.txt | awk '{print $0,$4}'
- name age sex grade grade
- cali 36 m 80 80
- liyu 24 m 90 90
- ly 20 f 93 93
- # ','是输出的时候使用一个空格作为分隔符

- [root@fttsaxf while_import_file]# cat test
- #!/bin/bash
-
- if (( $1 > $2))
- then
- echo "第一个数大于第二个数"
- else
- echo "第一个数小于第二个数"
- fi
- [root@fttsaxf while_import_file]# cat <test ;cat student_info.txt
- #!/bin/bash
-
- if (( $1 > $2))
- then
- echo "第一个数大于第二个数"
- else
- echo "第一个数小于第二个数"
- fi
- name age sex grade
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93

命令连接符号,可以将多个命令写到一行。
cmd1;cmd2;cmd3 先执行cmd1再执行cmd2最后执行cmd3,不管前面的命令是否执行成功,都会执行
- [root@fttsaxf while_import_file]# cd gjasl;echo love;cd sig
- -bash: cd: gjasl: 没有那个文件或目录
- love
- -bash: cd: sig: 没有那个文件或目录
cmd1 && cmd2 如果cmd1执行成功,就执行cmd2,如果执行不成功不执行cmd2
cmd1 || cmd2 如果cmd1不执行成功,就执行cmd2,如果执行成功不执行cmd2
cmd1 && cmd2 || cmd3 如果cmd1执行成功,就执行cmd2,如果执行不成功就执行cmd3
- [root@fttsaxf while_import_file]# mkdir love && echo yes || echo no
- yes
- [root@fttsaxf while_import_file]# mkdir love && echo yes || echo no
- mkdir: 无法创建目录"love": 文件已存在
- no
1.判断用户feng是否存在,如果存在就设置密码,不存在就新建用户feng
id feng &>/dev/null && echo 123456|passwd feng --stdin || useradd feng
2.判断目录/backup是否存在,如果存在就不新建,不存在就新建/backup目录
[ -d /backup ] || mkdir /backup
cd /backup || mkdir /backup
mkdir -p /backup
这三个答案在shell中都可以
在python里如何判断一个目录是否存在?
可以用os.path.exists()
- >>> os.path.exists("/backup")
- False
- >>> os.mkdir("/backup")
- >>> os.path.exists("/backup")
- True
- [root@fttsaxf rough_book]# cat dir.py
- #!/usr/bin/python3
-
- import os
- if os.path.exists("/backup"):
- print("/backup is exists")
- else:
- os.mkdir("/backup")
- print("/backup create ok")
3.统计整个linu根目录的大小,不要显示错误的信息
- [root@fttsaxf while_import_file]# du -sh / 2>/dev/null
- 2.8G /
有些命令对管道符号的支持不是很好
管道:将前边命令的输出送给后边的命令使用
xargs:将前边命令的输出送给后边命令作为参数使用
-i,前边一条命令的n个输出,逐个传入后面的命令去执行,在{}处执行
注意:在使用xargs的时候不能够使用命令的别名(alias)
- [root@fttsaxf rough_book]# which mkdir | ls -l # 这里显示的是rough_book里的文件信息
- 总用量 8
- -rw-r--r--. 1 root root 144 2月 12 20:32 dir.py
- -rw-r--r--. 1 root root 20 2月 9 11:25 new
- [root@fttsaxf rough_book]# ll /usr/bin/mkdir
- -rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
- [root@fttsaxf rough_book]# which mkdir | xargs ls -l # xargs 将前边的命令的结果作为后边命令的参数
- -rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
-
- #xargs还是需要依赖管道,只是将前面的命令的输出送给后面的命令做参数使用而已,更加的精准了。让一些不支持管道的命令,也可以使用管道了。
-
- [root@fttsaxf rough_book]# find ./ -maxdepth 1 -name "test" -type f | xargs -i cp {} /tmp
-
- [root@fttsaxf lucky_draw]# echo 1234511253 | tr 123 abc # 不要把123认为是一个整体,它就是单个字符对应替换
- abc45aab5c
- [root@fttsaxf rough_book]# cat test
- 1122334411
- [root@fttsaxf rough_book]# tr "11" "aa" <test
- aa223344aa
- [root@fttsaxf rough_book]# cat test
- 1122334411
- """
- 缺陷:需要用管道符号或者"<"给tr传递参数,且若是对文本进行替换,只是显示替换的效果,并不会对其进行修改
- """
- [root@fttsaxf rough_book]# cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- [root@fttsaxf rough_book]# cat /etc/hosts|tr "[a-z]" "[A-Z]"
- 127.0.0.1 LOCALHOST LOCALHOST.LOCALDOMAIN LOCALHOST4 LOCALHOST4.LOCALDOMAIN4
- ::1 LOCALHOST LOCALHOST.LOCALDOMAIN LOCALHOST6 LOCALHOST6.LOCALDOMAIN6
- [root@fttsaxf rough_book]# cat /etc/hosts|tr "[0-9]" " "
- . . . localhost localhost.localdomain localhost localhost .localdomain
- :: localhost localhost.localdomain localhost localhost .localdomain
- [root@fttsaxf rough_book]# cat /etc/hosts|tr "[0-9.]" " " # 删除0-9和"."
- localhost localhost localdomain localhost localhost localdomain
- :: localhost localhost localdomain localhost localhost localdomain
- [root@fttsaxf rough_book]# cat /etc/hosts|tr "[0-9.:]" " "
- localhost localhost localdomain localhost localhost localdomain
- localhost localhost localdomain localhost localhost localdomain
- [root@fttsaxf rough_book]# echo 1233333333333333333|tr -d 3
- 12
- [root@fttsaxf rough_book]# df -Th
- 文件系统 类型 容量 已用 可用 已用% 挂载点
- devtmpfs devtmpfs 898M 0 898M 0% /dev
- tmpfs tmpfs 910M 0 910M 0% /dev/shm
- tmpfs tmpfs 910M 9.7M 901M 2% /run
- tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
- /dev/mapper/centos-root xfs 17G 2.7G 15G 16% /
- /dev/sda1 xfs 1014M 151M 864M 15% /boot
- tmpfs tmpfs 182M 0 182M 0% /run/user/0
- [root@fttsaxf rough_book]# df -Th|tr -d "%" # 删除所有行的"%"
- 文件系统 类型 容量 已用 可用 已用 挂载点
- devtmpfs devtmpfs 898M 0 898M 0 /dev
- tmpfs tmpfs 910M 0 910M 0 /dev/shm
- tmpfs tmpfs 910M 9.7M 901M 2 /run
- tmpfs tmpfs 910M 0 910M 0 /sys/fs/cgroup
- /dev/mapper/centos-root xfs 17G 2.7G 15G 16 /
- /dev/sda1 xfs 1014M 151M 864M 15 /boot
- tmpfs tmpfs 182M 0 182M 0 /run/user/0

- [root@fttsaxf rough_book]# echo 111111122222222223333333333333344|tr -s 123
- 12344
根据首字母的ASCII码值进行升序,如果首字母一样,那就再比较第二个字母,以此类推。
- [root@fttsaxf rough_book]# cat test
- aa
- ch
- h
- ab
- l
- d
- ck
- [root@fttsaxf rough_book]# cat test | sort
- aa
- ab
- ch
- ck
- d
- h
- l
- [root@fttsaxf while_import_file]# cat student_info.txt | sort -k 4 # 没有"-n"就会让有些数字排序错误
- cali 36 m 80
- hh 21 m 9
- liyu 24 m 90
- ly 20 f 93
- name age sex grade
- [root@fttsaxf while_import_file]# cat student_info.txt | sort -k 4 -n
- name age sex grade
- hh 21 m 9
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
-
- """
- -n 是让系统把这些数整个认定为一个数
- """

- >>> ord("c")
- 99
- >>> chr(99)
- 'c'
-k,指定哪一列为排序键
- [root@fttsaxf while_import_file]# cat student_info.txt
- name age sex grade
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
- [root@fttsaxf while_import_file]# cat student_info.txt | sort -k4 # 按第四列排序
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
- name age sex grade
- [root@fttsaxf while_import_file]# cat student_info.txt | sort -k4 -n # 按整数排列
- name age sex grade
- cali 36 m 80
- liyu 24 m 90
- ly 20 f 93
- [root@fttsaxf while_import_file]# cat student_info.txt | sort -k4 -rn # 逆序
- ly 20 f 93
- liyu 24 m 90
- cali 36 m 80
- name age sex grade

-t,指定字符分割符(默认是空白(空格和tab))
- # -n,将所有的数字按照数值的大小进行比较;-t,指定分隔符为,":';-k,指定第三列进行排序
- [root@fttsaxf while_import_file]# cat /etc/passwd | sort -n -k 3 -t :
- 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
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
1.查找出ps aux命令输出的内存使用率最高的五个进程
[root@fttsaxf while_import_file]# ps aux | sort -rn -k 4| head -5
2.查找出ps aux命令输出的cpu使用率最高的十个进程,但只是显示PID、%MEM、COMMAND这个三个字段
- # 注意:这里print那里,只能够用单引号,不能使用双引号
- [root@fttsaxf while_import_file]# ps aux | sort -rn -k 4| head |awk '{print $2,$4,$11}'
- 721 1.5 /usr/bin/python2
- 1023 0.9 /usr/bin/python2
- 678 0.6 /usr/lib/polkit-1/polkitd
- 531 0.3 /usr/lib/systemd/systemd-udevd
- 1918 0.3 sshd:
- 1808 0.3 sshd:
- 1 0.3 /usr/lib/systemd/systemd
- 683 0.2 /usr/bin/vmtoolsd
- 682 0.2 /usr/bin/VGAuthService
- 519 0.2 /usr/sbin/lvmetad
删除经过排序后的数据的重复记录。通常与sort连用,sort -n |uniq。
- [root@fttsaxf rough_book]# cat test | sort -n
- aa
- ch
- ck
- ck
- d
- d
- [root@fttsaxf rough_book]# cat test | sort -n|uniq
- aa
- ch
- ck
- d
-c,统计特定记录出现的次数
- [root@fttsaxf rough_book]# cat test | sort -n|uniq -c
- 1 aa
- 1 ch
- 2 ck
- 2 d
-u
- [root@fttsaxf rough_book]# cat test | sort -n|uniq -u
- aa
- ch
-d
- [root@fttsaxf rough_book]# cat test | sort -n|uniq -d
- ck
- d
因为uniq其实也和"tr -s"命令的执行机制差不多,都是对连续重复的行进行去重处理。所以想要达成重复的字符都排在一起,那就必须要先进行排序。
- [root@fttsaxf rough_book]# cat test
- aa
- ch
- ck
- d
- d
- ck
- [root@fttsaxf rough_book]# cat test |uniq # 这里很明显的看到了有两个"ck"
- aa
- ch
- ck
- d
- ck
- [root@fttsaxf rough_book]# cat test | sort -n|uniq
- aa
- ch
- ck
- d

- [root@fttsaxf rough_book]# cat test | sort -n|uniq -c | sort -n
- 1 aa
- 1 ch
- 2 d
- 3 ck
- [root@fttsaxf rough_book]# cat test | sort -n|uniq -c | sort -rn
- 3 ck
- 2 d
- 1 ch
- 1 aa
awk,是以空白作为分隔
从文本文件或者文本提取文本列
格式:cut -选线 提取范围 文本文件
从指定提取范围中提取字符
- # n:第n项
- [root@fttsaxf rough_book]# echo 987654321|cut -c 2
- 8
- # n-:第n项到行尾
- [root@fttsaxf rough_book]# echo 987654321|cut -c 2-
- 87654321
- # -m:行首到第m项
- [root@fttsaxf rough_book]# echo 987654321|cut -c -2
- 98
- # n-m:第n项到第m项
- [root@fttsaxf rough_book]# echo 987654321|cut -c 2-8
- 8765432
- # n,m:第n项和第m项
- [root@fttsaxf rough_book]# echo 987654321|cut -c 2,8
- 82
指定默认的分隔符是tab
-f, --fields=LIST fileds字段
select only these fields;
- [root@fttsaxf rough_book]# w|cut -f 1 # 这里跟直接"w"没什么变化
- 13:04:57 up 2:17, 3 users, load average: 0.02, 0.02, 0.05
- USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
- root tty1 10:45 2:19m 0.02s 0.02s -bash
- root pts/0 192.168.29.1 10:45 2:19m 0.01s 0.01s -bash
- root pts/1 192.168.29.1 11:41 1.00s 0.14s 0.00s w
- [root@fttsaxf rough_book]# w|cut -d " " -f 1 # 指定空格为分隔符
-
- USER
- root
- root
- root
- # 在以下情况下我们要节选出这个"4"来
- [root@fttsaxf rough_book]# echo 1#2#3##4|cut -d "#" -f 1 # 指定分隔符为"#"
- 1
- [root@fttsaxf rough_book]# echo 1#2#3##4|cut -d "#" -f 4
-
- [root@fttsaxf rough_book]# echo 1#2#3##4|cut -d "#" -f 5 # 只能在第五个字段中选出"4"
- 4
-
- # 下面这种情况截取出第一二节字段
- [root@fttsaxf rough_book]# w
- 13:11:46 up 2:24, 3 users, load average: 0.02, 0.03, 0.05
- USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
- root tty1 10:45 2:26m 0.02s 0.02s -bash
- root pts/0 192.168.29.1 10:45 2:26m 0.01s 0.01s -bash
- root pts/1 192.168.29.1 11:41 2.00s 0.17s 0.00s w
- [root@fttsaxf rough_book]# w|cut -d " " -f 1,2 # 由此可见直接使用cut并不能够截取的出来
- 13:11:48
- USER
- root
- root
- root

如何解决这个问题?
我们可以使用"tr",使用之后会把多个空格或者tab或者#压缩成一个,这样就能成功截取出来对应的字段了
- # 这样就在第四个字段中把"4"截取出来了
- [root@fttsaxf rough_book]# echo 1#2#3##4|tr -s "#"|cut -d "#" -f 4
- 4
- # 这样就把第一二节字段截取出来了
- [root@fttsaxf rough_book]# w|tr -s " "|cut -d " " -f 1,2
- 13:13:14
- USER TTY
- root tty1
- root pts/0
- root pts/1
awk的功能比cut的功能更加的强大和完善。awk的默认分隔符是空白,cut的默认分隔符是tab
- # 查找出UID大于1000的用户,输出这个用户的名字和UID以及shell。这个题目里,使用awk就十分简单
- """
- [root@fttsaxf rough_book]# id fdd
- uid=1003(fdd) gid=1003(fdd) 组=1003(fdd)
- uid是用户的id号,也可以叫做标识符
- gid组的id。比如,你属于汉族的或者其他民族的
- """
- [root@fttsaxf rough_book]# cat /etc/passwd|awk -F ":" '$3>1000 {print $1,$3,$NF}'
以下每一行都是一个答案
第一题:
"ll -R",会递归的显示出要显示的目录下的所有文件夹和文件、子文件和文件夹
- [root@fttsaxf rough_book]# ll -R /root/|awk '{print $5}'|sort -n
- [root@fttsaxf rough_book]# ll -R /root|tr -s " "|cut -d " " -f 5 |sort -n
- [root@fttsaxf rough_book]# ll -R /boot|sort -n -k 5|awk '{print $5,$9}'
第二题:
"$NF"表示最后一个字段
- [root@fttsaxf rough_book]# cat /etc/passwd|tr -s ":"|cut -d ":" -f 7|sort -n|uniq -c|sort -nr
- [root@fttsaxf rough_book]# cat /etc/passwd|awk -F ":" '{print $7}'|sort |uniq -c| sort -rn
- [root@fttsaxf rough_book]# cat /etc/passwd|awk -F: '{print $NF}'|sort |uniq -c|sort -rn
- 18 /sbin/nologin
- 15 /bin/bash
- 1 /sbin/shutdown
- 1 /sbin/halt
- 1 /bin/sync
-
- # 看到倒数第二列
- [root@fttsaxf rough_book]# cat /etc/passwd|awk -F: '{print $NF,$(NF-1)}'|sort |uniq -c|sort -rn
-
第三题:
- [root@fttsaxf rough_book]# df -Th|tr -s " "|cut -d " " -f 1,2,6|tail -n +2|sort -n
- [root@fttsaxf rough_book]# df -Th|awk '{print $1,$2,$6}'
- 文件系统 类型 已用%
- devtmpfs devtmpfs 0%
- tmpfs tmpfs 0%
- tmpfs tmpfs 2%
- tmpfs tmpfs 0%
- /dev/mapper/centos-root xfs 16%
- /dev/sda1 xfs 15%
- tmpfs tmpfs 0%
第四题:
- [root@fttsaxf rough_book]# cat /etc/passwd|tr ":" "\n"|grep sbin|wc -l
- 24
- # 因为有些行里有两个"sbin",所以可以把":"换成"\n",然后"sbin"会每一个分布一行
-
- [root@fttsaxf rough_book]# cat /etc/passwd|tr ":" "\n"|grep -o sbin|wc -l
- 24
- # 只打印匹配行中匹配的(非空的)部分,每个这样的部分在一个单独的输出行中
第五题:
- [root@fttsaxf rough_book]# ps aux|sort -rn -k 4|head -5|awk '{print $2,$11}'
- 1890 /usr/bin/python2
- 1060 /usr/bin/python2
- 682 /usr/lib/polkit-1/polkitd
- 529 /usr/lib/systemd/systemd-udevd
- 1698 sshd:
第六题:
- [root@fttsaxf rough_book]# ps aux|sort -rn -k 4|head -5|awk '{print $2,$11}'
- 1890 /usr/bin/python2
- 1060 /usr/bin/python2
- 682 /usr/lib/polkit-1/polkitd
- 529 /usr/lib/systemd/systemd-udevd
- 1698 sshd:
第七题:
- [root@fttsaxf rough_book]# ip add|grep "192"|awk '{print $2}'
- 192.168.29.128/24
第八题:
-F "x",指定"x"为分隔符。awk的默认分隔符是空白(空格和tab)
NF是awk里的内置的一个变量,代表一行里有多少个字段(number of fileds) 。$NF,引用NF变量的值,表示最后一列。倒数第二列为$(NF-1)
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
只输出匹配的内容,不匹配的不显示。且匹配的内容,单独显示为一行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。