第一部分——Linux基础

第一部分——Linux基础

Linu x发行版与核心组件

Linux操作系统的组成部分如下:

  • 用户工具:指提供用户使用的软件
  • 服务器端软件:指用来提供某些功能或通过网络提供某种服务的软件
  • shell:通过命令行与系统内核交互,需要运行shell程序
  • 内核:系统的核心控制部分,负责与硬件的交互来实现系统的核心功能
  • 内核模块:为内核提供更多功能
  • GUI软件:为系统提供窗口式的交互界面
  • 库文件:某个软件用来完成特定任务而依赖的软件合集E
  • 设备文件:在Linux中,一切皆是文件,包括硬件设备,系统通过设备文件与硬件通信

使用 Linux发行版:

常见的发行版:

  • 商业版:出于商业目的设计的发行版,会附有绑定的服务条款。附带的服务一般按年计费,为了让产品更加安全稳定,一般句也更缓慢的更新周期,典型发商业发行版有:Red Hat Enterprise Linux或许SUSE
  • 桌面或非专业版:主要是给不想用MAC OS和Windows的个人用户使用的,一般只有社区的技术支持,但更新速度非常快,典型的有**:Fedora、Linux Mint和Ubuntu**。
  • 安全增强版:专门针对安全性设计的,本身句也额外的安全特性,或者提供可以用来增强安全- 性的攻击。典型的有:Kali LinuxAlpine Linux
  • 体验版:可直接在CD-ROM、DVD或U盘等移动介质启动,好处是可以不对服务器做任何修改进行测试。典型的有:Manjaro LinuxSntegros

Shell是一个使得用户可以提交给系统的接口。和windows的dos类似,Shell还提供了一个命令行接口(CLI),它的功能比图形界面(GUI)更强大。

GUI(图形界面)软件可以让你通过键盘鼠标与系统交互,对个人笔记本GUI是很好选择,不过一般GUI很可能是系统资源占用大户,所以不会在服务器上安装GUI软件。

命令行

文件管理

文件系统

1772206594605-b372ad91-5d81-4430-b4e1-7ae49f087d4f.png

执行命令

  • pwd //输出当前目录

1772382821168-1cce5f9a-091b-4325-98b9-2da2e025302c.png

  • **cd //切换目录 **
    • 两个点(…)表示上一级目录
    • 一个点(.)表示当前目录
    • 波形字符(~)表示用户的家目录

1772382893615-9d5a74b0-5e00-484e-bde9-d96af09363f7.png

  • ls //列出目录中文件
    • -a:列出所有文件,包括隐藏文件。
    • -d:列出目录名,不列出目录的内容
    • -F :在文件名后面追加一个字符代表文件的类型,例如*(可执行文件),/(目录)以及@(软链接文件)
    • -h:当和-l一起使用时,以便于阅读的格式显示文件大小
    • -l:以长列表显示文件
    • -r:逆序显示文件
    • -s:按文件大小显示
    • -t:按文件修改时间显示

1772383002584-bf9bc5a8-6cbf-45e1-9dff-e58274e5ece5.png

1772376996419-049027bd-bc15-4061-a9cc-8de1c38ed619.png

  • file //输出文件内容的类型

