Linux面试总结

前言

本人准研三,面临秋招压力,遂总结部分计算基础知识,以备不时之需,有些是从大佬博文摘抄的,都附有相应博文链接,如有遗漏,烦请联系本人更改,如有侵权,我会修改矫正。最后祝各位OFFER多多,进大厂!

以下是Linux常见面试题

**1.如何查看进程,如何查看线程,如何查看某个进程的线程

线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。

在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。

这里提供了在Linux上显示某个进程的线程的几种方式。

方法一:PS

在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。

ps -T -p <pid>

在这里插入图片描述
“SPID”栏表示线程ID,而“CMD”栏则显示了线程名称。

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

top -H

在这里插入图片描述
要让top输出某个特定进程并检查该进程内运行的线程状况:

top -H -p <pid>

在这里插入图片描述
方法三: Htop

一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。

要在htop中启用线程查看,请开启htop,然后按来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按退出设置。

在这里插入图片描述
现在,你就会看到下面这样单个进程的线程视图。

在这里插入图片描述
**2.如何查看内存使用状况

在Linux系统中,大部分操作都通过命令行来完成,因为大部分情况下不开启图形界面。
在服务器环境,则只能通过shell执行操作。
下面介绍查看内存使用情况的相关命令。 包括物理内存(RAM)和交换内存(swap)。

我们经常需要检查服务器的内存使用情况,以及每个进程占用的内存,避免发生资源短缺进而影响用户体验。
对于网站和Web服务,必须具有足够的内存才能处理客户端请求。 如果内存不足,在请求高峰时就会变得缓慢,拥堵,甚至服务崩溃。
当然桌面系统也是同样的道理。

1. 使用 free 命令
free 命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:


$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7822         321         324         377        7175        6795
Swap:          4096           0        4095


$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        322M        324M        377M        7.0G        6.6G
Swap:          4.0G        724K        4.0G


其中, -m 选项是以MB为单位来展示内存使用信息; -h 选项则是以人类(human)可读的单位来展示。

上面的示例中, Mem: 这一行:

  • total 表示总共有 7822MB 的物理内存(RAM),即7.6G。
  • used 表示物理内存的使用量,大约是 322M。
  • free 表示空闲内存;
  • shared 表示共享内存?;
  • buff/cache 表示缓存和缓冲内存量; Linux 系统会将很多东西缓存起来以提高性能,这部分内存可以在必要时进行释放,给其他程序使用。
  • available 表示可用内存;

输出结果很容易理解。 Swap 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。

2. 查看 /proc/meminfo
另一种方法是读取 /proc/meminfo 文件。 我们知道, /proc 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。

$ cat /proc/meminfo
MemTotal:        8010408 kB
MemFree:          323424 kB
MemAvailable:    6956280 kB
Buffers:          719620 kB
Cached:          5817644 kB
SwapCached:          132 kB
Active:          5415824 kB
Inactive:        1369528 kB
Active(anon):     385660 kB
Inactive(anon):   249292 kB
Active(file):    5030164 kB
Inactive(file):  1120236 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194304 kB
SwapFree:        4193580 kB
Dirty:                60 kB
Writeback:             0 kB
AnonPages:        247888 kB
Mapped:            61728 kB
Shmem:            386864 kB
Slab:             818320 kB
SReclaimable:     788436 kB
SUnreclaim:        29884 kB
KernelStack:        2848 kB
PageTables:         5780 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8199508 kB
Committed_AS:     942596 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       22528 kB
VmallocChunk:   34359707388 kB
HardwareCorrupted:     0 kB
AnonHugePages:     88064 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      176000 kB
DirectMap2M:     6115328 kB
DirectMap1G:     4194304 kB

重点关注这些数据:

  • MemTotal, 总内存
  • MemFree, 空闲内存
  • MemAvailable, 可用内存
  • Buffers, 缓冲
  • Cached, 缓存
  • SwapTotal, 交换内存
  • SwapFree, 空闲交换内存

提供的信息和 free 命令看到的差不多。

3. 使用 vmstat 命令
使用 vmstat -s 命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo。

示例如下:

