新手必备 | Linux 常用指令 25+,附通配符、重定向与 Shell 原理
初识Linux
一句话了解linux:
Linux 是一个开源(源代码公开)、免费的操作系统。就像 Windows 和 macOS 一样,它是你电脑硬件(CPU、内存等)和应用软件(浏览器、办公软件等)之间的“翻译官”和“大管家”。
linux的版本
linux的内核版本
这是由 Linus Torvalds 和社区共同维护的最核心的程序版本。它负责管理 CPU、内存、设备驱动等最基础的任务。
版本号格式:
主版本.次版本.修订版本,例如6.10.5
主版本号:发生重大变化时递增。
次版本号:在过去,奇数次版本(如 2.3, 2.5)代表开发版,偶数次版本(如 2.4, 2.6)代表稳定版。但现在这个规则已不再严格遵循。
修订版本号:代表安全补丁和 Bug 修复。
linux的发行版版本
发行版是基于 Linux 内核,并集成了大量软件(如图形桌面、办公套件、包管理器等)的完整操作系统。不同的发行版有不同的版本命名和发布策略。主要可以分为两大类:
A. 固定发布版
这类发行版有固定的版本号,每个版本会提供定期的更新和支持。
B. 滚动发布版
这类发行版没有版本号的概念。你只需要安装一次,然后通过持续的系统更新,就能一直获得最新的软件和内核。
开源vs闭源
![]()
linux的基础指令
1.clear指令
语法:clear / 快捷键Ctrl + L
功能:
clear命令用于清理当前终端(Terminal)屏幕上的所有输出,得到一个干净的命令行窗口,类似于“清屏”操作。知识点:它并不是真正地“删除”了之前的内容,而只是将屏幕的显示区域向上滚动,使得旧内容消失在可视区域之外。你可以通过滚动条向上回溯,看到之前所有的输出记录
2.ls指令
语法: ls [选项] [⽬录或⽂件]功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。常⽤选项:![]()
知识点:
- Linux的目录==文件夹
- 文件=内容+属性(空文件也占据空间)学习文件:要么对内容操作要么对属性操作
- 用ls -l指令显示的第一个字符d表示文件为目录,第一个字符为-表示普通文件
- 大多数情况下,有多个选项时,选项可以任意组合例如ls -a -l,ls -l -a,ls -la,ls -al是等价的
- 在Linux中以"."开头的文件为隐藏文件,以"."开头的目录表示隐藏目录可以使用ls -la来显示
3.pwd指令
语法: pwd
功能:显⽰⽤⼾当前所在的⽬录知识点:![]()
4.cd指令(change directory)
语法: cd ⽬录名功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的目录下特定参数:
~(波浪号) - 家目录快捷方式-(连字符) - 上一个工作目录(最近一次目录)知识点:
- 路径的认识:
- Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件
- 其中普通⽂件⼀定是⽬录树的叶⼦节点
- ⽬录可能是叶⼦(空⽬录), 也可能是路上节点
- 理解路径存在的意义: 树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性
- 绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式
- 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式
- 绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤
- 相对路径因为它的便捷性,⼀般在命令行中使用较多
- 任何一个目录,即便是空目录,默认系统都会自带 . 和 .. 目录
- . 和 .. 目录分别表示当前目录和上一级目录
- 在Linux中,在路径分隔符中,将第一个路径分隔符称之为根目录
- Linux的文件结构是从根目录(/)开始的一个多叉树
- 叶子节点:一定是普通文件或者是空目录
- 非叶子节点:一定是一个非空目录
- 绝对路径与相对路径:
- 绝对路径:从根目录 (
/) 开始的完整路径,无论当前在哪个目录下,都能唯一确定文件或目录的位置。(一般在配置文件使用)- 相对路径:从当前工作目录开始的路径,依赖于用户当前所在的位置。(以非/为参照位置,一般在日常操作使用)
5.touch 指令语法: touch [选项]... ⽂件...功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。常⽤选项:![]()
知识点:
文件属性的三种时间,我们可以通过stat [文件名]来查看文件的属性
6.mkdir 指令
语法: mkdir [选项] dirname...功能:在当前⽬录下创建⼀个名为 “dirname”的⽬录常⽤选项:-p/--parents: 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录(eg:mkdir -p path1/path2/path3/...)我们可以使用tree [选项][目录]来树状图形式显示目录结构(有些系统没有预装tree命令,可以使用apt或者sanp方式来安装这里提供apt安装方式:sudo apt update sudo apt install tree)
7.rmdir 指令 && rm 指令rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除命令语法: rmdir [-p] [dirName]适⽤对象:具有当前⽬录操作权限的所有使⽤者功能:删除空⽬录,若指定路径中有不为空的路径,便⽆法删除常⽤选项:-p 当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除。rm命令可以同时删除⽂件或⽬录语法: rm [-f-i-r-v] [dirName/dir]适⽤对象:所有使⽤者功能:删除⽂件或⽬录常⽤选项:
- -f 即使⽂件属性为只读(即写保护),亦直接删除
- -i 删除前逐⼀询问确认(推荐alias rm='rm -i')
- -r /-R删除⽬录及其下所有⽂件(递归实现)
- -I批量删除文件只询问一次
- -d只删除空目录(类似 rmdir)
记住:在 Linux 中删除的文件通常无法恢复,谨慎使用
rm命令!
7.man指令
语法: man [选项] 命令功能:Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助常⽤选项
- -k 根据关键字搜索联机帮助
- num 只在第num章节查找
- -a 将所有章节的都显⽰出来,⽐如 man printf 它缺省从第⼀章开始搜索,知道就停⽌,⽤a选项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
- 1 是普通的命令
- 2 是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)
- 3 是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
- 4 略
- 5 是指⽂件的格式,⽐如passwd, 就会说明这个⽂件中各个字段的含义
- 6 是给游戏留的,由各个游戏⾃⼰定义
- 7 是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
- 8 是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
- 9 略
8.cp指令
语法: cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能: 复制⽂件或⽬录说明:
- cp指令⽤于复制⽂件或⽬录
- 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中
常⽤选项
- -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
- -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
- -r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的
注意:
如果目标目录存在:源目录会作为子目录复制到目标目录里面
如果目标目录不存在:会创建目标目录,并将源目录内容复制到其中
9.echo 指令
语法:echo [选项] [字符串]
功能:主要用于在终端输出字符串或变量的值。
常⽤选项
选项 说明 -e启用转义字符(如 \n,\t,\\等)-n输出后不换行 知识点:
echo与cat区别
![]()
10.mv 指令
语法: mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能:mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move (rename) files,经常⽤来备份⽂件或者⽬录(类似剪切)
- 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
- 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
- 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。
常⽤选项:![]()
# 更改名称 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls copy.txt log.txt test.c test.cpp test.txt xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ mv test.txt file.txt xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls copy.txt file.txt log.txt test.c test.cpp # 如果当前路径存在同名⽂件,改名即覆盖 # 如果当前路径存在同名⽂件,改名前可以添加i选项,让系统提出警告供⽤⼾做选择 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir/mv_test$ ls myfile.txt yourfile.txt xqq@iZuf66i8po4cjm58engpuvZ:~/mydir/mv_test$ mv -i yourfile.txt myfile.txt mv: overwrite 'myfile.txt'? y xqq@iZuf66i8po4cjm58engpuvZ:~/mydir/mv_test$ ls myfile.txt xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tree .. .. └── mydir ├── copy.txt ├── file.txt ├── log.txt ├── mv_test │ └── myfile.txt ├── test.c └── test.cpp 2 directories, 6 files xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ mv file.txt mv_test xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tree .. .. └── mydir ├── copy.txt ├── log.txt ├── mv_test │ ├── file.txt │ └── myfile.txt ├── test.c └── test.cpp 2 directories, 6 files xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ mv mv_test .. xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tree .. .. ├── mv_test │ ├── file.txt │ └── myfile.txt └── mydir ├── copy.txt ├── log.txt ├── test.c └── test.cpp 2 directories, 6 files
11.cat 指令
语法: cat [选项] [⽂件]功能: 查看⽬标⽂件的内容,适合短文件常⽤选项:![]()
tac是 Linux 中一个有趣且实用的命令,它是cat的反向(cat 倒过来拼写)。tac用于反向输出文件内容,从最后一行开始显示到第一行。xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ cat -b copy.txt 1 #include<stdio.h> 2 int main() 3 { 4 printf("hello world"); 5 return 0; 6 } xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tac copy.txt } return 0; printf("hello world"); { int main() #include<stdio.h> xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ cat -n copy.txt 1 #include<stdio.h> 2 int main() 3 4 { 5 6 printf("hello world"); 7 return 0; 8 }
12.more指令
语法: more [选项]功能:more命令(不支持上翻),功能类似 cat常⽤选项:-n 指定输出⾏数-q 退出more
13.less 指令
less是 Linux 中最强大的分页查看器,用于查看大文件内容,支持向前/向后滚动、搜索、跳转等功能。它的设计理念是"less is more, but better"(比more更强大)。语法: less [参数] ⽂件常⽤选项:
选项 说明 示例 -N显示行号 less -N file.txt-R保留颜色代码 grep --color=always | less -R-S禁止换行(长行水平滚动) less -S widefile.txt-F文件小时自动退出(类似cat) less -F small.txt-X退出时不清理屏幕 less -X file.txt快捷键整理
14.head &tail指令
- head指令
head 与 tail 就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head ⽤来显⽰档案的开头⾄标准输出中,⽽ tail 当然就是看档案的结尾。语法:head [参数]... [⽂件]...功能:head ⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。选项 :-n<⾏数> 显⽰的⾏数xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ head log.txt hello world 1000 hello world 999 hello world 998 hello world 997 hello world 996 hello world 995 hello world 994 hello world 993 hello world 992 hello world 991 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ head -5 log.txt hello world 1000 hello world 999 hello world 998 hello world 997 hello world 996
- tail 指令
tail 命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.语法: tail 必要参数 [⽂件]功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。选项:-f 循环读取-n<⾏数> 显⽰⾏数xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tail log.txt hello world 10 hello world 9 hello world 8 hello world 7 hello world 6 hello world 5 hello world 4 hello world 3 hello world 2 hello world 1 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tail -5 log.txt hello world 5 hello world 4 hello world 3 hello world 2 hello world 1知识点: head 和tail是查看文件开头和结尾的常用命令,配合管道可以处理各种数据流。
eg:head -500 log.txt | tail -10查看文件中第 491-500 行(即最后 500 行中的最后 10 行)
xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ head -500 log.txt | tail -10 hello world 510 # |管道,意思就是将前面的处理结果传给后面 hello world 509 hello world 508 hello world 507 hello world 506 hello world 505 hello world 504 hello world 503 hello world 502 hello world 501
15.date指令&cal指令
- date指令
指定格式显⽰时间: date +%Y:%m:%d语法: date [OPTION]... [+FORMAT]
date命令用于显示或设置系统日期和时间,是 Linux 中最常用的命令之一。知识点:时间戳
- 时间->时间戳:date +%s
- 时间戳->时间:date -d@1774190514
- Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
cal 指令cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。命令格式: cal 参数 [年份]功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份常⽤选项:
- -3 显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
- -j 显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
- -y 显⽰当前年份的⽇历
# 1. 显示当前完整日期和时间 date # 输出: Thu Apr 2 01:45:41 PM CST 2026 # 2. 自定义格式:年/月/日 date +%Y/%m/%d # 输出: 2026/04/02 # 3. 自定义格式:年/月/日-时:分:秒 date +%Y/%m/%d-%H:%M:%S # 4. 显示 Unix 时间戳(从1970-01-01 00:00:00 UTC 到现在的秒数) date +%s # 输出: 1775108845 # 5. 将时间戳 0 转换为可读格式(纪元时间) date +%Y/%m/%d-%H:%M:%S -d @0 # 输出: 1970/01/01-08:00:00 # 注意:显示 08:00:00 是因为中国时区(CST = UTC+8) # 6. 将时间戳 66666 转换为可读格式 date +%Y/%m/%d-%H:%M:%S -d @66666 # 输出: 1970/01/02-02:31:06 # 计算: 66666秒 = 18小时31分06秒,从1970-01-01 08:00:00开始
16.find指令
语法: find pathname -options功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)常⽤选项,这里常用选项是按名字查找,除此之外,还可以按类型,时间,大小,权限。用户等这里就不一一列举了。-name 按照⽂件名查找⽂件xqq@iZuf66i8po4cjm58engpuvZ:~$ tree . └── mydir ├── copy.txt ├── log.txt ├── test.c ├── test.cpp └── test.txt 1 directory, 5 files #查找当前目录下名为 log.txt 的文件 xqq@iZuf66i8po4cjm58engpuvZ:~$ find . -name "log.txt" ./mydir/log.txt xqq@iZuf66i8po4cjm58engpuvZ:~$ find . -name "unknow.txt"#查找当前目录下不存在的文件 xqq@iZuf66i8po4cjm58engpuvZ:~$ find . -iname "LOG.txt"#忽略大小写 ./mydir/log.txt xqq@iZuf66i8po4cjm58engpuvZ:~$ find . -name "*.txt"#通配符,查找所有.txt文件 ./mydir/log.txt ./mydir/copy.txt ./mydir/test.txt # 查找多个扩展名 xqq@iZuf66i8po4cjm58engpuvZ:~$ find . -name "*.c" -o -name "*.cpp" ./mydir/test.cpp ./mydir/test.c
17.which指令
功能:which命令用于查找可执行文件的位置,在$PATH环境变量指定的目录中搜索。语法:which [选项] 命令名
xqq@iZuf66i8po4cjm58engpuvZ:~$ which ls /usr/bin/ls
18.whereis指令
功能:whereis命令用于查找命令的可执行文件、源代码和手册页的位置,比which更全面。语法:whereis [选项] 命令名
xqq@iZuf66i8po4cjm58engpuvZ:~$ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
19.grep指令
功能:
grep是 Linux 中最强大的文本搜索工具之一,全称是 Global Regular Expression Print(全局正则表达式打印)。语法:grep [选项] '搜索字符串' 文件名
xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ cat test.txt abcd ABCD hello world 1234 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ grep -n "world" test.txt 4:world xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ grep -vn "world" test.txt 1:abcd 2:ABCD 3:hello 5:1234 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ grep -ni "abcd" test.txt 1:abcd 2:ABCD xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ grep -nvi "abcd" test.txt 3:hello 4:world 5:1234
20.zip/unzip 指令
功能:
zip和unzip是 Linux 中用于压缩和解压.zip文件的命令。语法: zip 压缩⽂件.zip ⽬录或⽂件常⽤选项zip: -r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理unzip: -d 指定解压目录举例将test2⽬录压缩: zip test2.zip test2/*解压到tmp⽬录: unzip test2.zip -d /tmp注意虽然linux系统不区分文件后缀,但g++,gcc等工具会区分文件后缀xqq@iZuf66i8po4cjm58engpuvZ:~$ tree . . └── mydir ├── copy.txt ├── log.txt ├── test.c └── test.cpp 1 directory, 4 files #一定要带-r选项否则只会压缩一个空目录 xqq@iZuf66i8po4cjm58engpuvZ:~$ zip -r mydir.zip mydir adding: mydir/ (stored 0%) adding: mydir/test.cpp (stored 0%) adding: mydir/log.txt (deflated 87%)#deflated 87% 表示 log.txt 被压缩了 87% adding: mydir/copy.txt (stored 0%) adding: mydir/test.c (stored 0%) xqq@iZuf66i8po4cjm58engpuvZ:~$ ls mydir mydir.zip xqq@iZuf66i8po4cjm58engpuvZ:~$ tree . . ├── mydir │ ├── copy.txt │ ├── log.txt │ ├── test.c │ └── test.cpp └── mydir.zip 1 directory, 5 files xqq@iZuf66i8po4cjm58engpuvZ:~$ mkdir tmp xqq@iZuf66i8po4cjm58engpuvZ:~$ mv mydir.zip tmp xqq@iZuf66i8po4cjm58engpuvZ:~$ cd tmp xqq@iZuf66i8po4cjm58engpuvZ:~/tmp$ unzip mydir.zip Archive: mydir.zip creating: mydir/ extracting: mydir/test.cpp inflating: mydir/log.txt extracting: mydir/copy.txt extracting: mydir/test.c xqq@iZuf66i8po4cjm58engpuvZ:~/tmp$ tree .. .. ├── mydir │ ├── copy.txt │ ├── log.txt │ ├── test.c │ └── test.cpp └── tmp ├── mydir │ ├── copy.txt │ ├── log.txt │ ├── test.c │ └── test.cpp └── mydir.zip 3 directories, 9 filesLinux与windows文件互传:
先学习两个指令
命令 方向 作用 rz本地 → 服务器 上传文件 sz <文件名>服务器 → 本地 下载文件 常用选项:
# 上传(推荐带 -be 防止中断和乱码) rz -be # 下载单个文件 sz file.txt # 下载多个文件 sz file1.txt file2.txt # 下载指定目录下的所有文件(不含子目录) sz dir/*linux->windows
windows->linux
方法一:输入rz指令
方法二:直接拖拽到终端窗口(无需输入 rz)
直接从 Windows 拖拽文件到 Xshell 终端窗口
会自动执行
rz命令并开始传输
21.tar 指令(重要)功能:tar是 Linux 中最常用的归档工具(tape archive),用于将多个文件/目录打包/(解包)成一个文件,通常配合压缩工具使用。(不需要递归选项,是默认递归的)语法:tar [选项] [归档文件] [要打包的文件/目录]![]()
xqq@iZuf66i8po4cjm58engpuvZ:~$ ls mydir mydir.zip xqq@iZuf66i8po4cjm58engpuvZ:~$ cd mydir xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls copy.txt log.txt test.c test.cpp # 压缩当前目录为 mydir.tgz xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tar czf mydir.tgz . # 查看生成的压缩包 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls -lh total 36K -rw-r--r-- 1 xqq xqq 70 Apr 2 15:49 copy.txt -rw-r--r-- 1 xqq xqq 16K Apr 2 13:07 log.txt -rw-r--r-- 1 xqq xqq 68 Apr 2 13:07 test.c -rw-r--r-- 1 xqq xqq 0 Apr 2 13:07 test.cpp -rw-r--r-- 1 xqq xqq 265 Apr 2 16:30 mydir.tgz # ← 新生成的压缩包 # 查看压缩包内容(不解压) xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tar tzf mydir.tgz ./copy.txt ./log.txt ./test.c ./test.cpp # 创建测试目录并解压 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ mkdir test_extract xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tar xzf mydir.tgz -C test_extract/ # 验证解压结果 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls test_extract/ copy.txt log.txt test.c test.cpp #查看目录结构 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ tree . . ├── copy.txt ├── log.txt ├── mydir.tgz ├── test.c ├── test.cpp └── test_extract ├── copy.txt ├── log.txt ├── test.c └── test.cpp 2 directories, 9 files
22.scp 命令
功能:scp(secure copy)是 Linux 中用于远程文件传输的命令,基于 SSH 协议,可以在不同服务器之间或本地与服务器之间安全传输文件。语法:scp [选项] 源路径 目标路径
上传:
scp 本地文件 用户名@服务器IP:目标路径下载:
scp 用户名@服务器IP:源文件 本地路径传目录:加
-r1. 从本地上传到远程服务器 # 上传单个文件 scp local.txt xqq@ your-server-ip:~/mydir/ # 上传整个目录(需要 -r) scp -r mydir/ xqq@ your-server-ip:~/ # 指定端口(默认22,如果不同) scp -P 2222 local.txt xqq@ your-server-ip:~/ 2. 从远程服务器下载到本地 # 下载单个文件 scp xqq@ your-server-ip:~/mydir/log.txt ./ # 下载整个目录 scp -r xqq@ your-server-ip:~/mydir ./ # 下载并重命名 scp xqq@ your-server-ip:~/mydir/log.txt ./my_log.txt 3. 两台远程服务器之间传输 scp xqq@ your-server-ip:~/file.txt root@ other-server-ip:~/ 请将 your-server-ip 替换为你实际的服务器 IP
23.bc 指令功能:bc(Basic Calculator)是 Linux 中的命令行计算器,支持整数和小数运算。语法:# 进入 bc 交互环境 bc # 输入表达式,回车即显示结果 2 + 3 5 10 * 5 50 quit # 退出xqq@iZuf66i8po4cjm58engpuvZ:~$ echo "5+8+9+2+6" | bc 30#enter键 xqq@iZuf66i8po4cjm58engpuvZ:~$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 6+7 13 7*0.8 5.6 19.8/2.0 9 quit
24.uname ‒r 指令
功能:
uname -r用于显示 Linux 内核版本。选项:
-a或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称语法:
uname -r/uname -axqq@iZuf66i8po4cjm58engpuvZ:~$ uname -r 5.15.0-142-generic xqq@iZuf66i8po4cjm58engpuvZ:~$ uname -a Linux iZuf66i8po4cjm58engpuvZ 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
25.history 指令
功能:history命令用于查看命令历史记录,即你之前输入过的所有命令。语法:
history [选项]选项:
- -c 清空历史记录
- -d 编号 删除指定编号的命令
26.shutdown 指令
功能:shutdown用于关闭或重启系统。这是一个需要 root 权限 的命令。语法:sudo shutdown [选项] [时间] [消息]
# 10分钟后重启,并发送警告消息 sudo shutdown -r +10 "系统将在10分钟后重启,请保存工作" # 立即关机,发送消息 sudo shutdown -h now "系统维护,立即关机"
指令很多我们学不完先简单了解一下下面的指令,后面会继续更新相关内容
- 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、 exit、last;
- ⽂件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
- 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
- ⽹络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、 mail、 nslookup;
- 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、 who;
- 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
Linux指令的本质
这里我们从用户视角来感受Linux指令的本质
命令与程序
本质:指令就是可执行程序,我们简单看几个指令
# 这些指令本质上都是磁盘上的可执行文件 ls → /usr/bin/ls cd → /usr/bin/cd tree → /usr/bin/tree 或 /snap/bin/tree验证:
Linux常见问题
ls -l 与ll的区别
alias是linux系统中提供的一种可以给命令起别名的命令(临时)例如:
特性 llls -l本质 别名 真实命令 定义 alias ll='ls -alF'实际的二进制程序 可移植性 差(依赖 Shell 配置) 好(所有 Linux 系统通用) 默认参数 通常包含 -a -l -F需要手动指定参数 xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ alias display='ls -al' xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ ls -al total 36 drwxr-xr-x 2 root root 4096 Apr 2 13:07 . drwxr-x--- 4 xqq xqq 4096 Apr 2 13:07 .. -rw-r--r-- 1 root root 68 Apr 2 13:07 copy.txt -rw-r--r-- 1 root root 15893 Apr 2 13:07 log.txt -rw-r--r-- 1 root root 68 Apr 2 13:07 test.c -rw-r--r-- 1 root root 0 Apr 2 13:07 test.cpp -rw-r--r-- 1 root root 27 Apr 2 13:07 test.txt xqq@iZuf66i8po4cjm58engpuvZ:~/mydir$ display total 36 drwxr-xr-x 2 root root 4096 Apr 2 13:07 . drwxr-x--- 4 xqq xqq 4096 Apr 2 13:07 .. -rw-r--r-- 1 root root 68 Apr 2 13:07 copy.txt -rw-r--r-- 1 root root 15893 Apr 2 13:07 log.txt -rw-r--r-- 1 root root 68 Apr 2 13:07 test.c -rw-r--r-- 1 root root 0 Apr 2 13:07 test.cpp -rw-r--r-- 1 root root 27 Apr 2 13:07 test.txt
Linux中异常处理:
Linux的通配符:
1.
*- 匹配任意字符# 匹配所有文件 ls * ls ./* # 匹配特定扩展名 ls *.txt rm *.log # 匹配特定前缀 ls file* cp data* backup/2.
?- 匹配单个字符# 匹配单个字符 ls file?.txt # file1.txt, file2.txt, fileA.txt ls photo?.jpg # photo1.jpg, photoA.jpg # 匹配固定长度 ls ???.txt # 匹配3个字符的文件名:abc.txt, 123.txt3.
[]- 字符组匹配# 匹配括号内的任意字符 ls file[123].txt # file1.txt, file2.txt, file3.txt ls [abc]*.txt # a.txt, b.txt, config.txt # 字符范围 ls file[1-5].txt # file1.txt 到 file5.txt ls [a-z]*.sh # 以小写字母开头的sh文件 # 排除字符 ls file[!123].txt # 除了file1/2/3.txt外的fileX.txt4.
{}- 展开序列# 生成序列 echo file{1,2,3}.txt # file1.txt file2.txt file3.txt mkdir dir_{a,b,c} # 创建 dir_a, dir_b, dir_c # 数字序列 echo test{1..5}.log # test1.log test2.log ... test5.log echo {01..10}.txt # 01.txt 02.txt ... 10.txt # 字母序列 echo {a..e}.conf # a.conf b.conf c.conf d.conf e.conf # 组合使用 cp script.sh{,.bak} # 复制为 script.sh.bak mv file.txt{,.old} # 重命名为 file.txt.old5.
[!]或[^]- 排除字符# 排除特定字符 ls [!a]*.txt # 不以a开头的txt文件 ls *[!0-9].log # 不以数字结尾的log文件
Linux中的上下键
上下键的主要作用:主要用于命令历史导航
↑(上箭头):显示上一条命令
↓(下箭头):显示下一条命令
Linux "一切皆文件" 哲学
什么是"一切皆文件":
在 Linux 中,几乎所有资源都被抽象为文件,通过统一的文件操作接口(
open(),read(),write(),close()等)来访问。# 普通文件 /home/user/document.txt # 目录也是一种文件 /var/log/ # 硬件设备 /dev/sda # 硬盘 /dev/tty # 终端 # 进程信息 /proc/1234/ # PID 1234 的进程信息 # 系统信息 /sys/class/net/eth0/ # 网卡信息 # 管道 pipe # 进程间通信 # 套接字 /var/run/docker.sock # Docker 守护进程在系统当中,默认有三个文件在程序启动时就默认打开的,分别是stdin stdout stderr,也是"一切皆文件"哲学的完美体现。
重定向:
重定向是 Linux 命令行最强大的特性之一,允许你控制命令的输入来源和输出去向。
linux 7 种文件类型
有了上面知识铺垫之后,我们就理解了终端的本质:
终端本质上就是一个文件,在 Linux "一切皆文件" 的哲学下,终端被抽象成了字符设备文件。
# 查看当前终端对应的文件 tty # 输出:/dev/pts/0 # 查看这个文件的类型 ls -l /dev/pts/0 # 输出:crw--w---- 1 user tty 136, 0 Mar 23 10:00 /dev/pts/0 # ^ # c 表示字符设备文件重定向的本质:
echo "xxx" > /dev/pts/0 # 显式写入终端文件 echo "xxx" # 隐式写入 stdout,stdout 指向终端文件多个终端可以独立操作:
# 终端1:echo "hello" > /dev/pts/2 # 向终端2发消息为什么
>重定向到文件是覆盖,但终端不覆盖:
文件:普通文件,写入模式会清空
终端:字符设备文件,写入是追加显示,由终端驱动决定
Linux热键大全
shell命令以及运⾏原理
草图如下
什么是 Shell?
Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般⽤⼾,不能直接使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。Shell 是 Linux/Unix 系统的命令行解释器,是用户与操作系统内核之间的桥梁。
用户 → Shell → 内核 → 硬件
角色 作用 用户 输入命令 Shell 翻译命令 ↔ 翻译结果 Kernel(内核) 执行实际工作 为什么要有shell?
因为用户无法、也不应该直接操作内核。Shell 是用户与内核之间的“代理人”:让用户用简单的命令操作复杂的系统,同时保护系统不被误操作破坏,还能把重复的工作自动化。
Windows GUI 方式
用户 → 鼠标点击 → GUI界面 → 系统调用 → Windows内核 → 硬件 ↑ 用户看不到底层Linux Shell 方式
用户 → 输入命令 → Shell解释器 → 系统调用 → Linux内核 → 硬件 ↓ ↑ 翻译命令 翻译结果 ↓ ↑ 用户 ← 显示结果 ← ShellShell 的本质和工作流程
1. 显示提示符($ 或 #) ↓ 2. 等待用户输入命令 ↓ 3. 读取命令(从键盘) ↓ 4. 解析命令(分词、替换、重定向) ↓ 5. 执行命令(调用内核功能) ↓ 6. 显示结果(输出到屏幕) ↓ 7. 返回步骤1(循环)
更多推荐























所有评论(0)