Linux面试系列-02

2022年7月17日
大约 10 分钟

Linux面试系列-02

1. Linux 中 ll 和 ls 命令有什么区别?

ll命令可以列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息 ,类似Windows显示的详细信息。而ls命令只可以列出文件名或目录名,类似windows的列表。

ll命令是ls -l命令的别名。相当于Windows里的快捷方式,也就是可以理解为ll和ls -l命令功能是相同的。

ls [-参数]

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-x 按列输出,横向排序。
-A 显示除 “.”和“..”外的所有文件。
-B 不输出以 “~”结尾的备份文件。
-C 按列输出,纵向排序。
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-N 不限制文件长度。
-Q 把输出的文件名用双引号括起来。
-R 列出所有子目录下的文件。
-S 以文件大小排序。
-X 以文件的扩展名(最后一个 . 后的字符)排序。
-1 一行只输出一个文件。
-–color=no 不显示彩色文件名
-–help 在标准输出上显示帮助信息。
-–version 在标准输出上输出版本信息并退出。

查看当前目录下文件数和目录数(包含子目录中的),命令如下:

[root@iZ256w2hluuZ tomcat]# ls -l * |grep "^-"|wc -l
247
[root@iZ256w2hluuZ tomcat]# ls -l * |grep "^d"|wc -l
29

去掉“|wc -l”命令可查看当前目录下文件和目录(包含子目录中的)。

2. Linux 中如何切换到上 N 级目录?

执行cd命令可以切换上下级目录,如果切换到上一级目录执行“cd ..”命令:

[root@iZ256w2hluuZ tomcat]# pwd
/mnt/app/tomcat
[root@iZ256w2hluuZ tomcat]# cd ..
[root@iZ256w2hluuZ app]# pwd
/mnt/app
``

如果切换上两级目录需执行“cd ../..”命令,这里的“../”可以理解成上一级目录,其中“/”最后一个可以省略也可以携带,没有影响。每增加一个“../”即为增加一次上一级目录,举例如下:

