Linux 运维面试题整理 发表于 2020-04-23 | 分类于 Linux | 暂无评论 #### 1.如何查看http的并发请求数与其TCP连接状态? ```shell netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ``` #### 2.如何查看/var/log目录下的文件数? ```shell 文件是-开头的权限,目录是d开头 ls /var/log/ -1R |grep "-"|wc -l ``` #### 3.如何查看Linux系统每个ip的连接数? ```shell netstat -n|awk '/^tcp/ {print $5}'|sort|uniq -c|sort -rn ``` #### 4.shell下生成32位随机数 ```shell cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n1 ``` #### 5.如何查看二进制文件的内容? ```shell 进制查看工具 hexdump、xxd与od hexdump -C XXX(文件名) 不同的参数有不同的意义 -C 是比较规范的 十六进制和ASCII码显示 -c 是单字节字符显示 -b 单字节八进制显示 -o 是双字节八进制显示 -d 是双字节十进制显示 -x 是双字节十六进制显示 ``` #### 6.介绍下Linux系统的开机启动顺序 ```shell 加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init依据inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面) –>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。 ``` #### 7.符号链接与硬链接的区别 ```shell 我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。 硬链接 就好像是 又复制了一份,举例说明: ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4都会跟着变,若删除3,4不受任何影响。 ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会都跟着变,若删除3,4就坏掉了。不可以用了。 ``` #### 8.保存当前磁盘分区的分区表 ```shell dd 命令是以个强大的命令,在复制的同时进行转换 dd if=/dev/sda of=./mbr.txt bs=1 count=512 ``` #### 9.修改内核参数 ```shell vi /etc/sysctl.conf 这里修改参数 sysctl -p 刷新后可用 ``` #### 10.限制apache每秒新建连接数为1,峰值为3 ```shell #每秒新建连接数 一般都是由防火墙来做,apache本身好像无法设置每秒新建连接数,只能设置最大连接: iptables -A INPUT -d 172.16.100.1 -p tcp –d port 80 -m limit –limit 1/second -j ACCEPT ``` #### 11.FTP的主动模式和被动模式 ```shell FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。 于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。 于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。 ``` #### 12.显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 ```shell grep "^#[ ^]\{1,\}" /etc/inittab ``` #### 13.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行 ```shell grep "\:[0-9]\{1\}:" a.txt ``` #### 13.怎么把脚本添加到系统服务里,即用service来调用? ```shell vi /etc/init.d/servicename #!/bin/bash # chkconfig: 345 85 15 # description: httpd 然后保存 在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了; chkconfig --add servicename 创建系统服务 现在就可以使用service 来 start or restart ``` #### 14.写一个脚本,实现批量添加20个用户,用户名为user01-20,密码为user后面跟5个随机字符 ```shell #!/bin/bash #description useradd for i in `seq -f"%02g" 1 20`;do useradd user$i echo "user$i- `echo $RANDOM|md5sum|cut -c 1-5`"|passwd --stdin user$i >/dev/null 2>&1 done ``` #### 15.写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线 ```shell #!/bin/bash [ -f /etc/init.d/functions ] && . /etc/init.d/functions for ip in `seq 1 255` do ping -c 1 10.0.0.$ip &>/dev/null if [ $? -eq 0 ];then action "10.0.0.$ip " /bin/true else action "10.0.0.$ip" /bin/false fi done ``` #### 16.写一个脚本,要求如何: 创建一个函数,能接受两个参数: 1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置; 2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本; 3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本; ```shell #bin/bash url=$1 dir=$2 download(){ cd $dir &>/dev/null if [ $? -ne 0 ];then read -p "$dir No such file or directory,create?(y/n)" answer if [ "$answer" == "y" ];then mkdir -p $dir cd $dir wget $url &>/dev/null else return "51" fi else wget $url &>/dev/null fi if [ $? -ne 0 ];then return "52" fi } download ``` #### 17.如何让history命令显示具体时间? ```shell HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S” export HISTTIMEFORMAT 重新开机后会还原,可以写/etc/profile ``` #### 18.如何过滤出已知当前目录下oldboy中的所有一级目录(不包含子目录,即只能是一级目录) ```shell 方法1:find ./ -type d -maxdepth 1 方法2:ls -F 方法3:ls -l | grep ^d ``` #### 19.一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,如何看? ```shell ls -lrt /etc #最底部的就是最新更新的文件 参数说明: -r, –reverse #翻转排序 -t #按照修改时间排序 ``` #### 20.服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决? ```shell find /app/logs/* -mtime +7 -type f -name “*.log” -exec rm -f {} \; #查找7天以前的日志并删除之 ``` #### 21.打印配置文件nginx.conf内容的行号及内容,该如何做? ```shell 方法1:cat -n nginx.conf 方法2:less -N nginx.conf 方法3:grep -n . nginx.conf #此处的.(点)号,表示任意单个字符,-n是给过滤出的每一行加行号 ``` #### 22.如何查看/etc/services文件有多少行? ```shell 方法1:直接使用命令wc wc -l /etc/services 方法2:给文件内容加行号 cat -n /etc/services | tail -1 方法3:使用sed命令 sed -n ‘$=’ /etc/services 方法4:使用grep命令 grep -n $ /etc/services | tail -1 ``` #### 23.请过滤出ifconfig中的ip地址? ```shell 方法1:ifconfig eth1|grep “inet add”|cut -d’:’ -f2|cut -d’ ‘ -f1 方法2:ifconfig eth1|grep “inet addr”|awk -F: ‘{print $2}’|awk ‘{print $1}’ 方法3:ifconfig eth0|awk -F '[ :]+' 'NR==2{print $3}' 方法4:ifconfig eth0|sed -n ‘2p’|sed ‘s#^.*addr:##g’|sed ‘s# Bc.*$##g’ ``` #### 24.打印出kaka文件中除掉空行的内容 ```shell 方法1:grep -v “^$” kaka 方法2:sed ‘/^$/d’ kaka ``` #### 25.打印3天前的日期,格式如:2016-05-06 ```shell 方法1:date “+%F” -d “3 day ago” 方法2:date “+%F” -d “-3 day” ``` #### 26.编写脚本实现以下功能 每天早上5点开始做备份 要备份的是/var/mylog里所有文件和目录可以压缩进行备份 备份可以保存到别一台器上192、168、1、2 FTP帐号 aaa 密码 bbb 要示每天 的备份文件要带有当天的日期标记 ```shell #!/bin/bash bakdir=mylog date=`date +%F` cd /var tar zcf ${bakdir}_${date}.tar.gz ${bakdir} sleep 1 ftp -n <<- EOF open 192.168.142.129 #远程ftp服务器IP user aaa bbb put mylog_*.tar.gz bye EOF #添加crontab: crontab -e 00 05 * * * /bin/bash /root/mylogbak.sh #每天早上5点开始执行备份脚本 ``` #### 27.避免从互联网访问MySQL数据库,确保特定主机才拥有访问特权 ```shell > GRANT ALL ON *.* TO 'root'@'%'; 这其实是完全放开了对root的访问。所以,把重要的操作限制给特定主机非常重要: > GRANT ALL ON *.* TO 'root'@'localhost'; > GRANT ALL ON *.* TO 'root'@'IP' > FLUSH PRIVILEGES 此时,你仍有完全的访问,但只有指定的IP(不管其是否静态)可以访问。 创建用户 CREATE USER 'user1'@'%' IDENTIFIED BY 'yourpasswd'; ``` #### 28.MySQL设置root用户的口令并改变其登录名 ```shell 在MySQL控制台中执行: > SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password'); > UPDATE user SET user="another_username" WHERE user="root"; $ mysqladmin -u root password new_password ``` #### 29.MySQL移除匿名账户和废弃的账户 ```shell DROP USER ""; 或 DELETE FROM user WHERE user=""; ``` #### 30.mysql 主从复制原理 ```shell 从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致; ``` #### 31.将文件/etc/a 下中除了 b文件外的所有文件压缩打包放到/home/a下,名字为a.gz ```shell tar -zvcf a.gz /etc/a –exclude=/etc/a/b ``` #### 32.如何查看test进程所打开的所有文件 ```shell lsof -u test ``` #### 33.请用iptables控制来自192.168.1.2主机的80端口请求 ```shell iptables -A INPUT -p tcp -s 192.168.1.2 –dport 80 -j ACCEPT ``` #### 34.请用shell脚本创建一个组class、一组用户,用户名为stdX X从01-30,并归属class组 ```shell groupadd class&&for a in {1..30};do useradd std$a -g class;done ``` #### 35.把文件file1和file2连在一起,然后输出到屏幕上。 ```shell cat -n file1file2 ``` #### 36.patch命令是什么?如何使用? ```shell 顾名思义,patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码, 只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。 创建一个diff文件给patch使用, # diff -Naur old_file new_file > diff_file 旧文件和新文件要么都是单个的文件要么都是包含文件的目录,-r参数支持目录树递归。 一旦diff文件创建好,我们就能在旧的文件上打上补丁,把它变成新文件: # patch < diff_file ``` #### 37.cpio命令是什么? ```shell cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件。 ``` #### 38.linux系统中的/proc文件系统有什么用? ```shell /proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。 这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。 ``` #### 39.find操作 ```shell 如何在/usr目录下找出大小超过10MB的文件? find /usr -size +10M 如何在/home目录下找出120天之前被修改过的文件? find /home -mtime +120 如何在/var目录下找出90天之内未被访问过的文件? find /var \! -atime -90 将/usr/local/test目录下大于100K 的文件转移到/tmp 目录下。 find /usr/local/test -type f -size +100k -exec mv {} /tmp \; ``` #### 40.tee 过滤器有什么作用 ? ```shell tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)。 linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out 在以上例子中,从ll输出可以捕获到 /tmp/ll.out 文件中,并且同样在屏幕上显示了出来。 ``` #### 41.Linux文件系统变成只读的解决方法 ```shell 1、重启看是否可以修复(很多机器可以的)。 2、以光盘启动进入救援模式(linux rescue),执行"fsck.ext3 -y /dev/sda2" (假如只读的分区类型为ext3,分区为/dev/sda2) ``` #### 42.在这个月内,每天的早上 6 点到 12 点中,每隔 2 小时创建一个test.txt文件,内容为ok,如何实现? ```shell a、crontab -e 进入编辑模式 b、添加以下内容 0 6-12/2 * 4 * /bin/echo "ok" > test.txt (以4月为例) c、启动服务 service crontab start;chkconfig crontab on ``` #### 43.Linux下nfs在客户端无法挂载,请写出排查步骤? ```shell a、检查是否是防火墙或selinux的影响 b、检查语法与服务器地址是否错误(只能挂载目录,不能挂载文件) c、在服务端检查配置文件是否正确及客户端是否有权限访问 ``` #### 44.swaSp交换分区是干什么的,如何设置它的大小,500G的内存,swap应设为多少 ```shell SWAP交换分区,就是我们课本说讲过的虚拟内存的概念。 当Linux系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。 一般来说可以按照如下规则设置swap大小: 4G以内的物理内存,SWAP 设置为内存的2倍。 4-8G的物理内存,SWAP 等于内存大小。 8-64G 的物理内存,SWAP 设置为8G。 64-256G物理内存,SWAP 设置为16G。 实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。 系统在什么情况下才会使用SWAP? 实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。 cat /proc/sys/vm/swappiness 60 该值默认值是60. swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间, swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。 现在服务器的内存动不动就是上百G,所以我们可以把这个参数值设置的低一些,让操作系统尽可能的使用物理内存,降低系统对swap的使用,从而提高系统的性能。 如何修改swappiness参数? 临时性修改: sysctl vm.swappiness=10 cat /proc/sys/vm/swappiness 这里我们的修改已经生效,但是如果我们重启了系统,又会变成60. 永久修改: 在/etc/sysctl.conf 文件里添加如下参数: vm.swappiness=10 ``` #### 45.查看某个进程是否使用了swap空间 ```shell awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps 查看swap空间都被哪些进程使用 #!/bin/bash function getswap { SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do PID=`echo $DIR | cut -d / -f 3` PROGNAME=`ps -p $PID -o comm --no-headers` for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` do let SUM=$SUM+$SWAP done echo "PID=$PID - Swap used: $SUM - ($PROGNAME )" let OVERALL=$OVERALL+$SUM SUM=0 done echo "Overall swap used: $OVERALL" } getswap #getswap|egrep -v "Swap used: 0" ``` #### 46.raidOl 和 raidlO 的区别 ```shell RAID 1+0 (RAID 0 over RAID 1)即先组建RAID 1,然后把组建好的RAID 1 再组建成 RAID 0 RAID 0+1 (RAID 1 over RAID 0)即先组建RAID 0,然后把组建好的RAID 0 再组建成 RAID 1 由于RAID 0+1时,先做RAID 0,没有数据备份,因此数据可靠性来说比RAID 1+0要更差。 由于数据库对磁盘的读写性能和可靠性都有很高的要求,因此采用RAID 1+0 更为合适。 ``` #### 47.查看磁盘io的几种方法 ```shell 第一种:用 top 命令 中的cpu 信息观察 wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。 第二种:用vmstat vmstat 命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。 vmstat 2 5 IO 如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。 第三种:用iostat iostat -dx r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量 如果这两对数据值都很高的话说明磁盘io操作是很频繁。 ``` #### 48.系统负载,1,5,15,参数的合理范围 ```shell 什么样的Load Average值得警惕(单核)? Load < 0.7时:系统很闲,马路上没什么车,要考虑多部署一些服务 0.7 < Load < 1时:系统状态不错,马路可以轻松应对 Load == 1时:系统马上要处理不多来了,赶紧找一下原因 Load > 1时:马路已经非常繁忙了,进入马路的每辆汽车都要无法很快的运行 三种Load Average值,应该看哪个(单核)? 通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。 ,"load average"一共返回三个平均值:1分钟系统负荷、5分钟系统负荷,15分钟系统负荷; 如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。 如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。 ``` #### 49.redis单线程为什么效率高 ```shell Redis采用的是基于内存的采用的是单进程单线程模型的key/value数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。 1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1); 2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的; 3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗; 4、使用多路I/O复用模型,非阻塞IO; 5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求; Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。 redis的io模型主要是基于epoll实现的,不过它也提供了 select和kqueue的实现,默认采用epoll。 epoll到底是个什么东西呢? 其实只是众多i/o多路复用技术当中的一种而已,但是相比其他io多路复用技术(select, poll等等),epoll有诸多优点: 1. epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大 ,具体数目可以 cat /proc/sys/fs/file-max 察看。 2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。 3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了。 epoll与select/poll的区别 select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的操作。 select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。 poll与select不同,通过一个pollfd数组向内核传递需要关注的事件,故没有描述符个数的限制,pollfd中的events字段和revents分别用于标示关注的事件和发生的事件,故pollfd数组只需要被初始化一次。 epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。select和poll是将这个内核列表维持在用户态,然后传递到内核中。与poll/select不同,epoll不再是一个单独的系统调用,而是由epoll_create/epoll_ctl/epoll_wait三个系统调用组成,后面将会看到这样做的好处。epoll在2.6以后的内核才支持。 select/poll的几大缺点: 1、每次调用select/poll,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 2、同时每次调用select/poll都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大 3、针对select支持的文件描述符数量太小了,默认是1024 4.select返回的是含有整个句柄的数组,应用程序需要遍历整个数组才能发现哪些句柄发生了事件; 5.select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次select调用还是会将这些文件描述符通知进程。 相比select模型,poll使用链表保存文件描述符,因此没有了监视文件数量的限制,但其他三个缺点依然存在。 ``` #### 50.运维填空题整理 1. 在Linux 系统 中,以**文件**方式访问设备 。 2. Linux 内核引导时,从文件**/etc/fstab**中读取要加载的文件系统 。 3. Linux 文件系统中每个文件用**indoe节点**来标识。 4. 全部磁盘块由四个部分组成,分别为**引导块 、专用块 、 i 节点表块 和 数据存储块** 。 5. 链接分为:**硬链接** 和 **符号链接** 。 6. 超级块包含了**i 节点表** 和 **空闲块表** 等重要的文件系统信息。 7. 系统管理的任务之一是能够在分布式 环境中实现对程序和数据的**安全保护、备份、恢复和更新**。 8. **系统交换分区**是作为系统虚拟存储器 的一块区域 。 9. 内核分为**进程管理系统 、 内存管理系统 、 I/O 管理系统 和 文件管理系统** 等四个子系统。 10. 在Linux 系统中所有内容都被表示为**文件**,组织文件的各种方法称为**文件系统** 。 11. **硬连接**只能建立对文件 链接。**符号**链接可以跨不同文件系统创建。 12. 进程的运行有两种方式,即 **独立运行** 和 **使用父进程运行** 。 13. 在shell 编程时,使用方括号表示测试条件的规则是:**方括号两边必须有空格** 。 14. 路由选择 协议(RIP)的跳数表示到达目的地之前必须通过的网关 数,RIP 接受的最长距离是 **15** 跳 。 15. **/sbin** 目录用来存放系统管理员使用的管理程序。 16. ping 命令用于测试网络的连通性,ping 命令通过 **ICMP** 协议(internet 控制信息协议)来实现。 转载并修改自 >https://www.cnblogs.com/benjamin77/category/1117956.html >https://www.cnblogs.com/byfboke/articles/8992049.html >https://blog.csdn.net/weixin_41846313/article/details/85199364 >https://blog.csdn.net/jiajiren11/article/details/90381703 >https://blog.csdn.net/wxy941011/article/details/80274233