常用Linux命令(四)
1、uname 命令
uname(Unix Name)是用于打印系统信息的命令。它主要用于查看内核版本、硬件架构、主机名等关键系统标识,常用于脚本判断环境或排查兼容性问题。
基本语法
uname [选项]
参数说明
| 参数 | 长选项 | 说明 | 典型输出示例 |
|---|---|---|---|
| -a | --all | 显示所有信息 🔥 最常用 | Linux host 5.4.0... x86_64... |
| -s | --kernel-name | 内核名称 | Linux |
| -n | --nodename | 主机名(Hostname) | my-server |
| -r | --kernel-release | 内核发行版本 | 5.4.0-42-generic |
| -v | --kernel-version | 内核详细版本(含编译时间) | #46-Ubuntu SMP... |
| -m | --machine | 硬件架构 | x86_64 (64位), aarch64 (ARM) |
| -p | --processor | 处理器类型 | x86_64 或 unknown |
| -i | --hardware-platform | 硬件平台 | x86_64 或 unknown |
| -o | --operating-system | 操作系统名称 | GNU/Linux |
实际使用举例
#快速查看系统全景
uname -a
#最常见的云服务器或物理机(如 Ubuntu, CentOS)
Linux my-server 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 14:16:20 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
#macOS (Apple Silicon M1/M2/M3)
Darwin MacBook-Pro.local 22.5.0 Darwin Kernel Version 22.5.0: Mon Apr 24 20:52:43 PDT 2023; root:xnu-8796.121.2~5/RELEASE_ARM64_T8112 arm64
#macOS (Intel 芯片)
Darwin John-MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Thu Jun 18 20:49:00 PDT 2020; root:xnu-6153.141.1~1/RELEASE_X86_64 x86_64
#判断 CPU 架构
uname -m
#x86_64 / amd64: 常见的 Intel/AMD 64位服务器。
#aarch64 / arm64: ARM 架构(如华为鲲鹏、AWS Graviton、Apple M系列芯片)。
#i386 / i686: 老旧的 32位系统。
2、which 命令
which 命令用于在系统的 PATH 环境变量指定的目录中,查找可执行文件(命令)的绝对路径。
简单来说,当你输入一个命令(如 python 或 git)时,which 能告诉你系统实际运行的是哪一个文件。
基本语法
which [选项] [命令名]
实际使用举例
##查看命令的安装位置
which python
##输出: /usr/bin/python
which git
##输出: /usr/bin/git
##排查“命令找不到”或“版本不对”的问题
which java
##输出: /opt/jdk1.8/bin/java
echo $PATH
##检查 PATH 中 /opt/jdk1.8/bin 是否排在其他 Java 路径之前
##查看别名(Alias)的真实指向
which ll
##输出: ll: aliased to ls -l
3、whoami 命令
whoami 是用于显示当前有效用户名的命令。
基本语法
whoami
实际使用举例
##确认当前登录用户
whoami
# 输出: root
4、su 命令
su(Switch User 或 Substitute User)是用于切换用户身份的命令。
它允许你从当前用户切换到另一个用户(通常是 root),从而获得该用户的权限和环境。
基本语法
su [选项] [用户名]
参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
| - | 模拟完整登录(Login Shell) | su - root |
| -c | 以目标用户身份执行一条命令后退出 | su - root -c "systemctl restart nginx" |
| -s | 指定使用的 Shell | su -s /bin/bash user |
| -l | 同 -,使登录 shell | su -l root |
实际使用举例
##切换到 root 进行系统管理
su - root
## 输入 root 密码
## 现在你是 root 了
##以其他用户身份执行单条命令
## 以 postgres 用户身份执行数据库备份命令
su - postgres -c "pg_dump mydb > backup.sql"
## 以 www-data 用户身份查看文件权限
su - www-data -c "ls -l /var/www/html"
5、sudo 命令
sudo(Super User DO)是 Linux 中最核心的权限管理命令。它允许普通用户以超级用户(root)或其他指定用户的身份执行命令,而无需知道 root 密码,只需输入当前用户的密码。
基本语法
sudo [选项] 命令
参数说明
| 参数 | 长选项 | 说明 | 示例 |
|---|---|---|---|
| (无) | - | 以 root 身份执行命令 | sudo apt update |
| -i | --login | 模拟 root 登录(获取 root Shell)🔥 推荐 | sudo -i |
| -s | --shell | 启动 root 身份的 Shell,但保留部分原环境变量 | sudo -s |
| -u | --user | 以指定用户身份执行命令 | sudo -u postgres psql |
| -l | --list | 查看当前用户拥有哪些 sudo 权限 | sudo -l |
| -k | --reset-timestamp | 清除密码缓存(下次必须重新输密码) | sudo -k |
| -E | --preserve-env | 保留当前用户的环境变量 | sudo -E ./script.sh |
实际使用举例
##一、执行单条特权命令
## 更新软件包列表
sudo apt update
## 重启网络服务
sudo systemctl restart nginx
## 查看只有 root 能读的日志
sudo tail -f /var/log/auth.log
##二、如果你需要连续执行多条管理员命令,每次都输 sudo 很麻烦,可以进入 Root Shell
## 方法1:完全模拟 root 登录(推荐,环境最干净)
sudo -i
## 方法2:仅切换身份,保留部分原环境
sudo -s
## 退出 Root Shell
exit
##三、以其他特定用户身份执行命令
## 以 postgres 用户身份进入数据库
sudo -u postgres psql
## 以 www-data 用户身份创建文件(确保权限正确)
sudo -u www-data touch /var/www/html/test.txt
su vs sudo 的区别
| 特性 | su | sudo |
|---|---|---|
| 含义 | 切换用户身份 | 以超级用户身份执行命令 |
| 密码 | 输入目标用户的密码 | 输入当前用户的密码 |
| 权限范围 | 完全变成另一个用户 | 临时提升权限,执行完即恢复 |
| 安全性 | 较低(需要知道 root 密码) | 较高(可精细控制权限,无需共享 root 密码) |
| 日志审计 | 较难追踪具体谁做了什么 | /var/log/auth.log 详细记录谁执行了什么 |
| 适用场景 | 需要长时间以另一用户身份工作 | 偶尔执行管理员命令 |
6、chmod 命令
chmod(Change Mode)是 Linux 中用于修改文件或目录权限的命令。
在 Linux 中,每个文件都有三种身份(所有者、所属组、其他人)和三种权限(读、写、执行)。chmod 允许你精确控制谁可以对这个文件做什么。
核心概念:权限与数字
在理解命令前,必须先看懂权限表示法。
A. 字母表示法
用户身份:
u (User):文件所有者
g (Group):所属组用户
o (Others):其他用户
a (All):所有用户(默认)
权限类型:
r (Read):读权限(数值 4)
w (Write):写权限(数值 2)
x (Execute):执行权限(数值 1)
-:无权限(数值 0)
B. 数字表示法(八进制)
将 r, w, x 的数值相加:
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
常见组合:
777:所有人可读可写可执行(⚠️ 极度危险,生产环境严禁使用)
755:所有者全权,其他人只读可执行(常用于脚本、程序)
644:所有者读写,其他人只读(常用于配置文件、网页文件)
600:仅所有者读写(常用于私钥、敏感数据)
基本语法
chmod [选项] 权限模式 文件名
实际使用举例
##一、让脚本可执行
## 方法1:数字模式(推荐)
chmod +x install.sh
## 或者
chmod 755 install.sh
## 方法2:字母模式(仅给所有者加执行权)
chmod u+x install.sh
##二、批量修改目录及其子文件权限
## 将 /var/www/html 下所有文件设为 644
sudo chmod -R 644 /var/www/html
## 将 /var/www/html 下所有目录设为 755(注意:这也会把文件设为755,需谨慎)
sudo chmod -R 755 /var/www/html
##三、撤销其他人的写权限
chmod o-w myfile.txt
7、chown 命令
chown(Change Owner)是用于修改文件或目录的所有者(Owner)和所属组(Group)的命令。
基本语法
chown [选项] [所有者][:所属组] 文件名
参数说明
| 参数 | 长选项 | 说明 | 示例 |
|---|---|---|---|
| -R | --recursive | 递归修改目录及其内部所有文件 🔥 最常用 | chown -R www:www /var/www |
| -v | --verbose | 显示详细处理过程 | chown -v root file |
| -c | --changes | 仅在发生更改时显示信息 | chown -c root file |
| --reference | - | 参考另一个文件的归属来设置 | chown --reference=file1 file2 |
实际使用举例
##一、修改文件所有者
sudo chown alice myfile.txt
##二、批量修改目录权限
## 将 /var/www/html 及其下所有文件的所有者和组都改为 www-data
sudo chown -R www-data:www-data /var/www/html
8、chgrp 命令
chgrp(Change Grp)是用于修改文件或目录所属组(Group)的命令。
基本语法
chgrp [选项] 新组名 文件名
参数说明
| 参数 | 长选项 | 说明 | 示例 |
|---|---|---|---|
| -R | --recursive | 递归修改目录及其内部所有文件 🔥 最常用 | chgrp -R developers /project |
| -v | --verbose | 显示详细处理过程 | chgrp -v staff file.txt |
| -c | --changes | 仅在发生更改时输出信息 | chgrp -c staff file.txt |
| --reference | - | 参考另一个文件的组来设置 | chgrp --reference=file1 file2 |
实际使用举例
##一、将文件移入共享组
## 1. 确保目录属于 devteam 组
sudo chgrp devteam /var/www/project
## 2. 确保组内有写权限(配合 chmod)
sudo chmod g+w /var/www/project
##二、批量修改目录组归属
sudo chgrp -R docker /home/user/docker-files
chown vs chmod vs chgrp
| 命令 | 全称 | 作用对象 | 典型场景 |
|---|---|---|---|
| chown | Change Owner | 所有者 + 所属组 | “这个文件是谁的?” -> 改主人 |
| chgrp | Change Group | 仅 所属组 | “这个文件属于哪个团队?” -> 改组 |
| chmod | Change Mode | 读/写/执行权限 | “主人能做什么?其他人能做什么?” -> 改权限 |

浙公网安备 33010602011771号