初识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 [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
常⽤选项:

    知识点

    1. Linux的目录==文件夹
    2. 文件=内容+属性(空文件也占据空间)学习文件:要么对内容操作要么对属性操作
    3. 用ls -l指令显示的第一个字符d表示文件为目录,第一个字符为-表示普通文件
    4. 大多数情况下,有多个选项时,选项可以任意组合例如ls -a -l,ls -l -a,ls -la,ls -al是等价的
    5. 在Linux中以"."开头的文件为隐藏文件,以"."开头的目录表示隐藏目录可以使用ls -la来显示

    3.pwd指令

    语法: pwd

    功能:显⽰⽤⼾当前所在的⽬录
    知识点:

    4.cd指令(change directory)

    语法: cd ⽬录名
    功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的目录下
    特定参数
    1. ~(波浪号) - 家目录快捷方式
    2. -(连字符) - 上一个工作目录(最近一次目录)
    知识点:
    • 路径的认识:
    1. Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件
    2. 其中普通⽂件⼀定是⽬录树的叶⼦节点
    3. ⽬录可能是叶⼦(空⽬录), 也可能是路上节点
    4. 理解路径存在的意义: 树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性
    5. 绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式
    6. 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式
    7. 绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤
    8. 相对路径因为它的便捷性,⼀般在命令行中使用较多
    • 任何一个目录,即便是空目录,默认系统都会自带 . 和 .. 目录
    • . 和 .. 目录分别表示当前目录和上一级目录
    • 在Linux中,在路径分隔符中,将第一个路径分隔符称之为根目录
    • Linux的文件结构是从根目录(/)开始的一个多叉树
    1. 叶子节点:一定是普通文件或者是空目录
    2. 非叶子节点:一定是一个非空目录
    • 绝对路径与相对路径:
    1. 绝对路径:从根目录 (/) 开始的完整路径,无论当前在哪个目录下,都能唯一确定文件或目录的位置。(一般在配置文件使用)
    2. 相对路径:从当前工作目录开始的路径,依赖于用户当前所在的位置。(以非/为参照位置,一般在日常操作使用)

    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]
    适⽤对象:所有使⽤者
    功能:删除⽂件或⽬录
    常⽤选项:
    1. -f 即使⽂件属性为只读(即写保护),亦直接删除
    2. -i 删除前逐⼀询问确认(推荐alias rm='rm -i'
    3. -r /-R删除⽬录及其下所有⽂件(递归实现)
    4. -I批量删除文件只询问一次
    5. -d只删除空目录(类似 rmdir)

    记住:在 Linux 中删除的文件通常无法恢复,谨慎使用 rm 命令!


    7.man指令

    语法: man [选项] 命令
    功能:Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助

    常⽤选项

    1. -k 根据关键字搜索联机帮助
    2. num 只在第num章节查找
    3. -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 [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
    功能: 复制⽂件或⽬录
    说明:
    1. cp指令⽤于复制⽂件或⽬录
    2. 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中

    常⽤选项

    • -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
    • -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
    • -r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的

    注意:

    1. 如果目标目录存在:源目录会作为子目录复制到目标目录里面

    2. 如果目标目录不存在:会创建目标目录,并将源目录内容复制到其中


    9.echo 指令

    语法:echo [选项] [字符串]

    功能:主要用于在终端输出字符串或变量的值

    常⽤选项

    选项 说明
    -e 启用转义字符(如 \n\t\\ 等)
    -n 输出后不换行

    知识点:

    echo与cat区别


    10.mv 指令

    语法: mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
    功能:mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move (rename) files,经常⽤来备份⽂件或者⽬录(类似剪切)
    1. 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
    2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
    3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,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 中最常用的命令之一。

    知识点:时间戳

    1. 时间->时间戳:date +%s
    2. 时间戳->时间:date -d@1774190514
    3. Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
    • cal 指令
    cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
    命令格式: cal 参数 [年份]
    功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份
    常⽤选项:
    1. -3 显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
    2. -j 显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
    3. -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 files
    
    

    Linux与windows文件互传:

    先学习两个指令

    命令 方向 作用
    rz 本地 → 服务器 上传文件
    sz <文件名> 服务器 → 本地 下载文件

    常用选项:

    # 上传(推荐带 -be 防止中断和乱码)
    rz -be
    
    # 下载单个文件
    sz file.txt
    
    # 下载多个文件
    sz file1.txt file2.txt
    
    # 下载指定目录下的所有文件(不含子目录)
    sz dir/*

    linux->windows

    windows->linux

    方法一:输入rz指令

    方法二:直接拖拽到终端窗口(无需输入 rz)

    1. 直接从 Windows 拖拽文件到 Xshell 终端窗口

    2. 会自动执行 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:源文件 本地路径

    • 传目录:加 -r

    1. 从本地上传到远程服务器
    # 上传单个文件
    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 -a

    xqq@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 [选项]

    选项:

    1. -c  清空历史记录
    2. -d 编号  删除指定编号的命令 

    26.shutdown 指令

    功能:shutdown 用于关闭或重启系统。这是一个需要 root 权限 的命令。

    语法:sudo shutdown [选项] [时间] [消息]

    # 10分钟后重启,并发送警告消息
    sudo shutdown -r +10 "系统将在10分钟后重启,请保存工作"
    
    # 立即关机,发送消息
    sudo shutdown -h now "系统维护,立即关机"

    指令很多我们学不完先简单了解一下下面的指令,后面会继续更新相关内容

    1. 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、 exit、last;
    2. ⽂件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
    3. 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
    4. ⽹络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、 mail、 nslookup;
    5. 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、 who;
    6. 其它命令: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的区别

    特性 ll ls -l
    本质 别名 真实命令
    定义 alias ll='ls -alF' 实际的二进制程序
    可移植性 差(依赖 Shell 配置) 好(所有 Linux 系统通用)
    默认参数 通常包含 -a -l -F 需要手动指定参数
    alias是linux系统中提供的一种可以给命令起别名的命令(临时)例如:
    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.txt

    3. [] - 字符组匹配

    # 匹配括号内的任意字符
    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.txt

    4. {} - 展开序列

    # 生成序列
    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.old

    5. [!] 或 [^] - 排除字符

    # 排除特定字符
    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内核 → 硬件
                        ↓                ↑
                    翻译命令          翻译结果
                        ↓                ↑
                     用户 ← 显示结果 ← Shell

    Shell 的本质和工作流程

    1. 显示提示符($ 或 #)
          ↓
    2. 等待用户输入命令
          ↓
    3. 读取命令(从键盘)
          ↓
    4. 解析命令(分词、替换、重定向)
          ↓
    5. 执行命令(调用内核功能)
          ↓
    6. 显示结果(输出到屏幕)
          ↓
    7. 返回步骤1(循环)
    Logo

    汇聚全球AI编程工具,助力开发者即刻编程。

    更多推荐