Linux常见指令

Linux下一切皆文件

在 Linux 系统里,"一切皆文件" 是核心设计理念。这意味着系统中的各类资源,不管是硬件设备、网络连接,还是普通的磁盘文件、目录,都可以通过统一的文件操作接口进行访问,像读写、打开、关闭等。借助这种抽象方式,Linux 让用户能以一致的方式与系统中的所有资源进行交互。

  1. 统一接口 :不管资源的具体类型是什么,对它们的操作都遵循相同的模式。例如,你既可以用cat命令查看普通文件的内容,也能用它查看硬件设备文件的信息。
  2. 路径表示 :系统中的每个资源都有对应的路径,就像普通文件一样。比如,磁盘设备会被映射为/dev/sda,串口设备是/dev/ttyS0
  3. 文件描述符:程序通过文件描述符来操作资源,而不用关心资源本身的特性。
  4. 权限控制:所有资源的访问权限都是通过文件权限机制来管理的。

在windows系统中也是如此,windows的图形化界面其实也是文件,在启动电脑时,会打开一个叫桌面的文件,电脑中的快捷方式等都会保存在该文件中

右侧的文件类型是文件夹

在linux系统中命令也是一个个的文件,他们被保存在一个特定的目录下。当在终端输入一个命令后,shell会到指定目录下去查找可执行文件:

  1. 内置命令 :shell 首先会检查该命令是否为内置命令,像cdechoexit等都属于内置命令,它们是 shell 自身的一部分。
  2. 别名(Alias) :接着会查看是否有用户自定义的别名。别名是通过alias命令定义的快捷方式。
  3. 函数:然后检查是否为 shell 函数,shell 函数是用户自定义的代码片段。
  4. PATH 环境变量 :如果以上都不是,shell 会在PATH环境变量指定的目录中查找对应的可执行文件。PATH是一个由冒号分隔的目录列表,常见的目录有/bin/usr/bin/sbin/usr/sbin等。

命令执行流程

当 shell 找到匹配的可执行文件后,会按照以下步骤执行命令:

  1. 权限检查 :系统会检查当前用户是否拥有执行该文件的权限。可执行文件需要设置x权限位。
  2. 文件类型识别
    • 二进制可执行文件 :这类文件是经过编译的程序,比如 GCC 编译生成的.o文件。内核会将其加载到内存中,并通过 ELF(Executable and Linkable Format)格式解析文件头,然后执行其中的机器码。
    • 脚本文件 :脚本文件的第一行通常是#!/bin/bash#!/usr/bin/python这样的 shebang 行,它指定了执行该脚本的解释器。系统会调用对应的解释器来执行脚本内容。
    • 动态链接处理 :如果可执行文件依赖共享库,系统会在/lib/usr/lib等目录中查找并加载这些库。
  3. 进程创建 :shell 会调用fork()系统调用创建一个子进程,然后在子进程中通过exec()系列系统调用加载并执行目标程序。
  4. 环境传递:父进程(shell)的环境变量会被传递给子进程,不过子进程对环境变量的修改不会影响父进程。
  5. 执行与返回 :程序开始执行后,其返回值会通过exit()系统调用返回给 shell,shell 会将这个返回值作为命令的退出状态码。

示例说明

下面通过一个简单的例子来展示这个过程:

  1. 当你输入ls命令时,shell 会在PATH目录中查找ls文件,最终在/bin/ls找到它。
  2. 系统会检查当前用户是否有执行/bin/ls的权限。
  3. 由于ls是一个二进制可执行文件,内核会加载并执行它。
  4. ls程序读取当前目录的内容,并将结果输出到标准输出(通常是终端)。
  5. 执行完毕后,ls程序返回退出状态码(通常成功是 0,失败非 0),shell 会显示新的命令提示符。

1.Linux下的基本指令

ls指令

ls是一个基础且常用的指令,其主要功能是列出目录内容。

语法结构:ls [选项] [目录]

要是你不指定目录,ls默认会列出当前工作目录的内容。

常用参数

