本文总结了一些常用的Linux命令,主要用于日常操作和系统管理。希望对学习Linux的朋友有所帮助。
查看某个PID是如何启动的
在 Linux 中,要查看一个进程(已知 PID)具体是“怎么拉起来的”,最核心的手段是查看 /proc 虚拟文件系统下的对应进程目录。
假设进程 PID 是 1234,可以通过以下几个步骤全面还原它的启动现场:
查看完整的启动命令 (cmdline)
这是最准确的方法,能看到启动程序时传入的所有参数。由于该文件中的参数是以隐藏的 \0(空字符)分隔的,直接查看会粘在一起,建议配合 tr 命令将其替换为空格:
cat /proc/1234/cmdline | tr '\0' ' '这会输出类似:/usr/bin/python3 /opt/app/main.py --config /etc/config.json,让你清楚地看到它是带了什么参数启动的。
查看真正的可执行文件路径 (exe)
如果你看到启动命令里用的是相对路径(比如 ./start.sh)或者系统别名,想知道到底指向硬盘上的哪个实际文件,可以查看 exe 软链接:
ls -l /proc/1234/exe输出结果会指向程序真正的物理路径(例如 -> /usr/local/bin/node)。
查看启动时的当前工作目录 (cwd)
程序的运行往往依赖它启动时所在的目录(比如读取相对路径的配置文件)。通过查看 cwd (Current Working Directory) 可以知道进程是从哪个目录下被拉起的:
ls -l /proc/1234/cwd箭头指向的目录就是程序启动时所在的路径。
查看运行时的环境变量 (environ)
有些程序是通过环境变量配置拉起的(比如 JAVA_HOME 或 ENV=prod)。你可以查看它启动时加载的所有环境变量:
cat /proc/1234/environ | tr '\0' '\n'这里用换行符替换空字符,方便一行一行检查它的环境配置是否正确。
快捷替代方案:使用 ps 命令
如果你只需要粗略看一下,也可以直接用 ps 命令:
ps -fww -p 1234-f表示全格式显示(包含 UID、父进程 PPID、启动时间等)。-ww表示加宽输出,防止启动命令太长被屏幕截断。- 注意:如果该进程是通过
systemd拉起的后台服务,你也可以直接执行systemctl status 1234来查看它的服务状态和对应的ExecStart启动配置。
改变文件夹权限
在 Linux 中,如果从别人的 home 目录复制文件,通常需要使用 chown(修改所有者)和 chmod(修改读写权限)这两个命令来将文件完全“变成你的”。
具体操作步骤如下:
修改文件的所有者 (chown)
如果你是用 sudo 复制的,或者保留了原文件的属性,文件的所有者可能还是原来的用户或 root。你需要将其改回你自己的账号。
打开终端,使用以下命令(-R 表示递归,如果是文件夹会连同里面的所有文件一起修改):
sudo chown -R $USER:$USER /目标文件或文件夹的路径注:$USER 是 Linux 的环境变量,会自动识别为你当前登录的用户名。冒号前后的 $USER 分别代表“所属用户”和“所属用户组”。
添加读写权限 (chmod)
有时候,即便你变成了文件的所有者,但如果原文件是“只读”的,你复制过来后依然无法修改或删除。你需要给自己加上读写(甚至执行)权限:
# 给自己(所有者,u代表user)添加读(r)和写(w)权限chmod -R u+rw /目标文件或文件夹的路径场景举例:
假设你把别人目录下的 project_data 文件夹复制到了自己的 ~/Documents 下,一整套最稳妥的处理命令就是:
sudo chown -R $USER:$USER ~/Documents/project_datachmod -R u+rw ~/Documents/project_data比较两个文件是否相同
如果这两个文件分别在两台不同的 Linux 机器上,最稳妥且节省带宽的方法是分别计算哈希值进行比对,或者通过 SSH 管道直接比对。
分别计算哈希值(最推荐,无需跨网传文件)
如果可执行文件很大,直接把文件传过来对比会很慢。你只需要在两台机器上分别生成文件的“数字指纹”,对比指纹即可。
- 在机器 A 上执行:
sha256sum /path/to/fileA- 在机器 B 上执行:
sha256sum /path/to/fileB对比两边终端输出的一长串字符串,如果完全一样,说明底层的二进制代码100%相同。
通过 SSH 管道一行命令直接比对(适合自动化)
如果你已经在机器 A 上,并且配置了到机器 B 的 SSH 免密登录,可以利用管道(Pipe)直接把机器 B 的文件流拉过来,在内存中与机器 A 的文件进行逐字节比对,无需在本地生成临时文件。
在机器 A 上执行:
ssh user@machine_B_ip "cat /path/to/remote_fileB" | cmp /path/to/local_fileA -- 如何看结果: 如果执行完没有任何输出,说明两个文件一模一样。如果出现类似
differ: byte 1, line 1的提示,说明它们不一样。 - (注:命令末尾的
-连字符不能漏掉,它代表将 SSH 传过来的数据流作为cmp命令的第二个对比文件。)
修复动态库路径
export LD_LIBRARY_PATH=../Interfaces:$LD_LIBRARY_PATH压缩文件夹
最常用的是使用 tar 命令,将文件夹打包并压缩成 .tar.gz 格式。
基本命令如下:
tar -czvf 压缩包名称.tar.gz 要打包的文件夹名/参数快速回忆:
-c: Create,创建新的压缩包-z: gzip,使用 gzip 进行压缩-v: Verbose,在终端显示正在打包的文件(如果不喜欢刷屏可以去掉)-f: File,指定压缩包的文件名(注意:-f必须放在所有参数的最后,紧跟压缩包名字)
其他常见需求:
1. 如果需要打包成 .zip 格式(方便发给 Windows 环境解压):
zip -r 压缩包名称.zip 要打包的文件夹名/(-r 代表递归压缩文件夹内的所有内容)
2. 顺便附上解压命令(将 -c 换成 -x 即可):
tar -xzvf 压缩包名称.tar.gz