文章目录
-
- 1. Linux、远程登录与命令格式
-
- 1.1 Shell 与命令的执行
- 1.2 练习目录
- 2. 路径与工作目录
-
- 2.1 当前用户与当前位置
- 2.2 绝对路径与相对路径
- 2.3 目录切换
- 3. 文件属性与目录列表
-
- 3.1 文件的内容与属性
- 3.2 `ls -a`、`ls -l` 与 `ls -d`
- 3.3 长格式字段与文件类型
- 4. 目录创建与文本写入
-
- 4.1 `mkdir` 与 `touch`
- 4.2 `echo` 与输出重定向
- 4.3 `cat` 与固定练习文本
- 5. 文件复制、移动与删除
-
- 5.1 `cp` 与目标路径
- 5.2 `mv` 的移动与重命名
- 6. 文本分页与局部查看
-
- 6.1 `less` 分页阅读
- 6.2 `head` 与 `tail`
- 6.3 `tail -f` 跟踪追加内容
- 7. 文件查找、文本筛选与管道
-
- 7.1 `find` 查找文件
- 7.2 `grep` 筛选文本行
- 7.3 管道与输出文件
- 8. 命令帮助与常用补充
-
- 8.1 `man`、`–help` 与 `help`
- 8.2 时间与系统信息
1. Linux、远程登录与命令格式
Linux 严格来说是操作系统的内核。平时安装的Centos、Ubuntu、Debian、Rocky Linux 等发行版,则把内核与系统工具、软件管理工具等组合成可以使用的系统。
如果使用云服务器,购买时关注地域、费用、配置和系统镜像即可,基础命令练习通常不需要很高的配置。
在云控制台取得服务器的公网地址与登录用户名,再通过 SSH 登录。Windows 可以使用 PowerShell 中的 ssh,也可以用 Xshell、MobaXterm 等终端软件建立 SSH 会话。
# 在本地 Windows 中执行;替换用户名和公网地址
ssh 用户名@服务器公网IP
密钥登录需要按云厂商说明指定私钥。首次连接会提示核对主机指纹;密码输入时通常不显示字符,也不显示星号。
登录以后,终端里的 Linux 命令在远端服务器执行。 本地 Windows 的磁盘路径不能直接当成服务器上的路径使用。
1.1 Shell 与命令的执行
终端提供输入和显示界面,Shell 是解释命令的程序,Bash 就是常见的一种 Shell。Shell 解析输入,处理引号、重定向等语法,再执行内建命令或启动外部程序;程序通过操作系统提供的接口完成实际工作。
常见命令格式是:
命令名 [选项] [操作对象]
方括号表示该部分可以省略,不需要把方括号输入终端。例如:
ls -l /tmp
这里 ls 是命令,-l 改变显示方式,/tmp 是被查看的目录。命令名、选项、对象之间用空格分开。很多短选项可以进行合并,例如 ls -a -l 可以写为 ls -al。
1.2 练习目录
以下练习都会在当前用户的家目录(个人云服务器)中进行,不需要 root 权限。在创建我们的练习目录前,先确认 linux-command-lab 不是存放已有资料的目录;如有重名,换一个名称,并同步修改后续路径。
下面的 mkdir -p 会创建目录及缺少的上级目录。
mkdir -p ~/linux-command-lab/logs ~/linux-command-lab/backup
cd ~/linux-command-lab
2. 路径与工作目录
2.1 当前用户与当前位置
在命令行输入whoami 显示当前有效用户的用户名,pwd 显示当前工作目录。前者回答当前登录的身份,后者回答位置,两个问题互不替代。
whoami
pwd
例如当前我作为普通用户可能看到:

工作目录不是“目前打开的整个服务器”,而是解析相对路径时所依据的目录。
2.2 绝对路径与相对路径
Linux 把文件和目录组织在以 / 为根的目录结构中,不采用 Windows 的 C:、D: 盘符形式。此处可以先把它理解成一棵目录树:
/ 根目录
├── home/
│ └── by2099/ 示例用户的家目录
│ └── linux-command-lab/
│ ├── logs/
│ └── backup/
└── tmp/
目录用来组织名称;普通文件则保存具体内容。在后面的学习中我们会认识到,同一个文件可以通过不同路径访问,所以“能用路径定位文件”不等于“每个文件只有一条路径”。
| / | 单独使用表示根目录;路径中也作分隔符 | /tmp |
| . | 当前目录 | ./logs |
| .. | 上级目录 | ../backup |
| ~ | 由 Shell 展开为当前用户的家目录 | ~/linux-command-lab |
| 以 / 开头的路径 | 绝对路径,从根目录开始定位 | /home/by2099/linux-command-lab/logs |
| 不以 / 开头的普通路径 | 相对路径,依赖当前工作目录 | logs、../backup |
注意不要把 . 和 .. 记反:一个点是当前目录,两个点是上级目录。~ 则是 Shell 的便捷写法,展开后才成为实际路径。

2.3 目录切换
cd 改变当前 Shell 的工作目录。下面按顺序执行,观察每次 pwd 的结果:
cd logs
pwd
cd ../backup
pwd
cd ..
pwd

返回路径依次以 /linux-command-lab/logs、/linux-command-lab/backup、/linux-command-lab 结尾。第二条 cd 中,先由 .. 返回练习目录,再进入其中的 backup,并不是寻找 logs 内部的 backup。
另外有三种很常用的写法:
cd ~ # 进入家目录;单独输入 cd 也可以
cd / # 进入根目录
cd – # 回到上一次工作目录,通常也会显示切换后的路径
Linux 文件名通常区分大小写,比如notes.txt 和 Notes.txt 是不同的名称。含空格的路径需要用引号整体包住,例如 cd "study notes";
3. 文件属性与目录列表
3.1 文件的内容与属性
在当前学习中,我们可以把文件概括为两个方面 “内容+属性”:
- 内容是保存的数据;
- 属性描述类型、大小、所有者、权限和时间等信息。
cat 等命令关注文件内容,ls -l 主要显示属性。一个空文件虽然没有正文,但仍然有名称、类型、所有者、时间等信息。
ls 不带对象时列出的是当前目录中的可见条目;指定目录时默认列出其中的条目;指定普通文件时显示该文件本身。
3.2 ls -a、ls -l 与 ls -d
| -a | 包括以 . 开头的隐藏名称,也包括 . 和 .. | 查看隐藏文件 |
| -l | 使用长格式显示详细信息 | 查看类型、大小、所有者等 |
| -d | 显示目录条目本身,不展开目录内容 | 查看目录自身的属性 |
ls
ls -a
ls -l
ls -ld logs
ls -ald .

ls -ald . 就是组合使用 -a、-l、-d,查看当前目录下的长格式信息。其中,查看普通名称目录自身属性的关键是 -ld;-a 负责显示隐藏名称。
比较 ls -l logs 和 ls -ld logs:前者列出 logs 内的条目,此时目录为空,通常只看到 total 0;后者显示 logs 目录本身那一行。这是 -d 最容易混淆的地方。 
3.3 长格式字段与文件类型
下面就是是一行典型的长格式输出,具体用户名和时间以自己的环境为准:


| 第一个字符 – | 文件类型,这里是普通文件 |
| 后面九个字符 rw-rw-r– | 三组访问权限 |
| 1 | 硬链接数,当前先认识字段名称,不展开链接机制 |
| 两个 by2099 | 所有者、所属组 |
| 30 | 对这个普通文件而言,是文件长度,单位为字节 |
| 日期和时间 | 默认主要反映最后修改时间,显示形式可能不同 |
| notes.txt | 文件名 |
常见的文件类型标识如下,先重点记住前三种:
| – | 普通文件 |
| d | 目录 |
| l | 符号链接 |
| c、b | 字符设备、块设备 |
| p、s | FIFO 管道、套接字 |
普通文件内部还可能是文本、图片、可执行程序等。由于Linux 不单靠扩展名决定文件类型,所以给文本文件加上 .png 后缀并不会把它变成图片。
4. 目录创建与文本写入
4.1 mkdir 与 touch
mkdir 用来创建目录,使用mkdir -p a/b 命令会在需要时补齐上级目录。
当指定目录已经存在时,-p 通常也不会因这一点报错,也不会替你清空已有目录。
touch 在目标不存在时通常创建空文件;若目标已经存在时,默认更新时间戳,不会清空或重写已有内容。
mkdir drafts
mkdir -p work/day1
touch notes.txt
touch .practice
ls -a