$ vmstat -s
      8010408 K total memory
       344016 K used memory
      5444384 K active memory
      1380052 K inactive memory
       283468 K free memory
       719668 K buffer memory
      6663256 K swap cache
      4194304 K total swap
          724 K used swap
      4193580 K free swap
    132859985 non-nice user cpu ticks
        29816 nice user cpu ticks
     37600986 system cpu ticks
   6643195204 idle cpu ticks
      2721822 IO-wait cpu ticks
            0 IRQ cpu ticks
       592418 softirq cpu ticks
            0 stolen cpu ticks
     13092214 pages paged in
    293257816 pages paged out
            8 pages swapped in
         1365 pages swapped out
   3396492150 interrupts
   1327657196 CPU context switches
   1548248091 boot time
      8811556 forks


最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。

4. 使用 top 命令
top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。

示例输出:

top - 15:20:30 up  6:57,  5 users,  load average: 0.64, 0.44, 0.33
Tasks: 265 total,   1 running, 263 sleeping,   0 stopped,   1 zombie
%Cpu(s):  7.8 us,  2.4 sy,  0.0 ni, 88.9 id,  0.9 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8167848 total,  6642360 used,  1525488 free,  1026876 buffers
KiB Swap:  1998844 total,        0 used,  1998844 free,  2138148 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                 
 2986 enlighte  20   0  584m  42m  26m S  14.3  0.5   0:44.27 yakuake                                                                                 
 1305 root      20   0  448m  68m  39m S   5.0  0.9   3:33.98 Xorg                                                                                    
 7701 enlighte  20   0  424m  17m  10m S   4.0  0.2   0:00.12 kio_thumbnail

各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。

例如:

# CentOS
top -o %MEM
top -o %CPU

# mac
top -o mem
top -o cpu

碰到不清楚的,请使用 top -h 查看帮助信息。

重点关注顶部的 KiB Mem 和 KiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。

5. htop 命令
与 top 命令类似, 但 htop 还展示了其他的各种信息, 而且支持彩色显示。
在这里插入图片描述
顶部的消息显示了CPU使用率, 以及RAM和交换内存的使用情况。

如果没安装,可以使用类似的命令:

yum install htop -y

查看物理内存信息
想要查看物理内存的硬件信息,可以使用 demidecode 命令。
这个命令会输出物理内存相关的信息。

$ dmidecode -t 17

# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: DIMM 0
	Bank Locator: Not Specified
	Type: RAM
	Type Detail: Other
	Speed: Unknown
	Manufacturer: Alibaba Cloud
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Rank: Unknown
	Configured Clock Speed: Unknown
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

dmidecode -t 17 展示的信息包括 内存大小, 类型,带宽等信息。 当然,因为示例中使用的是虚拟机,所以有的信息是不可用的。

如果不加 -t 参数,则展示所有类型的硬件信息。 也可以指定其他 -t 参数来查看对应的硬件信息。

小结

本文介绍的命令都可以在shell终端上执行,不需要图形界面来展示。
如果使用带有图形界面的Linux桌面系统,则使用图形工具会更直观。 一般来说图形桌面都会提供对应的系统监控工具。 输出容易理解的 cpu, 物理内存, 交换内存, 网络带宽等资源的使用信息。

本小结来自CSDN博客

**3.linux查看磁盘使用情况命令

第一:统一磁盘整体情况,包括磁盘大小,已使用,可用
1.查看当前目录

命令

df -h

结果:

在这里插入图片描述
统一每个目录下磁盘的整体情况

2.查看指定目录

在命令后直接放目录名,比如查看“usr”目录使用情况:

df -h /usr/

结果:
在这里插入图片描述
统一了指定目录一使用情况,及分配的最大空间

第二:具体查看文件夹的占用情况。
1.查看当前目录每个文件夹的情况。

命令:

du --max-depth=1 -h 

结果如下:
在这里插入图片描述最后一行统计整体占用多少磁盘

2.指定目录

只要在命令后直接根目录名,以目录“/usr”为例
命令如下:

du --max-depth=1 -h  /usr/

结果如下:
在这里插入图片描述
第三:计算文件夹大小

