Linux命令面试问答

问1:如何查看当前的Linux服务器运行级别?

答:who -rrunlevel 命令可以用来查看当前的Linux服务器的运行级别。Linux的运行级别有7种:

0 所有进程将被终止,机器将有序的停止,关机时系统处于这个运行级别   
1 单用户模式。用于系统维护,只有少数进程运行,同时所有服务也不启动   
2 多用户模式。和运行级别3一样,只是网络文件系统(NFS)服务没被启动   
3 多用户模式。允许多用户登录系统,是系统默认的启动级别 
4 留给用户自定义的运行级别  
5 多用户模式,并且在系统启动后运行X-Window,给出一个图形化的登录窗口  
6 所有进程被终止,系统重新启动 

如果想要切换运行级别,可以利用init命令,输入 init n 就可以切换到运行级别n(0-6),如果系统支持图形界面(init5 级别需要安装X-WINDOWS),可以输入startx 直接进入init5 图形模式。

刚刚输入init级别号,只是临时更改。如果需要修改系统默认的运行级别,可以用VI编辑 /etc/inittab 文件设置。如下图 default 后面的数字就是默认的运行级别,改好之后,重启Linux系统之后生效。

/etc/inittab文件

问2:如何查看Linux的默认网关?

答:用route -nnetstat -nr命令,我们可以查看默认网关,除了默认网关信息,这两个命令还可以显示当前的路由表。

问3:cpio 命令是什么?

答:cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。

详细请查看cpio命令详解

问4:patch命令是什么,如何使用?

答:顾名思义,patch命令用来用来将补丁写进文本文件里面。patch命令通常是接受diff的输出,并把文件的旧版本转换为新版本。

举个例子:

1
# diff -Naur old_file new _file > diff_file

旧文件和新文件要么都是单个的文件要么就是包含文件的目录,-r参数支持目录树递归。一旦diff文件创建好,我们就可以在旧文件上打上补丁,把他变成新文件:

1
# patch < diff_file

问题5:如何识别Linux系统中指定文件(/etc/fstab)的关联包(即查询一个已经安装的文件属于哪个软件包)?

答:命令rmp -qf /etc/fstab可以列出提供”/etc/fstab”这个文件的包。

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”

rpm 执行安装包,二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

常用命令组合:

1
2
3
4
5
6
7
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
e:删除包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
rpm -q samba //查询程序是否安装

rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装目录

rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm    //用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本

rpm -qa | grep httpd      #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd         #[搜索rpm包]--list所有文件安装目录

rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--file
rpm -qpR file.rpm       #[查看包]依赖关系
rpm2cpio file.rpm |cpio -div #[抽出文件]

rpm -ivh file.rpm  #[安装新的rpm]--install--verbose--hash
rpm -ivh

rpm -Uvh file.rpm #[升级一个rpm]--upgrade
rpm -e file.rpm #[删除一个rpm包]--erase

常用参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Install/Upgrade/Erase options:

-i, --install install package(s)
-v, --verbose provide more detailed output
-h, --hash print hash marks as package installs (good with -v)
-e, --erase erase (uninstall) package
-U, --upgrade=<packagefile>+ upgrade package(s)
--replacepkge 无论软件包是否已被安装,都强行安装软件包

--test 安装测试,并不实际安装
--nodeps 忽略软件包的依赖关系强行安装
--force 忽略软件包及文件的冲突

Query options (with -q or --query):
-a, --all query/verify all packages
-p, --package query/verify a package file
-l, --list list files in package
-d, --docfiles list all documentation files
-f, --file query/verify package(s) owning file

问题6:Linux系统中的/proc文件系统有什么用?

答:/proc文件系统是一个基于内存的文件系统,维护着有关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、
I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,他们指向的是内存里的信息。
/proc文件系统是由系统自动维护的。

问题7: 如何在/usr目录下找出大小超过10MB的文件?

答:find /usr -size +10M

问题8:如何在/home目录下找出120天之前被修改过的文件?

答:find /home -mtime +120

问题9:如何在/var目录下找出90天之内未被访问过的文件?

答:find /var \! -atime -90

问题10:在整个目录树下查找文件“core”,如果发现则无需提示,直接删除他们?

答:find / -name core -exec rm {} \; , -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。

问题11:strings命令有什么作用?

答:strings命令用来提取和显示非文本文件中的文本字符串。

问题12:tee过滤器有什么作用?

答:tee过滤器用来想多个目标发送输出的内容。如果用于管道的话,他可以将输出复制一份到文件,兵复制另外一份到屏幕上(或一些其他的程序)。

详细请查看tee命令详解

问题13:export PS1="$LOGNAME@hostname:\:$PWD:" 这条指令是在做什么?

答:这条export命令会更改登录提示符来显示用户名、本机名、和当前的工作目录。

问题14:ll | awk ‘{print $3, “owns”, $9}’这条命令是在做什么?

答:会显示这些文件的名称和他们的拥有者。

详细请看awk命令详解

问题15:Linux中at命令有什么用?

答:at命令用来安排一个程序在未来的做一次性执行。所以有提交的任务都会被放在/var/spool/at目录下,并且到了执行时间的时候通过atd守护进程来执行。

详细请看at命令详解