Linux 基础指令与文件操作

文章目录

    • [1. Linux、远程登录与命令格式](#1. Linux、远程登录与命令格式)
      • [1.1 Shell 与命令的执行](#1.1 Shell 与命令的执行)
      • [1.2 练习目录](#1.2 练习目录)
    • [2. 路径与工作目录](#2. 路径与工作目录)
      • [2.1 当前用户与当前位置](#2.1 当前用户与当前位置)
      • [2.2 绝对路径与相对路径](#2.2 绝对路径与相对路径)
      • [2.3 目录切换](#2.3 目录切换)
    • [3. 文件属性与目录列表](#3. 文件属性与目录列表)
      • [3.1 文件的内容与属性](#3.1 文件的内容与属性)
      • [3.2 `ls -a`、`ls -l` 与 `ls -d`](#3.2 ls -a、ls -l 与 ls -d)
      • [3.3 长格式字段与文件类型](#3.3 长格式字段与文件类型)
    • [4. 目录创建与文本写入](#4. 目录创建与文本写入)
      • [4.1 `mkdir` 与 `touch`](#4.1 mkdir 与 touch)
      • [4.2 `echo` 与输出重定向](#4.2 echo 与输出重定向)
      • [4.3 `cat` 与固定练习文本](#4.3 cat 与固定练习文本)
    • [5. 文件复制、移动与删除](#5. 文件复制、移动与删除)
      • [5.1 `cp` 与目标路径](#5.1 cp 与目标路径)
      • [5.2 `mv` 的移动与重命名](#5.2 mv 的移动与重命名)
    • [6. 文本分页与局部查看](#6. 文本分页与局部查看)
      • [6.1 `less` 分页阅读](#6.1 less 分页阅读)
      • [6.2 `head` 与 `tail`](#6.2 head 与 tail)
      • [6.3 `tail -f` 跟踪追加内容](#6.3 tail -f 跟踪追加内容)
    • [7. 文件查找、文本筛选与管道](#7. 文件查找、文本筛选与管道)
      • [7.1 `find` 查找文件](#7.1 find 查找文件)
      • [7.2 `grep` 筛选文本行](#7.2 grep 筛选文本行)
      • [7.3 管道与输出文件](#7.3 管道与输出文件)
    • [8. 命令帮助与常用补充](#8. 命令帮助与常用补充)
      • [8.1 `man`、`--help` 与 `help`](#8.1 man、--help 与 help)
      • [8.2 时间与系统信息](#8.2 时间与系统信息)

1. Linux、远程登录与命令格式

Linux 严格来说是操作系统的内核。平时安装的Centos、Ubuntu、Debian、Rocky Linux 等发行版,则把内核与系统工具、软件管理工具等组合成可以使用的系统。

如果使用云服务器,购买时关注地域、费用、配置和系统镜像即可,基础命令练习通常不需要很高的配置。

在云控制台取得服务器的公网地址与登录用户名,再通过 SSH 登录。Windows 可以使用 PowerShell 中的 ssh,也可以用 Xshell、MobaXterm 等终端软件建立 SSH 会话。

powershell 复制代码
# 在本地 Windows 中执行;替换用户名和公网地址
ssh 用户名@服务器公网IP

密钥登录需要按云厂商说明指定私钥。首次连接会提示核对主机指纹;密码输入时通常不显示字符,也不显示星号。

登录以后,终端里的 Linux 命令在远端服务器执行。 本地 Windows 的磁盘路径不能直接当成服务器上的路径使用。

1.1 Shell 与命令的执行

终端提供输入和显示界面,Shell 是解释命令的程序,Bash 就是常见的一种 Shell。Shell 解析输入,处理引号、重定向等语法,再执行内建命令或启动外部程序;程序通过操作系统提供的接口完成实际工作。

常见命令格式是:

text 复制代码
命令名 [选项] [操作对象]

方括号表示该部分可以省略,不需要把方括号输入终端。例如:

bash 复制代码
ls -l /tmp

这里 ls 是命令,-l 改变显示方式,/tmp 是被查看的目录。命令名、选项、对象之间用空格分开。很多短选项可以进行合并,例如 ls -a -l 可以写为 ls -al。

1.2 练习目录

以下练习都会在当前用户的家目录(个人云服务器)中进行,不需要 root 权限。在创建我们的练习目录前,先确认 linux-command-lab 不是存放已有资料的目录;如有重名,换一个名称,并同步修改后续路径。

下面的 mkdir -p 会创建目录及缺少的上级目录。

bash 复制代码
mkdir -p ~/linux-command-lab/logs ~/linux-command-lab/backup
cd ~/linux-command-lab

2. 路径与工作目录


2.1 当前用户与当前位置

在命令行输入whoami 显示当前有效用户的用户名,pwd 显示当前工作目录。前者回答当前登录的身份,后者回答位置,两个问题互不替代。

bash 复制代码
whoami
pwd

例如当前我作为普通用户可能看到:

工作目录不是"目前打开的整个服务器",而是解析相对路径时所依据的目录。

2.2 绝对路径与相对路径

Linux 把文件和目录组织在以 / 为根的目录结构中,不采用 Windows 的 C:、D: 盘符形式。此处可以先把它理解成一棵目录树:

text 复制代码
/                         根目录
├── 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 的结果:

bash 复制代码
cd logs
pwd
cd ../backup
pwd
cd ..
pwd

返回路径依次以 /linux-command-lab/logs、/linux-command-lab/backup、/linux-command-lab 结尾。第二条 cd 中,先由 .. 返回练习目录,再进入其中的 backup,并不是寻找 logs 内部的 backup。

另外有三种很常用的写法:

bash 复制代码
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 显示目录条目本身,不展开目录内容 查看目录自身的属性
bash 复制代码
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 在目标不存在时通常创建空文件;若目标已经存在时,默认更新时间戳,不会清空或重写已有内容。

bash 复制代码
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 的输出重定向:

bash 复制代码
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 文件 可以查看内容,多个文件则按参数顺序连续输出。适合短文本,不适合不加区分地查看图片、压缩包等二进制内容。

先建立一份六行的模拟日志:

bash 复制代码
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 源 目标 用于复制文件。常见用法如下:

bash 复制代码
cp notes.txt notes-copy.txt
cp notes.txt backup/
cp -r logs logs-copy
  1. 第一条创建不同名称的副本;
  2. 第二条把副本放到已存在的 backup 目录中,名称仍为 notes.txt;
  3. 第三条递归复制目录。这里 logs-copy 原先不存在,执行后得到 logs-copy/sample.log。

目标是否已经存在,会影响结果。 上述情况如果 logs-copy 已经是一个目录,再执行 cp -r logs logs-copy时,通常会把 logs 放进它里面,形成 logs-copy/logs/...。

复制普通文件时,如果目标文件已经存在,默认可能覆盖它。如果希望覆盖前询问用户是否确认执行,可以使用 cp -i 源 目标。

5.2 mv 的移动与重命名

mv 源 目标 用来移动文件或目录,同时也用于重命名:

bash 复制代码
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 可指定行数:

bash 复制代码
head -n 3 logs/sample.log
tail -n 2 logs/sample.log

第一条输出:

第二条输出:

6.3 tail -f 跟踪追加内容

tail -f 先显示末尾内容,再继续等待新追加的数据:

bash 复制代码
# 服务器终端 A
cd ~/linux-command-lab
tail -f logs/sample.log

再开一个登录到同一台服务器、同一用户的终端:

bash 复制代码
# 服务器终端 B
cd ~/linux-command-lab
echo 'INFO new connection' >> logs/sample.log

终端 A 随后显示新行。按 Ctrl+C 结束跟踪,回到命令提示符。

7. 文件查找、文本筛选与管道


7.1 find 查找文件

知道文件的名称、但不知道文件在哪时,可以使用 find 起点 条件。它遍历指定目录范围,输出符合条件的路径:

bash 复制代码
find . -name 'notes.txt'
find . -type f -name '*.log'

输出:

第一条找到两条路径,输出先后顺序不作保证。

第二条查找后缀为.log的普通文件,-type f 是类型条件,-name 后是名称模式,不是搜索文件正文(*号是通配符)。

7.2 grep 筛选文本行

find 查找路径,grep 按模式筛选文本行。它通常输出整条匹配行,而不只是命中的几个字符。

bash 复制代码
grep 'ERROR' logs/sample.log
grep -ni 'error' logs/sample.log
grep -nvi 'error' logs/sample.log

第一条区分大小写,只输出:

text 复制代码
ERROR disk full

第二条带行号、忽略大小写:

text 复制代码
3:ERROR disk full
5:error timeout

第三条是在同样忽略大小写的前提下,输出不匹配的行:

text 复制代码
1:INFO service start
2:INFO user login
4:warning retry
6:INFO service stop
选项 作用
-n 显示输入中的行号
-i 忽略大小写差异
-v 反向选择不匹配的行

7.3 管道与输出文件

管道符 | 可以把左边命令的标准输出连接到右边命令的标准输入。标准输入可以理解为程序接收数据的通道;前面没有给 head、tail 直接指定文件时,也可以由这个通道提供数据。

例如查看日志的第 2~4 行:

bash 复制代码
head -n 4 logs/sample.log | tail -n 3

结果为:

左边先取前四行,右边再从这四行里取最后三行。因此,tail 接收到的是文本数据,不是字符串 logs/sample.log,也不是左边命令的文件名参数。

筛选结果还可以继续保存:

bash 复制代码
grep -i 'error' logs/sample.log > errors.txt
cat errors.txt

输出为:

8. 命令帮助与常用补充


8.1 man、--help 与 help

刚开始学习时可以不必要把全部选项背下来,但是要能找到本机工具的说明:

bash 复制代码
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 读取需要的信息。

相关推荐
老徐聊GEO1 小时前
长尾问法召回对比实验(2026):全国大词与“南京+行业“问法的差异测量
1024程序员节·geo优化
优橙教育1 小时前
AI Agent开发是什么,和接个聊天框有什么区别
1024程序员节
宝绿特塑业再生科技1 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
机器视觉知识推荐、就业指导2 小时前
同一个产品,昨天OK今天NG?
1024程序员节
thefool1122662 小时前
TCP 1
java·1024程序员节
Escalating_xu2 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
GodSure09142 小时前
WorkBuddy上手指南
1024程序员节
greatonce2 小时前
巨益及核标杆案例|高端羽绒服饰品牌:账单自动化与智能核销实现T-1实时对账
1024程序员节
geovindu2 小时前
sql:SQL Pagination and Limiting Results using PorstgreSQL 18.0
大数据·数据仓库·sql·postgresql·数据库开发·数据库架构·1024程序员节