合 Linux常见面试题
网络通讯命令
ifconfig 命令
- ifconfig 用于查看和配置 Linux 系统的网络接口。
- 查看所有网络接口及其状态:
ifconfig -a
。 - 使用 up 和 down 命令启动或停止某个接口:
ifconfig eth0 up
和ifconfig eth0 down
。
iptables 命令
iptables ,是一个配置 Linux 内核防火墙的命令行工具。功能非常强大,对于我们开发来说,主要掌握如何开放端口即可。例如:
把来源 IP 为 192.168.1.101 访问本机 80 端口的包直接拒绝:
iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT
。开启 80 端口,因为web对外都是这个端口
12iptables -A INPUT -p tcp --dport 80 -j ACCEP1另外,要注意使用
iptables save
命令,进行保存。否则,服务器重启后,配置的规则将丢失。
netstat 命令
Linux netstat命令用于显示网络状态。
利用netstat指令可让你得知整个Linux系统的网络情况。
语法
1 2 | netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip] 1 |
参数说明:
- -a或–all 显示所有连线中的Socket。
- -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
- -c或–continuous 持续列出网络状态。
- -C或–cache 显示路由器配置的快取信息。
- -e或–extend 显示网络其他相关信息。
- -F或–fib 显示FIB。
- -g或–groups 显示多重广播功能群组组员名单。
- -h或–help 在线帮助。
- -i或–interfaces 显示网络界面信息表单。
- -l或–listening 显示监控中的服务器的Socket。
- -M或–masquerade 显示伪装的网络连线。
- -n或–numeric 直接使用IP地址,而不通过域名服务器。
- -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
- -o或–timers 显示计时器。
- -p或–programs 显示正在使用Socket的程序识别码和程序名称。
- -r或–route 显示Routing Table。
- -s或–statistice 显示网络工作信息统计表。
- -t或–tcp 显示TCP传输协议的连线状况。
- -u或–udp 显示UDP传输协议的连线状况。
- -v或–verbose 显示指令执行过程。
- -V或–version 显示版本信息。
- -w或–raw 显示RAW传输协议的连线状况。
- -x或–unix 此参数的效果和指定"-A unix"参数相同。
- –ip或–inet 此参数的效果和指定"-A inet"参数相同。
实例
如何查看系统都开启了哪些端口?
1 2 3 4 5 6 7 8 9 10 11 | [root@centos6 ~ 13:20 #55]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1035/sshd tcp 0 0 :::22 :::* LISTEN 1035/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 931/dhclient Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 6825 1/init @/com/ubuntu/upstart unix 2 [ ACC ] STREAM LISTENING 8429 1003/dbus-daemon /var/run/dbus/system_bus_socket 12345678910 |
如何查看网络连接状况?
1 2 3 4 5 6 7 8 | [root@centos6 ~ 13:22 #58]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 192.168.147.130:22 192.168.147.1:23893 ESTABLISHED tcp 0 0 :::22 :::* LISTEN udp 0 0 0.0.0.0:68 0.0.0.0:* 1234567 |
如何统计系统当前进程连接数?
- 输入命令
netstat -an | grep ESTABLISHED | wc -l
。 - 输出结果
177
。一共有 177 连接数。
用 netstat 命令配合其他命令,按照源 IP 统计所有到 80 端口的 ESTABLISHED 状态链接的个数?
严格来说,这个题目考验的是对 awk 的使用。
首先,使用 netstat -an|grep ESTABLISHED
命令。结果如下:
1 2 3 4 5 6 7 8 | tcp 0 0 120.27.146.122:80 113.65.18.33:62721 ESTABLISHED tcp 0 0 120.27.146.122:80 27.43.83.115:47148 ESTABLISHED tcp 0 0 120.27.146.122:58838 106.39.162.96:443 ESTABLISHED tcp 0 0 120.27.146.122:52304 203.208.40.121:443 ESTABLISHED tcp 0 0 120.27.146.122:33194 203.208.40.122:443 ESTABLISHED tcp 0 0 120.27.146.122:53758 101.37.183.144:443 ESTABLISHED tcp 0 0 120.27.146.122:27017 23.105.193.30:50556 ESTABLISHED 1234567 |
ping 命令
Linux ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
指定接收包的次数
1 2 | ping -c 2 www.baidu.com 1 |
telnet 命令
Linux telnet命令用于远端登入。
执行telnet指令开启终端机阶段作业,并登入远端主机。
语法
1 2 | telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>] 1 |
参数说明:
- -8 允许使用8位字符资料,包括输入与输出。
- -a 尝试自动登入远端系统。
- -b<主机别名> 使用别名指定远端主机名称。
- -c 不读取用户专属目录里的.telnetrc文件。
- -d 启动排错模式。
- -e<脱离字符> 设置脱离字符。
- -E 滤除脱离字符。
- -f 此参数的效果和指定"-F"参数相同。
- -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
- -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
- -K 不自动登入远端主机。
- -l<用户名称> 指定要登入远端主机的用户名称。
- -L 允许输出8位字符资料。
- -n<记录文件> 指定文件记录相关信息。
- -r 使用类似rlogin指令的用户界面。
- -S<服务类型> 设置telnet连线所需的IP TOS信息。
- -x 假设主机有支持数据加密的功能,就使用它。
- -X<认证形态> 关闭指定的认证形态。
实例
登录远程主机
1 2 3 | # 登录IP为 192.168.0.5 的远程主机 telnet 192.168.0.5 12 |
系统管理命令
date 命令
显示或设定系统的日期与时间。
命令参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -d<字符串> 显示字符串所指的日期与时间。字符串前后必须加上双引号。 -s<字符串> 根据字符串来设置日期与时间。字符串前后必须加上双引号。 -u 显示GMT。 %H 小时(00-23) %I 小时(00-12) %M 分钟(以00-59来表示) %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 %S 秒(以本地的惯用法来表示) %a 星期的缩写。 %A 星期的完整名称。 %d 日期(以01-31来表示)。 %D 日期(含年月日)。 %m 月份(以01-12来表示)。 %y 年份(以00-99来表示)。 %Y 年份(以四位数来表示)。 123456789101112131415 |
实例:
(1)显示下一天
1 2 | date +%Y%m%d --date="+1 day" //显示下一天的日期 1 |
(2)-d参数使用
1 2 3 4 5 6 7 8 | date -d "nov 22" 今年的 11 月 22 日是星期三 date -d '2 weeks' 2周后的日期 date -d 'next monday' (下周一的日期) date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d date -d last-month +%Y%m(上个月是几月) date -d next-month +%Y%m(下个月是几月) 1234567 |
free 命令
显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
命令参数:
1 2 3 4 5 6 7 | -b 以Byte显示内存使用情况 -k 以kb为单位显示内存使用情况 -m 以mb为单位显示内存使用情况 -g 以gb为单位显示内存使用情况 -s<间隔秒数> 持续显示内存 -t 显示内存使用总合 123456 |
实例:
(1)显示内存使用情况
1 2 3 4 | free free -k free -m 123 |
(2)以总和的形式显示内存的使用信息
1 2 | free -t 1 |
(3)周期性查询内存使用情况
1 2 | free -s 10 1 |
kill 命令
发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
常用参数:
1 2 3 4 5 6 | -l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称 -a 当处理当前进程时,不限制命令名和进程号的对应关系 -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号 -s 指定发送信号 -u 指定用户 12345 |
实例:
(1)先使用ps查找进程pro1,然后用kill杀掉
1 2 | kill -9 $(ps -ef | grep pro1) 1 |
ps 命令
ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top
linux上进程有5种状态:
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
- 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps 工具标识进程的5种状态码:
1 2 3 4 5 6 | D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process 12345 |
命令参数:
1 2 3 4 5 6 7 8 9 | -A 显示所有进程 a 显示所有进程 -a 显示同一终端下所有进程 c 显示进程真实名称 e 显示环境变量 f 显示进程间的关系 r 显示当前终端运行的进程 -aux 显示所有包含其它使用的进程 12345678 |
实例:
(1)显示当前所有进程环境变量及进程间关系
1 2 | ps -ef 1 |
(2)显示当前所有进程
本文麦老师没有细看,对于其中的一些细节不敢保证其正确性,但是,对刚毕业,急需找工作面试的人有很大帮助,可以背背面试题哈。 总之,有准备比没准备的效果要好很多,另外,“尽信书则不如无书”,自己悟哈。