程序员开发Linux常用命令

本文对程序开发过程中常用的Linux命令进行总结,随时进行补充,属于科普篇,希望对大家有所帮助

  • file命令

该命令用于查看文件的基本信息,比如编码格式,文件类型等信息,对于可执行程序或者动态链接库文件,还以可以显示出架构信息。这个命令我的用的比较少,特此记载。

  • find命令(不区分大小写搜索)

使用sudo find ./ -iname "*webengine*",常用的find命令是sudo find / -name "xxxxxx",这个命令查找是按照文件名成搜索的,不搜索文件里面的内容,如果要搜索文件里面的内容使用grep命令。回到正题如果要不区分大小写搜索文件名,则需要使用-iname

  • du 统计目录磁盘控件占用情况

该命令可以查看一个目录下文件所占空间的大小,可以展示目录下各个文件的大小,也可以展示目录总计的大小,例如du -sh是目录总计的文件大小,查看目录下文件夹大小命令如下:

du -h --max-depth=1 .

上面命令的含义是查询当前目录下各个文件加的大小:

consys@consys-Lenovo-Legion-Y7000:~/tool$ du -h --max-depth=1 .
492M    ./qtvirtualkeyboard-everywhere-src-5.15.2
37M    ./yasm-1.3.0
11G    ./qt-everywhere-src-5.15.2
1.7G    ./pycharm-community-2023.1.1
3.0M    ./fcitx5-qt-
329M    ./vedioFrame
400M    ./thirdParty
65M    ./Video_Codec_SDK_11.1.5
36M    ./x265_3.5
904M    ./gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu
91M    ./ffmpeg-5.1.1
1.5G    ./Y2326_build
4.5M    ./fdbus-master
329M    ./vedioFrame_net_dowload
51M    ./openssl-1.0.2k
50M    ./osd_chinese
19M    ./qwebeng
15M    ./automake-1.15
1.6G    ./RunTimeBin
295M    ./x86-qt-output
933M    ./ffmpeg
32M    ./FreeRDP-2.11.2
25G    ./arm-toolchain
21M    ./build-main-Desktop_Qt_5_15_2_GCC_64bit-Debug
844K    ./nv-codec-headers
54M    ./Video_Codec_SDK_9.0.20
140M    ./WizQTClient-master
131M    ./QHVlcPlayer
31M    ./sqliteman
11M    ./autoconf-2.65
720K    ./macros-master
5.0G    ./qt-creator-opensource-src-4.9.2
2.4G    ./OpenDDS-DDS-3.25
68K    ./QSVN_Demo
18M    ./x264-master
23M    ./QtProject-master
4.0K    ./aarch64-qt-output
14M    ./pkg-config-0.29.1
4.0K    ./平板软件备份
18G    ./gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
2.4G    ./cudnn-linux-x86_64-8.9.2.26_cuda11-archive
79M    ./nss
9.6G    ./qt-everywhere-src-5.15.2_bak
968M    ./gdb-10.2
132K    ./c++实现进程的终止
43M    ./nasm-2.15
87M    ./appIcon
4.3M    ./build-QSVN_Demo-Desktop_Qt_5_15_2_GCC_64bit-Debug
21M    ./wireshark
112K    ./mpp_rga
93G    .

  • ldd

该命令一般应用于应用程序或者动态链接库文件的依赖关系,例如一个应用程序依赖多个so,通过该命令可以将依赖关系列出来,并且如果某个so文件找不到,则进行提示not found。对于动态链接库同样的道理。这是我一般的用法。

  • 查看操作系统信息

若要查看操作系统的基本信息,例如内核版本,主机名称,处理器类型(例如aarch64等,表示是arm架构),常用命令uname -auname命令常用查看操作系统内核版本的信息

如果要查看当前操作系统发行信息使用uname是不够的,需要使用如下指令:

cat /proc/verison //该命令可以打印出操作系统的版本信息

也可以使用lsb_release -a来查看操作系统的信息,如下图所示:

  • 查看cpu信息

经常需要常看cpu的基本信息,通过查询可以通过如下命令来实现:

