第一关课后考试:
1、创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写如内容:inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0
[root@localhost ~]# mkdir /data/oldboy -p ( -p #递归创建目录,一般第一级目录不存在时使用-p。否则报错。)
[root@localhost ~]# ls -ld /data/oldboy/
drwxr-xr-x 2 root root 6 May 3 10:26 /data/oldboy/
[root@localhost ~]# touch /data/oldboy/oldboy.txt
[root@localhost ~]# echo "inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0" >/data/oldboy.txt
[root@localhost ~]# cat /data/oldboy.txt
inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0
2、将题1中的oldboy.txt文件内容通过命令过滤只输出如下内容:
10.0.0.8 10.0.0.255 255.255.255.0
[root@localhost data]# awk -F "[ :]+" '{print $3,$5,$7}' oldboy.txt
10.0.0.8 10.0.0.255 255.255.255.0
[root@localhost data]# awk -F "[ :]+" '{print $3" "$5" "$7}' oldboy.txt
10.0.0.8 10.0.0.255 255.255.255.0
3、将题1中的oldboy目录移动到/tmp目录下,并将/etc/passwd文件复制到/tmp/oldboy下:
[root@localhost ~]# mv /data/oldboy /tmp
[root@localhost ~]# cp /etc/passwd /tmp/oldboy
[root@localhost ~]# ls /tmp/oldboy
oldboy.txt passwd
4、在题3的基础上使用awk取passwd文件的第10行到20行的第三列重定向到/tmp/oldboy/test.txt文件夹里:
[root@localhost oldboy]# awk 'NR>9 && NR<21' passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:996:User for colord:/var/lib/colord:/sbin/nologin
[root@localhost oldboy]# awk 'NR>9 && NR<21' passwd|cat -n
1 operator:x:11:0:operator:/root:/sbin/nologin
2 games:x:12:100:games:/usr/games:/sbin/nologin
3 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
4 nobody:x:99:99:Nobody:/:/sbin/nologin
5 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
6 dbus:x:81:81:System message bus:/:/sbin/nologin
7 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
8 abrt:x:173:173::/etc/abrt:/sbin/nologin
9 libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
10 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
11 colord:x:997:996:User for colord:/var/lib/colord:/sbin/nologin
[root@localhost oldboy]# awk -F ":" 'NR>9 && NR<21{print $3}' passwd
11
12
14
99
192
81
999
173
998
32
997
[root@localhost oldboy]# awk -F ":" 'NR>9 && NR<21{print $3}' passwd >test.txt
[root@localhost oldboy]# cat test.txt
11
12
14
99
192
81
999
173
998
32
997
5、在题3的基础上要求:用命令rm删除文件时,提示如下禁止使用rm的提示,并使改效果永久生效:
[root@localhost oldboy]# alias rm='echo Do not use rm command.'
[root@localhost oldboy]# ls
oldboy.txt passwd test.txt
[root@localhost oldboy]# rm test.txt
Do not use rm command. test.txt
[root@localhost oldboy]# ls /etc/profile /etc/bashrc (要rm改动永久生效要改这个俩个配置文件)
/etc/bashrc /etc/profile
[root@localhost oldboy]# echo "alias rm='echo Do not use rm command.'" >>/etc/bashrc
[root@localhost oldboy]# echo "alias rm='echo Do not use rm command.'" >>/etc/profile
[root@localhost oldboy]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='echo Do not use rm command.'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
6、在题3的基础上,删除/tmp/oldboy下除passwd以外的其他文件:
[root@localhost oldboy]# cd
[root@localhost ~]# tree /tmp/oldboy
/tmp/oldboy
├── oldboy.txt
├── passwd
└── test.txt
0 directories, 3 files
[root@localhost ~]# find /tmp/oldboy -type f ! -name "passwd" (!代表取反)
/tmp/oldboy/oldboy.txt
/tmp/oldboy/test.txt
[root@localhost ~]# find /tmp/oldboy -type f ! -name "passwd"|xargs
m -f (由于刚才rm被别名,需加“”转义,即转义到rm本身)
[root@localhost ~]# tree /tmp/oldboy
/tmp/oldboy
└── passwd
0 directories, 1 file
7、在题3的基础上请打印/etcpasswd文件中的第2-5行(不低于三种方法):
方法一:
[root@localhost ~]# head -5 /etc/passwd |tail -4
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
方法二:
[root@localhost ~]# sed -n '2,5p' /etc/passwd (-n代表取消默认输出)
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
方法三:
[root@localhost ~]# awk 'NR>1 && NR<6' /etc/passwd
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
8、在题3的基础上,使用命令调换passwd文件里,root位置和/bin/bash位置,即将所有的第一列和最后一列位置调换.
方法一:
$1,2... 第一,二...列以此类推。但$0:标识一行。
-F 指定分隔符(-F ":"以:为分隔。$NF是最后一列。$1,$4,$NF逗号让结果间有空格)
[root@localhost ~]# awk 'NR==1{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ":" 'NR==1{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd
/bin/bash:x:0:0:root:/root:root
[root@localhost ~]# awk -F ":" '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd (去掉NR==1,就是把所有的行都这样显示)
方法二:
[root@localhost ~]# sed -nr 's#([^:]+)(:.*:)(/.*$)#321#gp' /etc/passwd
9、把/data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy:
先创建环境:
[root@localhost ~]# mkdir /data/3306
[root@localhost ~]# mkdir /data/3307
[root@localhost ~]# ls /data
123.txt 3306 3307 456.txt oldboy.txt
[root@localhost ~]# echo "oldgirl1" >/data/123.txt
[root@localhost ~]# echo "oldgirl1" >/data/456.txt
[root@localhost ~]# echo "oldgirl1" >/data/3306/aa.txt
[root@localhost ~]# echo "oldgirl1" >/data/3307/bb.txt
[root@localhost ~]# tree /data
/data
├── 123.txt
├── 3306
│ └── aa.txt
├── 3307
│ └── bb.txt
├── 456.txt
└── oldboy.txt
2 directories, 5 files
[root@localhost ~]# find /data -type f -name "*.txt"
/data/oldboy.txt
/data/123.txt
/data/456.txt
/data/3306/aa.txt
/data/3307/bb.txt
[root@localhost ~]# find /data -type f -name "*.txt" |xargs cat
oldgirl1
oldgirl1
oldgirl1
oldgirl1
[root@localhost ~]# find /data -type f -name "*.txt" |xargs sed 's#oldgirl#oldboy#g'
oldboy1
oldboy1
oldboy1
oldboy1
[root@localhost ~]# find /data -type f -name "*.txt" |xargs sed -i 's#oldgirl#oldboy#g' (加i生效了,结果就不会显示列在屏幕上了)
[root@localhost ~]# find /data -type f -name "*.txt" |xargs cat
oldboy1
oldboy1
oldboy1
oldboy1
10、查找/oldboy下所有7天以前以log结尾的大于1M的文件移动/tmp下:
创建环境:
[root@localhost ~]# mkdir /oldboy
[root@localhost ~]# cd /oldboy
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# cat /var/log/dmesg >>123.log
[root@localhost oldboy]# ls /oldboy
123.log
[root@localhost oldboy]# 11 -h
bash: 11: command not found...
[root@localhost oldboy]# ll -h
total 960K
-rw-r--r-- 1 root root 696K Apr 1 00:16 123.log
[root@localhost oldboy]# cat 123.log >>456.log
[root@localhost oldboy]# cat 123.log >>456.log
[root@localhost oldboy]# cat 123.log >>456.log
[root@localhost oldboy]# cat 123.log >>456.log
[root@localhost oldboy]# ll -h
total 4.6M
-rw-r--r-- 1 root root 696K Apr 1 00:16 123.log
-rw-r--r-- 1 root root 2.8M Apr 1 00:17 456.log
[root@localhost oldboy]# ls -lh /oldboy (这里看到在oldboy目录下有2个文件)
total 4.6M
-rw-r--r-- 1 root root 696K Apr 1 00:16 123.log
-rw-r--r-- 1 root root 2.8M Apr 1 00:17 456.log
定义文件时间:
[root@localhost oldboy]# date -s 20180601 (系统时间后调,实际时间其实是2018-5-3)
Fri Jun 1 00:00:00 CST 2018
[root@localhost oldboy]# stat 123.log (检查文件创建时间)
File: ‘123.log’
Size: 712614 Blocks: 1392 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 2706511 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-04-01 00:17:08.001906285 +0800
Modify: 2018-04-01 00:16:06.678311769 +0800
Change: 2018-04-01 00:16:06.678311769 +0800
[root@localhost oldboy]# find /oldboy -type f -name "*.log" -size +1M -mtime +7 (查找符合题目条件的文件)
/oldboy/456.log
[root@localhost oldboy]# find /oldboy -type f -name "*.log" -size +1M -mtime +7 -exec mv {} /tmp ; (没有报错就是最好的消息,哈哈)
[root@localhost oldboy]# ls -lh /tmp (查看/tmp下是否有456.log文件)
total 3.6M
-rw-r--r-- 1 root root 2.8M Apr 1 00:17 456.log
十一、什么是Linux的运行级别,请描述Linux的运行级别不同数字的含义(附加题):
Default runlevel.The runlevels used are:
0-halt(Do NOT set initdefault to this) 关机。
1-Single user mode 单用户状态,需要维护服务器时用,比如密码丢失。
2-Multiuser,without NFS(The same as 3,if you not have networking) 多用户模式。
3-Full multiuser mode 完整多用户模式,命令行模式.工作环境一般用3级别。
4-unused 没有使用,预留的。
5-Xll 带桌面的模式。
6-reboot (Do NOT set initdefault to this) 重启。
查看当前Linux运行模式:
[root@localhost ~]# runlevel
N 5
运行级别是可以切换的:
[root@localhost ~]# init 输入数字0-6,就切换到你要的模式。
十二、请描述buffer和cache的区别(附加题):
写入数据到内存里,这个数据的内存空间成为缓冲区:buffer。写入缓冲区。
从内存读取数据,这个存数据的内存空间成为缓存区:cache。内存缓冲区。
十三、下列字符在Linux里代表的意义:
1 >或l> #输出重定向:把前面输出的东西输入到后面的文件中,会清楚文件原有内容。
2 >>或l>> #追加重定向:吧前面输出的东西追加到后面的文件尾部,不会清除文件原有内容。
3 0<或< #输入重定向:输入重定向用于改变命令的输入,后面指定输入内容,前面跟文件名。
4 0<<或<< #追加输入重定向:后面跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。
5 2> #错误重定向:把错误信息输入到后面的文件中,会删除文件原有内容。
6 2>> #错误追加重定向:把错误信息追加到后面的文件中,不会删除文件原有内容。
7 * #通配符,代表所有。
8 | #表示管道
9 .. #上一级目录
10 . #当前目录
11 = #linux里 一个=号是赋值的意思,俩个==号才是等于的意思
12 / #在linux里代表根,所有目录的顶点,也是路径的分隔符。
13 ; #命令的分隔符
14 {} #生成字符或数字序列,类似seq,一般配合echo等命令使用。find里的{}意思是前面命令的结果。
[root@localhost ~]# rm -fr /data
[root@localhost ~]# mkdir /data/{3306,3307}/data -p
[root@localhost ~]# tree /data
/data
├── 3306
│ └── data
└── 3307
└── data
4 directories, 0 files
15 ! #一、!+字母 :表示调出最近一次以此字母开头的命令。
二、!!:表示使用最近一次操作的命令。
三、!+数字:表示调出历史中的那一个命令。
178 cd /data
179 mkdir /data/{3306.3307}/data -p
181 history
[root@localhost ~]# !178
cd /data
四、取反(find,shell编程)比如find一个文件,加!就是列出除了find的哪一个以外的所有文件。
[root@localhost data]# cd /oldboy
[root@localhost oldboy]# ll
total 8
-rw-r--r--. 1 root root 0 Apr 25 17:02 a
-rw-r--r--. 1 root root 0 Apr 25 17:02 b
-rw-r--r--. 1 root root 0 Apr 25 17:02 c.txt
drwxr-xr-x. 3 root root 29 Apr 25 17:19 test
-rw-r--r--. 1 root root 7 Apr 25 17:19 test.sh
-rw-r--r--. 1 root root 7 Apr 25 17:19 t.sh
[root@localhost oldboy]# find /oldboy -type f -name "test.sh"
/oldboy/test.sh
[root@localhost oldboy]# find /oldboy -type f ! -name "test.sh" (!取反向结果)
/oldboy/test/del.sh
/oldboy/.sh
/oldboy/t.sh
/oldboy/a
/oldboy/b
/oldboy/c.txt
16 ~ #当前用户的家目录。
17 - #用户上一次所在的目录。由OLDPWD变量控制。
cd - :回到上一次的目录。
18 #转义字符,让有意义的字符,脱掉它代表的意义。例如:正则里$表示以...结尾,可以用$表示$符号本身。
19 && #并且,and。