项目笔记:Linux常用指令(运维方向)

        最近租了个服务器想把我的个人网站再搞一下(先前服务器过期了我不知道导致网站丢了)发现很多linux指令都模糊了,翻到了以前大一做的笔记,在练习一下吧,顺便记录过程。

准备工具:一台linux服务器或者自己装的的虚拟机,我用的是之前装的sentOS 8虚拟机

以下均出于自己手打的笔记(在这里感谢恩师)

运维概念

  1. 运维是指⼤型组织已经建⽴好的⽹络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进⾏维护,他集合了⽹络、系统、数据库、开发、安全、监控于⼀身的技术 运维⼜包括很多种,有DBA运维、⽹站运维、虚拟化运维、监控运维、游戏运维等等 2)游戏运维⼜有分⼯,分为开发运维、应⽤运维(业务运维)和系统运维 开发运维:是给应⽤运维开发运维⼯具和运维平台的 应⽤运维:是给业务上线、维护和做故障排除的,⽤开发运维开发出来的⼯具给业务上线、维护、做故障排查 系统运维:是给应⽤运维提供业务上的基础设施,⽐如:系统、⽹络、监控、硬件等等 总结:开发运维和系统运维给应⽤运维提供了“⼯具”和“基础设施”上的⽀撑 开发运维、应⽤运维和系统运维他们的⼯作是环环相扣的

Linux基本

1.操作系统之一,基于uinx, Linux 是⼀套免费使⽤和⾃由传播的类 Unix 操作系统⽀持多线 程和多 CPU它⽀持 32 位和 64 位硬件

2.Linux 系统的核⼼是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执⾏软件

体系结构

⽤户空间(User Space) :⽤户空间⼜包括⽤户的应⽤程序(User Applications)、C 库(C Library) 。 内核空间(Kernel Space) :内核空间⼜包括系统调⽤接⼝(System Call Interface)、内核(Kernel)、平台架构相关的 代码(Architecture-Dependent Kernel Code)

BASH 和 DOS 

        BASH:

  1. 定义:BASH(Bourne Again SHell)是一种Unix/Linux系统下的命令行解释器,具有强大的脚本编程能力。
  2. 功能:支持自动化系统管理、日志分析、网络管理、数据处理、软件部署、测试和编译等任务。
  3. 应用场景:广泛应用于Linux和类Unix操作系统中,用于执行用户命令、编写脚本以自动化日常任务和系统管理。

        DOS:

  1. 定义:DOS(Disk Operating System)是一种早期的操作系统,主要用于个人计算机,提供命令行界面进行操作。
  2. 功能:提供基本的文件管理、程序执行和系统配置功能。
  3. 应用场景:尽管已被现代操作系统取代,DOS在嵌入式系统、旧计算机维护和运行老旧软件方面仍有应用。
  4. BASH和DOS的区别
    • 起源与平台:BASH主要用于Unix/Linux系统,而DOS最初用于早期的Microsoft操作系统。
    • 文件路径格式:BASH使用正斜杠(/)分隔目录,DOS使用反斜杠(\)。
    • 脚本编程能力:BASH提供强大的脚本编程功能,而DOS的脚本编程能力较弱。
    • 环境变量和命令行编辑:BASH使用$符号引用环境变量,并提供丰富的命令行编辑功能;DOS使用%符号,命令行编辑功能相对有限。
    • 内置命令和数据流操作:BASH拥有大量内置命令并支持复杂的数据流操作,而DOS的内置命令较少,数据流操作功能不如BASH强大。
    • 权限管理:BASH在多用户操作系统上具有详细的权限管理系统,而传统DOS没有权限管理概念。
    • BASH 命令区分⼤⼩写,⽽ DOS 命令则不区分;

Linux 进程通信方式

管道(pipe)、流管道(s_pipe)、有名管道(FIFO) 信号(signal) 消息队列 共享内存 信号量 套接字(socket)

root 帐户

就是所谓的超级用户,允许你完全控制系统。你可以在此处创建和维护⽤户帐户,为每个帐户分配 不同的权限。每次安装 Linux 时都是默认帐户,是操作系统的最高权限

Linux 的⽬录结构

/bin:存放⼆进制可执⾏⽂件(ls,cat,mkdir 等),常⽤命令⼀般都在这⾥;

/etc:存放系统管理和配置⽂件;

/home:存放所有⽤户⽂件的根⽬录,是⽤户主⽬录的基点,⽐如⽤户 user 的主⽬录就是/home/user,可 以⽤~user 表示;

/usr:⽤于存放系统应⽤程序

/opt:额外安装的可选应⽤程序包所放置的位置。⼀般情况下,我们可以把 tomcat 等都安装到这⾥;

/proc:虚拟⽂件系统⽬录,是系统内存的映射。可直接访问这个⽬录来获取系统信息;

/root:超级⽤户(系统管理员)的主⽬录(特权阶级 o);

/sbin: 存放⼆进制可执⾏⽂件,只有 root 才能访问。这⾥存放的是系统管理员使⽤的系统级别的管理命令和 程序。如 ifconfig 等;

/dev:⽤于存放设备⽂件;

/mnt:系统管理员安装临时⽂件系统的安装点,系统提供这个⽬录是让⽤户临时挂载其他的⽂件系统;

/boot:存放⽤于系统引导时使⽤的各种⽂件;

/lib :存放着和系统运⾏相关的库⽂件 ;

/tmp:⽤于存放各种临时⽂件,是公⽤的临时⽂件存储点;