cd /proc/

vim cpuinfo

#或者如下方式

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

 上面是一查询cpu信息的方法,但是我更喜欢使用lscpu命令:

consys@consys-Lenovo-Legion-Y7000:~$ lscpu
架构:                           x86_64     
CPU 运行模式:                   32-bit, 64-bit
字节序:                         Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU:                             8
在线 CPU 列表:                  0-7
每个核的线程数:                 2
每个座的核数:                   4
座:                             1
NUMA 节点:                      1
厂商 ID:                        GenuineIntel
CPU 系列:                       6
型号:                           158
型号名称:                       Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
步进:                           10
CPU MHz:                        3900.093
CPU 最大 MHz:                   4000.0000
CPU 最小 MHz:                   800.0000
BogoMIPS:                       4599.93
虚拟化:                         VT-x
L1d 缓存:                       128 KiB
L1i 缓存:                       128 KiB
L2 缓存:                        1 MiB
L3 缓存:                        8 MiB
NUMA 节点0 CPU:                 0-7
Vulnerability Itlb multihit:     KVM: Mitigation: VMX disabled
Vulnerability L1tf:              Mitigation; PTE Inversion; VMX conditional cach
                                 e flushes, SMT vulnerable
Vulnerability Mds:               Mitigation; Clear CPU buffers; SMT vulnerable
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled v
                                 ia prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user
                                  pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, IBPB condit
                                 ional, IBRS_FW, STIBP conditional, RSB filling
Vulnerability Srbds:             Mitigation; Microcode
Vulnerability Tsx async abort:   Not affected
标记:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush dts acpi mmx f
                                 xsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rd
                                 tscp lm constant_tsc art arch_perfmon pebs bts
                                 rep_good nopl xtopology nonstop_tsc cpuid aperf
                                 mperf pni pclmulqdq dtes64 monitor ds_cpl vmx e
                                 st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_
                                 1 sse4_2 x2apic movbe popcnt tsc_deadline_timer
                                  aes xsave avx f16c rdrand lahf_lm abm 3dnowpre
                                 fetch cpuid_fault epb invpcid_single pti ssbd i
                                 brs ibpb stibp tpr_shadow vnmi flexpriority ept
                                  vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep
                                  bmi2 erms invpcid mpx rdseed adx smap clflusho
                                 pt intel_pt xsaveopt xsavec xgetbv1 xsaves dthe
                                 rm ida arat pln pts hwp hwp_notify hwp_act_wind
                                 ow hwp_epp md_clear flush_l1d

  •  查看cpu占有率

很多时候人们不光对cpu的信息感兴趣,更多的时候是人们更关心cpu的占有率,当前cpu都是多核状态,有时人们也关心每个核的cpu占有率状态。这种情况下可以使用mpstat命令。

consys@consys-Lenovo-Legion-Y7000:~$ mpstat -P ALL 
Linux 5.10.0-3-generic (consys-Lenovo-Legion-Y7000) 	2023年09月25日 	_x86_64_	(8 CPU)

16时59分47秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
16时59分47秒  all   11.25    0.20    2.26    0.04    0.00    0.01    0.00    0.00    0.00   86.24
16时59分47秒    0   11.67    0.29    2.26    0.04    0.00    0.00    0.00    0.00    0.00   85.74
16时59分47秒    1   11.49    0.20    2.26    0.04    0.00    0.00    0.00    0.00    0.00   86.01
16时59分47秒    2   11.46    0.21    2.26    0.04    0.00    0.00    0.00    0.00    0.00   86.04
16时59分47秒    3   11.52    0.22    2.27    0.04    0.00    0.00    0.00    0.00    0.00   85.94
16时59分47秒    4   10.34    0.05    2.24    0.04    0.00    0.03    0.00    0.00    0.00   87.31
16时59分47秒    5   11.19    0.22    2.27    0.04    0.00    0.00    0.00    0.00    0.00   86.28
16时59分47秒    6   11.16    0.21    2.26    0.04    0.00    0.03    0.00    0.00    0.00   86.30
16时59分47秒    7   11.14    0.19    2.28    0.04    0.00    0.00    0.00    0.00    0.00   86.35

