【一】:Linux基础指令

注:

1.在xshell中:alt+enter==全屏/退出全屏

2.编译c语言程序:gcc 文件名.c;编译c++程序:g++ 文件名.c++

核心总述

指令是操控 Linux 系统的基本方式;学习 Linux 指令本质:对文件内容、文件属性进行操作。

Linux 文件模型:文件 = 文件内容数据 + 文件属性数据(元信息),文件内容和文件属性都是数据都要占用磁盘空间,系统需要存储它的属性信息,空文件也要占磁盘空间,因为要保存文件属性。

Linux 整体目录结构:树形结构,/ 为根目录

文件两大分类:1.普通文件:文本、源代码、可执行程序等;2.目录(文件夹):存放其他文件的载体

1、ls 罗列目录文件信息

java 复制代码
ls          # 罗列当前路径下文件或目录名称(不显示隐藏文件)
ls -l       # 展示当前路径下的文件或目录的更加详细属性信息,不会再显示当前目录的目录中的内容
ls -Rl      # 展示当前路径下的文件或目录的更加详细属性信息,并显示当前目录的目录中的内容
ll == ls -l # ll 不是独立命令,是 ls -l 的系统别名
ls -a       # 显示所有文件,包含以 . 开头的隐藏文件
ls -al等价ls -a -l     # 选项可以组合,表示看详情+隐藏文件
ls 文件名    #显示输入的文件名
ls -l 文件名 #详细显示输入的文件名信息
ls -l 目录名 #显示目录中的可见文件或目录的详细信息
ls -dl 目录名 #只显示目录名的详细信息,-d表示不进入目录,显示目录本身

注意:

执行ls -a 指令,显示出来的隐藏文件. 代表当前目录,... 代表上级目录

执行ls -al指令, 输出首字符含义:d开头表示目录;-开头表示普通文件

2.pwd & cd 路径相关指令

pwd作用:打印当前所在工作目录

其中Windows 路径分隔符 \;Linux 路径分隔符 /

cd 切换目录

java 复制代码
cd 目标路径      # 切换到指定目录
cd ..            # 回到上一级目录
cd -             # 在最近访问的两个目录来回切换
cd ~             # 切换到当前用户家目录(等价直接输入cd)

注意:到达 /根目录 后继续cd ...不会报错,但依旧停留在根目录,无法继续向上回退。

java 复制代码
# 错误!不能直接执行目录
....../dir/dir1/
# 正确:进入目录用 cd
cd ....../dir/dir1/
# 正确:运行里面的可执行程序
....../day1/a.out
路径概念

1.绝对路径:从根目录 /开始完整书写,唯一定位文件 示例:/usr/bin/hello.txt

优点:不受当前所在目录影响,任何位置都能直接使用,全局唯一

2.相对路径:基于当前所在目录进行定位,不写 /开头

示例:./test.exe

可选工具tree:

tree

tree(树形展示目录):作用:以树状打印目录下所有文件与子文件夹。

若提示 command not found,需要安装:CentOS 安装:yum install -y tree;ubuntu:apt install -y tree

使用Windows终端创建目录:win+x,点击终端(管理员),在D盘创建目录。从Windows10开始,Windows可以执行一些简单Linux命令

3.rm & rmdir 删除

java 复制代码
注意:rmdir 只能删除空目录(也就是说该目录下没有其他目录和文件,就算是空的目录和文件也不行)
rmdir 目录名
rm 文件名:默认删除普通文件
注意:rm 目录名 直接执行会报错:`Is a directory`,rm 默认不能直接删目录
rm -r 目录名 :-r == recursive:递归删除目录,先删除目录内部所有内容,再删除目录本身
rm -rf 目录名:f:force,强制删除;不弹出确认提示,忽略不存在文件强制递归删除,谨慎使用!
-i:删除前交互式询问确认(输入 y 确认,n 取消)
rm -i 文件名 #删除文件时询问一下我

小结: 普通用户使用sudo touch root.txt创建 root 所属文件,普通用依然可以rm删除

Linux是一个企业后端服务器,上面会部署很多重要的服务,MySQL数据库有大量的用户数据。

危险示例:rm -rf / 会尝试删除系统根目录,直接摧毁操作系统

4.文件类型识别(ls -l 首字符)

java 复制代码
- 普通文件(文本、可执行程序等)
d 目录文件夹

常用指令小结:

java 复制代码
pwd                # 查看当前所在路径
ls                 # 列出当前目录文件(不显示隐藏文件)
ls -l              # 查看文件详细属性
ls -l 【目录名/文件名】 #不进入目录,但可以查看目录中的文件和目录信息或文件名
ls -dl 【目录名/目录名】 #不进入目录只显示当前目录信息
ls -a              # 显示隐藏文件
ls -al             # 组合参数,详情+隐藏文件
ls -Rl             #递归列出当前目录及所有子目录里的内容
ls -n              #用 UID、GID 数字代替用户名、组名
ls -i              #-i显示文件 inode 编号

cd 路径             # 切换目录
cd ..               # 回到上级目录
cd ~                # 切换到当前用户家目录
cd -                # 在最近两个目录来回跳转

touch test.txt      # 创建空普通文件
stat test.txt       # 查看文件完整属性(Access/Modify/Change三个时间)

mkdir dirname       # 创建单层目录
mkdir -p a/b/c      # 递归创建多级目录

rm 文件名           # 删除普通文件
rm -rf 目录名       # 强制递归删除目录 ⚠高危命令,谨慎使用
rmdir 目录名        # 仅能删除空目录(极少使用)

注意:\ 作用:命令太长,换行继续输入如下;当我们在编写代码时,如果代码过长我们也可以使用\换行。

举例:

java 复制代码
# 换行续行:反斜杠 \
ls \
-a \
-l \
-i

5.Linux 下 C/C++ 代码编译演示

java 复制代码
vim test.cpp        # 使用vim编辑器编写C++源码
g++ test.cpp        # 编译,默认生成可执行程序 a.out
./a.out             # 在当前路径下,运行可执行文件

流程:编写源码 → 编译生成二进制可执行文件 → 在 Linux 系统运行

6.touch命令

touch两条核心作用:

1.文件不存在:创建普通空文件

java 复制代码
touch myfile.txt
touch a b c       # 一次性创建多个空文件

2.文件已经存在:更新文件的时间戳,不会新建同名文件

7.stat 命令

查看文件详细信息

Linux 文件三种时间:

  1. Access(atime)访问时间:文件被读取
  2. Modify(mtime)修改时间:文件内容发生变化
  3. Change(ctime)改动时间:文件属性(权限、大小、文件名等)变化
  4. ll 默认展示的是 Modify(mtime),如下图所示:

8.mkdir创建目录(文件夹)

java 复制代码
mkdir new_dir        # 创建单层空目录
mkdir a/b/c/d        # 报错,父目录a、b、c不存在
mkdir -p a/b/c/d     # 成功,一次性创建整条路径

9.man 手册(帮助文档)章节编号

man 用来查看命令、系统调用、库函数官方手册,手册分为 9 个 section,重点了解常用的前三个:

  1. Executable programs or shell commands 用户命令、可执行程序(日常 shell 指令,如 ls、rm)
  2. System calls 系统调用(内核提供接口,open/read)
  3. Library calls C 语言库函数(printf、malloc)
  4. Special files 设备文件(/dev 下硬件文件)
  5. File formats 配置文件格式(/etc/passwd)
  6. Games 游戏
  7. Miscellaneous 杂项、规范、宏
  8. System administration commands 管理员命令(root 使用)
  9. Kernel routines 内核函数(非标准)

使用规则:

java 复制代码
man printf      # 默认查找1号章节:shell内置printf命令
man 3 printf    # 指定查看3号章节:C库printf函数

安装手册包(CentOS/RHEL)

java 复制代码
yum install -y man-pages或sudo yum install -y man-pages
注意:需要root用户操作
java 复制代码

man是一个查看命令,系统调用,c接口的一个手册!

man默认是从1号手册开始查找,找到就暂停

man也可以根据知道手册查找:man 1/2/3 命令/接口/C

10.echo 输出 + 文件重定向 >

echo "内容" #将内容显示到显示器上的指令,原封不动显示原来的内容

java 复制代码
#将内容重定向到文件中
echo "内容" > 文件名

举例:

java 复制代码
echo "hello"  #直接原样输出hello
# 注意:echo 不识别 %d 这类格式化占位符,printf才支持
echo "hello %d"   # 直接原样输出 hello %d

echo "hello world" > file.txt
echo "ws" > file.txt
cat file.txt #输出ws
#注意:> 会覆盖原有文件内容!
> file3.txt        # 创建空文件;文件已存在直接清空
cat file.txt #什么都不输出
echo "" > file2.txt# 文件内带有空换行

11.cp(copy) 复制命令

可以拷贝目录或者文件, -r -f -i

使用格式:

java 复制代码
cp 源文件 目标路径
cp -r 目录 目标路径

举例:

java 复制代码
注意:cp 默认只能复制普通文件,不能直接复制目录
如果要复制目录,需要在源文件前面加 -r 
cp -r 目录 目标路径
cp -i 文件名 目标路径 #拷贝时如果目标路径有同名文件添加-i会提示我是否要覆盖
补充指令:

cat 文件名 #将文件中的内容显示到显示器上

12.mv 命令(move,移动 / 重命名)

两大核心功能:

1.移动文件 / 目录(类似 Windows 剪切)

java 复制代码
# 文件移动到目录内
mv 源文件 目标目录
# 目录整体移动到另一个目录,不用带-r
mv 源目录 目标目录

2.重命名文件 / 目录,注意文件格式变不了

java 复制代码
mv 原文件名 不存在的新文件名    			# 文件重命名
mv 原目录名 新目录名             # 目录重命名

可选根据nano:

java 复制代码
# 安装nano文本编辑器
yum install -y nano  #注意要在root用户下安装

sudo:临时获取管理员权限

yum:CentOS 系统包管理器

-y:全部安装询问自动选 yes,无需手动确认

使用格式:
java 复制代码
nano 文件名
#保存退出:Ctrl+O 保存 → Ctrl+X 退出

需要保存退出:Ctrl+X → Y → 回车

不保存直接退出:Ctrl+X → N

13.Linux 文件查看命令:cat/tac/more/less

执行shell脚本

java 复制代码
cnt=0; while [ $cnt -le 10000 ] ; do echo "hello ws [$cnt]"; let cnt++; done
一、cat 命令:一次性将文件全部内容输出到终端
java 复制代码
cat 文件名
cat -n 文件名  #-n参数:字母n显示所有行号

缺点:不适合超大文件,内容会一次性刷屏,无法分页浏览。适合小文件、代码片段。

二、tac 命令:cat 倒过来拼写,倒序打印文件内容(最后一行最先输出)
java 复制代码
tac 文件名
三、more 分页查看命令

分页浏览大文件,按空格向下翻页,按回车向下翻一行,q 退出。

java 复制代码
# -数字:指定每屏显示多少行
more -5 文件名

搜索:先执行more 文件名,然后在显示的内容中输入:/要搜索的内容,就好了。

四,less

more 的升级版,支持上下【按上下键】滚动、搜索,推荐查看日志 / 大代码,q退出

java 复制代码
less 文件名
less -N 文件名 #显示行号

搜索:/+关键词

五,只看文件头部 (head)/ 尾部(tail)

head:查看文件开头,默认前 10 行

java 复制代码
head 文件名
head -6 文件名  # 查看前6行

tail:查看文件末尾,默认最后 10 行

java 复制代码
tail 文件名
tail -3 文件名  # 最后3行
tail -f 文件名   # 持续跟踪文件新增内容(实时看日志)

14.Linux 管道 |

一、需求场景:提取文件中间指定区间行

目标:取出 test.txt 第 1000~1009 行(共 10 行)

java 复制代码
方案1:缺点:产生额外磁盘文件,操作繁琐。
# 先把前1010行保存到临时文件
head -1010 test.txt > tmp.txt
# 再取临时文件最后10行
tail -10 tmp.txt
方案2:head -1010 test.txt | tail -10

管道作用: 把前一条命令的标准输出,直接当作后一条命令的标准输入,数据在内存流转,不落地生成文件。

二、管道链式调用(多条管道连续拼接)
java 复制代码
# 1.取出1000~1009行 → 2.整段倒序 → 3.取前三行
head -1010 test.txt | tail -10 | tac | head -3
三、管道核心特征

功能本质:传输数据流(资源)

结构:一端入口、一端出口

特点:内存数据流,不产生中间磁盘文件

四,补充知识

三个标准文件指针(stdio.h)

java 复制代码
extern FILE *stdin;   // 标准输入(默认键盘)
extern FILE *stdout;  // 标准输出(默认显示器)
extern FILE *stderr;  // 标准错误(默认显示器)
#进程启动时自动打开,不需要手动 fopen

字符读写函数

java 复制代码
int fgetc(FILE *stream):从文件中读取
返回值:读到的字符(unsigned char 转 int);到达末尾 / 出错返回 EOF
getchar() ≡ fgetc(stdin)

int fputc(int c, FILE *stream):往显示器中打印
putchar(c) ≡ fputc(c, stdout)

举例:

test.txt文件中的内容:

java 复制代码
cnt=0; while [ $cnt -le 1500 ] ; do echo "hello world [$cnt]"; let cnt++; done > test.txt
java 复制代码
#include <stdio.h>

