linux基础命令考试解答(一)

运维技术 jikk345 2129℃ 0评论

1. 如何过滤出已知当前目录下qinglin的所有一级目录(不包含oldboy目录下面目录的子目录及隐藏目录,即只能是一级目录?)
方法1:
ls -l |grep ^d (注:^以什么什么开头,^属于正则表达式,正则表达式就是一堆符号) 显示以d为开头的目录。

[root@Saltstac-node1 boot]# ls -l
total 23543
-rw-r--r--. 1 root root   105195 Nov 22  2013 config-2.6.32-431.el6.x86_64
drwxr-xr-x. 3 root root     1024 May 12  2015 efi
drwxr-xr-x. 2 root root     1024 Aug  1  2015 grub
-rw-------. 1 root root 17136961 May 12  2015 initramfs-2.6.32-431.el6.x86_64.img
drwx------. 2 root root    12288 May 12  2015 lost+found
-rw-r--r--. 1 root root   193758 Nov 22  2013 symvers-2.6.32-431.el6.x86_64.gz
-rw-r--r--. 1 root root  2518236 Nov 22  2013 System.map-2.6.32-431.el6.x86_64
-rwxr-xr-x. 1 root root  4128368 Nov 22  2013 vmlinuz-2.6.32-431.el6.x86_64
[root@Saltstac-node1 boot]# ls -l|grep ^d
drwxr-xr-x. 3 root root     1024 May 12  2015 efi
drwxr-xr-x. 2 root root     1024 Aug  1  2015 grub
drwx------. 2 root root    12288 May 12  2015 lost+found

查找tail 1级目录且为目录

[root@Saltstac-node1 boot]# tree -L 1 -d   ==>-L 1级目录,-d为文件
.
├── efi
├── grub
└── lost+found
3 directories

awk取以目录开头的结果

[root@Saltstac-node1 boot]# ls -l|awk '/^d/'
drwxr-xr-x. 3 root root     1024 May 12  2015 efi
drwxr-xr-x. 2 root root     1024 May  4 22:15 grub
drwx------. 2 root root    12288 May 12  2015 lost+found

查找结尾方法:
ls -F 给目录结尾加”/”
ls -F |grep /$ (注:$是以什么什么为结尾,$也属于正则表达式) 显示以$为结尾的目录。

[root@Saltstac-node1 boot]# ls -F
config-2.6.32-431.el6.x86_64         lost+found/
efi/                                 symvers-2.6.32-431.el6.x86_64.gz
grub/                                System.map-2.6.32-431.el6.x86_64
initramfs-2.6.32-431.el6.x86_64.img  vmlinuz-2.6.32-431.el6.x86_64*
[root@Saltstac-node1 boot]# ls -F|grep "/$"
efi/
grub/
lost+found/

过滤多个内容:
grep -Ev “^#|^$” /etc/ssh/sshd_config 过滤多个字符串-E 排除-v 以#号开头,^$空行的意思,空格结尾的sshd_config。

[root@Saltstac-node1 boot]# grep -Ev "^#|^$" /etc/ssh/sshd_config 
GNU grep 2.6.3
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

方法2:
find ./ -type d

[root@Saltstac-node1 boot]# find ./ -type d
./
./efi
./efi/EFI
./efi/EFI/redhat
./grub
./lost+found

查找目录的另一种方法:
find lost+found/ -type d 查获lost+found目录下的目录,d代表目录
查找第一层目录下的目录:
find . -type d -maxdepth 1 ! -name “.” 查找文件属性d,利用maxdepthc levels(层数)查看第几层的深度。、
find查找非目录文件
maxdepth: 查找指定目录并且设置查找的目录深度(1代表1级,2代表2级)

[root@Saltstac-node1 boot]# find ./   -maxdepth 1 ! -type d    ==>查找第1层目录,非目录的结果
./symvers-2.6.32-431.el6.x86_64.gz
./System.map-2.6.32-431.el6.x86_64
./.vmlinuz-2.6.32-431.el6.x86_64.hmac
./vmlinuz-2.6.32-431.el6.x86_64
./config-2.6.32-431.el6.x86_64
./initramfs-2.6.32-431.el6.x86_64.img
[root@Saltstac-node1 boot]# find ./   -maxdepth 2  -type d 
./
./efi
./efi/EFI
./grub
./lost+found
[root@Saltstac-node1 boot]# find ./   -maxdepth 3  -type d 
./
./efi
./efi/EFI
./efi/EFI/redhat
./grub
./lost+found

