文章目录
1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. Linux 命令和工具
2.1 查询进程信息
# 查询进程命名空间信息
ps -e -o pidns,pid,args
lsns
# 查看系统进程信息
ps -ef
top
2.2 内存工具
sudo dmidecode -t memory | grep Speed # 查询 DDR 速度
sudo lshw -short -C memory
pcstat # 查看文件 page cache 状态,https://github.com/tobert/pcstat
2.3 CPU 工具
lscpu
/proc/cpuinfo
/sys/devices/system/cpu/*
2.4 磁盘工具
fdisk # 查询、格式华磁盘等
gparted # 磁盘扩容等
df # 磁盘已用、剩余容量
du # 查看目录树、文件占用磁盘容量
lsblk # 磁盘块信息
iostat # io 行为观测
iotop # io 行为观测
losetup # loop device 工具
......
2.5 虚拟化相关工具
# 查看系统是否运行在 虚拟机下: lscpu, systemd-detect-virt
# . lscpu 是来自于 util-linux 工具的程序,通过 CPUID 指令来获取的信息来判定系统是否运行于虚拟机下;
# . systemd-detect-virt 来自于 systemd 包的一个程序,具体实现没探究过。
$ lscpu
Architecture: x86_64
...
Virtualization features:
Hypervisor vendor: KVM
Virtualization type: full
...
$ systemd-detect-virt
none
$ systemd-detect-virt
kvm
$ systemd-detect-virt
vmware
# 通过查看系统首号进程(PID=1)的 cgroup 属性节点,查看系统是否运行于容器环境
$ cat /proc/1/cgroup
2.6 ELF 工具
readelf
objdump
nm
patchelf
strings
......
2.6.1 获取 ELF 目标文件的编译器信息
有时候,需要知道已经编译好的 ELF 目标文件
所用的编译器版本,可以尝试以下方法:
readelf -p .comment 目标文件
objdump -s --section .comment 目标文件
strings 目标文件 | grep 'GCC' // 针对GCC
上面的基本原理都是提取 ELF .comment
段 的信息。该段是用来保存版本控制信息的。
2.7 系统信息查询
uname
/proc/version
/proc/version_signature
/proc/sys/kernel/version
/proc/sys/kernel/osrelease
/proc/sys/kernel/ostype
/proc/sys/kernel/bootloader_type
/proc/sys/kernel/bootloader_version
2.8 搜索查找
# grep 时排除多个目录
grep -E -R 'google|Animal|hunting' --exclude-dir=my-first-dir --exclude-dir=my-second-dir
grep -E -R 'google|Animal|hunting' --exclude-dir={my-first-dir,my-second-dir}
How To Exclude Matches, Directories Or Files with Grep
2.9 安装包管理工具
apt-get update # 按 /etc/apt/sources.list 的包源,更新系统软件包源信息数据库
apt-cache search <package-name> # 从系统软件包源信息数据库,搜索给定名称的软件包
dpkg-query -S <absolute path of file> # 搜索指定文件所在的、本地已安装的 package 名称
dpkg-query -L <package-name> # 列举指定文件包包含的文件列表
apt-file search <file-name> # 从系统软件包源信息数据库,搜索哪些软件包包含指定文件
...
2.10 其它
# screen 是一个窗口管理程序,可以用来分离 终端 和 运行程序, screen 典型应用场景之一是 ssh 远程登录编译。
# 在我们使用 ssh 登录到远程服务器,编译耗时长的大的工程时(如编译 android 系统),中间可能出现登录终端电脑
# 和 服务器短线的情况,由于我们发起的编译命令隶属于 ssh 登录的 session,当登录终端断开,隶属于该登录 session
# 的进程都将随之退出,我们的编译工作也就被中断了,此时我们可以通过 screen 将我们的编译命令放到服务器电脑的后台
# 运行,这样我们在需要时直接退出 ssh 登录中断,编译工作也不会受到影响,再次 ssh 登录再切入到服务器电脑后台看看
# 编译工作是否完成。使用 ssh 远程登录服务器后:
$ screen -S test # 首次,我们创建一个服务器后台窗口,会进入到这个后台窗口
$ make # 在 服务器后台窗口 执行耗时的编译命令,接着按 Ctrl + A,D 退出后台窗口,最后 断开 ssh 连接,然后再次登录
$ screen -ls # 查看现有的服务器后台窗口, 3282678 为后台窗口程序的 PID
There is a screen on:
3282678.test (12/23/2023 03:38:02 PM) (Detached)
$ screen -r 3282678 # 切回服务器后台窗口
$ kill 3282678 # 即使服务器后台窗口的命令执行完毕,后台窗口一直存在,不需要的时候用 kill 移除它
3. 后记
本着积少成多、集腋成裘的想法,着力将本文打造成一篇 Linux 用户常见命令的常见用法快捷参考,将持续更新。