当前位置: 首页 > news >正文

Linux基础命令详解:从入门到精通

本文整理了Linux系统中最常用的基础命令,每个命令都配有详细说明和具体示例,帮助你快速掌握Linux操作技巧。文章中用的终端是XShell,系统是Centos


📁 1. ls - 列出目录(文件夹)内容

功能:显示当前目录下的文件和子目录信息
常用选项

  • -a:显示隐藏文件(以.开头的文件)
  • -l:详细信息格式(权限/所有者/大小等)
  • -F:用符号标记文件类型(*/@/=等)
$ ls# 列出当前目录内容
file.txtdir$ ls -a# 显示所有文件(含隐藏文件)
....hiddenfile.txt$ ls -lF# 详细格式并标记类型
-rw-r--r-- 1 user group 0 Jan 12 file.txt*
drwxr-xr-x 2 user group 4096 Jan 12 dir/

在这里插入图片描述
图片中出现ls -l的输出:
每个字段的含义

字段位置含义说明示例解释
第1位文件类型-:普通文件;d:目录;l:符号链接;b:块设备(如硬盘)
第2-10位权限位(3组)每组3位,对应所有者(u)组(g)、**其他用户(o)**的权限:
r(读,4)、w(写,2)、x(执行,1)
示例rw-r--r--
- 所有者:读+写(rw-)
- 组用户:读(r–)
- 其他用户:读(r–)
第11位硬链接数1:该文件有1个硬链接(可理解为“引用计数”)
第12位所有者user:文件所属用户
第13位所属组group:文件所属用户组
第14位文件大小1024:字节(加-h选项显示为1K,更易读)
第15-17位修改时间Jan 12 14:30:文件最后修改时间
第18位起文件名/目录名file.txt:文件名;dir/:目录(-F选项标记)

注意:这些都属于文件的属性信息
文件 = 文件的内容 + 文件的属性
在这里插入图片描述
所以就比如在windows上新建一个空文件,并不是真的不占磁盘空间


📍 2. pwd - 显示当前路径

功能:打印当前工作目录的绝对路径

$ pwd
/home/user/documents

在这里插入图片描述


📂 3. cd - 切换目录

功能:更改当前工作目录
特殊路径

  • ..:上级目录
  • ~:用户家目录
  • -:返回上次目录

语法:cd 目录名

$ cd /var/log# 切换到绝对路径
$ cd ..# 返回上级目录
$ cd ~/downloads # 进入家目录的downloads
$ cd -# 返回上次所在目录

在这里插入图片描述

cd 可以理解为我们的鼠标的那个箭头,cd 某个目录就可以进入到这个目录里

补充:路径的认识
Linux系统中,磁盘上的文件和目录被组成⼀棵目录树,每个节点都是目录或文件
• 其中普通文件⼀定是目录树的叶子节点
• 目录可能是叶子(空目录), 也可能是路上节点
• 理解路径存在的意义: 树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯⼀性的方案来进行定位文件。其中任何⼀个节点,都只有⼀个父节点,所以,从根目录开始,定位指定文件,路径具有唯⼀性
• 绝对路径:⼀般从/开始,不依赖其他目录的定位文件的方式
• 相对路径:相对于当前用户所处目录,定位文件的路径方式
• 绝对路径⼀般不会随着用户的路径变化而丧失唯⼀性,⼀般在特定服务的配置文件中经常被使用
• 相对路径因为它的便捷性,⼀般在命令行中使用较多

在这里插入图片描述
在这里插入图片描述

如图,退到根目录就无法再退了
在这里插入图片描述
在这里插入图片描述

$ tree //查看当前树目录结构
//系统默认是没有的,需要安装
centos:yum install -y tree
ubuntu: apt install -y tree

在这里插入图片描述

如果遇到文件很多刷屏停不下来就按 ctrl + c,随便一说 clear 这个指令可以清屏


✏️ 4. touch - 创建空文件/更新时间戳

功能

  1. 创建新文件
  2. 更新文件访问/修改时间

语法:touch [选项]… 文件…

$ touch newfile.txt# 创建空文件
$ touch -a file.txt# 只更新访问时间
$ touch -m file.txt# 只更新修改时间