1772383107473-32208255-0a14-4ae7-ab74-c70fad17d8bd.png

  • less //用来显示内容非常多的文本文件,但是显示一页会暂停,按键盘上的某些键可以滚动浏览整个文件。
    • h:显示帮助界面
    • 空格:当前页前进一页
    • b:当前页后退一页
    • 回车:当前页向下移动一行,下箭头也可以实现
    • 上箭头:当前页上移一行
    • /term:在文件中搜索term的内容
    • q:退出文档 浏览回到shell
  • head //显示文本文件的头部内容,默认显示前十行,使用-n选项显示指定行数
  • tail //显示文本的尾部内容,默认显示后十行,使用-n选项显示指定行数
  • **mkdir //用于创建目录 **
    • -p :创建多级不存在的目录
    • -v:显示创建的每个目录的信息
  • **cp //此命令用于复制文件或目录 **
    • 必须给出复制文件的目标目录
    • -i:如复制会导致覆盖,则提示是否确认覆盖
    • -n:从不覆盖已存在的文件
    • -r:复制整个目录(r 表示递归)
    • -v:详细模式
  • mv //移动或者重命名一个文件
    • -i:如移动会导致覆盖,则提示是否确认覆盖
    • -n:从不覆盖已存在的文件
    • -v:详细模式
  • rm //用来移除文件或目录
    • -i:删除文件之前提示是否删除
    • -r:删除整个目录结构(r代表递归)
    • -v:详细模式
  • rmdir //用于移动(删除)空目录。如果目录不是空的,则该命令失败(用 rm -r来删除)
  • touch //此命令有两个功能,创建一个空文件及更新一个已存在文件的访问和修改时间戳。
    • -a:只改变文件的访问的时间戳,不改变文件的修改的时间戳
    • -d data:设置文件的时间戳为特定时间
    • -m:只改变文件的修改的时间戳,不改变文件的访问时间戳
    • -r file:使用file文件的时间戳作为参考值去设置指定文件的时间戳
  • find //查找
类别 参数 用途
路径控制 -maxdepth
, -mindepth
, -mount
, -xdev
, -prune
控制搜索范围
文件名 -name
, -iname
, -path
, -regex
按名称查找
文件类型 -type 按类型查找
文件大小 -size 按大小查找
时间 -atime
, -mtime
, -ctime
, -amin
, -mmin
, -cmin
, -newer
按时间查找
权限 -perm 按权限查找
属主 -user
, -group
, -nouser
, -nogroup
按属主查找
文件状态 -empty
, -links
, -inum
, -samefile
按inode等查找
输出 -print
, -print0
, -printf
, -fprintf
, -ls
输出控制
执行 -exec
, -ok
, -execdir
, -okdir
执行命令
逻辑 -a
, -o
, !
, ()
组合条件
性能 -depth
, -follow
, -ignore_readdir_race
优化控制

文件名匹配

  • *:匹配文件名中零个或多个字符
  • ?:匹配文件名中的任意单个字符
  • []:匹配文件名中的单个字符,只要这个字符在[]里。

Shell特性

shell变量

  • echo用来显示信息,一般显示变量的值
  • set命令在不带参数执行时显示所有的shell变量和值
    • -b:后台任务被终止时向shell报告
    • -n:读取脚本命令但不执行,检查语法错误时很有用
    • -u: 使用未定义的变量时提示错误信息
    • -C:使用重定向时不允许覆盖已存在文件
  • unset 命令是从shell环境中移除一个变量
  • PS1变量定义终端主提示符,通常使用特定字符串
  • PATH变量:预定义命令路径,即可在命令提示符中直接键入。
  • 环境变量:创建变量时,它仅可在shell中使用的本地变量,其他命令不可调用,使用export命令转换成环境变量,即可被调用。
  • env命令显示当前shell中的环境变量,执行时本地变量不会显示。

shell的初始化文件

1772380550115-8c318b24-84b3-48b2-84bf-0dde8b649067.jpeg

别名

别名是用一个单个“命令”来执行一组命令的shell特性。

历史命令

内存里会保存之前执行的命令列表。可用通过history命令查看,例如列出最后5个命令:history 5

  • -c :清空当前历史命令列表
  • -r :读取用于保存历史命令文件的内容
  • -w:将当前的历史命令列表写入到历史命令文件中

执行之前命令的技巧:

  • !!:执行历史命令列表中的上一个命令
  • !-n:执行历史 命令列表中的倒数第n个命令(例如:!-2)
  • !string:执行历史命令列表中上一个以此字符串开头的命令
  • !?string:执行历史命令列表中上一个在任意位置含此字符的命令
  • ^str1^str2:执行上一个命令,但是用str2替换掉str1

1772383710382-41acd851-bf75-4fd7-b8e2-f6d5db4fff81.png

输入输出重定向

每个命令都可以发送两个输出流(标准输出和标准错误输出)并且可以接收一个数据流(输入)

  • cmd < file:指定文件内容替代输入
  • cmd > file:输出到指定文件
  • cmd2 >file:错误输出到指定文件
  • cmd &>file:输出和错误输出同时输到指定文件
  • cmd 1 |cmd 2:将cmd1的输出作为cmd2的输入