```shell
[root@iZ256w2hluuZ apache-tomcat-jingxuan]# pwd
/mnt/app/tomcat/apache-tomcat-jingxuan
[root@iZ256w2hluuZ apache-tomcat-jingxuan]# cd ../../../
[root@iZ256w2hluuZ mnt]# pwd
/mnt
[root@iZ256w2hluuZ mnt]# 

3. Linux 中如何快速切换到上 N 级目录?

编辑文件

使修改在当前用户下有效,执行命令如下:

[root@iZ256w2hluuZ conf]# vim .bashrc

使修改在所有用户下有效,需切换root用户下,执行命令如下:

[root@iZ256w2hluuZ conf]# vim /etc/profile

打开文件后,在文件结尾添加别名如下:

alias cd1 = 'cd ..'
alias cd2 = 'cd ../..'
alias cd3 = 'cd ../../..'
alias cd4 = 'cd ../../../..'
alias cd5 = 'cd ../../../../..'
alias cd6 = 'cd ../../../../../..'

执行wq命令,保存文件并退出。

为了使修改立即生效

.bashrc文件执行命令:

source .bashrc

profile文件,执行命令:

source /etc/profile

下面就可以执行对应不同级别目录的命令切换目录了,举例如下:

[root@iZ256w2hluuZ tomcat]# pwd
/mnt/app/tomcat
[root@iZ256w2hluuZ tomcat]# cd2
[root@iZ256w2hluuZ mnt]# pwd
/mnt

4. Linux 中如何返回到切换目录之前的目录?

Linux系统上切换目录使用cd(change directory)命令,查看当前目录使用pwd (print working directory)命令。

例如当前目录为:/home/Jingxuan/Tomcat

[root@iZ256w2hluuZ Tomcat]#  pwd
/home/Jingxuan/Tomcat
[root@iZ256w2hluuZ Tomcat]#  

进入到根目录,执行cd /命令。

[root@iZ256w2hluuZ Tomcat]#  cd /
[root@iZ256w2hluuZ /]# pwd
/
[root@iZ256w2hluuZ /]#

如果需要返回到/home/Jingxuan/Tomcat目录,则执行cd -命令。

[root@iZ256w2hluuZ /]# cd -
/home/Jingxuan/Tomcat
[root@iZ256w2hluuZ Tomcat]#  pwd
/home/Jingxuan/Tomcat
[root@iZ256w2hluuZ Tomcat]#  

5. Linux 中零拷贝是什么?

零拷贝主要的任务是避免CPU将数据从一块存储拷贝到另外一块存储,利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。

6. Linux 中为什么需要零拷贝?

传统的Linux系统的标准I/O接口(read、write)是基于数据拷贝的,也就是数据都是copy_to_user或者copy_from_user。

好处:通过中间缓存的机制,减少磁盘I/O的操作。

坏处:大量数据的拷贝,用户态和内核态的频繁切换,会消耗大量的CPU资源,严重影响数据传输的性能。

在网络速度比较慢的时代(56K猫、10/100MB以太网)其实不需要零拷贝技术,因为内部再快也会被网络速率卡住,木桶效应。但是当网路速度大幅提升出现1Gb、10Gb甚至100Gb网速的时候这种零拷贝技术就迫切需要,因为网络传输速度已经远远大于计算机内部的数据流转速度。所以有必要提速,那么这时候人们就关注如何优化计算机内部数据流。

7. Linux 中如何创建软链接?

用法:ln -s 源文件 目标文件

[root@mrwang ~]#  ln -s /jingxuan/titles /home/titles

其中/jingxuan/titles目录中titles是源文件,/home/titles目录中titles是目标文件,实际链接的是/jingxuan/titles文件。

删除软连接命令

[root@mrwang ~]# rm -rf /home/titles

这样只会删除目标文件,不会删除源文件。

8. Linux 中如何创建硬链接?

用法:ln 源文件 目标文件

[root@mrwang ~]#  ln /jingxuan/titles /home/titles

注意如果使用ln –f existingfile newfile,如果newfile已经存在,则无论原来newfile是什么文件,只要当前用户对它有写权限,newfile就成为exisitngfile的硬链接文件。

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:

1)不可以在不同文件系统的文件间建立链接。

2)不允许给目录创建硬链接。

9. hdfs 一个 block 多大,为什么 128M?

1、不能远小于128M:减少硬盘寻道时间、减少Namenode内存消耗。

2、不能远大于128M:

1)Map崩溃问题 (数据块大,重新加载时间长)。

2)预设时间间隔问题(从数据块的角度大概估算,数据块越大,时间越长)。

3)问题分解问题:数据量大小和问题解决的复杂度成线性关系。

4)约束map输出:map之后的数据需要排序后再执行reduce,大文件不利于归并排序的思想。

10. Linux 中如何查看运行日志?

动态打印日志信息:tail –f 日志文件

[root@mrwang apache-tomcat-blog]# tail -f ./logs/catalina.out 

11. Linux 中如何关闭进程?

通常用ps查看进程PID,用kill命令终止进程。ps命令用于查看当前正在运行的进程。grep是搜索;-aux显示所有状态;

举例:

ps –ef | grep java表示查看所有进程里CMD是java的进程信息。

ps –aux | grep java

kill命令用于终止进程。例如:kill -9 [PID] -9表示强迫进程立即停止。

12. Linux 中查看文件内容有哪些命令?

vi 文件名 #编辑方式查看,可修改。

cat 文件名 #显示全部文件内容。

more 文件名 #分页显示文件内容。

less 文件名 #与 more 相似,更好的是可以往前翻页。

tail 文件名 #仅查看尾部,还可以指定行数。

head 文件名 #仅查看头部,还可以指定行数。

13. Linux 中如何让命令后台运行?

一般都是使用&在命令结尾来让程序自动运行。(命令后可以不追加空格)

举例:执行jingxuan.jar包,使其后台运行,退出连接端后不会终止进程。

java -jar jingxuan.jar &

14. Linux 中使用什么命令搜索文件?

find <指定目录> <指定条件> <指定动作>

whereis 加参数与文件名

locate 只加文件名

find 直接搜索磁盘,较慢。

举例:

find / -name "string*"

15. Linux 中使用什么命令查看磁盘占用情况?

使用df -lh命令来查看磁盘空间占用情况。

[root@mrwang /]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  512K  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/vda1        60G   16G   45G  26% /
tmpfs           364M     0  364M   0% /run/user/0
[root@mrwang /]# 

16. Linux 中如何启动和关闭防火墙?

CentOS7以上版本的防火墙配置跟以前版本有很大区别,CentOS7以上版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样。

1、关闭防火墙:

systemctl stop firewalld.service

2、开启防火墙:

systemctl start firewalld.service

3、关闭开机启动:

systemctl disable firewalld.service

4、开启开机启动:

systemctl enable firewalld.service

17. Linux 中如何查看指定目录的大小?

查询当前目录总大小可以使用du -sh,其中s代表统计汇总的意思,即只输出一个总和大小。

[root@mrwang jingxuan]# du -sh
6.1M    .

linux查看指定目录的的大小,可以使用“du -sh 目录名称”命令。

[root@mrwang jingxuan]# du -sh logs         
6.1M    logs

18. Linux 中使用什么命令查看 ip 地址及接口信息?

Linux中使用ifconfig命令查看ip地址及接口信息。

[root@mrwang jingxuan]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.44.191  netmask 255.255.240.0  broadcast 172.17.47.255
        inet6 fe80::216:3eff:fe35:66a2  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:35:66:a2  txqueuelen 1000  (Ethernet)
        RX packets 44392695  bytes 23482900900 (21.8 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40107204  bytes 48480485174 (45.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 19128710  bytes 33464900312 (31.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19128710  bytes 33464900312 (31.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

19. Linux 中 du 和 df 命令有什么区别?

du显示目录或文件的大小。

df显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统。

文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如i节点,磁盘分布图,间接块,超级块等。这些数据对大多数用户级的程序来说是不可见的,通常称为Meta Data。

du命令是用户级的程序,它不考虑Meta Data,而df命令则查看文件系统的磁盘分配图并考虑Meta Data。

df命令获得真正的文件系统数据,而du命令只查看文件系统的部分情况。

20. bash shell 中 hash 命令有什么作用?

linux中hash命令管理着一个内置的哈希表,记录了已执行过的命令的完整路径,用该命令可以打印出你所使用过的命令以及执行的次数。

[root@mrwang jingxuan]# hash
hits    command
   1    /usr/bin/tail
   5    /usr/bin/df
   1    /usr/sbin/ifconfig
   5    /usr/bin/du
   1    /usr/bin/netstat
   2    /usr/bin/ls