上面里例子中,可以看到cpu列的含义是表示的各个cpu核的cpu占有率,all表示整个cpu的平均占有率;%usr表示的是该核用户空间cpu占有率,%sys的含义是内核空间在该核的cpu占有率;%iowait应该是io操作等待时间;%irq表示硬中断;%soft表示软中断;%idle表示的空闲时间占比,其它列感兴趣的可以自己理解,我也不太清楚。一般情况下看各个核的cpu占有率只要1-%idle就可以了

另外也可以指定该命令定时刷新,使用方式如下:

mpstat -P ALL 1
mpstat -P ALL 1 30

上面在ALL后面数字1的含义是1s检测一次。1后面的数字30的含义是检测30次。这下应该明白了吧。

mpstat安装方法

$ sudo apt-get install sysstat

重点:

若 %iowait 的值过高,表示硬盘存在I/O瓶颈
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。

  • 如何查询linux操作系统默认的镜像源路径

进入到一个linux操作系统,有必要知道该操作系统默认的镜像源地址在在哪里,那如何获得镜像源地址呢?镜像源地址存放在一个文件中,文件路径为/etc/apt/sources.list,通过vim打开sources.list这个文件里面就可以看到默认的镜像源地址,通过浏览器可以看到镜像源里面的目录,一般情况下分为dist和pool两个目录,这个目录下的作用待补充,我也不太清楚他们之间细微的区别。

  • 查看已经安装的程序列表

apt list --installed

  • linux 服务相关命令

在redhat系统下可以私用chkcofig命令查询服务信息,但是由于我自己的操作系统是debian,不存在这个命令,故这里介绍使用不使用chkconfig查询服务的情况。

  1. 查看系统上有哪些服务:service --status-all,需要注意的是输出的信息包含[ + ],[ - ]等,其中[ + ]的含义是已经运行的服务,[ - ]表示的未启动的服务,其他符号的含义再查询。
  2. 启动服务命令: service 服务名称 start
  3. 关闭服务命令: service 服务名称 stop
  4. 重启服务命令: service 服务名称 restart
  5. 查看翻个服务状态: service 服务名称 stutus
  6. 其他方式查看服务的方式: 通过ps -ef |grep 服务名称 来查找系统中是否存在对应的进程,如果存在,则说明进程已启动
  • 查看父进程id命令

cat /proc/pid/status

  • 查看父进程下有哪些子进程

pstree -p pid

  • 查看一个进程下线程的相关信息

如果要查看一个进程下线程的个数可以使用命令:cat /proc/pid/status,列出的内容中其中有一项就包含线程的数量,如 Threads: 3

还有另外一种方法可以查看进程下线程的信息,即ps 命令,格式如下

ps -T -p <pid>,输出的信息中SSID表示的是线程ID,CMD栏表示的是线程的名称

第三种显示线程信息的方法,使用top命令,格式如下:

top -H -p <pid>

最后一种查看线程的方法,使用htop命令,可以通过树的形式来显示一个进程下的线程信息。至于如何设置百度上有很多,请咨询查询。

  • 查看一个进程下各个线程的调用栈信息

使用pstatck命令。

  • 查看一个进程下有哪些子线程

可以考虑top命令,pstree命令及htop命令。其中top必须携带选项H,htop需要需要F5。

  • top命令介绍