为了快算显示,同时也只是想查看目录整体占用大小。可以直接使用du -sh 命令,如果想查看指定目录,直接在命令后根目录即可。
命令:

du -sh /usr/

结果如下:
在这里插入图片描述
第四:总结

其中df -h和du -sh使用的比较多,一个统计整体磁盘情况,一个看单独目录点用情况,而命令du --max-depth=1 -h查看了目录下文件夹占用情况,使用比较少,可以用du -sh代替,而且命令较长,当然并不是说它没用。

**4.查看目录使用状况

du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量

du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。

**5.linux查看某个端口下的使用情况

netstat -tln
用来查看linux的端口使用情况

例如:

netstat -ntulp |grep 7888

结果:
在这里插入图片描述
**6.Linux实时查看日志的四种命令详解

如何在Linux中实时查看日志文件的内容?那么有很多实用程序可以帮助用户在文件更改或不断更新时输出文件的内容。在Linux中实时显示文件内容的常用命令是tail命令(有效地管理文件)。

1. tail命令 - 实时监控日志

如上所述,tail命令是实时显示日志文件的最常用解决方案。但是,显示该文件的命令有两个版本,如下面的示例所示。

在第一个示例中,命令tail需要-f参数来跟踪文件的内容。

$ sudo tail -f /var/log/apache2/access.log

在这里插入图片描述
实时监控Apache日志

该命令的第二个版本实际上是一个命令本身:tailf。你不需要使用该-f开关,因为该命令是与-f参数一起内置的。

	
$ sudo tailf /var/log/apache2/access.log

在这里插入图片描述
实时Apache日志监控

通常,logrotate实用程序会在Linux服务器上频繁地轮换日志文件。要查看每日基础上轮换的日志文件,可以使用tail -F命令。

tail -F将跟踪正在创建的新日志文件,并开始跟踪新文件而不是旧文件。

$ sudo tail -F /var/log/apache2/access.log

但是,默认情况下,tail命令将显示文件的最后10行。例如,如果你只想实时查看日志文件的最后两行,请使用-n与该-f标志结合的文件,如下例所示。

	
$ sudo tail -n2 -f /var/log/apache2/access.log

在这里插入图片描述
2.multitail命令 - 实时监控多个日志文件

另一个有趣的实时显示日志文件的命令是multitail命令。该命令的名称意味着multitail实用程序可以实时监视和跟踪多个文件。Multitail还允许你在受监视的文件中来回导航。

要在基于Debian和RedHat的系统中安装mulitail实用程序,请发出以下命令。

$ sudo apt install multitail [On Debian&Ubuntu]

$ sudo yum install multitail [On RedHat&CentOS]

$ sudo dnf install multitail [On Fedora 22+ version]

要同时显示两个日志文件的输出,请执行以下示例中所示的命令。

	
$ sudo multitail /var/log/apache2/access.log /var/log/apache2/error.log

在这里插入图片描述
3. lnav命令 - 实时监控多个日志文件

另一个有趣的命令,类似于multitail命令,是lnav命令。Lnav实用程序还可以观看和跟踪多个文件并实时显示其内容。

通过发出以下命令在基于Debian和RedHat的Linux发行版中安装lnav实用程序。

$ sudo apt install lnav [On Debian&Ubuntu]

$ sudo yum install lnav [On RedHat&CentOS]

$ sudo dnf install lnav [On Fedora 22+ version]

通过发出命令同时观察两个日志文件的内容,如下例所示。

$ sudo lnav /var/log/apache2/access.log /var/log/apache2/error.log

在这里插入图片描述

4. less命令 - 显示日志文件的实时输出

最后,如果键入,则可以使用less命令显示文件的实时输出Shift+F。

与tail实用程序一样,Shift+F在打开的文件中按下less将在文件结束后开始。或者,你也可以用较少的+F旗帜开始进入现场观看文件。

	
$ sudo less + F /var/log/apache2/access.log

在这里插入图片描述
**7.linux查看日志文件内容命令

1. more指令 —— 分页显示文件内容
more指令会以一页一页的形式显示文件内容,按空白键(space)显示下一页内容,按Enter键会显示下一行内容,按 b 键就会往回(back)一页显示,其基本用法如下:

more file1 查看文件file1的文件内容;

more -num file2 查看文件file2的内容,一次显示num行;

more +num file3 查看文件file3的内容,从第num行开始显示;

2. less指令 —— 可以向前或向后查看文件内容
less指令查看文件内容时可以向前或向后随意查看内容;

less指令的基本用法为:

less file1 查看文件file1的内容;

less -m file2 查看文件file2的内容,并在屏幕底部显示已显示内容的百分比;

按空格键显示下一屏的内容,按回车键显示下一行的内容;

按 U 向前滚动半页,按 Y 向前滚动一行;

按[PageDown]向下翻动一页,按[PageUp]向上翻动一页;

按 Q 退出less命令;

3. head指令 —— 查看文件开头的内容
head指令用于显示文件开头的内容,默认情况下,只显示文件的头10行内容;

head指令的基本用法:

head -n <行数> filename 显示文件内容的前n行;

例如:head -n 5 file1 显示文件file1的前5行内容

head -c <字节> filename 显示文件内容的前n个字节;

例如:head -c 20 file2 显示文件file2的前20个字节内容

4. tail指令 —— 显示文件尾部的内容
tail指令用于显示文件尾部的内容,默认情况下只显示指定文件的末尾10行;

tail指令的基本用法:

tail file1 显示文件file1的尾部10行内容;

tail -n <行数> filename 显示文件尾部的n行内容;

例如:tail -n 5 file1 显示文件file1的末尾5行内容

tail -c <字节数> filename 显示文件尾部的n个字节内容;

例如:tail -c 20 file2 显示文件file2的末尾20个字节

5. cat指令 —— 显示文件内容
使用cat命令时,如果文件内容过多,则只会显示最后一屏的内容;

cat指令的基本用法:

cat file1 用于查看文件名为file1的文件内容;

cat -n file2 查看文件名为file2的文件内容,并从1开始对所有输出的行数(包括空行)进行编号;

cat -b file3 查看文件名为file3的文件内容,并从1开始对所有的非空行进行编号;

该部分选自CSDN博客

**8.不想查看文件中的内容、不想查看多个内容

1.grep -v"xxx"file
2.grep -v "xxx|yyy"file

**9.取文件的前五十行

head -n 50 file

**10.查看文件的多少行

wc -l filename

**11.分割一个文件,以1000行为一个文件。

split -l 1000 filename -d -a 5

**12.将一个文件中的A替换成B。

在命令行模式下:输入 %s/A/B/g

**13.动态的查看进程状态

watch -nl “ps-ef” 或者top

**14.如何让linux内一个文件的大小变为两倍

俺也不会,呜呜呜!!!
等大佬捞我

**15.linux里面的$是什么意思?

linux中的$即“命令提示符”就是你可以一在后面输入命令的,命令提示符前面可能提示当前用户的一些信息,在linux下会提示用户当前目录以及当前用户。

        $0   #  脚本启动名(包括路径)
        $n   #  第n个参数,n=1,2,…9
        $*   #  所有参数列表(不包括脚本本身)
        $@   #  所有参数列表(独立字符串)
        $#   #  参数个数(不包括脚本本身)
        $$   #  当前程式的PID
        $!   #  执行上一个指令的PID
        $?   #  执行上一个指令的返回值

**16.句柄 设备名称 逻辑设备名 缺省设备
00 标准输入设备 CON 键盘
01 标准输出设备 con 显示器
02 标准错误设备 CON 显示器
03 标准辅助设备 AUX 串行口
04 标准列表设备 PRN 打印机

**17.tar命令

tar命令中
-x:extract files from an archive即从归档文件中释放文件;
-v:verbosely list files processed即详细列出要处理的文件;
-z:filter the archive through gzip即通过gzip解压文件;
-f:use archive file or device ARCHIVE即使用档案文件或设备;
通常情况下解压.tar.gz和.tgz等格式的归档文件就可以直接使用tar xvzf;
因为要解压到指定目录下,所以还应在待解压文件名后加上-C(change to directory)参数,即选项A所示格式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值