在这里插入图片描述


📂 5. mkdir - 创建目录

语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
选项-p:递归创建多级目录

$ mkdir new_dir# 创建单级目录
$ mkdir -p a/b/c/d# 创建多级目录

目录结构:

a/
└── b/
└── c/
└── d/

🗑️ 6. rmdir & rm - 删除文件/目录

rmdir:删除空目录
$ rmdir empty_dir# 删除空目录
$ rmdir -p a/b/c# 递归删除空目录
rm:删除文件/目录

选项

  • -r:递归删除
  • -f:强制删除
  • -i:交互确认
$ rm file.txt# 删除文件
$ rm -r mydir# 递归删除目录
$ rm -ri dir# 交互式递归删除

📚 7. man - 查看帮助手册

功能:查看命令/系统调用的文档
章节

  • 1:普通命令
  • 2:系统调用
  • 3:库函数
$ man ls# 查看ls命令帮助
$ man 2 fork# 查看fork系统调用
$ man 3 printf# 查看C库函数printf

man手册有九章(不同系统可能会有差别)


📄 8. cp - 复制文件/目录

语法:cp [选项] 源文件或目录 目标文件或目录
选项

  • -r:递归复制目录
  • -i:覆盖前确认
  • -f:强制覆盖

cp指令用于复制文件或目录
如同时指定两个以上的文件或目录,且最后的目的地是⼀个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中

$ cp file.txt file_backup.txt# 复制文件
$ cp *.txt target_dir/# 复制所有txt文件
$ cp -r dir new_dir# 递归复制目录

在这里插入图片描述