该部分对top命令进行一个基本的介绍,目的是介绍top一些常用的用法。top命令是linux提供的一种用于查询系统进程或者线程状态的一种方法,可以用于展示cpu负载,内存,运行时间等一些信息,另外需要注意的是top命令是一个交互命令,在执行过程中可以通过输入一些交互命令来完成特定的功能,如H等。下面对我认为比较重要的一些用法列在下面:

  1. 按进程查看top信息,某些情况下我们仅关注某个进程的一些状态信息,甚至查看某个进程下有哪些线程信息,命令:top -H -p pid(该pid可以通过ps命令进行查询)或者top -p pid,然后按下H键就可以切换到线程模式
  2. 设置时间间隔,top命令默认3s刷新一次,如果需要修改刷新时间,在top命令执行后,点击d键,然后可以看到“change delay from 3.0 to”的提示,然后通过键盘输入想要刷新的时间间隔(单位为s),然后敲回车按钮,就可以生效。
  3. 如果需要将top命令保存成文件可以通过-o选项来实现,例子如下所示:top -o filename
  4. 如果有需求要将top命令的输出要向其它程序或者文件发送,可以通过-b选项实现,但是一般情况下-b选项经常与-n选项组合使用,注意在使用-b选项后,top命令将不能进行交互功能。使用方法:top -b -n 3 -o filename(含义是将top命令的输出到文件中,输出3次)。
  5. 切换内存、负载、任何的显示模式,可以通过"l"键和“m”键和"t"键来实现,其中l表示的是负载显示模式,也可以控制负载的显示开关;m表示的是内存,可以改变内存的显示模式,也可以控制内存信息的显示开关;t表示的认为汇总信息的显示模式及显示开关。
  6. top命令显示COMMAND字段时默认会对程序名称进行截断,仅显示部分名称,如果要看完成名称可以通过输入c命令即可显示完整名称。
  7. 显示特定用户的进程或者线程,可以使用u命令,输入该命令后会提示“which user (blank for all)”提示,再其后输入想要查看的用户名,然后输入回车即可。
  8. 可以在top命令中结束一个任务,结束任务通过k命令来实现,点击k键后,提示“pid to signal/kill”,再其后输入pid,然后输入回车即可杀死该任务,这是很重要的一个功能
  9. 修改任务的优先级,可以通过输入r键来触发修改任务的优先级,提示“PID to renice [default pid = 52211]”再其后输入要修改的进程的pid,输入回车,然后再次输入优先级(优先级范围为-20至19,数值越小,优先级越高),再次输入回车即可。
  10. top命令有很多个字段选项,默认情况下top命令的显示只有部分字段,如果有需求需要显示更多的字段或者更少的字段显示,可以在top命令执行后输入“f”键,进入字段选择界面,就让该界面后就可以大致命令咋回事,这里仅简单的讲解一下:方向上下键表示的上次导航,方向左右键表示的是选择和去选择,空格键表示选择和去选择。如下图所示:

top命令常用字段含义
名称含义
PID进程ID,进程的唯一标识符
USER进程所有者的实际用户名
PR进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态
NI进程的nice值(优先级)。越小的值意味着越高的优先级
VIRT进程使用的虚拟内存
RES驻留内存大小。驻留内存是任务使用的非交换物理内存大小
SHRSHR是进程使用的共享内存
%CPU自从上一次更新时到现在任务所使用的CPU时间百分比

%MEM

进程使用的可用物理内存百分比
TIME+任务启动后到现在所使用的全部CPU时间,精确到百分之一秒
COMMAND

运行进程所使用的命令

top常用交互命令
交互命令含义
H进入线程模式
u指定显示某个用户的进程
r修改任务的优先级
k杀死指定任务
c显示应用程序全程
l用于控制负载区域的显示模式及开关
m用于控制内存区域的显示模式及开关
t用于控制任务区域的显示模式及开关
f控制top命令的字段显示
R反向排序
z/Z

彩色显示控制选项

  • 查看软件包是否安装

dpkg -l |grep 软件包名称

  • 查看软件包安装路径

dpkg -L 软件包名称

  • 在指定目录下的文件中查找字符串

grep -r "xxxxxx"  /path/to/documents,如果在指定目录下查找文件名而不是想匹配字符串,则可以通过grep -rl "xxxxxxxx" /path/to/documents

  • 查看磁盘分区情况

sudo fdisk -l命令可以查看磁盘情况,如下所示:

[sudo] consys 的密码:
Disk /dev/nvme0n1:476.96 GiB,512110190592 字节,1000215216 个扇区
Disk model: WDC PC SN720 SDAPNTW-512G-1101          
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:2B8553C9-A2D6-4619-A683-1FBAF2C141FC