下面这些是ls指令常用的参数,你可以单独使用,也能组合起来用:

  • -a:将所有文件显示出来,包括以.开头的隐藏文件。
  • -l:以长格式展示文件信息,显示的内容有文件权限、硬链接数、所有者、所属组、大小、修改时间和文件名。
  • -h:和-l一起使用时,会以人类可读的格式显示文件大小,例如1K2.5M等。
  • -t:按照文件的修改时间对文件进行排序,最新修改的文件排在最前面。
  • -r:以反向顺序排列文件。
  • -S:根据文件大小对文件进行排序。
  • -d:只列出目录本身,而不列出目录里的内容。
  • -R:递归地列出所有子目录中的文件。

常用参数说明:

1.以长格式显示当前目录内容

2.显示所有文件(包含隐藏文件)

ls -a

3.不同参数可以组合使用

ls -al

pwd命令

显示用户所在目录

cd指令

在 Linux 系统中,cd(Change Directory)是用于切换当前工作目录的核心指令,几乎所有终端操作都离不开它。

语法:cd 目录名

  • 若不指定目录路径,默认切换到当前用户的家目录/home/用户名,可简写为~)。
  • 目录路径可以是绝对路径 (从根目录/开始,如/usr/local/bin)或相对路径 (相对于当前目录,如./docs../parent)。

系统中文件的存贮形式是以树形的方式存储的,当我们使用ls -a命令时,可以看到当前目录下有' . '和' . . ',其中一个点表示当前目录下,俩个点表示上一级目录下。

cd .. 进入上一级目录

cd . 表示当前目录

切换到指定绝对路径目录

cd /etc/apt # 切换到/etc/apt目录(绝对路径,从/开始)

切换到用户家目录

cd ~ # 切换到当前用户的家目录(如/home/ubuntu)

cd # 不填参数,效果同上

cd ~user # 切换到用户user的家目录(需有访问权限)

切换到上一次工作目录

cd - 切换到上一次所处的目录

切换到根目录

cd / 切换到根目录

touch 指令

语法:

1. 创建空文件

若指定的文件不存在,touch 会创建一个空文件:

复制代码
touch filename.txt  # 创建名为filename.txt的空文件
touch file1 file2   # 同时创建多个文件

2. 更新文件时间戳

若文件已存在,touch 会更新其访问时间 (atime)和修改时间(mtime)为当前系统时间:

复制代码
touch existing_file  # 更新existing_file的时间戳

常用参数

touch 的参数可用于精确控制时间戳的更新方式:

  • -a:仅更新访问时间(access time)。
  • -m:仅更新修改时间(modify time)。
  • -d:指定自定义时间(需配合日期格式)。
  • -t:以 [[CC]YY]MMDDhhmm[.ss] 格式指定时间。
  • -c:不创建新文件,仅更新已存在文件的时间戳。

mkdir指令

在 Linux 系统中,mkdir(Make Directory)是用于创建目录(文件夹)的基础指令。

基本语法

复制代码
mkdir [选项] 目录名1 [目录名2 ...]

示例演示

1. 创建单个目录

复制代码
mkdir docs       # 在当前目录下创建docs目录
mkdir /tmp/test  # 在/tmp目录下创建test目录(需权限)

2. 递归创建多级目录

复制代码
mkdir -p project/src/main/java/com/example  # 一次性创建完整路径

3. 同时创建多个目录

复制代码
mkdir dir1 dir2 dir3  # 创建3个平级目录
mkdir -p parent/{a,b,c}  # 创建parent/a、parent/b、parent/c(需bash支持)

4. 创建带权限的目录

复制代码
mkdir -m 750 team_share  # 权限为rwxr-x---

5. 创建目录并显示详细过程

复制代码
mkdir -vp logs/2023/07  # 显示创建logs、logs/2023、logs/2023/07的过程

rmdir && rm指令

rmdir

rmdir(Remove Directory)是专门用于删除空目录的指令。

复制代码
rmdir [选项] 目录名1 [目录名2 ...]
  • 可同时删除多个空目录,用空格分隔目录名。
  • 核心限制 :只能删除空目录(即目录内无任何文件或子目录),否则会报错。