理论补充:
Linux"一切皆文件",该理论将系统中的 设备(如键盘、显示器与普通文件统一抽象为文件对象,通过文件操作(读/写)实现设备交互。具体来说:
向显示器打印内容 → 向 显示器文件(标准输出,stdout)写入数据;
从键盘读取输入 → 从 键盘文件(标准输入,stdin)读取数据。
图片通过多个Linux命令示例,展示了"一切皆文件"理论的实际应用,以及输入/输出重定向的使用场景:
1. 标准输出:直接向显示器文件写入

  • 示例1echo "hello world"
    作用:将字符串"hello 你好"输出到显示器(标准输出stdout)。
    逻辑:对应理论中"向显示器文件写入"的操作。
  • 示例2printf "hello world, %d, %f\n" 3 3.14
    作用:格式化输出字符串(%d表示整数,%f表示浮点数),结果为hello world, 3, 3.140000
    逻辑:与echo类似,均向显示器文件写入数据,但printf支持更灵活的格式控制。
    2. 输出重定向:改变写入目标(从显示器到文件)
    Linux中用**>(覆盖写入)和>>**(追加写入)实现输出重定向,将原本应输出到显示器的内容写入指定文件。
  • 示例3:覆盖写入(>)
    命令:echo "hello world" > myfile.txt
    作用:将"hello 你好"写入myfile.txt文件(而非显示器)。
    关键特性:先清空文件再写入(图片注释:“写入的时候,都是先清空再写!!”)。
    验证:- ls -l:查看文件列表,显示myfile.txt的大小为12字节(包含字符串和换行符);- cat myfile.txt:查看文件内容,确认"hello world"已写入。
  • 示例4:清空文件(>)
    命令:> myfile.txt
    作用:直接用>重定向符清空myfile.txt(无源内容时,>会截断文件)。
    验证:- ls -l:显示myfile.txt大小为0字节;- cat myfile.txt:无输出(文件为空)。
  • 示例5:追加写入(>>)
    命令:echo "aaaaaaaaaaaaaabbbb" >> myfile.txt
    作用:将字符串追加到hello.txt末尾(不清空原有内容)。
    验证:- cat myfile.txt:显示两行相同的字符串(首次追加+再次执行命令的结果),说明 >>保留原有内容(图片注释:“追加重定向!!”)。
    3. 输入重定向:改变读取来源(从键盘到文件)
    Linux中用 < 实现输入重定向,将命令的输入源从键盘(标准输入stdin)改为指定文件。
  • 示例6cat < myfile.txt
    作用:将hello.txt作为cat命令的输入,显示文件内容(等同于直接执行cat hello.txt)。
    逻辑:对应理论中"从文件读取数据"的操作,替代了从键盘输入的默认行为(图片注释:“输入重定向!!”)。
    在这里插入图片描述

🚚 9. mv - 移动/重命名

语法:mv [选项] 源文件或目录 目标文件或目录
功能

  1. 移动文件/目录
  2. 重命名文件/目录
$ mv file.txt new_name.txt# 重命名
$ mv file.txt dir/# 移动到目录
$ mv dir1/ dir2/# 移动目录

在这里插入图片描述


📖 10. cat - 查看文件内容

语法:cat [选项] [文件]
选项

  • -n:显示行号
  • -b:非空行编号
  • -s:压缩连续空行
$ cat file.txt# 显示文件内容
$ cat -n file.txt# 显示行号
$ cat -s file.txt# 压缩连续空行

在这里插入图片描述


🔍 11. more/less - 分页查看

more:向下分页查看

语法:more [选项]
选项

  • -n 指定输出行数
  • q 退出more
$ more -10 large_file.log# 每次显示10行

在这里插入图片描述

less:交互式查看(支持上下翻页)

语法:less [参数] 文件
选项

  • -i 忽略搜索时的大小写
  • -N 显示每行的行号
  • /字符串:向下搜索“字符串”的功能
  • ?字符串:向上搜索“字符串”的功能
  • n:重复前⼀个搜索(与 / 或 ? 有关)
  • N:反向重复前⼀个搜索(与 / 或 ? 有关)
  • q:quit
$ less large_file.log
# 在less中:
#/keyword → 向下搜索
#?keyword → 向上搜索
#q → 退出

在这里插入图片描述


🔝 12. head/tail - 查看文件首尾

head:显示文件开头

语法:head [参数]… [文件]…
选项

  • -n<行数> 显示的行数
$ head -5 file.txt# 显示前5行

在这里插入图片描述

tail:显示文件结尾

语法:tail 必要参数 [文件]
选项

  • -f 循环读取
  • -n<行数> 显示行数
$ tail -5 file.txt# 显示最后5行
$ tail -f log.txt# 实时追踪日志变化

那假设现在我有100行内容,我要求打印第50到60行该怎么办呢?(没有直接打印中间行的内容的命令)

补充知识
管道命令(|): 图片中常出现命令1 | 命令2的组合,功能是将前一个命令的输出作为后一个命令的输入,实现更复杂的操作。
高频示例(图片中的常见场景):

  1. 过滤文件:列出当前目录所有.txt文件(结合lsgrep
$ ls -l | grep ".txt"# 用grep过滤出包含".txt"的行
-rw-r--r-- 1 user group 1.0K Jan 12 14:30 file.txt
-rw-r--r-- 1 user group 2.0K Jan 12 14:30 data.txt
  1. 统计日志行数:统计log.txt中包含“error”的行数(结合catgrepwc
$ cat log.txt | grep "error" | wc -l# wc -l统计行数
5# 表示有5行包含"error"
  1. 查找并处理文件:找到所有.sh脚本并显示其内容(结合findcat
$ find . -name "*.sh" | xargs cat# xargs将find结果作为cat的输入

通过管道我们就可以实现各种流水线操作了


⏰ 13. date - 显示/设置时间

格式控制

  • %Y:年(2023)
  • %m:月(01-12)
  • %d:日(01-31)
  • %H:小时(00-23)
$ date# 默认格式
Wed Jan 11 18:22:50 CST 2023$ date +"%Y-%m-%d %H:%M"# 自定义格式
2023-01-11 18:30$ date -d @1673432636# 时间戳转时间
Wed Jan 11 18:23:56 CST 2023

补充知识

时间戳

时间戳(Timestamp)是表示时间的数字格式,通常指从某个基准时间点到当前时间的总时长(单位:秒、毫秒、微秒等)。它是计算机系统中处理时间的核心方式,具有跨时区、易计算、格式统一的优势。

一、核心概念

1. 基准时间点(Epoch Time)

最常用的基准是Unix时间戳的起点:
1970年1月1日00:00:00 UTC(协调世界时,即格林尼治标准时间GMT)。
所有Unix/Linux系统均以该时间点为起点计算时间戳。

2. 时间戳的类型
  • 秒级时间戳(最常见):从Epoch到当前的总秒数(如1721487600,对应2024-07-20 19:00:00 UTC)。
  • 毫秒级时间戳:秒级时间戳+3位毫秒(如1721487600123,对应2024-07-20 19:00:00.123 UTC)。
  • 微秒级时间戳:秒级时间戳+6位微秒(如1721487600123456,对应2024-07-20 19:00:00.123456 UTC)。

二、Linux中生成与转换时间戳

Linux中最常用的工具是date命令(GNU版本,支持丰富的时间格式),以下是关键操作:

1. 生成当前时间戳
  • 秒级时间戳%s):
date +%s
# 输出示例:1721487600
  • 毫秒级时间戳%s%3N%3N表示取3位毫秒):
date +%s%3N
# 输出示例:1721487600123
  • 微秒级时间戳%s%6N%6N表示取6位微秒):
date +%s%6N
# 输出示例:1721487600123456
2. 将时间戳转换为可读时间

date -d @<时间戳>@后跟秒级时间戳),会自动转换为系统时区的本地时间(如北京时间UTC+8)。

  • 示例1:转换秒级时间戳
