NO15 第一关课后考试

第一关课后考试:

 

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 \rm -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#([^:]+)(:.*:)(/.*$)#\3\2\1#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。

 

posted @ 2018-05-03 15:46  Sinsen柳  阅读(191)  评论(0编辑  收藏  举报