分析过程:要完成此题,我们首先要想如何分目录和文件?
1. 根本颜色区分文件和目录。
2. ls -l结果中以d开头的就是目录。
3. 通过给目录加标识,然通过过滤标识,然后再过滤出目录。
4. 通过find直接指定的文件
其实很简单,下面的ls -l结果中,d开头的就是目录,我们需要做的就是只能把这些目录打印出来。
运维思想:当一个命令输出,含有我们需要的内容的时候,我们要想到这个命令会有对应的参数直接显示,我们需要的内容。
正式表达式
^ 的意思以..开头,例如:^qinglin表示以qinglin开头的。
$ 的意思以..结尾,例如:qinglin$表示以qinglin字符串结尾。
^$ 意思就是空行。
[^qinglin] ^意思是非,即不是qinglin字符串。
\ 意思是让一个字符脱掉马甲,还原他本来的意义。
fin命令与或非
find ./ -type d -o -type f
find ./ -type d -o -type f|xargs ls -l
find ./ -type d -0 type f
find ./ -type d
find ./ -type d -o -type f
find ./ -type d -or -type f
find ./ -type d -and type f
find ./ -type d -and -name “qinglin”
find ./ -type d
总结
1)ls -l长格式显示目录下文件的信息。
2)^的意思是以..开头,例如:^qinglin,表示匹配以qinglin字符串开头的内容。^属于正则表达式的技术。
3)还知道ls -结果中,以d开头的是目录,-开头的是普通文件。
命令总结
本题涉及命令为tree、ls、grep、find、正则表达示(以^…为开头( [^]表示取反),$为结尾,点号代表任意单个字符,要想用点的本身的含意,\.)我们学习正则表达式就是一个个吃掉它,省的一起学记不住。
学完本题,应该会tree、ls、grep、find、正规表达示(^开头,$结尾)。等的基本用法。^$空行。[]
2. 假如当前目录是如下命令的结果:
pwd 这是打印当前目录的,最菜的命令。

[root@Qinglin-Server-1 ~]# pwd
/root

现在因为需要进入到/tmp目录下进行操作,执行的命令如下:

[root@Qinglin-Server-1 ~]# cd /tmp/
[root@Qinglin-Server-1 tmp]# pwd
/tmp

操作完毕后,希望快速返回上一次进入的目录,即/qinglin目录,该如何操作?(不能使用cd /qinglin命令)
办法1:
cd – 返回之前目录
办法2:
history查找之前的目录id 使用!id也可以实现返回上级目录或操作。
3. 一个目录中有很多文件(ls 查看时好多屏),想最快速查看到最近更新的文件,如何看?
查看最后一次建立的文件
-t 按时间排序 -r 代表最近的放在最下面

[root@Qinglin-Server-1 tmp]# ls
ssh-FXLfLb1314  yum.log
[root@Qinglin-Server-1 tmp]# touch date
[root@Qinglin-Server-1 tmp]# ls -lrt
total 4
-rw-------. 1 root root    0 May 12  2015 yum.log
drwx------. 2 root root 4096 Jun 25  2015 ssh-FXLfLb1314
-rw-r--r--. 1 root root    0 May  4 22:36 date

方法1:
ls -lrt /etc 执行这个命令后最新的文件会在最下面。 -r是反转排序,-t是按照修改时间 排序,-l使用长列表显示。
以上是长格式按照修改时间倒序排列文件和目录,这样最近创建或修改的文件或目录在窗口最下面了。
ll -rt /etc 注:ll是ls -l –color=tty的别名,通过alias命令可以查到。
–color=auto 给匹配到的字符串加颜色(注:不要整行)
拓展:
将别名放到/etc/profile文件中
在/etc/profile最后一行加入 alias grep=’grep –color=auto’
然后source一下即可,下次grep会标红