管道符:

用管道符将一个命令的输出发送到另一个命令使命令行功能更强大

子命令:

将命令放到$()字符中,获取该命令的输出并将其作用到另一方命令的参数

高级命令

  • find命令:用不同的规则在文件系统中搜索文件及目录
find  [options] starting_point  criteria  action

staring_point代表从那个目录开始搜索
criteria代表搜索什么
action 代表对结果如何操作
  • 正则表达式
RE规则 描述
^ 匹配一行的开始
$ 匹配一行的结束
* 匹配0或多个字符
. 匹配单个字符
[] 以中括号为范围的一串字符,一串字符([abc])或字符范围([a-c])都可以
[^] 以中括号为范围的匹配不在此范围的
</font> 对表达式的中的特殊字符进行转义
  • grep命令:此命令是在文件中逐行查找包含指定模式的行。默认找到后显示整行。
  • sed命令:sed命令用于非交互模式下的修改文件。

sed命令的操作:

操作 描述
s/ 用新的值替换所有匹配到的字符或表达式
d 删除
a</font> 在匹配到的行后插入数据
i</font> 在匹配到的行前插入数据
  • 压缩命令
    • tar一般用来打包多个文件为单个文件
      • 重要选项:
      • -c :创建一个.tar文件
      • -t :列出一个.tar文件的内容
      • -x:提取一个.tar的文件内容
      • -f:指定.tar文件的名称
      • -v:输出详细信息
      • -A:追加新文件到.tar文件中
      • -d:比较.tar文件和目录中的文件的不同
      • -u:更新,只向存在的.tar文件中追加新文件
      • -j:使用bzip2工具压缩或解压一个.tar文件
      • -J:使用xz工具压缩或解压一个.tar文件
      • -z: 使用gzip工具压缩或解压缩一个.tar文件
    • gzip命令
      • 重要选项:
选项 描述
-c 输出内容到STDOUT且不可替代源文件
-d 解压缩文件(也可使用gunzip命令)
-r 递归:压缩目录及其子目录的所有文件
-v 详细信息
- `**<font style="color:rgb(51, 51, 51);">gunzip</font>**`**<font style="color:rgb(51, 51, 51);">命令:</font>**<font style="color:rgb(51, 51, 51);">解压缩gzip压缩的文件 </font>
- `**<font style="color:rgb(51, 51, 51);">bzip2</font>**`**<font style="color:rgb(51, 51, 51);">命令:</font>**<font style="color:rgb(51, 51, 51);">bzip2命令会用压缩后的文件替换原始文件。</font>
    * <font style="color:rgb(51, 51, 51);">重要选项: </font>
    * <font style="color:rgb(51, 51, 51);">-c : 不替换原始文件</font>
    * <font style="color:rgb(51, 51, 51);">-d:解压缩文件</font>
    * <font style="color:rgb(51, 51, 51);">-v:详细信息</font>
- `**<font style="color:rgb(51, 51, 51);">xz</font>**`**<font style="color:rgb(51, 51, 51);">命令</font>**
选项 描述
-c 不替代原文件,输出到新文件
-d 解压缩文件(也可用unxz命令)
-l 列出已存在的压缩文件信息
-v 详细信息

\

获取帮助

man page

  • man page获取命令和配置文件的更多信息。例如:相要学习更多ls命令的知识,可执行 man ls
  • 浏览命令:
移动命令 描述
h 用来显示帮助界面
空格 前进一页
b 后退一页
回车 向下移动一行,下箭头也可实现
上箭头 向上移动一行
/term 在文档中搜索term的内容
q 退出

相关组件

1772432449451-c43b92eb-50a4-444c-ad62-93ae159be6e7.png

1772432478663-225a886e-bca6-4ee9-85a1-db4419868989.png

  • NAME:命令的名称
  • SYNOPSIS:命令的简介
  • DESCRIPTION:命令的细节描述
  • AUTHOR:命令作者
  • REPORTING BUGS:命令的问题信息发送处
  • SEE ALSO :关于此帮助也没的其他命令或文档
  • EXAMPLES:命令操作案例