int main()
{
    int c;
    // 从标准输入逐个读取字符
    while( (c = fgetc(stdin)) != EOF )
    {
        fputc(c, stdout); // 原样输出到标准输出
    }
    return 0;
}
gcc -o change change.c
#交互式:./change
#和管道结合:
管道把前序命令的标准输出,作为 ./change 的标准输入 (stdin);
程序读取管道数据流,再原样从 stdout 输出。
head -1010 test.txt | tail -10 | ./change

续:将字符转大写

java 复制代码
#include <stdio.h>
#include <ctype.h>//man tolower

int main()
{
    int c;
    // 从标准输入持续读取字符,直到EOF
    while( (c = fgetc(stdin)) != EOF )
    {
        c = toupper(c);      // 转大写
        fputc(c, stdout);    // 输出到标准输出
    }
    return 0;
}
gcc -o change change.c

将文件中的内容转为大写显示到显示器上,注意change文件要与要显示的文件在同一个目录层级中

java 复制代码
head -1010 test.txt | tail -10 | tac | head -3 | ./change

15.date 日期格式化命令

java 复制代码
#输出国外时间
date 
#举例
date +%Y-%m-%d				#2026-07-27
date +%Y-%m-%d/%H:%M:%S		#2026-07-27/21:03:26
date +%s					#输出时间戳:1785157431
#注意:+后面不能有空格,整体格式串连续书写
#时间戳 → 可读时间(-d @时间戳)
date +%Y/%m/%d-%H:%M:%S -d@1785157431  #输出:2026/07/27-21:03:51
符号 含义
%Y 4 位年份
%m 两位月份 (01~12)
%d 两位日期 (01~31)
%H 24 小时制小时
%M 分钟
%S
%s 时间戳(从 1970-01-01 到现在总秒数)

16.cal日历命令

java 复制代码
cal                # 显示当月日历
cal 2022           # 显示一整年日历
cal -3             # 显示上月、当月、下月(三个月视图)

17. 文件查找命令find/whereis/which

find:查找某个路径下的所有文件名,并显示这些文件名所在路径,注意:这里的路径下还可以有路径

缺点:当我们使用find搜索的时候,可能需要访问磁盘进而导致效率低下;搜索根目录需要sudo权限。

java 复制代码
find 搜索路径 -name "文件名"
#举例:
# 在/目录下查找名为test.c的文件
find /root -name test.c

# 全盘搜索stdio.h(需要root权限,加sudo)
sudo find / -name stdio.h
搭配通配符:find . -name "*.c" 查找所有 C 源码

管道流水线 + find 示例:

java 复制代码
find . -name "*.txt" | xargs cat | ./change
whereis:在特定路径下,查找指定的文件名对应的指令或文档,查找命令程序、man 手册、源码相关文件【近似查找】
java 复制代码
whereis ls
whereis test.c    # 无法找到普通文件test.c
which: 作用:查找命令所在系统路径,同时展示命令别名。

可以识别alias别名,会先打印别名定义,再显示原始命令路径

举例:

java 复制代码
which ls
which ll

查找速度:which > whereis > find

查找范围:which < whereis < find

18.alias 命令(命令别名)

作用:给已有命令命令重命名(起别名)

java 复制代码
alias 别名='原始指令'

举例:

java 复制代码
# ll 本质就是 ls -l --color=auto
alias ll='ls -l --color=auto'
# 自定义别名zhangsan映射top
alias zhangsan='top' #注意=左右两边不能有空格
# 覆盖修改已有别名
alias zhangsan='ls -l --color=auto'
which ll
#取消别名
unalias zhangsan

19.grep 文本内容行过滤工具

grep作用:匹配文本中的关键字,匹配上的进行行显示

java 复制代码
grep [选项] "关键词" 文件名

常用选项:

注意:选项可以组合使用:如 -ni, -niv等。

选项 功能
-n 显示匹配行的行号
-i(ignore) 忽略大小写匹配
-v 反向匹配:输出不包含关键词的行

与管道的结合使用举例:

java 复制代码
# 筛选含999的行,交给wc -l统计行数,-l表示line
grep 'hello world' test.txt | wc -l

20.sort 文本排序命令

sort作用:对文本内容按ASCII 码逐行排序(默认不会修改原文件,只输出排序结果)

举例:

java 复制代码
file.txt内容:
22222
22222
22222
11111
5555
5555
5555
3333
4444
5555
#执行全文排序,不会比较数的大小:
sort file.txt
#执行 uniq file.txt
只会删掉连续相邻的重复,末尾单独的5555会保留,无法实现全文全部去重。
#执行全文去重:sort file.txt | uniq

21.打包压缩:zip /unzip 压缩解压(CnetOS)&tar