[root@Qinglin-Server-1 tmp]# vim /etc/profile 
alias grep='grep --color=auto'
[root@Qinglin-Server-1 tmp]# source /etc/profile
[root@Qinglin-Server-1 tmp]# netstat -lntup|grep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1162/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1162/sshd  

grep 3306 –color=auto /etc/services 过滤出来的3306显示为红色。
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
4. 在配置 apache时,执行了。./configure –prefix=/application/apache2.2.17 来编译apache,在make install完成后,希望用户访问apache路径更简单,需要给/application/apache2.2.17目录做一个软链接/application/apache,使内容开发或管理人员通过/application/apache就可以访问到apache的安装目录application/apache2.2.17下的内容,请你给出实现命令。(提示:apache为一个web服务)
ln -s /application/apache2.2.17/ /root/ 创建软链接 源地址 目的地址
5. 已知apache服务的访问日志按天记录在服务本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请如何解决?请给出解决办法或配置或处理命令。
(提示: 可以从apache服务配置上着手,也可以从生成出来的日志上手。)
解答:apache日志检测数据:

find ./ -type f -name "*.log" -mtime +7|xargs rm -f  (查找所有 -type f类型为文件 -name "*.log"所有log的文件 -mtime +7 7天前(不包含第7天的) |xargs 管道 删除文件rm -f)

6. 调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?

tail -f /var/log/messages 查看log结尾

小结:
经常查看系统日志/var/log/messages 生产环境要特别重视这个文件。
个人电脑开发环境=>办公内容的测试环境=>IDC机房测试环境=>线上生产环境。
7. 打印配置文件nginx.conf内容的行号及内容,该如何做?
nginx和apache是不同的网页服务软件,是同类,就像男人和女人都是人类一样。

1) nl nginx.conf
2)cat -n nginx.conf 这个最常用
3)less -N nginx.conf
4)vi 文件 然后执行: set nu, ;set nonu为取消行号
5)grep -n . /etc/services (注:此处的点号,表示任意个字符,-n 是给过滤出的每一行加行号。)

8. 装完系统后,希望让网络文件共享服务NFS,仅在3级别上开机自启动,如何做?
解答:什么是开机自启动,杀毒软件大家都知道吧?例如: 360等每次开机都会自动起来对吧,我们需要360这样,在linux下软件服务随系统启动而启动的配置。
方法1:
chkconfig nfs off 现关掉所有nfs服务
chkconfig –add 加入程序进行到chkconfig里管理
chkconfig nfs –level 3 nfs on 只在级别3上开启nfs服务
rc3.d就是指int 3模式下的开机运行的脚本
K开头为不启动,数字是启动的顺序
S开头为启动
每个文件以软链接形式存在

[root@Qinglin-BJ2 ~]# cd /etc/rc3.d/
[root@Qinglin-BJ2 rc3.d]# ll
total 0
lrwxrwxrwx. 1 root root 16 May 12  2015 K01smartd -> ../init.d/smartd
lrwxrwxrwx. 1 root root 21 Mar  5 19:44 K04salt-minion -> ../init.d/salt-minion
lrwxrwxrwx. 1 root root 13 Mar  5 19:44 K05atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 16 May 12  2015 K10psacct -> ../init.d/psacct
lrwxrwxrwx. 1 root root 17 May 12  2015 S10network -> ../init.d/network
lrwxrwxrwx. 1 root root 17 May 12  2015 S12rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 14 May 12  2015 S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 16 Jul 12  2015 S64mysqld -> ../init.d/mysqld
lrwxrwxrwx. 1 root root 15 May 12  2015 S90crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 11 May 12  2015 S99local -> ../rc.local

方法2:
chkconfig –level 245 nfs off 关闭245,只保留级别3运行nfs服务
9. Linux系统运行级别一般为0-6,请分别写出每个级别的含义。
0 关机模式
1 单用户模式(用于救援模式)
2 无NFS的多用户模式
3 文件模式
4 无用
5 图行化模式
6 重启模式 init 6
显示运行级别 runlevel
切换用户级别 init ?