设备                起点       末尾      扇区   大小 类型
/dev/nvme0n1p1      2048    1050623   1048576   512M EFI 系统
/dev/nvme0n1p2   1050624    3147775   2097152     1G Linux 文件系统
/dev/nvme0n1p3   3147776  212862975 209715200   100G Linux 文件系统
/dev/nvme0n1p4 212862976  323997695 111134720    53G Linux 文件系统
/dev/nvme0n1p5 323997696  980973567 656975872 313.3G Linux 文件系统
/dev/nvme0n1p6 980973568 1000214527  19240960   9.2G Linux swap

 从上面的引用可以看到硬盘分成了6个区域,其中/dev/nvme0n1px表示的是分区名称,这个列出了磁盘分区的个数和每个分区的大小。

  • 查看磁盘的各个分区的挂载情况和磁盘的使用情况

此处可以使用df命令来实现,常用的选项是df -lh ,各个参数含义如下:

-a或--all:显示所有的文件系统,包括虚拟文件系统
-B:--block-size=<区块大小> 以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-l或--local:仅显示本地端的文件系统;
-k或--kilobytes:指定区块大小为1024字节,相当于--block-size=1k
-m或--megabytes:指定区块大小为1048576字节,相当于--block-size=1M
--sync:在取得磁盘使用信息前,先执行sync指令;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;

 例子如下所示:

consys@consys-Lenovo-Legion-Y7000:~$ df -lh
文件系统        容量  已用  可用 已用% 挂载点
udev            3.8G     0  3.8G    0% /dev
tmpfs           784M  3.1M  781M    1% /run
/dev/nvme0n1p3   98G   54G   40G   58% /----结合fdisk命令可以看到该区域为磁盘分区
tmpfs           3.9G  216M  3.7G    6% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock  --------tmpfs表示的是内存文件系统,非硬盘
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup------tmpfs表示的是内存文件系统
/dev/nvme0n1p2  976M   97M  812M   11% /boot  ------结合fdisk命令可以看到该区域为磁盘分区
/dev/nvme0n1p1  511M  280K  511M    1% /boot/efi-----结合fdisk命令可以看到该区域为磁盘分区
/dev/nvme0n1p5  308G  162G  131G   56% /data
tmpfs           784M  136K  783M    1% /run/user/1000

 从上面可以看到各个分区的使用情况,包括容量大小、已用空间、可用空间、使用百分比等。

  • nm命令,查看动态库、可执行文件中的符号信息

如果要查看可执行文件中的符号信号,可以使用nm命令直接使用即可。

如果要查看动态库中的符号信息,可以通过nm -D so文件名称

  • strings命令的使用方法

该命令可以用于文本文件或者二进制文件的符号查找,但是一般用于二进制目标文件、库或可执行文件中的可打印字符串。例如在某个so中查找某个字符串是否存在,其常用的使用方法如下:

  1. 打印可执行文件中所有字符串:strings /path/to/exe,也可以配合grep命令使用。
  2. 查看某一个字符串属于哪个文件:strings -f * | grep "xxxx"
  3. 查看glibc版本:strings /lib64/libc.so.6 |grep GLIBC
  • 查看网络设备状态的统计信息之sar

使用命令格式如下,数字1的含义是1s检测一次,数字5表示检测5次:

consys@consys-Lenovo-Legion-Y7000:~$ sar -n DEV 1 5
Linux 5.10.0-3-generic (consys-Lenovo-Legion-Y7000)     2023年09月25日     _x86_64_(8 CPU)

17时19分34秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
17时19分35秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17时19分35秒    enp8s0      2.00      1.00      0.12      0.12      0.00      0.00      0.00      0.00
17时19分35秒    wlp7s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

IFACE      网络设备名                          
rxpck/s    每秒接收的包总数                 
txpck/s    每秒传输的包总数                  
rxbyt/s    每秒接收的字节(byte)总数        
txbyt/s    每秒传输的字节(byte)总数        
rxcmp/s    每秒接收压缩包的总数              
txcmp/s    每秒传输压缩包的总数              
rxmcst/s   每秒接收的多播(multicast)包的总数

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值