/var:⽤于存放运⾏时需要改变数据的⽂件,也是某些⼤⽂件的溢出区,⽐⽅说各种服务的⽇志⽂件(系统 启动⽇志等。)等;

/lost+found:这个⽬录平时是空的,系统⾮正常关机⽽留下“⽆家可归”的⽂件(windows 下***.chk)就在这⾥

Linux 性能调优

查看系统进程命令

ps命令

ps -aux      # 显示所有用户的进程(BSD 风格)
ps -ef       # 显示全格式进程(UNIX 风格)
ps -u root   # 查看 root 用户的进程
ps aux | grep nginx  # 过滤包含 "nginx" 的进程
ps aux --sort=-%cpu  # 按 CPU 使用率降序排列
ps aux --sort=-%mem  # 按内存使用率降序排列

top命令

top              # 进入交互界面(默认按 CPU 使用率排序)
top -d 2         # 每 2 秒刷新一次
top -p 1234      # 监控指定 PID 的进程
按 P:按 CPU 使用率排序。
按 M:按内存使用率排序。
按 k:终止指定 PID 的进程。
按 q:退出 top

其他命令

pstree              # 以树状结构显示所有进程
pstree -p           # 显示 PID
pstree -u root      # 仅显示 root 用户的进程树
pgrep nginx      # 返回所有 "nginx" 进程的 PID
pidof nginx      # 功能类似,但语法略有不同
lsof -p 1234        # 查看 PID 为 1234 的进程打开的文件
lsof /var/log/syslog  # 查看谁在使用/var/log/syslog这个文件

使用场景建议

  • 快速查看进程状态:ps -aux | grep <关键词>

  • 实时监控资源占用:top 或 htop

  • 分析进程关系:pstree

  • 调试文件占用问题:lsof

1、Disabling daemons (关闭 daemons)。

在Linux系统中,daemon是后台服务进程,通常在系统启动时自动运行,执行各种任务。关闭daemons通常意味着停止这些服务,可能还需要禁用它们,防止它们在下次启动时自动运行。

        关闭daemons的方法

        使用systemctl命令

启动服务:sudo systemctl start <service_name>
停止服务:sudo systemctl stop <service_name>
重启服务:sudo systemctl restart <service_name>
查看服务状态:sudo systemctl status <service_name>
设置服务开机自启:sudo systemctl enable <service_name>
关闭服务开机自启:sudo systemctl disable <service_name>
重新加载服务配置:sudo systemctl reload <service_name>
检查服务是否启用:sudo systemctl is-enabled <service_name>
列出所有服务:sudo systemctl list-units --type=service	
查看系统整体状态:sudo systemctl is-system-running	
  • 使用kill命令(通过PID终止进程):

    • 查找PID: pgrep <service_name>
      终止进程: kill <PID> 或强制终止:kill -9 <PID>

2、Shutting down the GUI (关闭 GUI(图形用户界面))。

关闭GUI通常意味着停止相关的服务或进程,返回到命令行界面。这可能是因为用户需要优化系统资源,进行维护,或者偏好使用命令行环境。

命令同上面systemctl

3、Changing kernel parameters (改变内核参数)。

改变内核参数是Linux系统管理中高级任务之一,通常涉及到底层系统配置和性能优化

使用sysctl命令

sysctl -a               # 查看所有内核参数及其值
sysctl <parameter_name> # 查看特定参数(如 sysctl vm.swappiness)
sysctl -w <parameter_name>=<value> #临时修改参数
sysctl -p                # 加载 /etc/sysctl.conf 中的配置
sysctl -p /path/to/file  # 加载指定配置文件

使用 ulimit 命令(资源限制)

ulimit -a #查看当前资源限制
ulimit -n <value>  # 最大打开文件数
ulimit -u <value>  # 最大用户进程数
ulimit -n 1000000  # 将最大打开文件数设为 1000000

4、Kernel parameters (内核参数)

5、Tuning the processor subsystem (处理器⼦系统调优)。

6、Tuning the memory subsystem (内存⼦系统调优)。

7、Tuning the file system (⽂件系统⼦系统调优)。

8、Tuning the network subsystem(⽹络⼦系统调优)

4-8:做到这里发现太东西太多了,一时半会讲不完,建议大家在博客上搜别人的。

高级功能

日志管理
  • 查看服务日志
    journalctl -u <服务名>        # 查看指定服务日志
    journalctl -u <服务名> -f     # 实时跟踪日志
    journalctl -u <服务名> --since "时间" --until "时间"  # 按时间段筛选
服务依赖与单元控制
  • 查看依赖关系
    systemctl list-dependencies <服务名>     # 显示依赖树
    systemctl show <服务名> --property=Requires  # 查看强依赖

    强制重载配置

  • systemctl daemon-reload       # 重新加载 systemd 配置

基本的 Vim 命令

        

·基础操作模式