简单描述
1. 开机BIOS自检
2. MBR引导
3. Grub引导菜单
4. 加载内核kernel
5. 启动init进行
6. 读取inittab文件,执行rc.sysinit、rc等脚本
7. 启动mingtty进程,进入系统登录界面

10. Linux 系统中查看中文乱码,请问如何解决乱码问题
什么是字符集?
简单的来说就是一套文字符号及其编码。常用的字符集有:
GBK 字长 双字节 不是国际标准,支持的系统不少
UTF-8 非定长 1-4字节 广泛支持,Mysql也使用UTF-8
当然字符集还有很多,讲到数据库时会详细讲这部分内容。
解答:

[root@Qinglin-A log]# echo $LANG
en_US.UTF-8

方法1:
此方法执行后,仅在当前窗口生效。(一定注意大小写)

[root@Qinglin-BJ ~]# export LANG="zh_CN.GB18030" 

方法2:
写入配置文件,永久生效。

[root@Qinglin-BJ ~]# echo 'LANG="zh_CN.GB18030"' >/etc/sysconfig/i18n 

如需让配置立即生效,需要执行此步

[root@Qinglin-BJ ~]# source /etc/sysconfig/il8n
[root@Qinglin-BJ ~]# echo $LANG

11. 如何优化Linux系统
01)不用root用户,添加普通用户,通过sudo授权管理。
02)要改默认的远程链接SSH服务端口及禁止root用户远程连接。
03)定时自动更新服务时间。
04)配置yum更新源,从国内更新源下载安装rpm包。
05)关闭selinux及iptables(iptables 工作场景如果有wan ip,一般要打开,高并发除外)。
06)调整文件描述符的数量,进程及文件的打开都会消耗文件描述符。
07)定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。(centos 6.4和6.5默认没有sendmail.因此不用配)。
08)精简开机自启动服务(crond,sshd,network,rsyslog(c5.8 syslog))
09)Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效
10)更改字符集,支持中文,但建议还是用英文字符集,防止乱码问题,不要使用中文。
11)锁定关键系统文件 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
12)清空/etc/issue,去除系统及内容版本登录前的屏幕显示。
13)清除无用的系统帐户或组(非必须)
12. /etc/目录为linux系统的默认的配置文件及服务启动命令的目录
a. 请将tar 打包/etc/ 整个目录 (打包及压缩)
b. 请将tar 打包/etc/ 整个目录 (打包及压缩,但要排除/etc/services文件)
c. 请把a点命令的压缩包,解压/tmp指定目录下(最好只用tar命令实现)
d. 请把abc命令压缩为abc.tar.bz,并解压abc.tar.bz
A、压缩tar.gz:
(提示:工作中习惯是进行到打包的目录在对当前目录打包,即本题实际上最好按照如下方法来处理。)

[root@Qinglin-BJ2 home]# tar -zcvf qinglin.tar.gz qinglin
qinglin/
qinglin/data.log
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout

A、检查

[root@Qinglin-BJ2 home]# tar tf qinglin.tar.gz    
qinglin/
qinglin/data.log
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout

B、解答:
(压缩abc.tar.gz 并排除qinglin下的data.log目录,aqinglin/是目标目录,排除几个写几个exclude)
如果排除很多,可以加-X 读取文件中的文件名排除=exclude-from 文件列表

[root@Qinglin-BJ2 home]# tar -zcvf a.tar.gz --exclude=qinglin/data.log qinglin/ 
qinglin/
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout

B、检查

[root@Qinglin-BJ2 home]# tar -tf a.tar.gz 
qinglin/
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout  

练习
(压缩abc.tar.gz 并排除abc上下下的231目录,abc目录下的子文件,不包含abc这个父目录)
C、解答:
(解压qinglin.tar.gz到当前目录下)

[root@Qinglin-BJ2 qinglin]# tar -zxvf qinglin.tar.gz 
qinglin/
qinglin/data.log
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout

(解压qinglin.tar.gz到home/abc目录下)

[root@Qinglin-BJ2 qinglin]# tar -zxvf qinglin.tar.gz -C /home/abc
qinglin/
qinglin/data.log
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/.bash_logout

