一、Linux 基本命令概览
以下是一些常用的Linux命令操作,后续我们会对其每个单独如何使用进行讲解。
操作类型 | 常用命令示例 |
---|---|
文件/目录操作 | ls, cd, cp, mv, rm, mkdir, rmdir |
查看文件内容 | cat, less, more, head, tail |
查找操作 | find, grep, locate, which |
权限管理 | chmod, chown, chgrp |
软件安装 | apt, yum, dnf, zypper, snap, flatpak |
系统管理 | ps, top, htop, df, du, free, uptime |
用户管理 | adduser, passwd, su, sudo, whoami |
网络管理 | ping, ifconfig, ip, curl, wget |
打包压缩 | tar, gzip, zip, unzip |
二、Linux命令行基础操作
1、pwd命令
pwd 是 “Print Working Directory” 的缩写,显示当前用户所在的路径
pwd/root
路径的类型:绝对路径和相对路径
1. 绝对路径
从根目录 / 开始
不依赖于当前工作目录
cd /etc cd /home/user/Documents
pwd /Users/junye/Desktop #绝对路径
2. 相对路径
相对于当前工作目录
更灵活但可能不直观
常见相对路径符号:
符号
含义
.
当前目录
..
上一级目录
~
当前用户主目录
-
上一个访问的目录
2、 ls命令
ls 是 Linux 中最常用的命令之一,用于列出目录中的文件和子目录,类似于 Windows 中的“查看文件夹内容”。
显示当前路径下的文件或者目录名称
[root@iZwz9b70mwpeltilcusk8bZ ~] ls Linux_commands
最常用选项整
命令
功能说明
ls
显示当前目录下的文件名(按列排布)
ls -l
详细信息(long format),显示权限、拥有者、大小等
ls -a
显示所有文件,包括以.开头的隐藏文件
ls -h
与 -l 一起使用,显示人类可读的文件大小(如 KB, MB)
ls -t
按修改时间排序,最新的排最上面
ls -r
倒序排列(与其他排序一起使用)
ls -S
按文件大小排序(默认从大到小)
ls -d */
只列出目录
ls -R
递归列出所有子目录内容
ls --color=auto
显示彩色输出(区分目录、可执行文件等)
ls -lh
常用组合:详细信息 + 人类可读大小
ls -alh
显示全部文件,详细信息,大小可读 —— 最常用组合之一!
拓展:配合通配符使用
ls *.txt # 显示所有 txt 文件
ls dir*/ # 显示所有以 dir 开头的目录
ls [a-z]*.sh # 显示以小写字母开头的 .sh 文件
3、cd 切换目录
cd 是 “change directory” 的缩写,用于切换当前工作目录,即进入另一个文件夹。
cd .. # 返回上一级
cd ./folder # 进入当前目录下的 folder
cd ~/Desktop # 进入用户的桌面目录
cd - # 回到上一个工作目录
命令
功能说明
cd
切换到当前用户的主目录(/home/用户名)
cd ~
同上,~ 代表主目录
cd /path/to/dir
切换到指定的绝对路径目录
cd ..
切换到上一级目录
cd .
停留在当前目录(通常用于命令测试)
cd -
返回上一次所在的目录
cd ~/Downloads
切换到主目录下的 Downloads 子目录
cd ../folder
相对于当前目录,切换到上级目录的 folder 子目录
注意事项:
cd 只能进入“目录”,不能进入“文件”。
如果目录不存在,会提示错误:
如果路径中带有空格,需加引号或用转义符:
cd "My Documents" cd My\ Documents
根目录 / 是文件系统的起点
所有文件、目录、设备等都从 / 派生
每个目录可能包含子目录或文件,构成一棵树
Linux 文件系统的典型目录树结构(简化图)
/
├── bin/ # 系统基本命令,如 ls、cp、mv 等
├── boot/ # 引导系统所需的文件,如 vmlinuz、grub 等
├── dev/ # 设备文件,如硬盘、终端、U盘等
├── etc/ # 系统配置文件,如 passwd、hosts
├── home/ # 普通用户的主目录(如 /home/zhang)
│ ├── user1/
│ └── user2/
├── lib/ # 系统运行的共享库(.so 文件)
├── media/ # 自动挂载外部设备(U盘、光盘)
├── mnt/ # 手动挂载用的挂载点
├── opt/ # 可选的第三方软件
├── proc/ # 虚拟文件系统,存储进程和内核信息
├── root/ # 超级用户 root 的主目录
├── run/ # 系统运行时的临时文件
├── sbin/ # 系统管理员用的命令,如 reboot、mount
├── srv/ # 提供服务相关的数据
├── sys/ # 内核相关的系统信息(虚拟文件系统)
├── tmp/ # 临时文件目录,重启后自动清空
├── usr/ # 二级程序目录(用户安装的程序)
│ ├── bin/ # 一般用户可执行程序
│ ├── lib/ # 程序库
│ └── share/ # 共享资源
├── var/ # 经常变化的数据,如日志、缓存、邮件
└── (其他可能目录,如 swap, lost+found, etc.)
Linux文件目录
可以将 / 理解为 “C盘根目录”,但 Linux 只有一个树状结构,没有 C:/ D:/。
所有磁盘、U盘、网络挂载都会作为一个“目录”挂载到树上。例如:
/etc
├── apache2
│ ├── apache2.conf
│ └── sites-available
├── bash.bashrc
├── hostname
└── network
Linux 的文件系统是树结构,从根 / 开始向下展开
没有 Windows 的盘符(C:\ D:\),所有设备都挂载在树的某个位置
通过路径+文件名访问具有唯一性
熟悉 /etc/、/home/、/usr/、/var/ 等核心目录非常关键
使用 tree 命令可以更清晰地查看结构
Linux 下载tree 命令
下载tree 利用sudo权限
#输入 sudo yum install tree
如果在root权限下直接利用yum即可
yum install -y tree
Macos 下载tree命令
利用homebrew 来安装tree
brew install tree
4. touch创建文件
创建空文件
修改文件的访问时间(atime)和修改时间(mtime)
如果文件不存在就创建它,如果文件存在则更新时间戳
touch file.txt # 创建空文件
1、利用touch创建cpp文件
touch test.cpp
然后利用 vim查看并修改文件
vim test.c
shift+:输入i进入修改模式,写一个简单的c++脚本,hello world!
然后利用 g++ 或者 clang++ 进行文件的编译输出一个后缀为.out的文件
g++ test.cpp -otest.out
然后运行test.out文件。
./test.out
输出描述:
hello world!
2、创建多个文件:
touch a.txt b.txt c.txt
3. 更新文件的时间戳(不更改内容)
touch existing.txt
这个命令会把 existing.txt 的“最后访问时间”和“最后修改时间”更新为当前时间,但不更改内容。
4. 设置特定时间(使用 -t 选项)
touch -t 202501010000 file.txt
表示将时间设置为:2025 年 1 月 1 日 00:00
5. 不创建文件,只修改已有文件的时间(使用 -c)
touch -c file.txt
6、常用选项
选项
含义说明
-c
不创建文件(如果不存在)
-a
只改变访问时间(atime)
-m
只改变修改时间(mtime)
-t [[CC]YY]MMDDhhmm[.ss]
指定时间
-r 文件名
复制另一个文件的时间戳
选项
含义说明
-c
不创建文件(如果不存在)
-a
只改变访问时间(atime)
-m
只改变修改时间(mtime)
-t [[CC]YY]MMDDhhmm[.ss]
指定时间
-r 文件名
复制另一个文件的时间戳
5. mkdir 创建目录
5、mkdir 的基本语法
1. 创建单个目录
mkdir [选项] 目录名
2. 一次创建多个目录
mkdir dir1 dir2 dir3
3. 创建嵌套目录(推荐使用 -p 选项)
加上 -p,如果父级目录不存在,它会一并创建。
mkdir -p parent/child/grandchild
4. 使用绝对路径或相对路径创建目录
mkdir /home/user/newdir # 绝对路径 mkdir ./newdir # 当前目录下创建 mkdir ../siblingdir # 在上一级目录中创建
5. 常用选项
选项
含义
-p
创建多层目录结构,如目录已存在则不报错
-v
显示每个被创建的目录名称(verbose 模式)
-m
设置目录权限(mode)
6、Linux 文件的三种时间戳
时间戳类型
含义
英文缩写
可用命令查看
修改时间
文件内容被更改的时间
mtime
ls -l or stat
访问时间
文件被读取(或执行)时的时间
atime
stat
状态改变时间
文件的元数据(权限、所有者等)改变的时间
ctime
stat
1️⃣ 修改时间(mtime)
表示文件内容被更改的时间。
举例:使用 vim 或 echo >> 修改了文件内容,mtime 会被更新。
常用于:判断文件是否有被修改。
查看方式:
ls -l file.txt # 或者 stat file.txt
2️⃣ 访问时间(atime)
表示文件"被访问(读取)"的时间。
举例:使用 cat, less, vim 打开文件,只要读取了内容,就会更新 atime。
注意:为了性能,有些系统会禁用 atime 自动更新(尤其是 SSD),可通过挂载参数查看或设置。
查看方式:
stat file.txt
3️⃣ 状态改变时间(ctime)
表示文件的元信息被修改的时间(比如权限、所有者、链接数等),不是内容!
举例:
chmod, chown, mv 等更改元数据都会更新 ctime, 但不一定修改了内容.
不能手动更改 ctime(除非重新写入或使用特殊工具)。
查看方式:
stat file.txt
7、为什么时间戳那么重要?
1. 自动化备份与同步工具的依据
工具如 rsync, make, cron, tar 等都会根据 mtime 判断文件是否需要重新复制、打包或编译。
举例:rsync 默认会比较源文件和目标文件的 mtime。
2. 日志分析与审计
可以分析某个文件最近是否被访问(atime),或者是否改动(mtime)。
系统安全人员经常会查看是否有非法访问。
3. 性能优化和 SSD 生命周期
atime 更新频繁,对 SSD 磁盘有写损耗。
因此许多 Linux 系统用 noatime 或 relatime 挂载选项减少写操作。
4、touch 对时间戳的控制
命令示例
效果
touch file.txt
同时更新 atime 和 mtime 为当前时间
touch -a file.txt
仅更新 atime
touch -m file.txt
仅更新 mtime
touch -t 202501011200 file.txt
手动指定 atime 和 mtime
touch -r another.txt file.txt
把另一个文件的时间戳复制过来