为什么需要打包和压缩?
  1. 多个文件 / 目录合并为单个文件传输,避免文件零散、部分丢失;
  2. 压缩减小体积,节省磁盘空间、提升网络传输效率。

区分概念:

打包:多个文件合成一个文件,体积基本不变;

压缩:通过算法减小文件占用空间。

安装软件包:
java 复制代码
yum install zip unzip
zip 压缩
java 复制代码
格式:zip [选项] 压缩包名 待压缩文件/目录
注意:压缩目录(必须带 -r :recursive)

注意:zip默认对一个目录进行打包压缩的时候,只会对目录文件打包压缩,此时不用加-r,压缩时连带目录中的内容要加-r。

unzip 解压
java 复制代码
unzip 压缩文件名 #在当前目录下进行解包解压的功能

# 解压到【指定目录】 -d
unzip 压缩包名 -d 指定目录路径
tar(Linux 最常用打包并压缩工具,支持 gzip 压缩,后缀 .tgz / tar.gz)
选项:
java 复制代码
c create 创建打包文件
x extract 解包
z 使用 gzip 压缩算法
f 指定压缩包名称(f 必须放在所有选项最后)
v verbose 解压/压缩时,同步显示压缩文件列表
t list 只查看压缩包内部文件,不解压压缩包内容
-C 指定解压目标目录(大写 C)
举例:
java 复制代码
# 打包+压缩
tar -zcf 新建压缩包名 目录
tar -zcvf 新建压缩包名 目录   

# 解包+解压(默认解压到当前目录)
tar -zxf 压缩包名
tar -zxvf 压缩包名

#解压到指定目录
tar -xzf 压缩包名 -C 指定路径

# 查看压缩包内容(不解压)
tar -ztf 压缩包名
tar -tf 压缩包名

#解压到指定目录
tar zxvf 压缩包名 -C ~ #将文件解压到家目录下
zip VS tar 简单对比
  1. zip打包目录必须 -r,忘记就只会得到空目录。
  2. **tar(tgz)**打包目录不需要额外递归参数。

常用知识点补充

bc 计算器 + 管道 |

交互式使用:直接输入 bc,输入算式,quit 退出 管道一行计算(脚本常用)

举例:

| 管道:把前一条命令的输出,交给后面命令作为输入

java 复制代码
echo "1+2+3+4+5" | bc
系统信息命令
java 复制代码
uname        # 只输出系统名称 Linux
uname -a     # 完整系统内核信息
uname -r     # 只打印内核,查看计算机体系结构

注意:el7:EL = Enterprise Linux,对应CentOS7;x86_64:计算机体系结构,也就是CPU架构

常用终端快捷键
快捷键 作用
Tab 命令 / 文件名自动补齐
Ctrl + c 终止当前前台运行的程序
Ctrl + r,然后输入曾经历史命令片段 搜索历史执行过的命令
Ctrl + d 退出当前 shell 会话/退出当前用户,退出一层
file:查看文件类型,Linux 可执行程序格式:ELF 64-bit LSB executable
java 复制代码
file 文件/目录名
系统硬件信息查询
java 复制代码
lscpu    # 查看CPU详细信息
lsmem    # 查看内存分布、总内存大小
df -h    # 查看磁盘分区使用情况(-h 人性化单位GB/M)
在线用户相关
java 复制代码
who      # 查看当前所有登录系统的在线用户
whoami   # 查看我当前是谁(登录用户名)
相关推荐
KKKlucifer26 分钟前
运维域与IT域融合——云网安全一体化运营体系建设
大数据·运维·安全
0+11137 分钟前
Linux --基础IO
linux·运维·服务器
资深电气设计41 分钟前
雕铣机主轴驱动升级趋势分析:变频器技术价值与选型逻辑探讨
运维
CZIDC43 分钟前
华为服务器TS200-2280 V2 iBMC导入SSL证书后问题案例分析
服务器·https·ssl
M78佐菲1 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
名字还没想好☜1 小时前
Prometheus 告警实战:写 alerting rules、用 Alertmanager 做路由分组与抑制
运维·前端·javascript·docker·kubernetes·prometheus
sunoo-2291 小时前
【Linux 系统编程】学习第七天:线程属性 | 互斥锁 | 死锁 | 信号量 核心知识点 + 踩坑实战
linux·c语言·笔记·vscode·学习
Zkaisen1 小时前
【Gitee】SSH 公钥、GPG 公钥、私人令牌的区别
运维·gitee·ssh
小雪崩1 小时前
嵌入式学习 day33:线程进阶
linux·c语言·学习