tree:以树形结构打印当前目录下所有文件和文件夹,一眼看懂目录层级关系。 默认系统没有自带 tree,需要先安装(下面为安装命令,此时直接复制执行即可):
- sudo yum install tree -y(普通用户)
- yum install tree -y(root用户)
.practice 以点开头,因此默认的 ls 不显示它,ls -a 可以显示。而所谓的隐藏首先是一种命名约定,不代表文件得到加密或访问保护。
4.2 echo 与输出重定向
echo 可以把参数输出出来,默认在末尾加一个换行。例如 echo 'hello Linux' 通常只在终端显示文字,不会自动保存成文件。
需要写入文件,可使用 Shell 的输出重定向:
echo 'Linux practice' > notes.txt
echo 'paths and files' >> notes.txt
cat notes.txt
输出为:

| 命令 > 文件 | 将标准输出写入文件;文件不存在则创建,存在时通常先清空再写入 |
| 命令 >> 文件 | 将标准输出追加到文件末尾;文件不存在则创建 |
> 和 >> 是 Shell 语法,不是 echo 的选项。
“标准输出”可以先理解为程序正常输出数据的通道,默认通常连到终端。
特别注意,Shell 一般在命令真正读取文件前就处理重定向。 因此,不能用 cat notes.txt > notes.txt 来进行“原样写回”,输入文件可能先被清空。需要处理原文件时,先输出到不同的文件名,再检查结果。
4.3 cat 与固定练习文本
cat 文件 可以查看内容,多个文件则按参数顺序连续输出。适合短文本,不适合不加区分地查看图片、压缩包等二进制内容。
先建立一份六行的模拟日志:
echo 'INFO service start' > logs/sample.log
echo 'INFO user login' >> logs/sample.log
echo 'ERROR disk full' >> logs/sample.log
echo 'warning retry' >> logs/sample.log
echo 'error timeout' >> logs/sample.log
echo 'INFO service stop' >> logs/sample.log
cat logs/sample.log
输出为: 
扩展选项:
- cat -n logs/sample.log 给所有输出行编号,方便对照位置。编号只加在显示结果中,不会修改原文件。
- cat -b 只给非空行编号。
- cat -s 将连续的多个空行压缩显示为一个空行。
5. 文件复制、移动与删除
5.1 cp 与目标路径
cp 源 目标 用于复制文件。常见用法如下:
cp notes.txt notes-copy.txt
cp notes.txt backup/
cp -r logs logs-copy

目标是否已经存在,会影响结果。 上述情况如果 logs-copy 已经是一个目录,再执行 cp -r logs logs-copy时,通常会把 logs 放进它里面,形成 logs-copy/logs/…。
复制普通文件时,如果目标文件已经存在,默认可能覆盖它。如果希望覆盖前询问用户是否确认执行,可以使用 cp -i 源 目标。
5.2 mv 的移动与重命名
mv 源 目标 用来移动文件或目录,同时也用于重命名:
mv notes-copy.txt notes-renamed.txt
mv notes-renamed.txt backup/
ls backup
此时输出为: 
第一条修改名称,第二条改变所在目录;移动后,原位置不再保留那个副本。
移动整个目录不需要像 cp 那样添加 -r。

也可以同时改变文件的位置与名称,例如 mv old.txt backup/new.txt。但目标文件已存在时也可能发生覆盖;需要询问确认时使用 mv -i。
6. 文本分页与局部查看
6.1 less 分页阅读
当一个文件比较长时,cat 会把内容直接全部输出,容易刷过需要的位置。less logs/sample.log 则进入分页阅读界面。
| 空格、PageDown | 向后翻页 |
| PageUp、b | 向前翻页 |
| /ERROR 后按 Enter | 向后搜索 ERROR |
| n、N | 重复上次搜索、反方向重复搜索 |
| g、G | 到文件开头、末尾 |
| q | 退出分页界面 |
需要指定行号时使用 less -N logs/sample.log,这里是大写 N。
6.2 head 与 tail
只想看文件的开头或结尾时,用 head 和 tail,默认通常显示十行,-n 可指定行数:
head -n 3 logs/sample.log
tail -n 2 logs/sample.log
第一条输出:
第二条输出: 
6.3 tail -f 跟踪追加内容
tail -f 先显示末尾内容,再继续等待新追加的数据:
# 服务器终端 A
cd ~/linux-command-lab
tail -f logs/sample.log
再开一个登录到同一台服务器、同一用户的终端:
# 服务器终端 B
cd ~/linux-command-lab
echo 'INFO new connection' >> logs/sample.log
终端 A 随后显示新行。按 Ctrl+C 结束跟踪,回到命令提示符。

