Some linux tips

常用指令

1.ss -tuln 显示当前正在使用的端口
2.ps -aux |grep

sed, awk, grepfind 是Unix/Linux系统中非常强大的文本处理和文件查找工具。以下是它们的常见用法及一些综合用法示例。

sed (stream editor)

sed 是一个非交互式的流编辑器,用于文本的查找、替换和文本的其他处理。

  • 基本用法

    1
    sed 's/pattern/replacement/' file

    这个命令会将文件中第一次出现的 pattern 替换为 replacement

  • 删除行

    1
    sed '2d' file  # 删除文件的第二行
  • 替换所有匹配

    1
    sed 's/pattern/replacement/g' file  # 替换所有匹配的内容

awk

awk 是一个强大的文本处理工具,适用于按列处理数据和生成报告。

  • 基本用法

    1
    awk '{print $1, $2}' file  # 打印文件的第一和第二列
  • 模式匹配

    1
    awk '/pattern/ {print $0}' file  # 打印包含pattern的行
  • 计算总和

    1
    awk '{total += $1} END {print total}' file  # 计算文件第一列的总和

grep

grep 用于在文本中搜索匹配正则表达式的行。

  • 基本用法

    1
    grep 'pattern' file  # 搜索文件中包含pattern的行
  • 递归搜索

    1
    grep -r 'pattern' dir/  # 在目录中递归搜索
  • 忽略大小写

    1
    grep -i 'pattern' file  # 忽略大小写搜索

find

find 用于在文件系统中搜索文件和目录。

  • 基本用法

    1
    find /path -name 'filename'  # 按文件名搜索
  • 按类型搜索

    1
    2
    find /path -type d  # 搜索目录
    find /path -type f # 搜索文件
  • 按时间搜索

    1
    find /path -mtime -1  # 搜索一天内修改过的文件

综合用法示例

  1. 查找并删除特定文件

    1
    find /path -name '*.log' -exec rm {} \;
  2. 查找文件并在内容中搜索模式

    1
    find /path -name '*.txt' -exec grep 'pattern' {} \;
  3. 查找并替换文件中的文本

    1
    find /path -name '*.txt' -exec sed -i 's/old_text/new_text/g' {} \;
  4. 计算文件中匹配行的总和

    1
    grep 'pattern' file | awk '{total += $3} END {print total}'
  5. 查找并打印特定行的内容

    1
    find /path -name '*.txt' -exec awk '/pattern/ {print $0}' {} \;

这些工具组合使用可以进行非常复杂和强大的文本处理和文件操作。通过理解每个工具的基础功能,你可以轻松地构建适合你需求的命令。

find补充

find 命令中,最后的反斜杠 \; 是用来结束 -exec 选项的。它告诉 find 命令,前面的 -exec 动作已经结束,应该对每个找到的文件执行这个动作。反斜杠 \ 是用来转义分号 ; 的,防止它被shell解释。

-exec 选项

-exec 选项用于在找到的每个文件上执行指定的命令。它的语法如下:

1
find <path> <conditions> -exec <command> {} \;
  • <path>: 搜索路径。
  • <conditions>: 搜索条件,例如按名称、类型、时间等。
  • <command>: 要执行的命令。
  • {}: 占位符,代表找到的每个文件。
  • \;: 结束 -exec 选项。

示例

  1. 删除所有 .log 文件

    1
    find /path -name '*.log' -exec rm {} \;

    这个命令会在 /path 目录及其子目录中查找所有以 .log 结尾的文件,并使用 rm 命令删除它们。每找到一个文件,就会执行一次 rm 命令。

  2. 查找并列出所有 .txt 文件的详细信息

    1
    find /path -name '*.txt' -exec ls -l {} \;

    这个命令会在 /path 目录及其子目录中查找所有以 .txt 结尾的文件,并使用 ls -l 命令列出它们的详细信息。

+ 结尾的 -exec

还有一种更高效的方式是使用 + 结束 -exec 选项,它会将所有找到的文件一次性传递给命令,而不是一个一个地传递:

1
find /path -name '*.log' -exec rm {} +

这种方式在某些情况下可以显著提高效率,因为它减少了创建新进程的开销。

解释总结

  • \;: 告诉 find 命令结束 -exec 动作。
  • {} \;: 每找到一个文件,执行一次命令。
  • {} +: 将所有找到的文件一次性传递给命令。

希望这些解释能够帮助你更好地理解 find 命令中反斜杠 \; 的作用。

文件系统

文件系统查看

文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等命令变更文件系统大小),否则 inode 与 block 固定后就不再变动。
相关的 superblock 信息我们等一下会以 dumpe2fs 命令来呼叫出来观察喔
dumpe2fs -h