1. 删除单个空目录

复制代码
rmdir temp  # 删除当前目录下的temp目录(必须为空)

2. 递归删除多级空目录

复制代码
# 假设存在目录结构:a/b/c(均为空)
rmdir -p a/b/c  # 递归删除c、b、a
  1. 同时删除多个空目录

    rmdir dir1 dir2 dir3 # 删除3个平级空目录

  2. 显示详细删除过程

    rmdir -vp logs/2023/07 # 显示删除logs/2023/07、logs/2023、logs的过程(若均为空)

权限限制:

  • 删除目录需拥有该目录的写入权限w)和执行权限x)。
  • 示例:若用户无/root目录的写入权限,执行rmdir /root/test会报错。

rm

rm(Remove)是用于删除文件或目录的核心指令。

语法:

复制代码
rm [选项] 文件或目录1 [文件或目录2 ...]
  • 可同时删除多个文件或目录,用空格分隔。
  • 核心区别 :删除目录需加-r参数,否则只能删除文件。

示例演示

  1. 删除单个文件

    rm test.txt # 删除test.txt文件(无需确认)

  2. 删除多个文件

    rm *.log # 删除当前目录下所有.log文件
    rm file1 file2 file3 # 删除多个指定文件

  3. 递归删除目录(危险!)

    rm -r data # 删除data目录及其所有内容(包括子目录和文件)

  4. 强制删除(不提示)

    rm -rf temp # 强制递归删除temp目录(无论是否存在或非空)

  5. 交互式删除(安全)

    rm -i *.bak # 删除所有.bak文件前逐个确认

  6. 显示详细删除过程

    rm -rv logs/2023 # 显示删除logs/2023目录及其内容的详细过程

man指令

man(Manual)是用于查看系统手册页的核心指令,堪称 "Linux 程序员的字典"。通过它可以快速获取任意命令、配置文件或系统调用的详细文档。

基本语法

复制代码
man [选项] 命令/配置文件/系统调用名

手册页的章节划分

Linux 手册页按内容类型分为多个章节,查询时可通过指定章节号获取更精准的信息:

核心参数

cp指令

cp(Copy)是用于复制文件和目录的核心指令。

基本语法

复制代码
cp [选项] 源文件/目录 目标文件/目录
  • 复制文件:目标可以是文件名或目录路径。
  • 复制目录 :必须加-r-R参数(递归复制)。

核心参数

示例

  1. 复制单个文件

    cp source.txt destination/ # 复制到目录
    cp source.txt new_name.txt # 复制并改名

  2. 复制多个文件到目录

    cp file1.txt file2.txt docs/ # 复制多个文件到docs目录
    cp *.jpg images/ # 复制所有jpg文件到images目录

  3. 递归复制目录(重要)

    cp -r project/ backup/ # 复制project目录及其内容到backup目录下

  4. 保留文件属性复制

    cp -p log.txt archive/ # 保留log.txt的时间戳和权限

  5. 交互式覆盖(安全)

    cp -i data.csv backup/ # 若backup/data.csv已存在,会询问是否覆盖

  6. 强制覆盖并显示进度

    cp -fv config.ini /etc/ # 强制覆盖并显示复制过程

  7. 复制时排除特定文件或目录

    cp -r --exclude="*.log" project/ backup/ # 复制project目录,但排除所有.log文件

mv指令

mv(Move)是用于移动或重命名文件和目录的核心指令。

基本语法

复制代码
mv [选项] 源文件/目录 目标文件/目录
  • 重命名 :源和目标在同一目录下,例如:mv old.txt new.txt
  • 移动 :目标为其他目录,例如:mv file.txt /path/to/destination/