Vim 有 3 种核心模式,掌握模式切换是高效编辑的关键:

  • 普通模式(默认模式,按 Esc 返回)
  • 插入模式(按 i/a/o 等进入)
  • 命令模式(按 : 进入,输入命令后回车执行)
  1. 保存 要保存⽂件,请按ESC按钮并按 :wq! OR :ZZ b)
  2. 退出 要退出⽂件⽽不进⾏更改,请运⾏命令:q c) 跳转到⽂件中的特定⾏ 按ESC再按j向下移动⼀⾏。 k按键盘上移⼀⾏ 将光标移动到⾏⾸ 按^ 将光标移动到⾏尾 按$ 将光标移动到⽂件的开头1G 将光标移动到⽂件末尾G 将光标移动到⽂件中⾏号“n”的开头nG d)
  3. 复制⽂本 将光标移动到字符串或⽂本的开头。接下来按键盘上的 v 并向前按光标以突出显示⽂本。到达要复制的⽂本的末 尾后,请按yyank 的缩写来复制⽂本。 要将⽂本从当前位置复制到⾏尾 -y$ 复制整⾏ -yy 要复制下⾯的 4 ⾏ -4yy d)
  4. 粘贴⽂本 要粘贴⽂本,只需按p键盘上的 删除⽂本 要删除⼀⾏,请移⾄⼀⾏的开头。按下ESC按钮并按下dd 要删除单个单词,请将光标放在单词前⾯并点击dw 删除从当前单词到⾏尾的⽂本d$ 要删除下⾯运⾏的 3 ⾏3dd
vim filename打开/创建文件
:w保存文件
:q退出(未修改时)
:q!强制退出(放弃修改)
:wq 或 ZZ保存并退出
:e newfile打开新文件(不关闭当前)

导航移动