LVM:

http://cn.linux.vbird.org/linux_basic/0420quota_3.php

磁盘和分区等可以作为物理卷 物理卷是 LVM 的基本存储单元。物理卷可以是整个物理硬盘、硬盘分区,甚至是 RAID 设备。物理卷被 LVM 用来创建卷组。

创建物理卷

pvcreat /dev/...

物理卷 (PV)

物理卷是 LVM 的基本存储单元。物理卷可以是整个物理硬盘、硬盘分区,甚至是 RAID 设备。物理卷被 LVM 用来创建卷组。

  • 创建物理卷

    1
    2
    bash
    sudo pvcreate /dev/sdX

    查看物理卷情况 pvs 或者pvdisplay 卷组以及逻辑卷命令相似 vgs和lvs

卷组 (VG)

卷组是由一个或多个物理卷组成的存储池。卷组将物理卷的存储空间整合在一起,并将其分配给逻辑卷使用。卷组可以动态扩展或缩小,添加或移除物理卷。

  • 创建卷组

    1
    2
    bash
    sudo vgcreate my_volume_group /dev/sdX /dev/sdY

逻辑卷 (LV)

逻辑卷是从卷组中分配出来的存储单元。逻辑卷类似于传统的硬盘分区,但它们可以动态调整大小,迁移数据,甚至可以进行快照。逻辑卷的灵活性使得它们非常适合于动态环境中的存储管理。

  • 创建逻辑卷

    1
    2
    3
    bash
    Copy code
    sudo lvcreate -L 10G -n my_logical_volume my_volume_group

关系概述

  1. **物理卷 (PV)**:实际的物理存储设备。
  2. **卷组 (VG)**:由一个或多个物理卷组成,作为存储池。
  3. **逻辑卷 (LV)**:从卷组中分配的存储空间,可以作为文件系统、交换分区等使用。

Linux 特殊权限:Sticky Bit、SUID 和 SGID

Sticky Bit

作用:用于防止用户删除或重命名其他用户在公共目录中的文件。常用于公共写入目录如 /tmp

使用方法

  • 设置Sticky Bit

    1
    2
    chmod +t directory_name
    chmod 1755 directory_name # 八进制模式
  • 查看Sticky Bit

    1
    2
    ls -ld directory_name
    drwxrwxrwt 2 user group 4096 Jul 22 12:34 directory_name

SUID(Set User ID)

作用:当文件设置了SUID位时,执行该文件的用户将临时获得文件所有者的权限。这对需要在执行期间获得更高权限的程序非常有用。

使用方法

  • 设置SUID

    1
    2
    chmod u+s filename
    chmod 4755 filename # 八进制模式
  • 查看SUID

    1
    2
    ls -l filename
    -rwsr-xr-x 1 root root 12345 Jul 22 12:34 filename

SGID(Set Group ID)

作用:当文件设置了SGID位时,执行该文件的用户将临时获得文件所属组的权限。当目录设置了SGID位时,在该目录中创建的文件和子目录将继承该目录的组属性。

使用方法

  • 设置SGID

    1
    2
    chmod g+s filename_or_directory
    chmod 2755 filename_or_directory # 八进制模式
  • 查看SGID

    1
    2
    3
    ls -l filename_or_directory
    -rwxr-sr-x 1 root staff 12345 Jul 22 12:34 filename
    drwxrwsr-x 2 root staff 4096 Jul 22 12:34 directory_name

应用场景示例

Sticky Bit 应用场景

公共目录 /tmp 的典型应用:

1
drwxrwxrwt  10 root root 4096 Jul 22 12:34 /tmp

SUID 应用场景

passwd 命令需要root权限来修改密码文件:

1
-rwsr-xr-x 1 root root 12345 Jul 22 12:34 /usr/bin/passwd

SGID 应用场景

用于项目协作目录,以确保新创建的文件和子目录继承父目录的组属性:

1
drwxrwsr-x 2 root staff 4096 Jul 22 12:34 /shared_directory

总结

  • Sticky Bit:防止用户删除或重命名其他用户的文件,常用于公共目录。
  • SUID:使用户在执行文件时临时获得文件所有者的权限,常用于需要更高权限的程序。
  • SGID:使用户在执行文件时临时获得文件所属组的权限,并确保目录中创建的文件和子目录继承父目录的组属性,常用于协作环境。

这些特殊权限在合理使用时可以显著提高系统的安全性和灵活性。


Some linux tips
https://idpastra.top/2024/07/27/linux_com/
Author
Jingbo
Posted on
July 27, 2024
Licensed under