参数

  1. 重命名文件 / 目录

    mv old_name.txt new_name.txt # 重命名文件
    mv project_v1 project_v2 # 重命名目录

  2. 移动文件到目录

    mv file.txt documents/ # 移动file.txt到documents目录
    mv *.jpg photos/ # 移动所有jpg文件到photos目录

  3. 移动并同时重命名

    mv data.csv backup/old_data.csv # 移动到backup目录并改名

  4. 递归移动目录

    mv logs/ archive/ # 将logs目录移动到archive目录下(无需-r参数)

  5. 交互式覆盖(安全)

    mv -i config.ini /etc/ # 若/etc/config.ini已存在,会询问是否覆盖

  6. 强制移动并显示进度

    mv -fv temp/* production/ # 强制移动temp目录下的所有内容到production目录

cat指令

cat(Concatenate)是用于查看文件内容、合并文件的基础指令。

基本语法

复制代码
cat [选项] [文件1] [文件2] ...
  • 若不指定文件,cat 会从标准输入读取内容(需按Ctrl+D结束输入)。
  • 可同时指定多个文件,cat 会按顺序合并输出。

参数

示例

  1. 查看文件内容

    cat README.md # 显示README.md的内容

  2. 合并多个文件

    cat part1.txt part2.txt > combined.txt # 将part1和part2合并为combined.txt

  3. 显示行号

    cat -n config.ini # 显示config.ini的内容并添加行号

  4. 压缩空行并显示行尾标记

    cat -sE long_file.txt # 压缩连续空行并在每行末尾显示$

  5. 从标准输入创建文件

    cat > new_file.txt # 输入内容,按Ctrl+D保存

  6. 追加内容到文件

    cat >> existing_file.txt # 追加输入内容,按Ctrl+D结束

more指令

more 是用于分页查看文件内容的基础工具,尤其适合浏览大文件。它提供了简单的导航功能,让用户可以逐页查看内容,避免一次性加载整个文件。

基本语法

复制代码
more [选项] 文件名

核心操作键

参数

示例

  1. 分页查看大文件

    more /var/log/syslog # 分页查看系统日志

  2. 指定每页行数

    more -20 data.csv # 每页显示20行

  3. 搜索特定内容

    more large_file.txt # 进入more模式后,输入 /关键词 进行搜索

  4. 同时查看多个文件

    more file1.txt file2.txt # 依次查看多个文件,按:n切换到下一个

常见场景

  1. 快速预览大文件

    复制代码
    more access.log  # 快速查看日志文件前几页
  2. 配合管道使用

    复制代码
    cat large_file.txt | more  # 等同于 more large_file.txt
    grep "error" log.txt | more  # 分页查看搜索结果
  3. 临时替代 less

    在仅安装了 more 的系统中(如某些精简版 Linux),可使用 more 替代 less 的基本功能。

less指令

less 是功能强大的文件内容分页查看工具,相比 more 提供了更丰富的操作和交互能力。

基本语法

复制代码
less [选项] 文件名

核心操作键

常用参数

示例

  1. 分页查看带行号的文件

    less -N large_file.log # 显示行号并分页查看

  2. 搜索并高亮关键词

    less /var/log/auth.log # 进入less模式后,输入 /Failed 搜索失败记录

  3. 查看彩色日志

    less -R colored_output.log # 正确显示日志中的彩色标记

  4. 单行显示长文本

    less -S data.csv # 单行显示,用→←键查看长行内容

  5. 从特定位置开始查看

    less +/ERROR log.txt # 直接定位到第一个ERROR出现的位置

head指令

head 是用于查看文件前几行的基础指令

基本语法

复制代码
head [选项] 文件名

参数

示例

  1. 显示前 N 行

    head -n 3 data.csv # 显示data.csv的前3行

  2. 显示前 N 字节

    head -c 50 config.ini # 显示config.ini的前50个字节

  3. 同时查看多个文件

    head file1.txt file2.txt # 依次显示多个文件的前10行(带文件名标题)

  4. 结合管道使用

    cat large_file.txt | head -n 20 # 等价于 head -n 20 large_file.txt

常见场景

  1. 快速预览大文件

    复制代码
    head access.log  # 查看日志文件的开头,了解日志格式
  2. 查看 CSV 文件表头

    复制代码
    head -n 1 data.csv  # 显示CSV文件的表头(第一行)
  3. 截取文件片段

    复制代码
    head -n 1000 large.txt > small.txt  # 提取大文件的前1000行到新文件
  4. 查看二进制文件头部信息

    复制代码
    head -c 200 binary_file  # 查看二进制文件的前200字节(可能包含文件头信息)

tail指令

tail 是用于查看文件末尾内容的基础指令

基本语法

复制代码
tail [选项] 文件名

默认显示文件的后 10 行

复制代码
tail access.log  # 显示access.log的最后10行

参数

示例演示

  1. 显示最后 N 行

    tail -n 20 error.log # 显示error.log的最后20行

  2. 实时监控日志更新

    tail -f /var/log/nginx/access.log # 实时查看Nginx访问日志

  3. 监控多个文件

    tail -f app.log db.log # 同时监控多个日志文件

  4. 从指定行开始显示

    tail -n +500 large.txt # 从第500行开始显示(+号表示从第n行到文件末尾)

  5. 显示最后 N 字节

    tail -c 1024 data.bin # 显示data.bin的最后1024字节

date指令

date 指令用于显示或设置系统的日期和时间,功能灵活,支持多种格式输出和时间计算

基本语法

复制代码
date [选项] [格式字符串]

默认情况下,直接执行 date 会显示当前系统的本地时间(格式示例:Thu Jul 24 15:30:45 CST 2025)。

核心功能与示例

  1. 显示当前时间(默认格式)

    date

    输出示例:Thu Jul 24 15:32:10 CST 2025

find指令

find 是用于在文件系统中搜索文件和目录的强大工具。

基本语法

复制代码
find [搜索路径] [搜索条件] [处理动作]
  • 搜索路径 :指定从哪个目录开始搜索,默认为当前目录(.)。
  • 搜索条件:定义搜索规则,如按名称、时间、大小等筛选。
  • 处理动作:对匹配的文件执行操作,如删除、打印、执行命令等。

搜索条件参数

处理动作参数

示例演示

  1. 按名称搜索

    find /etc -name "hosts" # 搜索/etc目录下的hosts文件
    find . -iname "readme.md" # 搜索当前目录下的readme.md(忽略大小写)
    find /var/log -name "*.log" # 搜索/var/log目录下的所有.log文件

  2. 按文件类型搜索

    find /tmp -type d # 搜索/tmp目录下的所有目录
    find /usr/bin -type f # 搜索/usr/bin目录下的所有普通文件
    find /mnt -type l # 搜索/mnt目录下的所有符号链接

  3. 按时间搜索

    find . -mtime -1 # 搜索24小时内修改的文件
    find /var/log -mtime +7 # 搜索7天前修改的文件
    find /home -atime 3 # 搜索恰好3天前访问的文件

  4. 按大小搜索

    find /tmp -size +100M # 搜索/tmp目录下大于100MB的文件
    find . -size -1k # 搜索当前目录下小于1KB的文件
    find /data -size 50M # 搜索/data目录下恰好50MB的文件

  5. 按权限搜索

    find / -perm 777 # 搜索全系统权限为777的文件(需root权限)
    find . -perm /u+x # 搜索当前目录下用户有执行权限的文件

  6. 组合条件搜索

    搜索7天前的.log文件并删除

    find /var/log -name "*.log" -mtime +7 -delete

    搜索用户tom的大于100MB的文件

    find /home -user tom -size +100M -exec ls -lh {} ;

    搜索空目录并删除

    find . -type d -empty -ok rmdir {} ;

which指令

which 是用于查找可执行文件路径的实用工具。

基本语法

复制代码
which [选项] 命令名

例如:

复制代码
which ls        # 查找ls命令的路径
which python3   # 查找python3解释器的路径

whereis指令

whereis 是一个用于快速查找程序相关文件(如二进制可执行文件、源代码、手册页等)的命令行工具。它通过搜索系统预设的目录(而非遍历整个文件系统),高效定位与指定命令相关的核心文件,适用于快速获取程序的完整信息。

基本语法

复制代码
whereis [选项] 命令名/文件名

例如:

复制代码
whereis ls    # 查找与ls相关的文件
whereis python # 查找python的二进制文件、源码和手册页

alias 指令

功能:设置命令的别名

复制代码
# 用"ll"代替"ls -l"(显示文件详细信息)
alias ll="ls -l"

# 用"la"代替"ls -la"(显示所有文件,包括隐藏文件)
alias la="ls -la"

# 用"rm"代替"rm -i"(删除前提示确认,防止误删)
alias rm="rm -i"

grep 指令

语法: grep [选项] 搜寻字符串 ⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常⽤选项:
-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同
-n :顺便输出⾏号
-v :反向选择,亦即显⽰出没有 '搜寻字符串' 内容的那⼀⾏

zip/unzip 指令

语法: zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项
-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理
将test2⽬录压缩: zip test2.zip test2/*
解压到tmp⽬录: unzip test2.zip -d /tmp

tar指令

tar(Tape Archive)是用于文件打包和压缩的核心工具,它能将多个文件或目录合并为一个归档文件(称为 "tar 包"),并可结合压缩算法(如 gzip、bzip2、xz)进一步减小文件体积。

基本语法

复制代码
tar [选项] [归档文件名] [源文件/目录]

核心选项(可组合使用):

  • 打包-c(创建归档)
  • 解压-x(提取归档)
  • 查看内容-t(列出归档内容)
  • 指定文件名-f(后接归档文件名,必须紧跟在其他选项后)
  • 压缩格式
    • -z:使用 gzip 压缩(生成.tar.gz.tgz文件)
    • -j:使用 bzip2 压缩(生成.tar.bz2文件)
    • -J:使用 xz 压缩(生成.tar.xz文件)
  • 详细输出-v(显示操作过程)

核心功能与示例

  1. 创建未压缩的 tar 包

    tar -cvf archive.tar files/ # 将files目录打包为archive.tar

  • -c:创建归档
  • -v:显示详细过程
  • -f:指定归档文件名
  1. 创建并压缩 tar 包(常用)

    使用gzip压缩(生成.tar.gz文件)

    tar -czvf archive.tar.gz files/

    使用bzip2压缩(生成.tar.bz2文件,压缩比更高)

    tar -cjvf archive.tar.bz2 files/

    使用xz压缩(生成.tar.xz文件,压缩比最高,现代推荐)

    tar -cJvf archive.tar.xz files/

  2. 解压 tar 包

    解压到当前目录

    tar -xvf archive.tar

    解压到指定目录

    tar -xvf archive.tar -C /path/to/destination/

    解压gzip/bzip2/xz压缩的tar包(自动识别压缩格式)

    tar -xzvf archive.tar.gz
    tar -xjvf archive.tar.bz2
    tar -xJvf archive.tar.xz

  3. 查看 tar 包内容

    tar -tvf archive.tar # 列出归档中的所有文件和目录

  4. 只解压特定文件 / 目录

    tar -xvf archive.tar path/to/specific/file.txt # 只解压指定文件
    tar -xvf archive.tar directory/ # 只解压指定目录

相关推荐
chen1108____1 小时前
Nginx 实用知识大全:从模块作用到高并发承载
运维·nginx
努力一点9481 小时前
linux系统底层逻辑 开机顺序 ubuntu22.04系统
linux·运维·服务器·ubuntu·ai·gpu算力
橘子味的茶二1 小时前
vsCode如何远程服务器不需要每次输入密码
服务器·ide·vscode
汤姆大聪明2 小时前
Spring Cloud Gateway 服务网关
java·服务器·前端
狒狒的代码王国2 小时前
Nginx简单介绍
运维·nginx
TRACER~852 小时前
移动端自动化Appium框架
运维·appium·自动化
Kendra9193 小时前
Linux文件系统权限
linux·运维
猫头虎4 小时前
[精选] 2025最新生成 SSH 密钥和 SSL 证书的标准流程(Linux/macOS/Windows系统服务器通用方案)
linux·服务器·开发语言·macos·ssh·ssl·ai编程
DreamJia914 小时前
Nginx 服务器 SSL 证书安装部署并配置(已实测)
服务器·nginx·ssl
kfepiza4 小时前
Linux网络管理工具NetworkManager笔记250726
linux·网络协议