【面试宝典】54道Linux命令高频题库整理(附答案背诵版)
文件是在传统的SysVinit系统中使用的,用于定义系统初始化和关机时运行的脚本和程序。这条命令的意思是,对于所有目标端口为80的TCP流量,使用NAT表的PREROUTING链进行处理,将这些请求重定向到本机的8080端口。命令用于安排单次任务在指定时间执行。在Linux中,建立压缩包和解压缩包的命令有多种,主要依赖于你想使用的压缩格式。这样,你不仅可以找到所有大小超过10MB的文件,还能看到它
1.Linux下建立压缩包,解压缩包的命令?
在Linux中,建立压缩包和解压缩包的命令有多种,主要依赖于你想使用的压缩格式。常用的压缩格式有.tar.gz
、.gz
、.zip
等。我将针对这些格式分别介绍相应的命令,并给出示例。
(1). 对于.tar.gz
格式
-
创建压缩包:使用
tar
命令结合-czf
选项。 -
c
表示创建压缩文件。 -
z
表示gzip压缩。 -
f
指定压缩后的文件名。
示例:假设你想把名为folderName
的文件夹压缩为archiveName.tar.gz
,可以使用命令:
tar -czf archiveName.tar.gz folderName
-
解压缩包:使用
tar
命令结合-xzf
选项。 -
x
表示解压。 -
z
表示gzip压缩。 -
f
指定压缩文件名。
示例:要解压archiveName.tar.gz
,可以使用命令:
tar -xzf archiveName.tar.gz
(2). 对于.gz
格式
- 创建压缩包:使用
gzip
命令。
示例:如果你想压缩一个名为file.txt
的文件,可以使用命令:
gzip file.txt
这会生成一个名为file.txt.gz
的压缩文件,并且原文件file.txt
会被删除。
- 解压缩包:使用
gunzip
命令或者gzip -d
。
示例:要解压file.txt.gz
,可以使用命令:
gunzip file.txt.gz
或者
gzip -d file.txt.gz
(3). 对于.zip
格式
- 创建压缩包:使用
zip
命令。
示例:要将folderName
文件夹压缩为archiveName.zip
,可以使用命令:
zip -r archiveName.zip folderName
-r
表示递归压缩,用于压缩文件夹及其内部的所有文件和子文件夹。
- 解压缩包:使用
unzip
命令。
示例:要解压archiveName.zip
,可以使用命令:
unzip archiveName.zip
这些命令是Linux系统管理中的基础,了解它们能够帮助你在日常工作中更有效地管理文件和目录。
2.如何查看Linux的默认网关?
在Linux中,查看默认网关的命令主要有两种:route
和 ip
命令。ip
命令是较新且推荐使用的方法,因为它提供了更多的网络配置功能。下面是如何使用这两种命令来查看默认网关的示例:
使用ip
命令
- 执行以下命令:
ip route show
这个命令会列出所有的路由信息。默认网关会在输出中被标记为default
或0.0.0.0
。通常看起来像这样:
default via 192.168.1.1 dev eth0
这里,192.168.1.1
就是默认网关的IP地址,eth0
是你的网络接口。
使用route
命令
- 执行以下命令:
route -n
这个命令同样会列出所有的路由信息,但是使用-n
选项可以避免进行主机名的解析,使得命令的执行更快。在输出中,你也会看到一个被标记为UG
(表示Up和Gateway)的条目,这个就是默认网关。输出可能会这样显示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
在这个例子中,192.168.1.1
同样是默认网关的IP地址。
虽然route
命令在很多系统上仍然可用,但是ip
命令提供了更一致和全面的方式来管理网络配置,因此建议使用ip
命令来查看和修改网络配置。
3.如何在/usr目录下找出大小超过10MB的文件?
在Linux中,你可以使用find
命令来查找/usr
目录下大小超过10MB的文件。find
命令是一个非常强大的工具,它允许你基于各种条件搜索文件系统中的文件和目录。
要查找所有大小超过10MB的文件,可以使用以下命令:
find /usr -type f -size +10M
这个命令的各部分意义如下:
/usr
指定了搜索的起始目录。-type f
指定只查找文件(而不是目录)。-size +10M
指定查找大小超过10MB的文件。这里的+10M
表示“大于10MB”。M
代表兆字节。
这个命令会列出/usr
目录及其子目录下所有大小超过10MB的文件的完整路径。如果你还想查看这些文件的大小,可以结合使用find
和ls
命令,通过管道将find
的输出传递给ls
进行详细列表显示,如下所示:
find /usr -type f -size +10M -exec ls -lh {} \;
或者使用xargs
命令:
find /usr -type f -size +10M | xargs ls -lh
这里:
-exec
是find
命令的一个选项,它允许对找到的每个文件执行指定的命令。ls -lh {} \;
指定了要执行的命令,其中{}
是一个占位符,代表find
命令找到的每个文件的路径,\;
是命令的结束标志。ls -lh
命令用于以可读的格式(-h
,如KB、MB)列出文件的详细信息,包括文件大小。- 使用
xargs
可以避免对大量文件执行时可能遇到的参数列表过长的问题。
这样,你不仅可以找到所有大小超过10MB的文件,还能看到它们的大小,更方便地管理这些大文件。
4.如何在/home目录下找出120天之前被修改过的文件?
要在/home
目录下找出120天之前被修改过的文件,你可以使用find
命令结合-mtime
选项。-mtime
选项用于基于文件最后一次修改时间来查找文件,其参数是以天为单位的时间。在这个场景中,你想找到120天前修改的文件,所以参数应该是+119
(表示超过119天,即第120天及之前的文件)。
下面是具体的命令:
find /home -type f -mtime +119
这个命令的各部分解释如下:
/home
指定了搜索的起始目录。-type f
指定只查找文件(不查找目录)。-mtime +119
指定查找最后修改时间在120天前(包括第120天)的文件。
这个命令将列出/home
目录及其所有子目录下,所有120天前被修改过的文件。
如果你还想看到这些文件的详细信息(比如修改日期),可以结合使用find
命令和ls
命令,如下所示:
find /home -type f -mtime +119 -exec ls -lh {} \;
或者使用xargs
命令:
find /home -type f -mtime +119 | xargs ls -lh
这里:
-exec ls -lh {} \;
或通过管道使用xargs ls -lh
,允许你对找到的文件执行ls -lh
命令,从而以可读的格式查看文件的详细信息(包括修改时间)。ls -lh
中的-h
选项是为了使文件大小以易于阅读的方式显示(如KB、MB)。
通过这种方式,你可以轻松找到所有在120天前被修改的文件,并查看它们的详细信息。
5.如何在/var目录下找出90天之内未被访问过的文件?
要在/var
目录下找出90天之内未被访问过的文件,你可以使用find
命令结合-atime
选项。-atime
选项用于查找基于文件最后一次访问时间的文件,其参数是以天为单位的时间。在这个场景中,你想找到在过去90天内未被访问的文件,所以参数应该是+89
(表示超过89天,即第90天及以前的文件未被访问)。
这里是具体的命令:
find /var -type f -atime +89
这个命令的组成部分解释如下:
/var
指定了搜索的起始目录。-type f
指定只查找文件(不查找目录)。-atime +89
指定查找最后访问时间在90天前的文件。
这个命令将列出/var
目录及其所有子目录下,所有在过去90天内未被访问过的文件。
如果你希望查看这些文件的详细信息,可以将find
命令的输出通过管道传递给ls
命令,使用-exec
选项或xargs
,例如:
find /var -type f -atime +89 -exec ls -lh {} \;
或者:
find /var -type f -atime +89 | xargs ls -lh
这里:
-exec ls -lh {} \;
或使用xargs ls -lh
允许对找到的每个文件执行ls -lh
命令,这样可以以人类可读的格式(-h
选项)查看文件的大小和最后访问时间。
这种方法可以帮助你找出/var
目录及其子目录下所有在过去90天内未被访问的文件,并查看它们的详细信息。
6.Linux strings命令有什么作用?
Linux中的strings
命令用于从二进制文件中提取可打印的字符串序列。它主要被用于分析非文本文件(如可执行文件或二进制数据文件),以便找到其中包含的文本信息。这可以帮助在调试程序或检查文件内容时识别文件的用途或特定数据。
strings
命令对于理解编译后的程序或检测文件中可能隐藏的文本信息非常有用。例如,它可以用来找出程序中包含的错误消息、用户界面文本或其他可识别的标记。
基本用法
strings [选项] 文件名
示例
假设有一个名为program
的二进制文件,你想查看其中的文本字符串,可以使用如下命令:
strings program
这个命令会列出文件program
中所有的可打印字符串。
常用选项
-n [数值]
,--bytes=[数值]
:设置最小字符串长度为[数值],这意味着strings
将只显示长度至少为指定数值的字符串。这对于过滤掉过短的、可能无关紧要的字符串非常有用。-a
,--all
:扫描整个文件,包括不包含可执行代码的数据段。-o
:显示字符串在文件中的偏移量。
例如,要查找长度至少为5个字符的字符串,并显示它们在文件中的偏移量,可以使用:
strings -n 5 -o program
strings
命令是一个强大的工具,特别是在软件开发、安全研究和系统调试领域。通过提取和分析二进制文件中的文本内容,用户可以获得对程序行为和数据结构的深入理解。
7.Linux中的at命令有什么用?
Linux中的at
命令用于安排单次任务在指定时间执行。它允许用户指定一个命令,该命令将在未来某个时间点运行,而无需用户此时在线。这使得at
命令成为自动化执行脚本或命令、安排系统维护任务等操作的有用工具。
基本用法
at [时间] [选项]
在输入此命令后,系统会提供一个提示,让用户输入希望在指定时间执行的命令。完成命令输入后,按Ctrl+D
结束,这会安排任务。时间参数支持多种格式,如now + 1 hour
、5pm tomorrow
等,非常灵活。
示例
- 安排一个任务在明天下午5点执行:
at 5pm tomorrow
输入命令后,你将进入一个提示符。在这里,输入你希望执行的命令,比如echo "Task runs at 5pm tomorrow"
,然后按Ctrl+D
来安排。
- 查看当前安排的
at
任务列表:
atq
- 删除一个安排的
at
任务:
atrm [作业编号]
其中,[作业编号]是通过atq
命令得到的任务编号。
常用选项
-f 文件名
:从指定的文件中读取要执行的命令,而不是从标准输入中读取。-l
或atq
:列出当前用户的待处理任务。-d
或atrm
:删除指定的任务。-m
:即使没有输出也发送邮件给用户。
注意事项
- 使用
at
命令前,确保atd
服务已经启动。atd
是at
命令的守护进程,负责执行那些被安排的任务。 - 在某些系统上,出于安全考虑,默认可能禁用了
at
命令,或者只允许特定的用户或组使用。可以通过配置/etc/at.allow
和/etc/at.deny
文件来管理访问权限。
at
命令提供了一种方便的方式来安排未来的任务,使得自动化任务和系统管理变得更加简单高效。
8.如何查看/var/log目录下文件数?
要查看/var/log
目录下的文件数,你可以使用ls
和wc
命令的组合。ls
命令用于列出目录内容,而wc
命令(word count的缩写)用于计数。通过将ls
的输出通过管道传递给wc
,你可以统计文件数。
查看总文件数(包括子目录中的文件)
如果你想要计算/var/log
及其子目录下所有文件的总数,可以使用find
命令与wc
命令结合:
find /var/log -type f | wc -l
这里:
find /var/log -type f
查找/var/log
目录及所有子目录下的文件。| wc -l
将find
命令的输出传递给wc
命令,使用-l
选项来计数行数,每个文件名占一行。
仅查看/var/log
目录下的文件数
如果你只对/var/log
目录下的直接文件数感兴趣,不包括子目录中的文件,可以使用:
ls -l /var/log | grep ^- | wc -l
这里:
ls -l /var/log
以长格式列出/var/log
目录下的所有文件和目录。grep ^-
过滤出以-
开头的行,这代表普通文件。wc -l
计算过滤后的行数,即文件数。
请注意,这些命令不包括隐藏文件(文件名以.
开头的文件)。如果你也想包括隐藏文件,请确保使用适当的ls
选项(如ls -la
)来列出所有文件,包括隐藏文件。
9.显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 ?
要显示/etc/inittab
文件中符合特定模式的行,即那些以#
开头,后面跟了一个或多个空白字符,然后又跟了任意非空白字符的行,你可以使用grep
命令结合一个正则表达式。
这里是相应的grep
命令:
grep '^#[[:space:]]\+[[:graph:]]' /etc/inittab
解释一下这个命令中使用的正则表达式各部分的含义:
^
:表示行的开始。#
:表示匹配以#
字符开始的行。[[:space:]]\+
:表示匹配一个或多个空白字符。[[:space:]]
是一个字符类,匹配任何空白字符(包括空格、制表符等),\+
表示一个或多个前面的表达式(注意,在某些grep
实现中,可能需要使用-E
选项或者用\{1,\}
来代替\+
以匹配一个或多个的表达式)。[[:graph:]]
:表示匹配任意非空白字符。[[:graph:]]
是一个字符类,匹配任何可打印的非空白字符。
请注意,/etc/inittab
文件是在传统的SysVinit系统中使用的,用于定义系统初始化和关机时运行的脚本和程序。许多现代Linux发行版(如使用systemd的系统)可能不再使用/etc/inittab
文件。如果你在使用的系统中找不到/etc/inittab
文件,可能是因为你的系统使用了另一种初始化系统。
10.通配符 * ? [n-m] {n,m}分别表示什么意思?
在Linux和Unix系统中,通配符(wildcards)用于匹配文件名或路径名的模式。以下是你提到的通配符及其含义:
*
:
- 表示匹配任意数量的字符(包括零个字符)。它可以用来匹配在指定位置的任意长度的字符串。例如,
*.txt
匹配所有扩展名为.txt
的文件。
?
:
- 表示匹配任意单个字符。它用于匹配单个位置上的任意字符。例如,
?.txt
匹配所有名字是单个字符且扩展名为.txt
的文件。
[n-m]
:
- 表示匹配任意单个字符,该字符在指定的范围
n
到m
之内。这个范围可以是字母的范围也可以是数字的范围。例如,file[1-3].txt
匹配file1.txt
、file2.txt
、和file3.txt
。
{n,m}
:
- 这实际上是花括号扩展(brace expansion),而不是标准的通配符。它用于生成任意字符串的列表。花括号内部可以是一系列通过逗号分隔的项,它会生成所有指定项的列表。例如,
file{A,B,C}.txt
会扩展成fileA.txt
、fileB.txt
、和fileC.txt
。对于{n..m}
形式(注意两个点),它表示一个从n
到m
的序列,但这并不是所有shell默认支持的功能,主要是Bash在较新版本中提供的。
举个更具体的例子:
- 使用
*
:*.png
匹配所有以.png
结尾的文件。 - 使用
?
:?.jpg
匹配所有文件名只有一个字符且以.jpg
结尾的文件。 - 使用
[n-m]
:image[0-9].jpeg
匹配image0.jpeg
到image9.jpeg
。 - 使用
{n,m}
:report{2018,2019,2020}.pdf
扩展成report2018.pdf
、report2019.pdf
、和report2020.pdf
。
这些通配符和扩展在文件管理、搜索和脚本编写中非常有用,使得操作可以应用于符合特定模式的一组文件或目录。
11.查询file1 以abc 结尾的行?
要查询一个文件(例如file1
)中所有以abc
结尾的行,你可以使用grep
命令结合正则表达式。grep
是一种强大的文本搜索工具,可以使用正则表达式来定义搜索模式。
以下是具体的命令:
grep 'abc$' file1
这里的正则表达式部分'abc$'
的含义是:
abc
:匹配文本abc
。$
:表示行的结束。所以,abc$
匹配任何以abc
结尾的行。
这个命令会在file1
中查找并输出所有以abc
结尾的行。
12.如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1 ?
将本地80端口的请求转发到8080端口通常涉及到网络配置和可能需要管理员权限。在Linux系统中,这可以通过多种方法实现,包括使用iptables
规则、socat
工具或者修改应用配置以直接监听不同端口。下面将介绍使用iptables
和socat
的方法。
使用iptables
-
确保
iptables
已安装并且内核支持IP转发。 -
启用IP转发:
编辑/etc/sysctl.conf
文件,确保以下行是启用的(去掉前面的#
注释符号并设置为1
):
net.ipv4.ip_forward=1
然后执行sysctl -p
来应用更改。
- 添加
iptables
规则来转发端口:
使用以下命令将从80端口来的请求转发到8080端口:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
这条命令的意思是,对于所有目标端口为80的TCP流量,使用NAT表的PREROUTING链进行处理,将这些请求重定向到本机的8080端口。
使用socat
如果你不想使用iptables
或者你的系统没有安装iptables
,你可以使用socat
,一个多功能的网络工具,来实现端口转发。
- 安装
socat
(如果尚未安装):
- 在基于Debian的系统上,使用:
sudo apt-get install socat
- 在基于RPM的系统上,使用:
sudo yum install socat
- 使用
socat
进行端口转发:
执行以下命令:
socat TCP-LISTEN:80,fork TCP:192.168.2.1:8080
这里,TCP-LISTEN:80,fork
的意思是socat
会监听80端口,并对每个连接使用子进程(fork)。TCP:192.168.2.1:8080
指定将流量转发到本机的8080端口。
请注意,使用这些方法可能需要管理员权限。此外,使用iptables
方法时,确保考虑到任何现有的iptables
规则和安全策略。对于socat
,它是一个临时解决方案,重启服务或机器后需要重新运行命令,除非你将其添加到启动脚本中。
13.如何查看占用端口8080 的进程 ?
要查看在Linux系统中哪个进程占用了8080端口,可以使用netstat
或lsof
命令。如果这些工具未安装,你可能需要先安装它们,或者你也可以使用ss
命令,它是netstat
的现代替代品,通常默认安装在现代Linux发行版上。
使用ss
命令
ss -ltnp | grep ':8080'
-l
选项表示显示监听端口。-t
选项表示显示TCP端口。-n
选项表示以数字形式显示地址和端口号。-p
选项表示显示占用端口的进程信息,这可能需要管理员权限(使用sudo
)。
使用netstat
命令
如果你的系统上安装了netstat
,可以使用:
sudo netstat -ltnp | grep ':8080'
- 选项的含义与
ss
命令相同。
使用lsof
命令
另一个选项是使用lsof
命令:
sudo lsof -i :8080
-i :8080
选项指定查找所有使用端口8080的进程。
注意
- 上述命令中的
sudo
是必须的,因为显示哪个进程监听某个端口通常需要管理员权限。 - 如果你的系统没有
netstat
或lsof
命令,你可能需要安装它们。例如,在基于Debian的系统上,你可以使用sudo apt install net-tools
安装netstat
,使用sudo apt install lsof
安装lsof
。 - 这些命令将帮助你找到监听8080端口的进程的PID(进程ID)和名称,从而可以进一步管理或调查该进程。
14.请简述基础正则表达式grep高级参数的使用?
grep
是一款强大的文本搜索工具,它使用正则表达式来搜索与模式匹配的文本行。grep
有几个版本,包括grep
、egrep
(或grep -E
),和fgrep
(或grep -F
)。egrep
支持扩展的正则表达式,而fgrep
是用于固定字符串的搜索,不解释任何正则表达式。下面,我们将重点介绍grep
的一些高级参数和它们的用法,以及如何使用基础和扩展正则表达式。
常用高级参数
-E
:使用扩展的正则表达式。它允许使用更复杂的模式,如|
、?
、+
、和()
等。-F
:将模式视为固定字符串的列表,而不是正则表达式。-i
:忽略大小写的差异。-v
:反转匹配,只显示不匹配的行。-c
:计数匹配的行数,而不是显示匹配的文本。-n
:在每个匹配的行前面输出行号。-l
:只输出包含匹配行的文件名。-o
:只输出匹配正则表达式的部分,而不是整行。-r
或-R
:递归查找子目录。--color
:将匹配的文本高亮显示。
基础正则表达式和扩展正则表达式的区别
基础正则表达式(BRE)和扩展正则表达式(ERE)之间的主要区别在于支持的特殊字符和它们的用法。
-
基础正则表达式:
-
特殊字符如
*
、.
、[
、^
、$
等需要直接使用。 -
对于其他一些元字符如
{
、}
、(
、)
、?
、+
、|
,在BRE中需要前置反斜线\
来赋予它们特殊的意义。 -
扩展正则表达式:
-
支持更直观的使用上述元字符,不需要前置反斜线。
-
允许使用
|
进行“或”操作,?
和+
用于更灵活的数量匹配,以及用()
进行分组。
示例
- 使用
-E
进行扩展正则表达式匹配:
grep -E 'word1|word2' filename
这将匹配文件中包含word1
或word2
的行。
- 使用
-i
忽略大小写:
grep -i 'word' filename
这将匹配word
、Word
、WORD
等所有大小写变体。
- 使用
-v
查找不包含某词的行:
grep -v 'word' filename
- 使用
-c
统计匹配的行数:
grep -c 'word' filename
通过组合使用这些参数,grep
可以非常灵活和强大,适应各种文本搜索和数据处理任务。
15.请给出Linux中eth0的IP地址和广播地址的指令?
在Linux中,你可以使用ip
命令来查看网络接口(例如eth0
)的IP地址和广播地址。ip
命令是ifconfig
命令的现代替代品,提供了更多的功能和更好的输出格式。以下是如何使用ip
命令查看eth0
接口的详细信息:
ip addr show eth0
或者,更简洁的命令:
ip a show eth0
这些命令会显示eth0
接口的所有配置信息,包括IP地址、子网掩码、广播地址等。在输出中,你可以找到类似以下的行来识别IP地址和广播地址:
inet
后面跟着的是IP地址和子网掩码,例如192.168.1.2/24
。brd
后面跟着的是广播地址,例如192.168.1.255
。
示例输出
假设你运行了上述命令,输出可能会包含像这样的行:
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:1e:67:8f:2a:bd brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86375sec preferred_lft 86375sec
inet6 fe80::21e:67ff:fe8f:2abd/64 scope link
valid_lft forever preferred_lft forever
在这个例子中:
- IP地址是
192.168.1.2
,子网掩码是24
(即255.255.255.0
)。 - 广播地址是
192.168.1.255
。
请注意,具体的IP地址和广播地址将根据你的网络配置而有所不同。
由于内容太多,更多内容以链接形势给大家,点击进去就是答案了
18. 解释命令的含义Is-la lgrep log、 ps -ef、kill -9 2543 ?
21. Linux 建立软链接(快捷方式),以及硬链接的命令 ?
25. 简述Linux df用法 查看文件系统硬盘使用情况?
26. 简述Linux du命令统计目录或文件所占磁盘空间大小 ?
31. 误操作,执行了rm -rf * ,会有哪些情况发生?请举例?
32. 简述查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来 ?
41. 终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
42. 查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加?
46. rsync 同步数据时,如何过滤出所有.txt的文件不同步?
47. rsync同步数据时,如果目标文件比源文件还新,则忽略该文件,如何做?
48. 如何查看 http 的并发请求数与其 TCP 连接状态?
50. Linux下useradd与adduser的区别 ?
更多推荐
所有评论(0)