man page 的分类

类别 描述 类别 描述
1 可执行的命令及shell命令 6 游戏
2 系统调用 7 杂项
3 系统库调用 8 系统管理员的基本命令
4 特殊文件 9 内核相关内容
5 文件格式

如图可以用man -f获取命令的类别信息,man -f命令与whatis命令是相同的。

1772432880890-b6da1082-3895-4167-85d8-be3d4e9828af.png

某些情况下 man page不在标准的存储位置,这时需要给man page 指定一个替代的位置可以使用-M选项。

help命令只对shell内置的命令提供帮助信息,因为这些命令没有单独的man page。

info

与man page不同,info page更新一个阅读一个拥有众多超链接的网站

1772433128704-313977a7-6d1f-41e6-8545-813a5d964b30.png

info命令的移动命令:

命令 描述
n 移动到下一节点
p 移动到前一节点
u 移动到父节点
l 移动到最近的节点(上一次所在节点)
b 移动到当前节点的开始位置
t 移动到所有节点顶部
q 退出info命令

/usr/share/doc目录

更多的文档可以在此目录中找到。能找到什么文档取决系统安装什么软件。

编辑文件

三种模式

  1. 命令模式:刚进入时的模式,可以移动光标、复制粘贴、删除
  2. 插入模式:按 i 进入,可以编辑文本,按 ESC 返回命令模式
  3. 末行模式:在命令模式下按 : 进入,可以保存退出、搜索替换

常用操作

操作 命令
保存 :w
退出 :q
强制退出不保存 :q!
保存并退出 :wq
ZZ
复制当前行 yy
粘贴 p
删除当前行 dd
撤销 u
搜索 /keyword
(按n查找下一个)

常用命令

  • 文件权限管理
find / -perm -4000 2>/dev/null # 查找SUID文件
find / -nouser -o -nogroup 2>/dev/null	#查找属主不存在的文件
  • 进程管理
ps aux #查看所有进程
ps -ef #标准格式输出
top/htop #动态查看,查找资源异常占用
pstree #查看进程树
lsof #列出打开的文件
  lsof -p PID#查看某进程打开了哪些文件
  lsof -i :端口 #查看谁在使用某端口
strace #跟踪进程系统调用(分析恶意软件行为)

  
  • 网络基础
ifconfig 
ip link #查看链路层
route -n 或ip route #查看路由表
netstat -tunlp
 -t #TCP
 -u #UDP
 -n #不解析服务名
 -l #监听状态
 -p #显示程序名和PID
ss -tunlp #新版替代netstat

  • 服务与任务管理
    • 计划任务
      • 系统级/etc/crontab/etc/cron.d//etc/cron.hourly//etc/cron.daily//etc/cron.weekly//etc/cron.monthly/
      • 用户级crontab -e(编辑),crontab -l(查看)
    • 开机启动
      • /etc/rc.local(传统,容易被利用)
      • /etc/profile~/.bashrc(用户登录启动,可用于权限维持)
      • systemctl list-unit-files --type=service | grep enabled(查看自启服务)
systemctl start|stop|restart|status 服务名

systemctl enable|disable 服务名(开机自启)

systemctl list-units --type=service(列出所有服务)

ls -la /etc/cron*(查看所有系统定时任务)
cat /var/spool/cron/*(查看所有用户的crontab)

  • 常用安全工具/命令

find / -perm -4000 2>/dev/null	#查找SUID文件
find / -nouser -o -nogroup 2>/dev/null	#查找属主不存在的文件
find / -name "*.php" -mtime -7	#查找最近7天修改的php文件(检测webshell)
rpm -Va 或 dpkg --verify	#验证所有已安装软件包的完整性
chkrootkit / rkhunter	#检测rootkit
lynis	#安全审计工具
tcpdump / wireshark	#抓包分析
auditd	#Linux审计框架,记录文件访问、系统调用

更新: 2026-03-08 00:34:56
原文: https://www.yuque.com/cindahy/ggstbg/xn5izg0h7g5d9o3y

LICENSED UNDER CC BY-NC-SA 4.0
评论