7. 文件查找、文本筛选与管道
7.1 find 查找文件
知道文件的名称、但不知道文件在哪时,可以使用 find 起点 条件。它遍历指定目录范围,输出符合条件的路径:
find . -name 'notes.txt'
find . -type f -name '*.log'
输出: 
第一条找到两条路径,输出先后顺序不作保证。
第二条查找后缀为.log的普通文件,-type f 是类型条件,-name 后是名称模式,不是搜索文件正文(*号是通配符)。
7.2 grep 筛选文本行
find 查找路径,grep 按模式筛选文本行。它通常输出整条匹配行,而不只是命中的几个字符。
grep 'ERROR' logs/sample.log
grep -ni 'error' logs/sample.log
grep -nvi 'error' logs/sample.log

第一条区分大小写,只输出:
ERROR disk full
第二条带行号、忽略大小写:
3:ERROR disk full
5:error timeout
第三条是在同样忽略大小写的前提下,输出不匹配的行:
1:INFO service start
2:INFO user login
4:warning retry
6:INFO service stop
| -n | 显示输入中的行号 |
| -i | 忽略大小写差异 |
| -v | 反向选择不匹配的行 |
7.3 管道与输出文件
管道符 | 可以把左边命令的标准输出连接到右边命令的标准输入。标准输入可以理解为程序接收数据的通道;前面没有给 head、tail 直接指定文件时,也可以由这个通道提供数据。
例如查看日志的第 2~4 行:
head -n 4 logs/sample.log | tail -n 3
结果为: 
左边先取前四行,右边再从这四行里取最后三行。因此,tail 接收到的是文本数据,不是字符串 logs/sample.log,也不是左边命令的文件名参数。
筛选结果还可以继续保存:
grep -i 'error' logs/sample.log > errors.txt
cat errors.txt
输出为:

8. 命令帮助与常用补充
8.1 man、–help 与 help
刚开始学习时可以不必要把全部选项背下来,但是要能找到本机工具的说明:
man ls
ls –help
help cd
- man 查找本机手册,分页器常支持 /关键词 搜索、n 继续查找、q 退出。
- –help 常用于 GNU 工具的简要帮助,并非所有命令都支持。
8.2 时间与系统信息
以下用法偶尔需要时再查,不扩展成另一套选项目录:
| date | 查看服务器当前时间,时区以服务器设置为准 |
| date '+%Y-%m-%d %H:%M:%S' | 格式化显示时间;大写 %M 是分钟,小写 %m 是月份 |
| date +%s | 查看 Unix 时间戳,即从 UTC 的 1970-01-01 00:00:00 起计的秒数,不计闰秒 |
| uname -r | 查看内核版本,不是发行版版本 |
| cat /etc/os-release | 在提供该文件的发行版上查看发行版标识 |
| cal | 查看日历 |
| bc | 命令行计算器,可能需要另装软件;交互时输入 quit 退出 |
终端里的 Ctrl+C 通常用于中断当前前台任务;Ctrl+D 常用于在当前输入为空时表示输入结束,在 Shell 提示符处也可能退出会话,所以不能把它们都当作是 Windows 的复制或粘贴快捷键,复制、粘贴快捷键取决于使用的终端软件。
至此,日常文件操作已经能连起来:用路径确定对象,用 ls 观察属性,用 cp/mv/rm 整理文件,再用 less/head/tail/grep 读取需要的信息。

网硕互联帮助中心





评论前必须登录!
注册