命令功能
h/j/k/l左/下/上/右移动光标
0 或 ^跳到行首(^ 到第一个非空字符)
$跳到行尾
w跳到下一个单词开头
b跳到上一个单词开头
Ctrl+f向下翻页
Ctrl+b向上翻页
gg跳到文件开头
G跳到文件末尾
nG跳到第 n 行(如 5G

四、编辑文本

1. 进入插入模式
命令功能
i光标前插入
I行首插入
a光标后插入
A行尾插入
o下方新建行插入
O上方新建行插入
2. 删除文本
命令功能
x删除光标下字符
dd删除整行
ndd删除 n 行(如 3dd
dw删除到单词末尾
d$ 或 D删除到行尾
d0删除到行首
3. 复制粘贴
命令功能
yy复制整行
nyy复制 n 行
yw复制单词
p粘贴到光标后
P粘贴到光标前

五、搜索替换

命令功能
/pattern向下搜索 pattern
?pattern向上搜索 pattern
n跳到下一个匹配项
N跳到上一个匹配项
:%s/old/new/g全局替换 old 为 new

六、撤销重做

命令功能
u撤销上一次操作
U撤销当前行所有修改
Ctrl+r重做上一次撤销

在linux中搜索⽂件

find 命令(最强大灵活)

# 基本语法
find [搜索路径] [匹配条件] [操作]

# 常用场景示例
1. 按文件名搜索
find /home -name "*.log"          # 在/home下找所有.log文件
find . -iname "readme"            # 不区分大小写找readme文件

2. 按类型搜索
find /var -type d -name "log"     # 在/var下找名为log的目录
find /usr -type f -size +100M     # 找大于100MB的普通文件

3. 按时间搜索(单位:天)
find /backup -mtime +7            # 找7天前修改过的文件
find /tmp -atime -1               # 找24小时内访问过的文件

4. 组合条件搜索
find / -user root -perm 777       # 找root用户拥有的777权限文件

5. 对搜索结果执行操作
find /data -name "*.tmp" -delete  # 直接删除所有.tmp文件
find . -name "*.sh" -exec chmod +x {} \;  # 给所有.sh文件加执行权限

locate 命令(最快但依赖数据库)

功能:通过预建数据库快速查找文件(需定期更新数据库)

# 基本语法
locate [选项] 文件名

# 常用场景示例
1. 快速查找文件
locate nginx.conf                 # 查找nginx配置文件
locate -i "*.pdf"                 # 不区分大小写找PDF文件

2. 使用正则匹配
locate -r "/usr/bin/.*python"     # 找/usr/bin下含python的路径

3. 统计匹配数量
locate -c mysql                   # 统计含"mysql"的文件数量

# 更新数据库(需sudo权限)
sudo updatedb

which 命令(找可执行文件路径)

功能:在 $PATH 环境变量中查找命令的绝对路径。

# 示例
which python3                     # 显示python3的安装路径
which -a ls                       # 显示所有名为ls的可执行文件路径
whereis git                       # 显示git的安装路径、手册页位置
whereis -b nginx                  # 仅显示nginx的可执行文件路径

grep 命令(文件内容搜索)

功能:在文件中搜索指定字符串或正则表达式。

# 基本语法
grep [选项] "搜索内容" 文件名

# 常用场景示例
1. 简单内容搜索
grep "error" /var/log/syslog      # 在日志中找含"error"的行

2. 递归搜索目录
grep -r "TODO" ./src              # 在src目录下递归找含"TODO"的文件

3. 显示行号及统计
grep -n "warning" file.txt        # 显示行号
grep -c "success" *.log           # 统计包含"success"的行数

4. 正则表达式匹配
grep "^[A-Z]" names.txt           # 找以大写字母开头的行

LINUX系统软件安装和卸载的常⻅⽅法

  1. rpm包卸载:rpm -e XXX.rpm (如果想忽略依赖,可加上–nodeps)
  2. yum remove xxx.rpm这种⽅法⾮常不建议使⽤,卸载过程会将待卸载的软件包所依赖的软件包⼀并卸载掉,很 容易造成系统缺少某些包⽽崩溃等问题
  3. 源码包卸载:cd命令进⼊编译后的软件⽬录,即安装时的⽬录,执⾏makeuninstall命令即可;或者直接删除安 装⽬录

$PATH和软连接及他的用法

1. $PATH 环境变量

       作用
    $PATH 是一个环境变量,定义了系统在哪些目录中查找可执行文件(如命令、脚本等)。当你在终端输入命令时,系统会按照 $PATH 中列出的目录顺序搜索对应的可执行文件。

查看当前 $PATH

echo $PATH
# 输出示例:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
修改PATH
export PATH=$PATH:/新的/目录路径
# 例如:将 /home/user/bin 添加到 PATH
export PATH=$PATH:/home/user/bin
永久修改 $PATH:
将上述 export 命令添加到 ~/.bashrc 或 ~/.bash_profile 文件中,然后执行 source ~/.bashrc。
which [命令]   #查看命令路径

2. 软连接(符号链接)

  • 作用
            软连接(Symbolic Link)是一种特殊文件,指向另一个文件或目录的路径。类似于Windows的“快捷方式”。

  • 创建软连接

  • ln -s 目标文件或目录路径 软连接名称
    # 示例:将 /var/www/html 链接到当前目录的 web
    ln -s /var/www/html web

    特点

    • 软连接可以跨文件系统。
    • 删除软连接不会影响目标文件。
    • 可以为目录创建软连接。
  • 使用场景

    • 为常用目录创建快捷方式(如 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx)。
    • 管理不同版本的软件(如为Python3创建软连接 python)。

3. $PATH 与软连接的结合使用

  • 场景
    假设你有一个自定义脚本 /home/user/scripts/mytool.sh,希望直接在终端输入 mytool 运行它。

  • 创建软连接:
    ln -s /home/user/scripts/mytool.sh /usr/local/bin/mytool
    确保 /usr/local/bin 在 $PATH 中:
    echo $PATH
    # 如果输出包含 /usr/local/bin,则无需修改。
    直接运行:
    mytool
    总结
  • $PATH:控制命令的搜索路径,让系统知道去哪里找可执行文件。
  • 软连接:为文件或目录创建“快捷方式”,便于访问或管理。
  • 结合使用:通过软连接将常用工具链接到 $PATH 中的目录,简化命令输入。

LVS 三种模式的⼯作过程

LVS的三种模式包括NAT(网络地址转换)、TUN(隧道模式)和DR(直接路由模式)。每种模式的工作过程有所不同,适用于不同的场景。

NAT模式(VS-NAT)

      1. 工作过程
  1. 请求分发:客户端向负载均衡器的虚拟IP(VIP)发送请求。
  2. IP修改与转发:负载均衡器根据调度算法选择后端服务器,修改请求数据包的目标IP为后端服务器的真实IP,并将请求转发给该服务器。
  3. 响应返回:后端服务器处理请求后,将响应返回给负载均衡器,负载均衡器再将响应返回给客户端。
2. 特点
  • 实现简单:无需修改后端服务器配置。
  • 地址限制:后端服务器可使用私有IP,仅负载均衡器需合法IP。
  • 流量瓶颈:所有请求和响应均需经过负载均衡器。
3. 优缺点
  • 优点:适用于小型网络,后端服务器无需公网IP。
  • 缺点:负载均衡器可能成为性能瓶颈,扩展性有限。
4. 适用场景
  • 小规模集群或测试环境。
  • 后端服务器无公网IP,需通过负载均衡器访问。

TUN模式(VS-TUN)

      1. 工作过程
  1. 请求封装:客户端向负载均衡器的VIP发送请求。
  2. IP隧道封装:负载均衡器将请求封装在新的IP头中(目标IP为后端服务器IP),通过隧道转发给后端服务器。
  3. 直接响应:后端服务器处理请求后,直接返回响应给客户端(无需经过负载均衡器)。
2. 特点
  • 高性能:负载均衡器仅处理请求分发,响应不经过它。
  • 跨网段支持:后端服务器可分布在公网或不同网段。
  • 协议要求:后端服务器需支持IPTUNNEL协议。
3. 优缺点
  • 优点:支持大规模请求,适用于公网环境。
  • 缺点:隧道开销可能影响性能,需后端服务器支持特定协议。
4. 适用场景
  • 后端服务器分布在公网或异地。
  • 需要高性能且支持跨网段的负载均衡。

DR模式(VS-DR)

1. 工作过程
  1. MAC地址修改:客户端向负载均衡器的VIP发送请求。
  2. 直接路由:负载均衡器修改请求数据包的目标MAC地址为后端服务器的MAC地址,直接转发请求。
  3. 响应返回:后端服务器处理请求后,直接返回响应给客户端。
2. 特点
  • 最高性能:负载均衡器仅修改MAC地址,无IP封装开销。
  • 广播域要求:负载均衡器和后端服务器需在同一个广播域(如同一交换机)。
  • IP共享:所有服务器(包括负载均衡器)均配置相同的VIP。
3. 优缺点
  • 优点:性能最高,支持跨网段(需路由配置)。
  • 缺点:配置复杂,需调整ARP参数避免冲突。
4. 适用场景
  • 高性能要求的场景,如大型网站或高并发应用。
  • 后端服务器需直接响应客户端,减少延迟。

   总结对比

模式性能跨网段支持配置复杂度适用场景
NAT不支持简单小型网络、测试环境
TUN支持中等公网环境、异地服务器
DR支持(需路由)复杂高性能需求、大型网络

linux文件权限修改

        符号模式

  • 语法chmod [选项] [用户表示符][操作符][权限字符] [文件或目录名]
    • 用户表示符:u 文件所有者(user),g 文件所有组(group), o 其他用户(Others), a 所有用户(All 等同于 ugo)。
    • 操作符:+ 添加权限, - 移除权限, = 设置权限
    • 权限字符:r 读权限(Read)w 写权限(Write),x 执行权限(Execute)
    • # 为文件所有者添加执行权限
      chmod u+x file.txt
      
      # 移除文件所属组的写权限
      chmod g-w file.txt
      
      # 设置所有用户只读权限
      chmod a=r file.txt
      
      # 递归修改目录及其子目录和文件的权限
      chmod -R u+rwx,go-rwx my_directory/

      数字模式

    • 语法 chmod [选项] [三位八进制数字] [文件或目录名]

    • 权限值:读 (r): 4,写(w): 2,执行(x): 1,

    • 注意,数字可叠加比如4+2+1=7(读写执行)4+2=6(读写)4+1=5(读执行)1+2=3(写执行)

    • 权限组合

    • 第一个数字:文件所有者的权限。
    • 第二个数字:文件所属组的权限。
    • 第三个数字:其他用户的权限。
    • # 设置文件权限为 rwxr-xr-x(755)文件所有者:rwx(读、写、执行)文件所属组:r-x(读、执行)其他用户:r--(只读)
      chmod 755 file.txt
      
      # 设置文件权限为 rw-r--r--(644)
      chmod 644 file.txt
      
      # 递归设置目录及其子目录和文件的权限
      chmod -R 755 my_directory/

      其他相关命令

    • 修改文件所有者chown

    • 修改文件所属组chgrp

    • chown user:group file.txt      # 修改文件所有者和所属组
      chown -R user:group directory/ # 递归修改目录及其子目录和文件
      chgrp group file.txt           # 修改文件所属组
      chgrp -R group directory/      # 递归修改目录及其子目录和文件

 特殊权限suid,sgid,sbit          

1. SUID(Set User ID)

  • 作用
    当执行一个设置了SUID位的文件时,进程会以文件所有者的身份运行,而非执行者的身份。
    • 典型场景:允许普通用户执行需要更高权限的操作(如修改系统密码)。
    • 示例passwd命令默认具有SUID权限,普通用户运行它时可修改/etc/shadow文件(该文件通常仅root可写)。
  • 设置与标识
    • 设置命令:chmod u+s 文件名
    • 撤销命令:chmod u-s 文件名
    • 权限标识:
      • 若文件有执行权限:所有者权限位的x变为s(如-rwsr-xr-x)。
      • 若文件无执行权限:显示为S(大写,此时SUID无效)。
    • 二进制码4000
  • 安全风险
    若SUID被滥用(如为恶意脚本设置SUID),可能导致提权漏洞。

2. SGID(Set Group ID)

  • 作用
    • 对文件:执行时进程继承文件所属组的权限。
    • 对目录:用户在该目录下创建的新文件/子目录,自动继承目录的组属性。
    • 典型场景:协作开发中,确保所有成员创建的文件属于同一组(如共享目录/tmp/project)。
  • 设置与标识
    • 设置命令:chmod g+s 文件名或目录名
    • 撤销命令:chmod g-s 文件名或目录名
    • 权限标识:
      • 若文件/目录有执行权限:组权限位的x变为s(如-rwxr-sr-x)。
      • 若无执行权限:显示为S(大写,此时SGID无效)。
    • 二进制码2000
  • 3. SBIT(Sticky Bit)

  • 作用
    仅对目录有效。设置后,用户只能删除或重命名自己拥有的文件,即使其他用户对目录有写权限。
    • 典型场景:保护公共目录(如/tmp)中的文件,防止非所有者误删或恶意删除。
  • 设置与标识
    • 设置命令:chmod +t 目录名
    • 撤销命令:chmod -t 目录名
    • 权限标识:目录权限末尾显示t(如drwxrwxrwt)。
    • 二进制码1000

        总结

权限位作用对象核心功能典型场景
SUID文件以文件所有者身份执行passwd命令、提权脚本
SGID文件或目录继承文件所属组权限(文件)或强制新文件继承目录组(目录)共享开发目录、协作文件
SBIT仅目录限制删除操作,仅文件所有者或root可删除文件

/tmp目录、公共存储区域

        注:linux提权以后会单出笔记

CURL命令

        curl 是 Linux 中一个强大的命令行工具,用于通过多种协议(如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等)传输数据。它支持上传、下载、测试 API、调试请求等操作,是开发者和系统管理员的常用工具。

        基本语法

curl [选项] [URL]

        选项表格

以下是 curl 命令的常见用法及选项的表格总结:

选项/用法说明示例
基本请求
curl [URL]默认发起 GET 请求,输出响应内容到终端curl https://example.com
下载文件
-o <文件名>将响应内容保存到指定文件curl -o output.html https://example.com
-O使用远程文件名保存文件curl -O https://example.com/file.zip
发送请求
-X <METHOD>指定 HTTP 请求方法(GET、POST、PUT、DELETE 等)curl -X POST https://example.com/api
-d "<数据>"发送 POST 数据(默认 Content-Type 为 application/x-www-form-urlencodedcurl -d "key=value" https://example.com
--data-binary "<数据>"以二进制格式发送 POST 数据curl --data-binary "@file.bin" https://example.com
--data-urlencode "<数据>"发送 URL 编码后的 POST 数据curl --data-urlencode "q=hello world" https://example.com
-F "<name=content>"以 multipart/form-data 格式发送数据(常用于文件上传)curl -F "file=@local.txt" https://example.com/upload
-H "<header>"添加自定义请求头curl -H "Content-Type: application/json" https://example.com
认证与安全
-u <user:password>使用 HTTP 基本认证curl -u username:password https://example.com
--oauth2-bearer <token>使用 OAuth 2.0 的 Bearer Tokencurl --oauth2-bearer "token" https://example.com
--digest使用 HTTP 摘要认证curl --digest -u user:pass https://example.com
-k 或 --insecure忽略 SSL 证书验证(仅测试环境使用)curl -k https://example.com
--cacert <文件>指定 CA 证书文件curl --cacert ca.crt https://example.com
--cert <证书[:密码]>指定客户端证书文件及密码curl --cert client.pem:password https://example.com
--key <私钥文件>指定私钥文件curl --key private.key https://example.com
请求控制
-L 或 --location自动跟随重定向curl -L https://example.com
--max-time <秒>设置整个请求的最大允许时间curl --max-time 10 https://example.com
--connect-timeout <秒>设置连接超时时间curl --connect-timeout 5 https://example.com
--limit-rate <速度>限制下载速度(如 100K1Mcurl --limit-rate 100K -O https://example.com/largefile.zip
-C -断点续传curl -C - -O https://example.com/largefile.zip
--retry <次数>设置传输失败时的最大重试次数curl --retry 3 https://example.com
调试与日志
-v 或 --verbose显示详细输出(调试模式)curl -v https://example.com
--trace <文件>将详细通信信息写入指定文件curl --trace debug.log https://example.com
--trace-ascii <文件>类似 --trace,但省略二进制部分curl --trace-ascii debug.txt https://example.com
-i 或 --include在输出中包含 HTTP 响应头curl -i https://example.com
-I 或 --head仅获取 HTTP 响应头(HEAD 请求)curl -I https://example.com
Cookie 管理
-b <字符串/文件>发送 Cookie 字符串或从文件读取curl -b "name=value" https://example.com
-c <文件>将服务器返回的 Cookie 保存到文件curl -c cookies.txt https://example.com
代理设置
-x <代理服务器>使用 HTTP/HTTPS 代理curl -x http://proxy.example.com:8080 https://example.com
--socks5 <代理服务器>使用 SOCKS5 代理curl --socks5 socks5://proxy.example.com:1080 https://example.com
--proxy-user <user:password>设置代理服务器的用户名和密码curl --proxy-user user:pass -x http://proxy.example.com https://example.com
协议支持
--http1.1强制使用 HTTP/1.1 协议curl --http1.1 https://example.com
--http2启用 HTTP/2 协议curl --http2 https://example.com
--http3启用 HTTP/3 协议curl --http3 https://example.com
其他功能
--compressed要求服务器发送压缩的响应(gzip、deflate)curl --compressed https://example.com
--write-out "<格式>"自定义输出格式(如显示状态码、耗时等)curl --write-out "%{http_code}\n" https://example.com
--silent 或 -s静默模式(不显示进度条或错误信息,结合 -S 可仅显示错误)curl -sS https://example.com
--parallel 和 --parallel-max <并发数>并行下载多个文件(需 curl 7.66.0+)curl --parallel --parallel-max 5 -O https://example.com/file1 -O https://example.com

示列

        默认 GET 请求,输出到终端

lsof命令

        lsof(List Open Files)是 Linux/Unix 系统中用于列出当前系统中所有被打开文件的强大命令行工具。在 Linux 系统中,几乎所有资源(如普通文件、目录、套接字、设备、管道等)都可被视为文件,lsof 能显示这些资源的使用情况,对系统监控、排错和资源管理意义重大。

核心功能

  • 查看进程打开的文件:可列出指定进程或所有进程打开的文件、设备、套接字等信息。
  • 监控网络连接:能显示进程打开的网络套接字,包括 TCP/UDP 连接、监听端口等。
  • 定位资源占用:帮助排查文件被占用无法删除、设备无法卸载等问题。
  • 分析进程行为:可查看进程的文件描述符、内存映射文件等,辅助分析进程的资源使用情况。

常用选项

  • 基础过滤
    • -c <进程名>:显示指定进程打开的文件,如 lsof -c sshd 列出 sshd 进程打开的文件。
    • -p <PID>:显示指定进程 ID 打开的文件,如 lsof -p 1234 列出进程 ID 为 1234 的进程打开的文件。
    • -u <用户名>:显示指定用户打开的文件,如 lsof -u root 列出 root 用户打开的文件。
  • 文件与目录
    • +d <目录>:显示指定目录下被打开的文件(不递归子目录),如 lsof +d /var/log 列出 /var/log 目录下被打开的文件。
    • +D <目录>:递归显示指定目录及其子目录下被打开的文件,如 lsof +D /var/log 递归列出 /var/log 目录及其子目录下被打开的文件。
  • 网络相关
    • -i:显示所有网络连接,可结合协议类型、主机名、IP 地址、端口号等进一步过滤,如 lsof -i :80 列出所有使用 80 端口的进程,lsof -i TCP 列出所有 TCP 网络连接,lsof -i UDP 列出所有 UDP 网络连接。
  • 文件描述符
    • -d <文件描述符>:显示使用指定文件描述符的进程,如 lsof -d 1 显示使用标准输出(文件描述符 1)的进程。
    • -d ALL:显示所有文件描述符的打开文件。
  • 其他实用选项
    • -a:与其他选项结合使用时表示“与”的逻辑关系,如 lsof -u user -a -p PID 查找某个用户下的指定进程打开的文件。
    • -n:不将 IP 地址转换为主机名,加快执行速度,如 lsof -i -n
    • -P:不解析端口号,如 lsof -i -P
    • -t:只显示进程 ID,常用于结合其他命令处理,如 lsof -t -i :80 只显示占用 80 端口的进程 ID。
    • -U:显示打开的 UNIX domain socket 文件。
    • +L1:显示被删除但仍在使用的文件,数字 1 表示显示链接数小于 1 的文件。
    • -s:显示打开文件的大小。
    • -l:显示文件锁定状态。
    • -r <秒数>:定期重复执行 lsof 命令,用于持续监控,如 lsof -i :80 -r 2 每 2 秒刷新一次 80 端口的占用情况。

典型应用场景

  • 排查文件占用问题:当文件无法删除或设备无法卸载时,使用 lsof 查找占用该文件或设备的进程,如 lsof /path/to/file 查找打开指定文件的进程,lsof /dev/sda1 查找占用指定设备的进程。
  • 监控网络连接:查看进程打开的网络套接字,排查网络连接问题,如 lsof -i :22 查看 22 端口的占用情况,lsof -i @192.168.1.100 查看连接到指定主机的网络状态。
  • 定位进程锁定的文件:排查文件或数据库被锁定的问题,如 lsof -c mysql 查看 MySQL 进程打开的文件,判断是否有锁文件。
  • 系统性能分析:查看特定进程占用的文件描述符,判断进程的资源使用情况,如 lsof -p <PID> | wc -l 统计进程打开的文件描述符数量。
  • 查找僵尸文件:使用 lsof | grep deleted 查找已被删除但仍被进程占用的文件,释放磁盘空间。
  • 恢复已删除文件:若文件被删除但仍有进程占用,可通过 lsof 找到该进程,从 /proc/<PID>/fd/ 目录下恢复文件,如 cat /proc/1234/fd/6 > /path/to/restored/file

常用选项表格

选项作用示例
-c <进程名>显示指定进程名打开的文件lsof -c nginx → 列出 nginx 进程打开的文件
-p <PID>显示指定进程 ID 打开的文件lsof -p 1234 → 列出进程 ID 为 1234 的进程打开的文件
-u <用户名>显示指定用户打开的文件lsof -u root → 列出 root 用户打开的文件
+d <目录>显示指定目录下被打开的文件(不递归子目录)lsof +d /var/log → 列出 /var/log 目录下被打开的文件
+D <目录>递归显示指定目录及其子目录下被打开的文件lsof +D /var/log → 递归列出 /var/log 目录及其子目录下被打开的文件
-i显示所有网络连接(支持协议、端口、IP 过滤)lsof -i :80 → 列出所有使用 80 端口的进程
-i TCP显示所有 TCP 网络连接lsof -i TCP → 列出所有 TCP 连接
-i UDP显示所有 UDP 网络连接lsof -i UDP → 列出所有 UDP 连接
-i @<IP>显示连接到指定 IP 的网络连接lsof -i @192.168.1.100 → 列出连接到 192.168.1.100 的网络状态
-d <描述符>显示使用指定文件描述符的进程lsof -d 1 → 显示使用标准输出(文件描述符 1)的进程
-d ALL显示所有文件描述符的打开文件lsof -d ALL → 列出所有文件描述符的打开情况
-n不解析 IP 地址为主机名(加快执行速度)lsof -i -n → 显示网络连接但不解析主机名
-P不解析端口号为服务名(如显示 80 而不是 httplsof -i -P → 显示网络连接但不解析端口名
-t只显示进程 ID(用于脚本处理)lsof -t -i :80 → 只显示占用 80 端口的进程 ID
-U显示打开的 UNIX domain socket 文件lsof -U → 列出所有 UNIX domain socket
+L1显示被删除但仍在使用的文件lsof +L1 → 列出链接数小于 1 的被删除文件
-s显示打开文件的大小lsof -s → 显示文件大小信息
-l显示文件锁定状态lsof -l → 显示文件锁定信息
-r <秒数>定期重复执行(用于持续监控)lsof -i :80 -r 2 → 每 2 秒刷新一次 80 端口的占用情况

文件操作命令

        这个比较简单,我随便写写

ls -l          # 以长格式显示文件和目录的详细信息 相当于 ll
ls -a          # 显示所有文件,包括隐藏文件
ls -lh         # 以人类可读的格式显示文件大小
cp file.txt backup/          # 复制文件到 backup 目录
cp -r source_dir/ target_dir/ # 递归复制整个目录
mv old_name.txt new_name.txt # 重命名文件
mv file.txt /tmp/            # 将文件移动到 /tmp 目录
rm file.txt                  # 删除文件
rm -r temp/                  # 递归删除目录
rm -rf temp/                 # 强制递归删除目录(慎用!)
rm -rf*                      #懂得都懂
touch newfile.txt            # 创建一个新的空文件
touch existingfile.txt       # 更新已有文件的修改时间
cat file.txt                 # 一次性显示整个文件内容
head -n 10 file.txt          # 显示文件的前 10 行
tail -n 20 file.txt          # 显示文件的最后 20 行
tail -f logfile.log          # 实时监控日志文件更新
wc -l file.txt               #查看文件有多少行
wc -w file.txt               #查看文件有多少个单词(以空格判断)
wc -c file.txt               #查看文件字节数
./*                          #linux所有文件
du file.txt                  #查看文件或目录占用磁盘大小
du -s file.txt                #只显示汇总大小
du -h file.txt               #以高可读性显示如果不写,默认kb显示
du -sh file.txt               #懂得都懂
find /home/user -name "project*" # 查找名称以 project 开头的文件或目录
find . -type f -size +10M       # 查找当前目录中大于 10 MB 的文件
grep "error" logfile.log       # 在日志文件中搜索包含 "error" 的行
grep -ri "function" src/       # 在 src 目录中递归搜索 "function"
mkdir new_dir               # 创建新目录
mkdir -p dir1/dir2/dir3     # 递归创建多级目录
rmdir empty_dir             # 删除空目录
cd /path/to/directory       # 切换到指定目录
cd ..                       # 切换到上一级目录
cd ~                        # 切换到用户主目录
pwd                         # 显示当前工作目录的完整路径
ifconfig                    # 显示已启用的网络接口
ifconfig eth0 up            # 启用 eth0 网络接口
ifconfig eth0 down          # 禁用 eth0 网络接口
ping example.com            # 测试与 example.com 的连通性
netstat -anpt                # 显示所有活动的 TCP 连接
echo "Hello, World!"        # 输出字符串
tar -czvf archive.tar.gz /path/to/directory # 压缩目录为 tar.gz 文件
zip -r archive.zip /path/to/directory       # 压缩目录为 zip 文件
df -h                       # 查看磁盘空间使用情况(以人类可读格式显示)
du -sh /path/to/directory   # 查看目录的大小
man ls                      # 查看 ls 命令的手册
按ctrl+l                    #窗口清屏
shutdown -r now             # 重新启动操作系统
shutdown now                # 关机
shutdown 7:00              # 系统在今天的 7:00 会关机     
shutdown +数字              # 系统再过几分钟后自动关机
shutdown -c                 # 取消之前指定的关机计划
whoami                      #查看当前用户信息
who                         #显示已登录用户信息
w                           #显示系统登录用户信息和负载信息
last                        #显示近期登录终端加 -数字 是显示几条 
lastlog                    #显示关于用户登录记录
userdel -r 用户名           #删除用户和用户文件(去掉r只删除用户)
useradd 用户名              #添加用户
groupadd  组名              #添加组
groupdel  组名              #删除组
groupmod -n yh -g 1001 admin  #将名为admin的组改名为yh并且id号改为1001
id -u #查看用户uid
id -g #查看用户gid
usermod指令:usermod -[参数] [用户名]
-g   #设置主组 -G #设置附加组 -u 设置uid -L #上锁 -U #解锁 -c #添加注释 -s #设置登陆shell
usermod -aG 组名 用户名         #在组内添加用户
usermod -G 组1,组2,... 用户名    #在组内移除用户
usermod -aG 组1,组2,... 用户名    #将用户设置在多个组中
usermod -u 1001 -s bin/bash -c 'yunwei' admin    #将admin用户uid改为1001+可登录+注释为 yunwei
passwd 用户名                  #修改用户密码
id 用户名                      #显示用户名id root用户是0,其他用户一般是从1000开始
getent group                   #显示组的gid和成员列表
sudo chown 用户名 文件名       #修改文件所有者
sudo chmod u+w 文件名          #为用户添加文件写入权限,w为写入
visudo                        #编辑sudo配置文件

 解压命令

1. tar 命令

tar 命令用于处理 .tar.tar.gz.tar.bz2 等格式的压缩文件

常用参数
  • -x:解压文件。
  • -v:显示详细过程。
  • -f:指定文件名。
  • -z:使用 gzip 解压。
  • -j:使用 bzip2 解压。
  • -J:使用 xz 解压。
示例
  • 解压 .tar 文件:
    tar -xvf filename.tar
  • 解压 .tar.gz 文件:
    tar -xzvf filename.tar.gz
  • 解压 .tar.bz2 文件:
  • tar -xjvf filename.tar.bz2
  • 解压 .tar.xz 文件:
  • tar -xJvf filename.tar.xz
2. gzip 命令

gzip 命令用于解压缩 .gz 文件,通常与 tar 结合使用

常用参数
  • -d:解压缩文件。
  • -k:保留原始文件。
  • -r:递归压缩目录。
示例
  • 使用 gunzip 解压 .gz 文件:
    gunzip filename.gz
  • 使用 gzip -d 解压 .gz 文件
  • gzip -d filename.gz
3. bzip2 命令

bzip2 命令用于解压缩 .bz2 文件,通常与 tar 结合使用。

常用参数
  • -d:解压缩文件。
  • -k:保留原始文件。
  • -v:显示详细过程。
示例
  • 使用 bunzip2 解压 .bz2 文件:
    bunzip2 filename.bz2
  • 使用 bzip2 -d 解压 .bz2 文件:
    bzip2 -d filename.bz2

4. unzip 命令

unzip 命令用于解压 .zip 文件。

常用参数
  • -d:指定解压目录。
  • -l:列出压缩文件内容。
  • -o:覆盖已存在的文件。
示例
  • 解压 .zip 文件到当前目录:
    unzip filename.zip
  • 解压 .zip 文件到指定目录:
  • unzip filename.zip -d /home
    总结
命令适用格式示例
tar.tar.tar.gz.tar.bz2.tar.xztar -xzvf filename.tar.gz
gzip.gzgunzip filename.gz
bzip2.bz2bunzip2 filename.bz2
unzip.zipunzip filename.zip -d /path/to/dir

重定向 > 和 >>
Linux 允许将命令执行结果 重定向到一个 文件
将本应显示在终端上的内容 输出/追加 到指定文件中
其中
> 表示输出,会覆盖文件原有的内容
>> 表示追加,会将内容追加到已有文件的末尾

完结撒花~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值