L014-第三关课前linux命令及基础知识考试手把手实战解答小节
又是一周啊,以后保持一周一个微博吧。
这是一个堂解答考试题的课,那么就以题目来展开吧!
1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这样的数字。
首先,关于权限
r read
w write
x 执行
- 无
stat 显示文件属性命令 -c 自定义输出格式,结尾有换行 -L 如果是链接文件,则获取原文件信息 -f 显示文件所在的文件系统的状态 %a 八进制格式的文件访问权限 %s 文件大小(单位byte)
此时我们用stat命令来查看一下
[root@moban ~]# stat etiantian.txt File: `etiantian.txt' Size: 14 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 194 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-05-03 23:19:15.730978904 +0800 Modify: 2016-05-03 23:19:12.106982349 +0800 Change: 2016-05-03 23:19:12.106982349 +0800
在命令输出结果的第4行,我们看到了此etiantian.txt的数字权限为0644
下一步,我们把0644的值给取出来就达到题目的要求了。
答:
使用“cut”
[root@moban ~]# stat etiantian.txt | sed -n 4p | cut -c 10-13 0644
使用“sed”
[root@moban ~]# stat etiantian.txt | sed -n 's#^.*ccess: (\(.*\)/-r.*$#\1#gp' //正则表达式 0644
使用“awk”
[root@moban ~]# stat etiantian.txt | awk -F "[(/]" 'NR==4 {print $2}' 0644
根据man stat,使用stat
[root@moban ~]# stat -c %a etiantian.txt 644
特别笨的方法:
[root@moban ~]# ll etiantian.txt | cut -c 2-10 | tr rwx- 4210 | awk -F "" '{print $1+$2+$3 $4+$5+$6 $7+$8+$9}' 644
本题小节(思路):
本题其实就是3点思路:
1、 通过stat输出包含目标的内容。
2、 通过head、tail、sed、awk、grep定位到单行-->这是取行惯用命令
3、 通过cut、awk等设置分隔符取出需要段内容-->这是取列的惯用命令
4、 当命令结果包含我们需要的内容的时候,我们想到命令的参数是否有具体的参数能够一步到达我们需要的结果呢?这样会去 man stat了。
2.linux下通过mkdir命令创建一个新目录/oldboy/ett,它的硬链接数是多少,为什么?
答:2个。
ett有两个硬链接,一个是他本身,他本身就是一个硬链接,另一个是ett目录下有一个隐藏目录“.”,他是ett的硬链接。
另一问:linux下通过mkdir命令创建一个新目录/oldboy/ett/loi,ett的硬链接数是多少,为什么?
答
除了上题的答案外,loi目录下有一个隐藏目录“..”他是指向上级ett的一个硬链接,所以有3个。
3.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)
答:
使用“cut”
[root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 //调出配置文件查看IP所在行 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DNS1=192.168.85.2 USERCTL=no IPV6INIT=no HWADDR=00:0c:29:9b:32:97 IPADDR=192.168.85.199 NETMASK=255.255.255.0 GATEWAY=192.168.85.2 [root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | sed -n 10p | cut -c 8- 192.168.85.199
使用“awk”
[root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 //调出配置文件查看IP所在行 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DNS1=192.168.85.2 USERCTL=no IPV6INIT=no HWADDR=00:0c:29:9b:32:97 IPADDR=192.168.85.199 NETMASK=255.255.255.0 GATEWAY=192.168.85.2 [root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | awk -F "=" 'NR==10 {print $2}' 192.168.85.199
使用“sed”
[root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 //调出配置文件查看IP所在行 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DNS1=192.168.85.2 USERCTL=no IPV6INIT=no HWADDR=00:0c:29:9b:32:97 IPADDR=192.168.85.199 NETMASK=255.255.255.0 GATEWAY=192.168.85.2 [root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | sed -n "10s#^.*DDR=\(.*\)#\1#gp" //"\1" 为指向括号()括号中的内容引到里面来,10为第10行。 192.168.85.199
4.请给出默认情况eth0网卡配置文件的路径及客户端DNS的路径
答:
网卡路径:/etc/sysconfig/network-scripts/ifcfg-eth0
DNS路径:/etc/resolv.conf
5.查找当前目录下所有文件,并把文件中的www.oldboy.cc字符串替换成www.etiantian.org
答:
[root@moban ~]# grep -lr "www.oldboy.cc" /root/ | xargs sed -i "s#www.oldboy.cc#www.etiantian.org#g" //-l参数是文件内部查找 -r是循环参数
企业真实案例:
网站被攻击,发现所有的文件都有一句话,oldboylichaoran 。导致很多文件现阶段不不可用,现在寻求解决办法。
答:
①模拟攻击:
此命令是寻找lkjiop的普通文件,并把每个文件的第一行都插入oldboylichaoran字符
[root@moban lkjiop]# find ./ -type f | xargs sed -i '1 i oldboylichaoran' //-i为sed写入参数 1为行 i为写入 后面接写入字符
②处理命令
[root@moban lkjiop]# find ./ -type f | xargs sed -i 's#oldboylichaoran##g' //把所有文件中的oldboylichaoran都替换成空
但是会出现一个小问题,此时我们看一个其中改过的文件:
[root@moban lkjiop]# cat 234.txt asdjasjkfbsdkjgbsdkj asdjkhasbfjshdfbjhsd asfhjsdbfjhsdbf asddbsdjfbjsdhfbs asdasjkfbsdkjbfsd sfdskdjbsdgbsdkg sdfkjsdgskdghskdgfs jskdgfnsdkjgnkjg 456 123
由此可以看出虽然把需要删除的字符都删除掉了, 但是第一行却留空了,如果在程序中可能就会导致程序出错,所以可以用此命令解决:
[root@moban lkjiop]# find ./ -type f | xargs sed -i '/^$/d'
这样就不会出现问题了,或者有一步解决的办法,跟上边这个命令是一个道理:
[root@moban lkjiop]# find ./ -type f | xargs sed -i '/oldboylichaoran/d'
这样问题就解决了,而不需要分两步。不过根据现代科学唯物主义论(具体问题具体分析)来说,也有分两步的好处,如果需要替换的文字是特别多的符号的话,那么符号都要打转义符,不光自己眼花,还容易出错,索性就分两步走啦。
最后一定要亡羊补牢,寻找问题来源,补好漏洞:①网站目录权限降低 ②上传附件的入口做详细过滤
6.问题:如何赋予oldboy文件-rw-r--r-x权限属性
答:
[root@moban ~]# chmod 645 trf.txt [root@moban ~]# ll -rw-r--r-x 1 root root 19 Mar 6 01:33 trf.txt
7.执行下面命令时发现提示需要输入密码,请问提示输入的密码是那个用户的密码。
[test@oldboy ~]$ sudo su - oldboy
答:
oldboy
8.问题:请问在一个命令上加什么参数可以实现下面命令的内容在同一行输出。
命令:
echo
常用参数:
-n未不切行,同一line下输出
-e 使用转义字符(如\t \n )
[root@moban ~]# echo -e "oldboy\toldboy" oldboy oldboy [root@moban ~]# echo -e "oldboy\noldboy" oldboy oldboy
9.问题,请给出如下格式的date命令 例:12-02-26. 在给出实现按周输出 比如:周六输出为6,请分别给出命令。
答:
[root@moban ~]# date '+%y-%m-%d' //y年 m月 d日 16-04-27
查看目前是星期几
[root@moban ~]# date '+%w' //今天是2016.4.28 日星期四 4
简写法
[root@moban ~]# date +%F 2016-05-11
日期和时间
[root@moban ~]# date '+%F'\ %H:%M:%S 2016-05-11 13:15:24
日期和时间简写
[root@moban ~]# date '+%F'\ %T 2016-05-11 13:15:43
使用echo输出需要$()或者``才能执行
[root@moban ~]# echo $(date +%F) //$()放在里面命令可以执行 2016-05-11
实用举例
比如每天都要打包一个文件夹,且加上日期,那么每天都写日期会比较麻烦,可以用下面的命令:
[root@moban ~]# tar czvf oldboy-$(date +%F).tar.gz ./oldboy // $()跟``是一样,输出程序使用 ./oldboy
另一只方法,主要是为了显示$()和``两种写法
[root@moban ~]# tar czvf oldboy-`date +%F`.tar.gz ./oldboy //同上 ./oldboy
删除7天前文件
[root@moban ~]# find ./ -type f -name "*.log" -mtime+7 | xargs rm –f
[root@moban ~]# find ./ -name 2016-05-20log.gz.tar -exec rm -f {} \; //顺便复习一下exec 嘿嘿嘿
10.问题:当从root用户切到普通用户时,执行ifconfig会提示。
[oldboy@student ~]$ ifconfig
-bash: ifconfig: command not found
提示:centOS5.8会遇到,centOS6.4没有此问题
请问这是为什么?如何解决,请给出详细解决过程。
答:
因为centos 5中ifconfig默认为系统管理员的命令,在切换到普通用户后使用ifconfig提示不能使用
第一种解决办法:
普通用户可以使用全路径进行使用ifconfig
[root@moban ~]# which ifconfig
/sbin/ifconfig
第二种方法
使用PATH方法生效
[root@moban ~]# export PATH=%PATH"%HOME/bin:/sbin //export为设置或查看环境变量命令
第二种方法在重启后回恢复,所以需要第三种方法永久修改。
第三种方法:
[root@moban ~]# cat /etc/profile //放在此文件中将永久使用 把export PATH=%PATH"%HOME/bin:/sbin命令放入profile文件中 [root@moban ~]# source .bash_profile //使修改生效
11.问题:扩展问题:打印三天前的日期格式:2016.4.28
答:
[oldboy@moban ~]$ date +%y-%m-%d --date="-3 day" //今天2016.4.28 16-25-25
简写
[root@moban ~]# date +%F -d -3day 2016-05-08
扩展一下:3小时前
[root@moban ~]# date +%H -d '-3hour' //3小时前 12
创建名字为当前日期三天前的压缩包
[root@moban ~]# tar czvf oldboy$(date +%F -d '-3day').tar.gz ./oldboy ./oldboy [root@moban ~]# ll total 7772 -rw-r--r-- 1 root root 112 May 11 15:24 oldboy2016-05-08.tar.gz
12.已知/oldboy/test.txt文件内容为
oldboy
xizi
xiaochao
答:
grep方法
[root@moban ~]# grep -v ^$ test.txt //grep方法 oldboy xizi xiaochao
sed方法
[root@moban ~]# sed "/^$/d" test.txt //sed方法 oldboy xizi xiaochao
awk方法
[root@moban ~]# cat test.txt | awk /^[^$]/ //awk 方法 非空行开头的 oldboy xizi xiaochao
13.已知/oldboy/ett.txt文件内容为:
oldboy
olldboooy
test
请使用grep或egrep正则匹配的方式过滤出前两行的内容
答:
查看ett.txt文件
[root@moban ~]# cat ett.txt
oldboy
oldboooy
test
分别用egrep、grep、sed
[root@moban ~]# grep -Ev "oldboy|oldboooy" ett.txt //grep test [root@moban ~]# egrep -v "oldboy|oldboooy" ett.txt //egrep test [root@moban ~]# sed -n /old/p ett.txt //sed oldboy oldboooy
14.请描述下列路径的内容是做什么的?
/var/log/messages
/var/log/secure
/var/spool/clientmqueue
/proc/interupts
/etc/fstab
/etc/profile
答:
/var/log/messages //系统日志
/var/log/secure //显示登录信息,安全的文件
/var/spool/clientmqueue //邮件临时目录
/proc/interrupts //查看中断文件
/etc/fstab //开机自动挂载磁盘的文件
/etc/profile //全局环境变量存放文件
15.如何快速查到ifconfig的全路径(加入你不知道其路径),请给出命令
which(我最熟悉的)
[root@moban ~]# which ifconfig
/sbin/ifconfig
whereis
[root@moban ~]# whereis -b ifconfig //-b 查看二进制文件 ifconfig: /sbin/ifconfig
find(但是我感觉速度上有点慢)
[root@moban ~]# find / -name "ifconfig" //慢 /sbin/ifconfig
16.每周日上午9:30分来老男孩linux培训上课(用/oldboy.sh),请用linxu定时任务命令。
答:
参考这篇文章:
http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html
[root@moban ~]# crontab –e */5 * * * * /usr/sbin/ntpdate time.nist.gov >dev/null 2>&1 *30 *9 * * *0 /root/oldboy.sh
17.请给出查看当前那些用户在线的linux命令。
答:
常用的就是who了
[root@moban ~]# who oldboy pts/0 2016-05-18 09:17 (192.168.85.1)
再一个就是w
[root@moban ~]# w 12:52:17 up 2:15, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT oldboy pts/0 192.168.1.12 10:37 0.00s 0.11s 0.01s sshd:
使用whoami
[root@moban ~]# whoami
Root
使用id
[root@moban ~]# id –un
Root
19.请给出正确的关机和重启服务器的命令
答:
关机
Shutdown –h now
Init 0
halt
poweroff
重启
Shutdown –r now
Init 6
reboot
注销:
logout
exit
ctrl + D
20.请写下面面linux secureCRT命令行快捷快捷键命令的功能?
答:
Ctrl + a 移到命令行首
Ctrl + c 取消
Ctrl + d logout linux的注销
Ctrl + e 移到命令行尾
Ctrl + L 清屏
Ctrl + R 查找
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Ctrl + xx:在命令行首和光标之间移动
Tab 自动补全
Ctrl + shift + c 复制选中字段
Ctrl + shift + v 粘贴选中字段