一转眼都快两周没更新了,最近实在太忙了,这两周的时间断断续续的把L010学完了,短短的15节课,确是把前10节的课程全部的运用一遍,从笔记到整理,再到重新理解,最后发布到微博,也确实提升了一些综合性能,从一个问题转而可以想到思路了,这个是我非常开心的,好了,那么就开始下面的总结。
L010本堂课并非讲述新内容,而是从10多道题入手来熟悉之前的命令,那么我就以题的形式来写本次的总结。
第一题:
100M的空间创建1K的文件,可以创建多少个?如果创建1M的文件可以创建多少个?
答:假设硬盘为4k对齐,那么一个1k的文件就占用1个block和一个inode的为4.25k,就是100*1024/4.25=24094个。
那么一个1M的文件就会占用3个block和一个inode为12.25k,就是100*1024/12.25=8359个
换句话说,系统中的block的数量比inode多。那么就可以判断出,1k的文件数就等于inode的数量
相关的命令:
df -i 查询inode数量
df -h硬盘余量
答:
查询某块硬盘的inode和block的尺寸和数量(我们以第一块硬盘的第二个分区为例)
dumpe2fs /dev/sda2 | grep "Block count" //block的数量 dumpe2fs /dev/sda2 | grep "Block size" //block的尺寸 dumpe2fs /dev/sda2 | grep "Inode count" //inode的数量 dumpe2fs /dev/sda2 | grep "Inode size" //indoe的尺寸
第二题:
如何过滤出已知当前目录下的ceshi中的所有一级目录(提示:不包含ceshi目录下面目录的子目录及隐藏目录,即只能是一级目录)?
答:
首先需要创建环境
[root@moban kh]# for n in `seq 10`;do mkdir -p "$n";done [root@moban kh]# ls 1 10 2 3 4 5 6 7 8 9 [root@moban kh]# mkdir -p 11/12/13 [root@moban kh]# mkdir -p 14/15/16 [root@moban kh]# pwd /root/kh [root@moban kh]# tree /root/kh/ /root/kh/ ├── 1 ├── 10 ├── 11 │ └── 12 │ └── 13 ├── 14 │ └── 15 │ └── 16 ├── 2 ├── 3 ├── 4 ├── 5 ├── 6 ├── 7 ├── 8 └── 9 [root@moban kh]# for n in `seq 5`;do touch "$n.txt";done
开始做题:
用find:
[root@moban kh]# find ./ -type d | awk -F "/" '{print $2}' 4 6 14 14 14 5 10 3 1 8 2 9 11 11 11 7
或
[root@moban kh]# find ./ -maxdepth 1 -type d //find -maxdepth 为查找的目录深度参数 ./ ./4 ./6 ./14 ./5 ./10 ./3 ./1 ./8 ./2 ./9 ./11 ./7
用ll:
[root@moban kh]# ls -l | grep ^d | awk '{print $9}' 1 10 11 14 2 3 4 5 6 7 8 9
用tree:
用tree: [root@moban kh]# tree -Ld 1 //L是深度,d为目录的属性 . ├── 1 ├── 10 ├── 11 ├── 14 ├── 2 ├── 3 ├── 4 ├── 5 ├── 6 ├── 7 ├── 8 └── 9
用sed:
[root@moban kh]# ll | sed -n /^d/p | awk '{print $9}' 1 10 11 14 2 3 4 5 6 7 8 9
第三题:
去除ssd配置文件中的注释部分
答:
[root@moban kh]# grep -v ^# /etc/ssh/sshd_config //方法1 [root@moban kh]# cat /etc/ssh/sshd_config | grep -v ^# //方法2
第四题:
去除ssd配置文件中的注释部分以及空行部分
[root@moban ~]# grep -Ev "^#|^$" /etc/ssh/sshd_config //方法1 [root@moban ~]# egrep -v "^#|^$" /etc/ssh/sshd_config //方法2
第五题:
一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,该如何查看?
答:
[root@moban kh]# ls -lrt //r为反、倒 t为time,时间
第六题:
让egrep搜索的内容填加颜色
答:
[root@moban kh]# echo "alias egrep='egrep --color=auto'" >>/etc/profile [root@moban kh]# source /etc/profile
第七题:
在配置apache时执行了./configure --prefix=/application/apache2.2.17 来编译apache,在make install 完成后,希望
用户的访问路径更简单,需要给/application/apache2.2.17 目录做一个软连接/application/apache,使得内部开发或者
管理人员通过/application/apache 就可以访问到apache的安装目录/application/apache2.2.17下的内容,请你给出实现
的命令。(提示:apache为一个httpd web 服务)
ln 连接(link)常与-s搭配 做软连接使用
ln -s [源文件或目录] [目标文件或目录]
参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
答:
第一步创建做题环境
[root@moban ~]# mkdir -p /root/ti/application/apache2.2.17/
这样,目录就已搭建好
下面:
[root@moban ti]# ln -s /root/ti/application/apache2.2.17/ /root/ti/application/apache //前面是实际路径,后面的路径为软连接路径
查看一下软件链接:
[root@moban ti]# ll /root/ti/application/ total 4 lrwxrwxrwx 1 root root 34 Mar 7 05:46 apache -> /root/ti/application/apache2.2.17/ drwxr-xr-x 2 root root 4096 Mar 7 05:44 apache2.2.17
因为是第一次做软连接,所以在原连接目录下创建一文件,去软连接里看看会不会看到,哈哈
[root@moban ~]# cd /root/ti/application/apache [root@moban apache]# ls [root@moban apache]# pwd /root/ti/application/apache [root@moban apache]# touch /root/ti/application/apache2.2.17/123.txt [root@moban apache]# ls 123.txt
成功,然后还有一点,我试了一下,软连接不一定跟源路径走,比如源连接:/root/ti/application/apache2.2.17/,那么我的连接路径可以也设置为/root/apache
第八题:
已知apache服务的访问日志按天记录在服务器本地目录/app/logs下。由于磁盘空间紧张,现在要求只能保留最近3天访问日志
请问如何解决?请给出解决办法或者配置或处理命令。(一种是从apache服务配置上着手,也可以从生成出来的日志上着手)
Date 时间
参数“
-s 设置时间;根据字符串来设置日期与时间。字符串前后必须加上双引号。
>date -s //设置当前时间,只有root权限才能设置,其他只能查看。
>date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
>date -s 01:01:01 //设置具体时间,不会对日期做更改
>date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
>date -s “01:01:01 20080523″ //这样可以设置全部时间
>date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
>date -s “20080523 01:01:01″ //这样可以设置全部时间
答:
这道题其实难做的是环境(对于这个阶段的我来说)
先做环境把
[root@moban log]# for n in `seq 6`;do date -s "03/$n/16";touch access_www_`(date +%F)`.log;done //一直分不清符号的使用,如``和‘’和"",不过通过这个程序知道了用这个``的时候要是中间是需要执行的程序, 关于%F,为日期的意思:同%Y-%m-%d
然后做题
[root@moban log]# find ./ -type f -mtime +3 -exec rm -f {} ; //注意“”前要有空格
或
find ./ -type f -name "*.log" -mtime +3 | xargs rm -f
也可以放到循环列表中
[root@moban oldboy]# echo ‘* 3 * * * find ./ -type f -name "*.log" -mtime +3 -exec rm -f {} ; >> /dev/null 2>&1’ >> /var/spool/cron/root // -exec rm -f {} ; 可以改成-delete
第九题:
调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
tail //用于显示指定文件末尾内容,常用查看日志文件。 常用-f参数可以方便的查阅正在改变的日志文件
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
答:
tail -f /var/log/messages
第十题:
装完系统后,希望网络文件共享服务sshd,仅在3级别上开机自启动,该如何去做。
chkconfig --list
chkconfig --level
chkconfig [应用名] on/off //各模式下的全部开启或者关闭
答:
[root@moban log]# chkconfig --list sshd //查看在各level下的sshd开启状态 sshd 0:off 1:off 2:on 3:on 4:off 5:off 6:off [root@moban log]# chkconfig sshd off //关闭所有level下的sshd [root@moban log]# chkconfig --list sshd sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@moban log]# chkconfig --level 3 sshd on //sshd开启level 3模式 [root@moban log]# chkconfig --list sshd sshd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
第十一题:
linux系统运行级别一般为0-6,请分别写出每个级别的含义。
答:
0 - halt //关机模式
1 - Single user mode //单一用户模式
2 - Mutiuser,without NFS //无NFS用户的多用户模式
3 - Full multiuser mode //命令行模式
4 - unused //空
5 - X11 //图形化
6 - reboot //重启机器 init 6
第十二题:
/etc/目录为linux系统的默认的配置文件及服务启动命令的目录
a.请用tar打包/etc整个目录(打包及压缩)
b.请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)
c.请把a点命令的压缩包,解压到/tmp指定目录下(最好只用tar命令实现)
tar 压缩命令
参数:
tar 参数 [压缩包的路径+文件名] [要压缩文件的名称和地点]
参数:
-c 创建
-z gz格式的压缩文件
-j bz格式的压缩文件
-v 显示过程中的文件名
-f 使用文档名,在f过后要立即加文档或路径
-x 解压
-t 查看文档内容
-X 从文档中读取排除压缩包外的目录名
-C 指定解压到某地址的参数,后面接路径
--eclude FILE 排除某个文件或者目录
答:
a.[root@moban /]# tar -czvf etc.tar.gz etc/ b.[root@moban /]# tar --exclude etc/services -czvf etc1.tar.gz etc/ c.[root@moban etc]# tar -xzvf etc.tar.gz -C /tmp
-X和-C参数运用:
[root@moban tmp]# echo var > tar.txt [root@moban tmp]# echo tmp >> tar.txt [root@moban tmp]# cat tar.txt [root@moban tmp]# tar -X tar.txt -czvf etc2.tar.gz etc/ [root@moban tmp]# tar -xzvf etc2.tar.gz -C /tmp/ [root@moban tmp]# find ./ -type d -name tmp -o -name var
第十三题:
已知下面的命令及结果:
[root@moban ~]# echo "I am oldboy,myqq is 49000448" >> oldboy.txt
[root@moban ~]# cat oldboy.txt
I am oldboy,myqq is 49000448
a.现在需要从文件中过滤出“oldboy”和“49000448”字符串,请给出命令
b.如果需要从文件中过滤出“oldboy,49000448”字符串,请再给出命令
cut //剪切数据
参数
-b 字节
-c 字符
-d 设定分隔符
-f 分区域显示,和-d一起使用,-d设定分隔符后加-f显示区域
参数使用(参数通用,不仅仅只-b):
-b -3 //-3为前3个字符,包括第三个
-b 3- //为第三个以后的字符,包括第三个
-b 3 //第三个字符
-b 3-5//第三到第五个字符,包括3和5字符
-b 3-5,6-7 //多个用,连接,从小到大排列,就算6-7,3-5也是从3-5开始
答:
a.[root@moban tmp]# cut -b 6-11,20-28 cut.txt oldboy 49000448 b.[root@moban tmp]# cut -b 6-12,21-28 cut.txt oldboy,49000448
另:
已知下面的命令及结果:
[root@moban ~]# echo "I am oldboy myqq is 49000448" >> oldboy.txt
[root@moban ~]# cat oldboy.txt
I am oldboy,myqq is 49000448
a.现在需要从文件中过滤出“oldboy”和“49000448”字符串,请给出命令
b.如果需要从文件中过滤出“oldboy,49000448”字符串,请再给出命令
tr "," " " //把,替换成空格
答:
cut方法
a.[root@moban tmp]# cut -d " " -f 3,6 cut.txt oldboy 49000448 b.[root@moban tmp]# cut -d " " -f 3,6 cut.txt|tr " " "," //把输出的结果中空格字符换成逗号 oldboy,49000448
awk方法
a.[root@moban tmp]# awk -F " " '{printf $3 $6}' cut.txt oldboy49000448 b.[root@moban tmp]# awk -F " " '{printf $3","$6}' cut.txt oldboy,49000448
sed方法(算是吧,为了巩固sed s###g这个替换法)
a.[root@moban tmp]# sed s#","#" "#g cut.txt | awk -F " " '{printf $3 $6}' //用sed sg把逗号换成空格 oldboy49000448
第十四题:
如何查看/etc/services文件的有多少行?
cat //查看 命令
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
wc 统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
参数:
-c 统计字节数。
-l 统计行数。----------常用
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
答:
1)vi /etc/services :set nu 2)less -N /etc/ssh/sshd_config 3)cat -n /etc/services 4)nl /etc/services 5)[root@moban tmp]# grep -n " " ./etc/services
第十五题:
过滤出/etc/services 文件包含3306或1521两数字的行的内容
grep 过滤
参数
-n 显示行号
答:
[root@moban tmp]# grep -En "3306|1521" /etc/services 416:mysql 3306/tcp # MySQL 417:mysql 3306/udp # MySQL 2653:ncube-lm 1521/tcp # nCube License Manager 2654:ncube-lm 1521/udp # nCube License Manager
或
[root@moban tmp]# egrep -n "3306|1521" /etc/services 416:mysql 3306/tcp # MySQL 417:mysql 3306/udp # MySQL 2653:ncube-lm 1521/tcp # nCube License Manager 2654:ncube-lm 1521/udp # nCube License Manager
其他一些设计到的内容
正则表达式:
^的意思是以...开头,例如^oldboy表示以oldboy开头的
与`^`意思相反的是[^*],非以*为开头的
$的意思是以....结尾,例如oldboy$表示以oldboy字符串为结尾。
^$意思是空行
让一个字符脱掉马甲,还原他本来的意义。([root@moban ceshi]# sed -n '///p' 1.txt //过滤斜线)
find参数 -maxdepth 1 //数字1表示1层 查找的目录深度参数
小结:
find
!的作用取反 -a为and表示并且(查找多个默认为and) -o为or两遍有一个成立即可。
[root@moban ceshi]# find ./ -type f -o -name 1.txt [root@moban ceshi]# find ./ -type f -a -name 1.txt