D、解答:
(压缩qinglin到qinglin.tar.bz)

[root@Qinglin-BJ2 home]# tar -jcvf qinglin.tar.gz qinglin 
qinglin/
qinglin/ccd
qinglin/bcd
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/asd
qinglin/.bash_logout

(解压qinglin.tar.bz到当前目录,并用tf检查一下)

[root@Qinglin-BJ2 qinglin]# tar -jxvf qinglin.tar.gz 
qinglin/
qinglin/ccd
qinglin/bcd
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/asd
qinglin/.bash_logout
[root@Qinglin-BJ2 qinglin]# tar -tf qinglin.tar.gz     
qinglin/
qinglin/ccd
qinglin/bcd
qinglin/.bash_history
qinglin/.bashrc
qinglin/.bash_profile
qinglin/asd
qinglin/.bash_logout

E、练习:
查找/home/qinglin下的文件,当压缩

[root@Qinglin-BJ2 qinglin]# find /home/qinglin -type f|xargs tar -zcvf qinglin.tar.gz 
[root@Qinglin-BJ2 qinglin]# tar -zcvf a.tar.gz `find /home/qinglin -type f` 

小节:
tar 打包解包命令
tar -zcvf abc 目标文件
tar -xvf 包名
tar tf 目标压缩文件 用来查看包的内容
扩展名.tar是打包.gz是压缩
z 压缩
c 创建文件
v 显示输出
f 处理文件
x 解压文件
j 打包解压.bz文件使用
C 指定解压的目录
13. 已知如下命令及结果

[root@Qinglin-BJ2 qinglin]# echo "I am guanqinglin shuaige">qinglin.txt
[root@Qinglin-BJ2 qinglin]# cat qinglin.txt 
I am guanqinglin shuaige

现在需要从文件中过滤出“qinglin”和“shuaige”字符串,请给出命令。
方法1:
(awk打印$3代表第三列“ ”是结果中间有个空格$4代表四列,过滤的文件为qinglin.txt)

[root@Qinglin-BJ2 qinglin]# awk '{print $3" "$4}' qinglin.txt  
guanqinglin shuaige

方法2:
(cut -d “ ”是以空格为分割,并-f取以空格分隔的第3和第4位字段)

[root@Qinglin-BJ2 qinglin]# cut -d " " -f3,4 qinglin.txt 
guanqinglin shuaige

如果需要从文件中过滤出“qinglin,7796755”字符串,请给出命令。
方法1:
(cut -c是按字母位数取,6-12是取第6到12位和21-位以后的字节)

[root@Qinglin-BJ2 qinglin]# cat qinglin.txt 
I am qinglin,myqq is 7796755
[root@Qinglin-BJ2 qinglin]# cut -c 6-12,21- qinglin.txt  
qinglin 7796755

方法2:

[root@Qinglin-BJ home]# cat a.txt 
qinglin,myqq 7796755
[root@Qinglin-BJ home]# cut -d "," -f2,3  a.txt|sed 's#,# #g' 
myqq 7796755

方法2:awk多分隔符
awk[, ]多分割符,第一个是,第二个是空格,就是以,号和空格分割

[root@Qinglin-BJ home]# awk -F "[, ]" '{print $1" "$2}' a.txt 
qinglin myqq

小节:
cut 简单按列切割的命令
d 指定分隔符
f 数字选列
c 按字符 按例切割
14. 如何查看/etc/services 文件有多少行?
方法1:

[root@Qinglin-BJ home]# wc -l /etc/services 
10774 /etc/services

方法2:

[root@Qinglin-BJ home]# cat -n /etc/services|tail -1 
 10774  iqobject        48619/udp               # iqobject

15. 过滤出/etc/services 文件包含3306或1521两数字的行的内容。
grep -e 是过滤多个条件,-i是不区分大小写,-v是排除。
egrep等价开grep -E

[root@Qinglin-BJ home]#  egrep "3306|1521" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager
[root@Qinglin-BJ home]#  grep -E "3306|1521" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager

01300000330328123519647361170

转载请注明:清麟博客 » linux基础命令考试解答(一)

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址