date -d @1721487600
# 输出示例(北京时间):Sat Jul 20 19:00:00 CST 2024
  • 示例2:转换为指定格式(如YYYY-MM-DD HH:MM:SS
date -d @1721487600 +"%Y-%m-%d %H:%M:%S"
# 输出示例:2024-07-20 19:00:00
3. 生成指定时间的时间戳

date -d "<指定时间>" +%s,将可读时间转换为秒级时间戳。

  • 示例1:转换当前日期的指定时间
date -d "2024-07-20 19:00:00" +%s
# 输出示例:1721487600
  • 示例2:转换相对时间(如“3天前”)
date -d "3 days ago" +%s
# 输出3天前的秒级时间戳

📅 14. cal - 显示日历

语法:cal 参数 [年份]
选项

  • -3:显示上月/本月/下月
  • -y:显示全年日历
$ cal# 本月日历
$ cal -3# 三个月日历
$ cal 2023# 2023全年日历

🔎 15. find - 文件搜索

语法:find pathname -options
选项

  • -name 按照文件名查找文件

示例:按名称/类型搜索

$ find /home -name "*.txt"# 搜索所有txt文件
$ find . -type d -name "dir*"# 搜索目录

在这里插入图片描述


🔍 16. which/whereis - 查找命令路径

which:查找可执行文件位置
$ which ls
/usr/bin/ls

在这里插入图片描述

还记得之前说的Linux下“一切皆文件”吗?
是的,我们未来学的大部分指令本质都是Linux系统下固定目录下(/usr/bin/)的可执行文件
值得注意的是:我们自己写的可执行程序是无法像指令通过名字直接使用的,除非把文件写道/usr/bin/ 目录下,但是不建议这么做,会污染系统的命名池

whereis:查找二进制/源码/手册
$ whereis python
python: /usr/bin/python /usr/lib/python2.7 /usr/include/python2.7

️ 17. alias - 命令别名

功能:创建命令快捷方式

$ alias ll='ls -alF'# 创建别名
$ ll# 使用别名
$ unalias ll# 删除别名

注意:别名是内存级的,重新登入别名就没用了


🔍 18. grep - 文本搜索

语法: grep [选项] 搜寻字符串 文件
选项

  • -i:忽略大小写
  • -n:显示行号
  • -v:反向匹配
$ grep "error" log.txt# 搜索包含error的行
$ grep -i "warning" log.txt# 忽略大小写
$ grep -n "start" config.conf# 显示行号

在这里插入图片描述


📦 19. tar - 打包压缩

语法: tar [-cxtzjvf] 文件与目录 …
参数:

  • -c :建立⼀个压缩文件的参数指令(create 的意思);
  • -x :解开⼀个压缩文件的参数指令!
  • -t :查看 tarfile 里面的文件!
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
  • -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
  • -f :使⽤档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
  • -C : 解压到指定目录

常用组合

  • 打包:tar -cvf archive.tar dir/
  • 解包:tar -xvf archive.tar
  • 压缩:tar -zcvf archive.tar.gz dir/
  • 解压:tar -zxvf archive.tar.gz
$ tar -czvf backup.tar.gz /home# 压缩目录
$ tar -tzvf backup.tar.gz# 查看压缩包内容
$ tar -xzvf backup.tar.gz -C restore/# 解压到指定目录

后缀可以简写成 .tgz
在这里插入图片描述


20.zip/unzip

语法: zip 压缩⽂件.zip 目录或文件
功能:将目录或文件压缩成zip格式
选项

  • -r:递归处理,将指定目录下的所有文件和子目录⼀并处理
将test2⽬录压缩: zip test2.zip test2/*
解压到tmp⽬录: unzip test2.zip -d /tmp

21. rzsz

rzsz是Linux/Unix系统中轻量级文件传输工具集,基于Zmodem协议(一种可靠的异步文件传输协议),用于通过终端会话(如SSH、串口)实现本地与远程服务器之间的文件上传(rz)和下载(sz。它无需额外安装FTP/SCP服务,操作简单,是系统管理员和开发者常用的小文件传输工具。

一、核心概念
  • 协议基础:Zmodem协议,支持断点续传错误校验高速传输(比早期的Xmodem/Ymodem更高效)。
  • 核心命令
  • rz(Receive Zmodem):本地→远程(从本地计算机上传文件到远程服务器);
  • sz(Send Zmodem):远程→本地(从远程服务器下载文件到本地计算机)。
二、安装方法

rzsz通常需要手动安装(部分Linux发行版默认不包含),以下是常见发行版的安装命令:

  • Ubuntu/Debian
sudo apt update && sudo apt install lrzsz
  • CentOS/RHEL(7及以下):
sudo yum install lrzsz
  • CentOS/RHEL 8+/Fedora
sudo dnf install lrzsz
三、常用命令及示例
1. 上传文件(rz

作用:从本地计算机选择文件,上传到远程服务器的当前目录。
基本用法

rz

运行效果:本地终端会弹出文件选择窗口(需终端支持,如PuTTY、Xshell、Terminal),选择要上传的文件后,自动开始传输。

常用参数

  • -b二进制模式(必选,用于传输非文本文件,如图片、压缩包、可执行文件,避免文件损坏);
  • -y覆盖模式(若远程服务器已存在同名文件,直接覆盖,无需确认);
  • -e强制Zmodem协议(用于兼容性问题,如终端未自动识别Zmodem)。

示例(二进制模式上传,覆盖现有文件):

rz -b -y
2. 下载文件(sz

作用:从远程服务器选择文件/目录,下载到本地计算机的指定路径。
基本用法(下载单个文件):

sz 文件名

下载目录(需递归)

sz -r 目录名# -r:递归传输目录下的所有文件

运行效果:本地终端会弹出保存路径窗口,选择保存位置后,自动开始传输。

常用参数

  • -b二进制模式(同rz,传输非文本文件必选);
  • -y覆盖模式(覆盖本地已存在的同名文件);
  • -r递归传输目录(下载目录时必选)。

示例(二进制模式下载目录,覆盖本地文件):

sz -b -y -r /home/user/docs# 下载远程服务器的docs目录到本地
四、注意事项
  1. 终端支持
    rzsz依赖支持Zmodem协议的终端,常见终端如:
    -Windows:PuTTY(需开启“Connection→SSH→Zmodem”选项)、Xshell、SecureCRT;
    -macOS:Terminal(默认支持)、iTerm2;
    -Linux:GNOME Terminal(默认支持)、Konsole。
    若终端不支持Zmodem,rzsz无法弹出文件选择窗口,需用rz -esz -e强制使用,并通过命令行指定文件(但不推荐)。

  2. 传输模式

  • 文本文件(如.txt.conf):可使用默认的ASCII模式(无需-b);
  • 非文本文件(如.zip.jpg.exe):必须使用二进制模式-b参数),否则会导致文件损坏(如图片无法打开、压缩包无法解压)。
  1. 权限问题
  • 上传文件时,远程服务器的当前目录需有写入权限(如chmod 777 /tmp);
  • 下载文件时,本地计算机的保存路径需有写入权限(如~/Downloads目录通常有写入权限)。
  1. 断点续传
    Zmodem协议支持断点续传,若传输中断(如网络断开),重新运行rzsz,会自动续传未完成的部分(需终端支持)。

  2. 文件名编码
    若文件名包含中文或特殊字符,需确保终端的编码设置正确(如UTF-8),否则可能出现文件名乱码(如中文.txt)。解决方法:在终端中设置编码为UTF-8(如PuTTY的“Window→Translation→Remote character set”选择“UTF-8”)。


22. bc指令

bc是Linux系统中用于浮点运算的便捷工具,支持高精度的数学计算(如加减乘除、平方根、指数等),常用于需要精确浮点结果的场景(如脚本中的数值处理)。

23. uname命令

  • 语法uname [选项]
  • 功能:获取操作系统及硬件的基本信息(如内核版本、主机名、硬件类型等)。
  • 补充说明:可显示Linux主机的操作系统版本、硬件名称等关键信息。
  • 常用选项
  • -a/--all:详细输出所有信息,依次为:内核名主机名内核版本号内核版本硬件名处理器类型硬件平台类型操作系统名称(最常用)。

这里是引用

24. 重要热键

  • [Tab]:具有命令补全(输入命令前缀后按Tab,自动补全完整命令)和档案补齐(输入文件/目录前缀后按Tab,自动补全路径)功能,提升操作效率。
  • [Ctrl]-c:强制停止当前运行的程序(如终止陷入死循环的脚本)。
  • [Ctrl]-d:表示键盘输入结束(EOF,End Of File),常用于退出交互程序(如代替exit命令退出Shell)。

25. 关机命令(shutdown)

  • 语法shutdown [选项]
  • 常见选项
  • -h:停止所有系统服务后,立即关机(等价于halt)。
  • -r:停止所有系统服务后,重新启动(等价于reboot)。
  • -t sec:延迟sec秒后执行关机/重启操作(如shutdown -t 60 -h表示60秒后关机)。

掌握这些基础命令后,你已具备Linux日常操作的必备技能。建议在终端中实际尝试每个示例,实践是巩固知识的最佳方式!

http://www.dtcms.com/a/289631.html

相关文章:

  • 详解Mysql解决深分页方案
  • 试用SAP BTP 05A:AI服务-Document Information Extraction
  • Python桌面版数独(二版)-增加4X4、6X6
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • 论文笔记:Seed: Bridging Sequence and Diffusion Models for RoadTrajectory Generation
  • LLM指纹底层技术——KV缓存压缩
  • 嵌入式通信DQ单总线协议及UART(一)
  • 是否可以将“进化”应用到软件系统的设计中?
  • 049_List接口(ArrayList / LinkedList / Vector)
  • Three.js + WebGL 深空星波粒子动画特效制作详解
  • 30天打牢数模基础-模拟退火算法讲解
  • 零基础100天CNN实战计划:用Python从入门到图像识别高手
  • k8s:离线添加集群节点
  • Java中的ScopeValue 使用详解
  • 深入解析业务代表模式:解耦表示层与业务层的利器
  • 列空间与零空间,秩—零化度定理
  • ( LeetCode 面试经典 150 题 ) 202. 快乐数 (快慢指针)
  • [simdjson] `error_code` | .get() | 异常 | is_fatal() | current_location() | 链式处理
  • 限流算法与实现
  • MySQL锁(一) 概述与分类
  • CMSIS-RTOS线程创建osThreadNew
  • JAVA国际版任务悬赏+接单系统源码支持IOS+Android+H5
  • 代码随想录算法训练营二十一天|回溯part03
  • IDEA使用技巧
  • c/c++-memory-management
  • ansible awx自动化工具学习准备
  • 牛客-两个链表的第一个公共节点
  • 安全信息与事件管理(SIEM)系统架构设计
  • TypeScript 中替代 Interface 的方案
  • PLC(可编程逻辑控制器,Programmable Logic Controller)是什么?