文章目录
- [一、Shell 简介](#一、Shell 简介)
- 二、帮助命令
-
- [2.1 man 获得帮助信息](#2.1 man 获得帮助信息)
- [2.2 help 获得 shell 内置命令的帮助信息](#2.2 help 获得 shell 内置命令的帮助信息)
- [2.3 常用快捷键](#2.3 常用快捷键)
- 三、文件目录类命令
-
- [3.1 pwd 显示当前工作目录](#3.1 pwd 显示当前工作目录)
- [3.2 ls 列出目录的内容](#3.2 ls 列出目录的内容)
- [3.3 cd 切换目录](#3.3 cd 切换目录)
- [3.4 mkdir 创建目录](#3.4 mkdir 创建目录)
- [3.5 rmdir 删除空目录](#3.5 rmdir 删除空目录)
- [3.6 touch 创建空文件](#3.6 touch 创建空文件)
- [3.7 cp 复制文件或目录](#3.7 cp 复制文件或目录)
- [3.8 rm 删除文件或目录](#3.8 rm 删除文件或目录)
- [3.9 mv 移动文件与目录或重命名](#3.9 mv 移动文件与目录或重命名)
- [3.10 cat 查看文件内容](#3.10 cat 查看文件内容)
- [3.11 more 分屏查看文件内容](#3.11 more 分屏查看文件内容)
- [3.12 less 分屏显示文件内容](#3.12 less 分屏显示文件内容)
- [3.13 echo 输出内容到控制台](#3.13 echo 输出内容到控制台)
- [3.14 head 显示文件头部内容](#3.14 head 显示文件头部内容)
- [3.15 tail 输出文件尾部内容](#3.15 tail 输出文件尾部内容)
- [3.16 输出重定向 `>` 与追加 `>>`](#3.16 输出重定向
>与追加>>) - [3.17 ln 软链接](#3.17 ln 软链接)
- [3.18 history 查看历史命令](#3.18 history 查看历史命令)
- [3.19 通配符](#3.19 通配符)
- 四、时间日期类命令
-
- [4.1 date 显示当前时间](#4.1 date 显示当前时间)
- [4.2 date 显示非当前时间](#4.2 date 显示非当前时间)
- [4.3 date 设置系统时间](#4.3 date 设置系统时间)
- [4.4 cal 查看日历](#4.4 cal 查看日历)
- 五、用户管理命令
-
- [5.1 useradd 添加新用户](#5.1 useradd 添加新用户)
- [5.2 passwd 设置用户密码](#5.2 passwd 设置用户密码)
- [5.3 id 查看用户是否存在](#5.3 id 查看用户是否存在)
- [5.4 cat /etc/passwd 查看创建了哪些用户](#5.4 cat /etc/passwd 查看创建了哪些用户)
- [5.5 su 切换用户](#5.5 su 切换用户)
- [5.6 userdel 删除用户](#5.6 userdel 删除用户)
- [5.7 who 查看登录用户信息](#5.7 who 查看登录用户信息)
- [5.8 sudo 设置普通用户具有 root 权限](#5.8 sudo 设置普通用户具有 root 权限)
- [5.9 usermod 修改用户](#5.9 usermod 修改用户)
- 六、用户组管理命令
-
- [6.1 groupadd 新增组](#6.1 groupadd 新增组)
- [6.2 groupdel 删除组](#6.2 groupdel 删除组)
- [6.3 groupmod 修改组](#6.3 groupmod 修改组)
- [6.4 cat /etc/group 查看创建了哪些组](#6.4 cat /etc/group 查看创建了哪些组)
- 七、总结
一、Shell 简介
Shell 可以看作一个命令解释器,为我们提供交互式的文本控制台界面。我们可以通过终端输入命令,由 Shell 进行解释,最终交给内核执行。
二、帮助命令
2.1 man 获得帮助信息
shell
man [命令或配置文件] # 获得帮助信息
man 手册页的主要字段:
| 信息 | 功能 |
|---|---|
| NAME | 命令的名称和单行描述 |
| SYNOPSIS | 怎样使用命令 |
| DESCRIPTION | 命令功能的深入讨论 |
| EXAMPLES | 怎样使用命令的例子 |
| SEE ALSO | 相关主题(通常是手册页) |
shell
man ls # 查看 ls 命令的帮助信息
2.2 help 获得 shell 内置命令的帮助信息
一部分基础功能的系统命令直接内嵌在 Shell 中,系统加载启动后会随着 Shell 一起加载,常驻系统内存,这类命令被称为"内置命令(built-in)";其它命令被称为"外部命令"。
shell
help 命令 # 获得 shell 内置命令的帮助信息
shell
help cd # 查看 cd 命令的帮助信息
2.3 常用快捷键
| 常用快捷键 | 功能 |
|---|---|
Ctrl + C |
停止当前进程 |
Ctrl + L |
清屏,等同于 clear;彻底清屏可用 reset |
| Tab 键 | 命令/路径自动补全提示(更重要的是防止敲错) |
| 上下方向键 | 查找执行过的历史命令 |
三、文件目录类命令
3.1 pwd 显示当前工作目录
pwd:print working directory,打印工作目录。
shell
pwd # 显示当前工作目录的绝对路径
3.2 ls 列出目录的内容
ls:list,列出目录内容。
shell
ls [选项] [目录或文件]
| 选项 | 功能 |
|---|---|
-a |
显示全部文件,连同隐藏文件(以 . 开头的文件)一起列出(常用) |
-l |
以长数据串列出,包含文件的属性与权限等数据(常用,等价于 ll) |
-h |
配合 -l 以易读的 K/M/G 单位显示文件大小 |
-t |
按修改时间排序 |
-S |
按文件大小排序 |
ls -l 每行列出的信息依次是:文件类型与权限、链接数、文件属主、文件属组、文件大小(字节)、建立或最近修改的时间、文件名。
shell
ls -al # 查看当前目录的所有内容信息
ls -lh # 以易读单位查看文件大小
补充:
ll是ls -l的别名(在 CentOS 中默认配置于 ~/.bashrc)。
3.3 cd 切换目录
cd:Change Directory,切换路径。
shell
cd [参数]
| 参数 | 功能 |
|---|---|
| cd 绝对路径 | 切换路径 |
| cd 相对路径 | 切换路径 |
cd ~ 或 cd |
回到自己的家目录 |
cd - |
回到上一次所在目录 |
cd .. |
回到当前目录的上一级目录 |
cd -P |
跳转到实际物理路径,而非快捷方式(软链接)路径 |
shell
cd /root/ # 使用绝对路径切换到 root 目录
cd 公共/ # 使用相对路径切换目录
cd ~ # 回到自己的家目录
cd - # 回到上一次所在目录
cd .. # 回到上一级目录
3.4 mkdir 创建目录
mkdir:Make directory,建立目录。
shell
mkdir [选项] 要创建的目录
| 选项 | 功能 |
|---|---|
-p |
创建多层目录 |
shell
mkdir data # 创建一个目录
mkdir data/xxx
mkdir -p data1/data2/data3 # 创建多级目录
3.5 rmdir 删除空目录
rmdir:Remove directory,移除目录(只能删除空目录)。
shell
rmdir 要删除的空目录
shell
rmdir data1/data2/data3/
3.6 touch 创建空文件
shell
touch 文件名称
shell
touch data1/data2/word.txt # 在 data1/data2/ 目录下创建名为 word.txt 的文件
补充:如果 touch 的文件已存在,它会更新文件的修改时间。
3.7 cp 复制文件或目录
shell
cp [选项] source dest # 复制 source 文件到 dest
| 选项 | 功能 |
|---|---|
-r |
递归复制整个文件夹 |
-i |
目标已存在时提示确认 |
-v |
显示复制过程 |
| 参数 | 功能 |
|---|---|
| source | 源文件 |
| dest | 目标文件 |
经验技巧:强制覆盖不提示的方法:\cp(在 cp 前加反斜杠,不使用别名)。
shell
cp data1/data2/word.txt test1/test2/ # 复制文件
cp -r data1/data2/ ./ # 递归复制整个文件夹
3.8 rm 删除文件或目录
shell
rm [选项] deleteFile # 删除文件或目录
| 选项 | 功能 |
|---|---|
-r |
递归删除目录中所有内容 |
-f |
强制执行删除操作,而不是提示用户进行确认 |
-v |
显示指令的详细执行过程 |
shell
rm data1/data2/word.txt # 删除文件
rm -rf data1/ # 递归强制删除目录中所有内容(谨慎使用)
安全提示:
rm -rf威力很大,务必确认路径无误后再执行,建议先ls确认。
3.9 mv 移动文件与目录或重命名
shell
mv oldNameFile newNameFile # 重命名
mv /temp/movefile /targetFolder # 移动文件
shell
mv data1/data2/word.txt data1/data2/test.txt # 重命名
mv data1/data2/test.txt ./ # 移动文件
3.10 cat 查看文件内容
从第一行开始显示文件内容,适合查看比较小的文件。
shell
cat [选项] 要查看的文件
| 选项 | 功能 |
|---|---|
-n |
显示所有行的行号,包括空行 |
shell
cat -n test.txt # 查看文件内容并显示行号
3.11 more 分屏查看文件内容
more 指令是一个基于 VI 编辑器的文本过滤器,以全屏幕方式按页显示文本文件内容。
shell
more 要查看的文件
| 操作 | 功能说明 |
|---|---|
| 空格键(Space) | 向下翻一页 |
| Enter | 向下翻一行 |
| q | 立即离开 more |
| Ctrl + F | 向下滚动一屏 |
| Ctrl + B | 返回上一屏 |
= |
输出当前行的行号 |
:f |
输出文件名和当前行的行号 |
shell
more macros # 采用 more 查看文件
3.12 less 分屏显示文件内容
less 与 more 功能类似,但比 more 更强大,支持各种显示终端。less 并不是一次将整个文件加载后再显示,而是根据显示需要加载内容,对显示大型文件具有较高效率。
shell
less 要查看的文件
| 操作 | 功能说明 |
|---|---|
| 空格键 / PageDown | 向下翻动一页 |
| PageUp | 向上翻动一页 |
/字串 |
向下搜寻字串;n 向下查找,N 向上查找 |
?字串 |
向上搜寻字串;n 向上查找,N 向下查找 |
| q | 离开 less 程序 |
shell
less macros # 采用 less 查看文件
3.13 echo 输出内容到控制台
shell
echo [选项] [输出内容]
| 选项 | 功能 |
|---|---|
-e |
支持反斜线控制的字符转换 |
| 控制字符 | 功能 |
|---|---|
\\ |
输出 \ 本身 |
\n |
换行符 |
\t |
制表符(tab) |
shell
echo "hello\tlinux" # 原样输出 hello\tlinux
echo -e "hello\tlinux" # 输出 hello linux(\t 被解释为制表符)
3.14 head 显示文件头部内容
默认显示文件的前 10 行内容。
shell
head 文件 # 查看文件头 10 行内容
head -n 5 文件 # 查看文件头 5 行内容(5 可以是任意行数)
| 选项 | 功能 |
|---|---|
-n <行数> |
指定显示头部内容的行数 |
shell
head -n 2 macros # 查看文件的头 2 行
3.15 tail 输出文件尾部内容
默认显示文件的后 10 行内容。
shell
tail 文件 # 查看文件尾部 10 行内容
tail -n 5 文件 # 查看文件尾部 5 行内容(5 可以是任意行数)
tail -f 文件 # 实时追踪该文件的所有更新(重点)
| 选项 | 功能 |
|---|---|
-n <行数> |
输出文件尾部 n 行内容 |
-f |
显示文件最新追加的内容,监视文件变化 |
shell
tail -n 1 macros # 查看文件尾 1 行内容
tail -f test.txt # 实时追踪该文件的所有更新(如监控日志常用)
3.16 输出重定向 > 与追加 >>
shell
ls -l > 文件 # 列表内容写入文件(覆盖写)
ls -al >> 文件 # 列表内容追加到文件末尾
cat 文件1 > 文件2 # 将文件1 的内容覆盖到文件2
echo "内容" >> 文件 # 将内容追加到文件末尾
shell
ls -l > test.txt # 将 ls 查看信息写入文件
ls -l >> test.txt # 将 ls 查看信息追加到文件
echo hello >> test.txt # 采用 echo 将 hello 追加到文件
3.17 ln 软链接
软链接也称为符号链接,类似于 Windows 里的快捷方式,有自己的数据块,主要存放了指向其他文件的路径。
shell
ln -s [原文件或目录] [软链接名] # 给原文件创建一个软链接
经验技巧:
- 删除软链接用
rm -rf 软链接名(注意不要写最后的/); - 如果使用
rm -rf 软链接名/删除,会把软链接对应的真实目录内容一并删掉; - 通过
ll即可查看:列表属性第 1 位是l,尾部会有指向位置。
shell
mv test.txt data1/data2/
ln -s data1/data2/test.txt ./test1/test2 # 创建软链接
ll
# 删除软链接(注意不要写最后的 /)
rm -rf test1/test2
# 进入软链接的实际物理路径
ln -s data/01/ ./01/
cd -P 01/
3.18 history 查看历史命令
shell
history # 查看已经执行过的历史命令
补充:
!数字可以重新执行历史记录中第 N 条命令,例如!100。
3.19 通配符
在文件目录命令中经常使用通配符:
| 通配符 | 含义 |
|---|---|
* |
匹配任意多个字符 |
? |
匹配任意一个字符 |
[abc] |
匹配中括号内的任意一个字符 |
shell
ls *.txt # 列出所有 .txt 结尾的文件
ls test? # 列出 test 加任意一个字符的文件
四、时间日期类命令
4.1 date 显示当前时间
shell
date # 显示当前时间
date +%Y # 显示当前年份
date +%m # 显示当前月份
date +%d # 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒
shell
date # 显示当前时间信息
date +%Y%m%d # 显示当前年月日,如 20240902
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒
4.2 date 显示非当前时间
shell
date -d '1 days ago' # 显示前一天时间
date -d '-1 days ago' # 显示明天时间
shell
date -d '1 days ago' # 显示前一天
date -d '-1 days ago' # 显示明天
4.3 date 设置系统时间
shell
date -s 字符串时间
shell
date -s "2024-07-08 15:19:18" # 设置系统时间
4.4 cal 查看日历
shell
cal [选项] # 不加选项,显示本月日历
| 选项 | 功能 |
|---|---|
| 具体某一年 | 显示这一年的日历 |
shell
cal # 查看当前月的日历
cal 2024 # 查看 2024 年的日历
五、用户管理命令
5.1 useradd 添加新用户
shell
useradd 用户名 # 添加新用户
useradd -g 组名 用户名 # 添加新用户到某个组
shell
useradd xiaoxiaoguai # 添加一个用户
ll /home/ # 查看(/home 下会出现 xiaobaiwen 主目录)
5.2 passwd 设置用户密码
shell
passwd 用户名 # 设置用户密码
shell
passwd xiaoxiaoguai # 设置用户 xiaobaiwen 的密码
5.3 id 查看用户是否存在
shell
id 用户名
shell
id xiaoxiaoguai # 查看用户是否存在(会显示 uid、gid 等信息)
5.4 cat /etc/passwd 查看创建了哪些用户
所有用户信息都记录在 /etc/passwd 文件中(每行一个用户,字段之间用冒号分隔):
shell
cat /etc/passwd
补充:用户密码加密后存放在 /etc/shadow 中,普通用户不可读;用户组信息存放在 /etc/group 中。
5.5 su 切换用户
su:switch user,切换用户。
shell
su 用户名称 # 切换用户,只能获得用户的执行权限,不能获得其环境变量
su - 用户名称 # 切换到用户,并获得该用户的环境变量及执行权限
shell
su xiaoxiaoguai # 切换用户
echo $PATH # 打印 path 环境变量
exit # 退出当前用户
su - xiaoxiaoguai # 切换用户并加载其环境变量
echo $PATH
exit
经验:日常切换建议使用
su - 用户名,可以完整加载目标用户的登录环境。
5.6 userdel 删除用户
shell
userdel 用户名 # 删除用户但保留用户主目录
userdel -r 用户名 # 同时删除用户主目录和邮件池等相关文件
| 选项 | 功能 |
|---|---|
-r |
删除用户的同时,删除与用户相关的所有文件 |
shell
userdel xiaoxiaoguai # 删除用户但保留用户主目录
ll /home/
useradd name1 # 再添加一个用户
ll /home/
userdel -r name1 # 删除用户及其主目录
ll /home/
5.7 who 查看登录用户信息
shell
whoami # 显示当前自身用户名称
who am i # 显示登录用户的用户名以及登录时间
shell
whoami # 显示自身用户名称
who am i # 显示登录用户的用户名
5.8 sudo 设置普通用户具有 root 权限
(1)添加 xiaobaiwen 用户并设置密码:
shell
useradd xiaoxiaoguai
passwd xiaoxiaoguai
(2)修改 /etc/sudoers 配置文件(建议使用 visudo 命令编辑,保存前会自动检查语法):
shell
visudo
在 root ALL=(ALL) ALL 下面添加一行:
shell
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
xiaoxiaoguai ALL=(ALL) ALL
如果希望使用 sudo 时不需要输入密码,可以这样配置:
shell
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
xiaoxiaoguai ALL=(ALL) NOPASSWD:ALL
(3)案例实操(用普通用户以 root 权限创建目录,并修改目录属主):
shell
sudo mkdir module
chown xiaoxiaoguai:xiaoxiaoguai module/
5.9 usermod 修改用户
shell
usermod -g 用户组 用户名
| 选项 | 功能 |
|---|---|
-g |
修改用户的初始登录组(给定的组必须存在) |
shell
usermod -g root name1 # 将用户 name1 的初始组改为 root
说明:每个用户都有一个"初始组"(primary group)。默认情况下创建用户时会同时创建一个与用户名同名的组,该用户默认属于这个组;
usermod -g就是用来修改这个初始组的。
六、用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户默认属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改,本质上就是对 /etc/group 文件的更新。
6.1 groupadd 新增组
shell
groupadd 组名
shell
groupadd 01 # 添加一个 01 组
6.2 groupdel 删除组
shell
groupdel 组名
shell
groupdel 01 # 删除 01 组
6.3 groupmod 修改组
shell
groupmod -n 新组名 老组名
| 选项 | 功能 |
|---|---|
-n<新组名> |
指定工作组的新组名 |
shell
groupadd 01
groupmod -n 02 01 # 将 01 组改名为 02
6.4 cat /etc/group 查看创建了哪些组
shell
cat /etc/group
七、总结
- 帮助命令:
man(外部命令)、help(内置命令)。 - 文件目录:
pwd、ls、cd、mkdir、rmdir、touch、cp、rm、mv。 - 内容查看:
cat、more、less、head、tail。 - 输出处理:
echo、>覆盖、>>追加;ln -s创建软链接。 - 时间日期:
date(查看/设置)、cal(日历)。 - 用户管理:
useradd、passwd、id、su、userdel、who、sudo、usermod。 - 用户组管理:
groupadd、groupdel、groupmod,配置文件为 /etc/group。