05-1-Linux命令

声明!

通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章,如涉及侵权马上删除文章,笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负.

文章为个人学习笔记。

openssl​加密工具包

openssl passwd -1 123
┌──(root㉿kali)-[~]
└─# openssl passwd -1 123
$1$.zuDA6Ll$nG9tJdA.e/icvGXCE7GrA0
                                
  • 这个命令使用 openssl​ 工具包中的 passwd​ 命令,-1​ 参数指定使用 MD5 加密算法对密码 "123" 进行加密处理。

  • MD5 是一种常用的哈希算法,它将任意长度的输入数据转换为固定长度的输出(通常是128位的哈希值)。

  • 使用这个命令可以将 "123" 生成为 MD5 加密后的密文。

openssl passwd -5 123
┌──(root㉿kali)-[~]
└─# openssl passwd -5 123
$5$vy.myweXFYqNMvPD$yDjp7W7wFCXy9Px2LKNNC.UF/Mb9L1rBjS.sY1J/q./

┌──(root㉿kali)-[~]
└─# openssl passwd -5 123
$5$Kz7kJjEqUXDHBzFA$45eiO0NSCd1D5jfQVppP/N0EPjDnkSZsYECwwebbTB2

  • 这个命令同样使用 openssl​ 工具包中的 passwd​ 命令,-5​ 参数指定使用 SHA-256 加密算法对密码 "123" 进行加密处理。

  • SHA-256 是一种更安全的哈希算法,它生成的哈希值长度为 256位。

  • 每次对相同的密码进行 SHA-256 加密时,由于加密过程中通常会引入随机因素(如盐值等),所以每次生成的密文都是不同的。

详细的补充内容:

  • OpenSSL:是一个强大的开源工具包,支持多种加密算法,包括对称加密、非对称加密、哈希算法等。它广泛应用于服务器和客户端的加密通信中,如 SSL/TLS 协议。

  • MD5 和 SHA-256:

    • MD5:虽然速度快且广泛使用,但由于其安全性问题(如容易受到碰撞攻击),现在已不推荐用于安全敏感的应用。

    • SHA-256:属于 SHA-2 家族的一部分,比 MD5 更安全,更难被破解,是目前推荐使用的哈希算法之一。

  • 盐值(Salt):在密码存储时,为了防止彩虹表攻击,通常会在密码上添加一个随机值(盐值),然后对密码和盐值的组合进行哈希处理。这样即使两个用户使用了相同的密码,由于盐值的不同,生成的哈希值也会不同。

  • 彩虹表攻击:是一种破解哈希密码的方法,通过预先计算大量密码的哈希值并存储在表中,攻击者可以快速查找到匹配的哈希值,从而破解密码。盐值的使用可以有效防止这种攻击。

  • 安全建议:由于 MD5 的安全性问题,建议在处理敏感信息时使用更安全的算法,如 SHA-256 或更高级别的 SHA-3,同时结合盐值和适当的哈希迭代次数来增强密码的安全性。

文件管理

touch​ 命令创建文件

​touch​ 命令在 Linux 和类 Unix 系统中用于创建新的空文件、更新现有文件的访问和修改时间戳。以下是 touch​ 命令的详细使用过程:

基本用法

创建空文件
touch filename
  • 如果 filename​ 不存在,touch​ 命令会创建一个新的空文件。

  • 如果 filename​ 已存在,touch​ 命令会更新该文件的访问和修改时间戳到当前时间

更新时间戳

touch -a -m filename
  • ​-a​ 选项只更新文件的访问时间。

  • ​-m​ 选项只更新文件的修改时间。

  • 你可以单独使用 -a​ 或 -m​ 来更新对应的时间戳。

设置特定的时间戳

touch -t [[CC]YY]MMDDhhmm[.SS] filename
  • ​-t​ 选项允许你为文件设置特定的时间戳。

  • ​CC​ 是世纪的前两位数字(可选)。

  • ​YY​ 是年份的后两位数字。

  • ​MM​ 是月份(01-12)。

  • ​DD​ 是月份中的日(01-31)。

  • ​hh​ 是小时(00-23)。

  • ​mm​ 是分钟(00-59)。

  • ​.SS​ 是秒(00-61,61 用于闰秒)。

    创建一个文件并设置特定的时间戳
  • touch -t 202411052100.00 filename
    

这里的 202411052100.00​ 表示的是:

  • ​20​ 表示年份 2024。

  • ​24​ 表示 11 月。

  • ​11​ 表示 11 日。

  • ​05​ 表示 5 点(早上 5 点)。

  • ​21​ 表示 21 分钟。

  • ​.00​ 表示 0 秒。

创建多个文件

touch file1 file2 file3
  • 你可以一次指定多个文件名,touch​ 会为每个指定的文件创建空文件或更新时间戳。

创建目录并设置时间戳

命令:

mkdir -vp dir && touch -d "@$(date +%s)" dir
  1. ​mkdir -vp dir​:

    • ​mkdir​:这是创建新目录的命令。

    • ​-v​:这个选项表示“verbose”,即详细模式。当使用 -v​ 选项时,mkdir​ 命令会在终端上显示它正在执行的操作。

    • ​-p​:这个选项表示“parents”,即父目录。如果指定的目录 dir​ 的父目录不存在,mkdir​ 命令会创建所有必需的父目录。

    • ​dir​:这是你想要创建的目录的名称。

    如果 dir​ 目录已经存在,mkdir -vp dir​ 命令不会报错,因为 -p​ 选项允许创建已存在的目录。

  2. ​&&​:

    • 这是一个逻辑“与”操作符。如果它前面的命令(在这个例子中是 mkdir -vp dir​)成功执行(即返回状态码 0),那么它后面的命令将被执行。如果前面的命令失败(即返回非 0 状态码),则后面的命令不会被执行。

  3. ​touch -d "@$(date +%s)" dir​:

    • ​touch​:这个命令用于修改文件或目录的时间戳。

    • ​-d​:这个选项允许你指定一个特定的日期。

    • ​@$(date +%s)​:这是一个特殊的语法,@​ 符号后面跟的是一个时间戳,表示自 Unix 纪元(1970年1月1日 00:00:00 UTC)以来的秒数。date +%s​ 命令会输出当前时间的 Unix 时间戳。

    • ​dir​:这是你想要修改时间戳的目录的名称。

    这个命令的意思是将 dir​ 目录的访问和修改时间戳设置为当前时间。

这段代码的作用是创建一个名为 dir​ 的目录(如果它不存在的话),并且无论 dir​ 是否已存在,都会将其访问和修改时间戳设置为当前时间。如果目录创建成功,那么时间戳修改命令会被执行;如果目录创建失败,时间戳修改命令不会被执行。

递归更新时间戳

touch -r re.txt rt.txt
  • ​-r​ 选项允许你将 targetfile​ 的时间戳设置为 referencefile​ 的时间戳。

检查文件是否存在

touch file &>/dev/null
  • 如果 file​ 存在,touch​ 命令不会输出任何内容。

  • 如果 file​ 不存在,touch​ 命令会返回错误。

  • ​&>/dev/null​ 会将标准输出和标准错误都重定向到 /dev/null​,即不显示任何输出。

  1. ​touch file​:

    • ​touch​ 命令用于创建一个名为 file​ 的新空文件,如果文件已存在,则更新其访问和修改时间戳为当前时间。

  2. ​&>/dev/null​:

    • ​&>​ 是重定向输出的组合符号,它同时将标准输出(stdout)和标准错误(stderr)重定向到指定的位置。

    • ​/dev/null​ 是一个特殊的设备文件,被称为位桶或黑洞。任何重定向到 /dev/null​ 的数据都会被丢弃,就像被丢进了一个无底洞一样。

​touch file &>/dev/null​ 命令创建了一个名为 file​ 的新空文件,并且不会在终端显示任何输出信息,包括正常操作的信息和可能出现的错误信息,因为所有的输出(包括标准输出和标准错误)都被重定向到了 /dev/null​。

rm删除文件

命令:

rm re.txt

说明:

  • 删除名为 re.txt​ 的文件。

  • 如果 re.txt 是一个链接文件,rm​ 会删除链接而不是链接指向的文件。

例子:

rm example.txt
  • 这个命令会删除当前目录下名为 example.txt​ 的文件。

强制删除文件

命令:

rm -f filename

说明:

  • ​-f​ 选项表示强制删除,不提示任何确认信息。

  • 这个选项会忽略不存在的文件,不会显示错误信息。

例子:

rm -f rt.txt
  • 这个命令会强制删除 rt.txt​ 文件,即使它不存在也不会报错。

递归删除目录

命令:

rm -r directoryname

说明:

  • ​-r​ 选项表示递归删除,用于删除非空目录及其内容。

  • 如果目录包含文件或其他目录,rm​ 会提示确认删除。

例子:

rm -r dir
  • 这个命令会递归删除名为 dir 的目录及其所有内容。

强制递归删除目录

命令:

rm -rf day53

说明:

  • ​-r​ 选项用于递归删除。

  • ​-f​ 选项用于强制删除,不提示任何确认信息。

交互式删除

命令:

rm -i file3

说明:

  • ​-i​ 选项表示交互式删除,对于每个删除操作,rm​ 都会提示用户确认。

保留父目录结构

命令:

rm -d dir

说明:

  • ​-d​ 选项用于删除空目录,如果目录不为空,则不会删除。

  • 这个选项在某些版本的 rm​ 中可用,但在 GNU rm​ 中不可用。

删除多个文件和目录

命令:

rm file1 file2 directory1

说明:

  • 你可以在一次命令中指定多个文件和目录进行删除。

例子:

rm -r file1.txt file2.txt directory1
  • 这个命令会删除 file1.txt​ 和 file2.txt​ 文件,以及递归删除 directory1​ 目录及其所有内

使用通配符删除文件

命令:

rm *.txt

说明:

  • 使用通配符 *​ 匹配所有以 .txt​ 结尾的文件,并删除它们。

显示删除操作但不实际删除

命令:

rm -v filename

说明:

  • ​-v​ 选项表示详细模式,rm​ 会显示每个被删除的文件的名称。

例子:

使用 rm​ 命令时要小心,特别是带有 -f​ 和 -rf​ 选项的命令,因为它们会无条件地删除文件和目录,而且无法恢复。在执行删除操作之前,确保你了解命令的影响,并考虑使用 -i​ 选项进行交互式确认。

mkdir命令创建目录

1. 基础用法

  • 创建单个目录:

    mkdir directory_name
    

    在当前路径下创建一个名为directory_name​的新目录。

  • 创建多个目录:

    mkdir dir1 dir2 dir3
    

    在当前路径下一次性创建三个目录:dir1​、dir2​和dir3​。

2. 创建嵌套目录

  • 使用-p​参数:

    mkdir -p dir1/dir2/dir3
    

    递归创建目录,即如果上级目录不存在则先创建上级目录,再创建当前目录。

3. 查看创建目录信息

  • 使用-v​参数:

    mkdir -v test
    

    显示创建目录的信息。

4. 设置目录权限

  • 使用-m​参数:

    mkdir -m 777 test123
    

    创建一个名为test​的目录,并设置其权限为777(即所有用户都有读、写和执行权限)。

5. 同时使用多个选项

  • 组合使用-v​和-p​参数:

    mkdir -vp test1/test2
    mkdir -v -p test1/test2
    

    这两条命令实现了相同的功能,即同时采用两个选项。

6. 创建带有特殊字符的目录

  • 使用引号:

    mkdir "dir with space"
    

    创建一个名为dir with space​的目录,其中包含空格。

7. 重复创建目录

  • 使用-p​参数避免错误:

    mkdir -p dir4
    

    如果目录dir4​已存在,则不会返回错误。

8. 创建只读目录

  • 使用-m​参数设置权限为444:

    mkdir -m 444 read_only_dir
    

    创建一个名为read_only_dir​的目录,只有读取权限。

参数列表

参数描述
​-m, --mode=MODE​设置新目录的文件模式,即权限。
​-p, --parents​递归创建目录,即如果指定的上级目录不存在则先创建上级目录,再创建当前目录。
​-v, --verbose​创建新目录后,打印一条信息。
​-Z, --context[=CTX]​将新创建的目录设置为SELinux安全上下文CTX。
​--help​显示帮助信息并退出。
​--version​显示版本信息并退出。

总结

​mkdir​命令在Linux系统中用于创建新目录,支持创建单个或多级目录、设置目录权限、查看创建过程的详细信息等功能。掌握mkdir​命令对于有效地在Linux环境下管理和组织文件系统是非常有帮助的。

mv​命令移动

1. 基本用法

​mv​命令在Linux中用于移动或重命名文件和目录。基本语法如下:

mv [options] source dest
mv [options] source... directory
  • 重命名文件(目录):

    mv 源文件 目标文件 
    mv 源目录 目标目录
    

    注意:源文件(目录)和目标文件(目录)必须在同一个目录下,且目标文件(目录)不存在,否则命令的效果将由重命名变成文件(目录)的移动。

2. 选项说明

以下是mv​命令的一些常用选项:

  • ​-b​:当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。

  • ​-i​:如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件。

  • ​-f​:如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。

  • ​-n​:不要覆盖任何已存在的文件或目录。

  • ​-u​:当源文件比目标文件新,或者目标文件不存在时,才执行移动操作。

  • ​-v​:显示操作的详细过程。

3. 实例操作

移动文件到另一个目录:
mv file1 /root/work/exam/dir

将file1.txt​移动到/root/work/exam/dir目录下。

移动多个文件到另一个目录:
mv file1.txt file2.txt /root/work/exam/dir

将file1.txt​和file2.txt​移动到/root/work/exam/dir目录下。

移动并重命名文件:
mv /root/work/exam/file3.txt /root/work/exam/dir/file2.txt

将/root/work/exam/file3.txt​移动到/root/work/exam/dir/目录下,并将其重命名为file2.txt​。

使用通配符移动多个文件:
mv *.txt /root/work/exam/dir/

将当前目录下所有的.txt​文件移动到/root/work/exam/dir/目录下。

在移动文件时给出提示:
mv -i file1.txt /root/work/exam/dir/

在移动file1.txt​到/root/work/exam/dir/目录下时会给出提示。

4. 高级用法

同时移动多个文件:
mv file file2 /root/work/exam/dir/
一次移动多个文件到指定目录。

仅当源文件比目标文件新时移动:
mv -u /root/work/exam/dir/fel1.txt /root/work/exam/dir/

仅在目标文件早于源文件或目标文件不存在时移动文件。

  • ​mv​:这是移动(move)命令,用于移动或重命名文件和目录。

  • ​-u​:这是mv​命令的一个选项,其含义是“update”,即只有当源文件比目标文件新,或者目标文件不存在时,才执行移动操作。这样可以避免覆盖已经存在于目标位置的文件。

  • ​/root/work/exam/dir/fel1.txt​:这是源文件的路径,即要移动的文件。

  • ​/root/work/exam/dir/​:这是目标目录的路径,即文件要被移动到的位置。

综合来看,这行命令的作用是将/root/work/exam/dir/fel1.txt​文件移动到/root/work/exam/dir/​目录下。由于使用了-u​选项,所以这个操作只有在满足以下条件时才会执行:

  1. ​fel1.txt​文件比/root/work/exam/dir/fel1.txt​新,或者

  2. ​/root/work/exam/dir/fel1.txt​文件不存在。

如果/root/work/exam/dir/fel1.txt​已经存在,并且比fel1.txt​新,那么mv​命令将不会执行任何操作,也不会覆盖现有的fel1.txt​文件。

简而言之,这个命令会将fel1.txt​移动到指定目录,但不会覆盖目录中已经存在的同名文件(如果该文件更新)。

覆盖前备份目标文件:
mv -b ~/Downloads/linux.iso ~/Desktop

如果目标文件已存在,移动它,并使用-b​选项重命名现有文件。

  • ​mv​:这是移动(move)命令,用于移动或重命名文件和目录。

  • ​-b​:这是mv​命令的一个选项,其含义是“backup”,即如果目标位置已经存在同名文件,则在覆盖之前为该文件创建一个备份。备份文件的名称通常是在原文件名后加上一个波浪号(~​)。

  • ​~/Downloads/linux.iso​:这是源文件的路径,即要移动的文件。~​表示当前用户的主目录,所以这里是当前用户主目录下的Downloads​目录中的linux.iso​文件。

  • ​~/Desktop​:这是目标目录的路径,即文件要被移动到的位置。~/Desktop​表示当前用户的主目录下的Desktop​目录。

综合来看,这行命令的作用是将当前用户主目录下的Downloads​目录中的linux.iso​文件移动到主目录下的Desktop​目录中。如果Desktop​目录中已经存在一个名为linux.iso​的文件,那么在移动之前,mv​命令会为这个已存在的文件创建一个备份,通常是将其重命名为linux.iso~​。

简而言之,这个命令会将linux.iso​文件移动到Desktop​目录,并且在覆盖任何同名文件之前创建一个备份。

cp​命令复制

1. 基本用法

​cp​命令用于复制文件或目录。基本语法如下:

cp [options] source dest
  • 复制文件:

    cp source_file target_file
    

    将source_file​复制到target_file​。如果target_file​已存在,它将被覆盖。

  • 复制目录:

    cp -r source_dir target_dir
    

    递归复制source_dir​目录及其所有内容到target_dir​目录。如果target_dir​不存在,它将被创建。

2. 选项说明

以下是cp​命令的一些常用选项:

  • ​-a, --archive​:归档模式,递归复制并保留链接、文件属性等。

  • ​-d​:保留链接。

  • ​-r, --recursive​:递归复制目录及其所有子目录和文件。

  • ​-i, --interactive​:覆盖前提示确认。

  • ​-u, --update​:仅复制源文件中更新时间较新的文件。

  • ​-v, --verbose​:显示详细的复制过程。

  • ​-p, --preserve​:保留源文件的权限、所有者和时间戳信息。

  • ​-f, --force​:强制复制,即使目标文件已存在也会覆盖,而且不给出提示。

3. 实例操作

复制单个文件:
cp file1.txt ~/work/exam

将file1.txt​复制到指定目录。

复制多个文件到目录:
cp file1.txt file2.txt ~/work/exam

将file1.txt​和file2.txt​复制到exam目录。

复制目录:
cp -r file3 wenjian

将 file3​复制到directory2​。如果wenjian​不存在,它将被创建。

在覆盖文件前获取确认:
cp -i file1.txt /root/work/exam

在覆盖/root/work/exam​中的file1.txt​之前会先询问你。

显示复制进度:
cp -v file1.txt /root/work/exam

在复制file1.txt​到/root/work/exam​时会显示详细的信息。

符号链接

在Linux系统中,软链接(也称为符号链接)和硬链接是两种不同的链接方式,它们用于创建文件或目录的引用。以下是它们的区别和使用教程:

软链接(符号链接)

软链接类似于Windows中的快捷方式。它是一个指向另一个文件或目录的引用,但不占用额外的磁盘空间。

创建软链接的命令:

ln -s <目标文件或目录> <软链接名称>

例子:

ln -s /root/work/exam/file2.txt symlink.txt

特点:

  • 软链接可以跨文件系统。

  • 删除原始文件后,软链接将变成一个无效的链接。

  • 软链接可以指向文件或目录。

硬链接

硬链接是指向文件数据的直接引用。它占用与原始文件相同的磁盘空间,因为它们共享相同的数据块。

创建硬链接的命令:

ln <目标文件> <硬链接名称>

例子:

ln /root/work/exam/file2.txt symlink-2.txt

特点:

  • 硬链接不能跨文件系统。

  • 删除原始文件后,硬链接仍然有效,因为它们指向相同的数据。

  • 硬链接不能指向目录,只能指向文件。

  • 硬链接在大多数现代文件系统中默认是禁用的,因为它们可能导致复杂的文件系统结构。

区别

  1. 数据共享: 软链接不共享数据,而硬链接共享数据。

  2. 文件系统限制: 软链接可以跨文件系统,硬链接不能。

  3. 删除影响: 删除原始文件后,软链接失效,硬链接仍然有效。

  4. 目录链接: 软链接可以指向目录,硬链接不能。

搜索文件

​which​命令

1. which​命令介绍

​which​命令在Linux中用于定位系统中的可执行文件。它根据$PATH​环境变量和/etc/profile.d​中的路径进行搜索,返回找到的第一个匹配项。

2. 适用的Linux版本

​which​命令在所有主流的Linux发行版中都是可用的,包括Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian等。

3. 基本语法

​which​命令的基本语法非常简单:

which [-a] filename

这里,-a​是which​命令的唯一选项,用于显示所有匹配的路径。

4. 常用选项或参数说明

  • ​-a​:显示所有匹配的路径。

  • ​-n<文件名长度>​:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

  • ​-p<文件名长度>​:与-n​参数相同,但此处的<文件名长度>​包括了文件的路径。

  • ​-w​:指定输出时栏位的宽度。

  • ​-V​:显示版本信息。

5. 实例详解

实例1:查找单个命令的位置
which java

输出可能是:

/usr/bin/java

这告诉我们java​命令的位置在/usr/bin/java​。

实例2:查找多个命令的位置
which man java python nada

输出可能是:

/usr/bin/man
/usr/bin/java
/usr/bin/python
nada not found

这告诉我们man​、java​和python​命令的位置,而nada​命令没有找到。

实例3:显示所有匹配的路径

如果一个程序在两个地方都有可执行文件,可以使用-a​选项显示所有的路径。

which -a python 
/usr/bin/python
/bin/python

这将列出所有python命令的路径。

实例4:查找shell内置命令的位置
which echo
  • 这个命令用于查找echo​命令的位置。

  • 输出结果显示echo: shell built-in command​,这意味着echo​不是一个外部可执行文件,而是shell的内置命令。因此,which​无法返回一个文件路径,因为它不是通过PATH​环境变量来调用的。

which man  

这告诉我们man命令的位置在/usr/bin/man。

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

6.注意事项

  • ​which​命令只适用于可执行文件。

  • 如果which​命令在当前路径中找不到可执行文件,它将返回空。

  • ​which​命令不能查找内置的shell命令,如cd​, pwd​等,如果要查找这些命令,可以使用type​命令。

Llocate​命令

用于快速查找文件和目录。它通过搜索一个定期更新的文件数据库来实现快速查找,而不是搜索整个文件系统。以下是locate​命令的详细使用教程:

基本语法

​locate​命令的基本语法如下:

locate [options] [pattern]
  • ​pattern​:要搜索的文件或目录的名称或部分名称。

常用选项

  • ​-A, --all​:显示匹配所有指定模式的条目。

  • ​-b, --basename​:只将基本名称与指定的模式匹配。

  • ​-c, --count​:输出匹配条目的数量,而不是文件名。

  • ​-d, --database [DBPATH]​:用[DBPATH]替换默认数据库。

  • ​-e, --existing​:只显示在运行locate时存在的文件的条目。

  • ​-i, --ignore-case​:忽略模式的大小写。

实例详解

  • 基本用法:

    locate filename
    

    这个命令会在文件数据库中查找名为filename​的文件。

  • 忽略大小写:

    locate -i filename
    

    这个命令会忽略大小写地查找filename​。

  • 只显示存在的文件:

    locate -e filename
    

    这个命令会检查文件在运行locate​时是否存在。

  • 统计匹配条目数量:

    locate -c filename
    

    这个命令会输出匹配filename​的条目数量。

注意事项

  • ​locate​命令依赖于一个定期更新的数据库。如果文件是最近创建的,可能不会立即出现在locate​的搜索结果中。

  • 可以使用sudo updatedb​命令手动更新数据库,以确保搜索结果的准确性。

  • ​locate​命令在大多数Linux发行版中都可以使用,但有些系统可能没有预装locate​。如果没有安装,可以使用包管理器进行安装,

  • 例如

    • 在Ubuntu和Debian上使用sudo apt install mlocate​,

    • 在CentOS和Fedora上使用sudo yum install mlocate​。

​find​命令

用于在文件系统中搜索文件和目录。以下是find​命令的详细使用教程:

基本语法

​find​命令的基本语法如下:

find [path] [expression]
  • ​path​:指定搜索的起始目录,可以是单个目录或多个目录,如果不指定则默认为当前目录。

  • ​expression​:指定搜索条件,可以是文件名、文件类型、文件大小、修改时间等。

常用选项

  • ​-name pattern​:按照文件名搜索,支持使用通配符*​和?​。

  • ​-type type​:按照文件类型搜索,如f​表示普通文件,d​表示目录。

  • ​-size [+-]size[cwbkMG]​:按照文件大小搜索,支持使用+​或-​表示大于或小于指定大小,单位可以是c​(字节)、w​(字数)、b​(块数)、k​(KB)、M​(MB)或G​(GB)。

  • ​-mtime days​:按照修改时间搜索,支持使用+​或-​表示在指定天数前或后,days​是一个整数表示天数。

  • ​-user username​:按照文件所有者搜索。

  • ​-group groupname​:按照文件所属组搜索。

  • ​-perm mode​:按照文件权限搜索。

  • ​-exec command {} ;​:对找到的文件执行指定的命令。

  • ​-maxdepth levels​:设置搜索的最大目录深度。

  • ​-mindepth levels​:设置搜索的最小目录深度。

实例详解

按文件名搜索:
find /root/work/ -name "file1.txt"

在指定目录及其子目录中查找名为file1.txt​的文件。

使用通配符查找:
find /root/work/ -name "*.txt"

查找以.txt​结尾的所有文件。

忽略大小写查找:
find /root/work/ -iname "*.txt"

忽略大小写查找.txt​文件。

查找特定类型的文件:
find /root/work/ -type d  

查找所有目录。

按文件大小查找:
find /root -size +100M 

查找大于100MB的文件。

按文件权限查找:
find /root -perm 777

查找权限为777的文件。

按用户查找文件:
find /etc -user root

查找属于用户root的文件。

查找最近7天内修改的文件:
find /root/work -mtime -7 

查找最近7天内修改的文件。

查找空文件或空目录:
find /root/work -empty 

查找所有空文件或空目录。

高级用法

按多条件查找:
find / -name "*.log" -size +1G

查找以.log​结尾并且大于1GB的文件。

find /var/log -name "*.log" -size +1m

在/var/log中 找log文件结尾,大于1M的文件

查找并执行命令:

​-exec​选项的结束是由+​或\;​来标记的

find /root/work -name "*.tmp" -exec rm {} \;
find /root/work-name "*.tmp" -exec rm -i {} \;
find /root/work -type f -name "*.tmp" -exec rm -i {} \;

查找并删除所有.tmp​文件。

​-exec rm {} \;​ 会为每个找到的文件单独调用一次 rm​ 命令。

find /root/work -type f -name "*.tmp" -exec rm -i {} \;
  1. ​find /root/work​:这是 find​ 命令的基本用法,用于在文件系统中查找文件。这里的路径 /root/work​ 是查找的起始目录。

  2. ​-type f​:这是 find​ 命令的一个选项,用于指定查找的文件类型。-type f​ 表示只查找文件(不包括目录)。

  3. ​-name "*.tmp"​:这是 find​ 命令的一个选项,用于指定查找的文件名模式。*.tmp​ 表示查找所有以 .tmp​ 结尾的文件。

  4. ​-exec rm -i {} \;​:这是 find​ 命令的 -exec​ 选项,它允许对找到的每个文件执行指定的命令。

    • ​rm​:是删除文件的命令。

    • ​-i​:这是 rm​ 命令的一个选项,表示在删除文件之前询问用户是否确认删除。

    • ​{}​:这是一个占位符,代表 find​ 命令找到的每个文件名。

    • ​\;​:用来结束 -exec​ 选项。注意,这里的分号前面有一个反斜杠 \​,这是因为分号在 shell 中是一个特殊字符,用于分隔命令。在 -exec​ 选项中,我们需要使用反斜杠来转义分号,以确保 find​ 命令正确地将其视为 -exec​ 选项的结束。

综上所述,这个命令的作用是:在 /root/work​ 目录及其子目录下查找所有扩展名为 .tmp​ 的文件,并对每个找到的文件使用 rm -i​ 命令进行删除,在删除前会提示用户确认。

find /root/work -type f -name "*.tmp" \
-exec rm -i {} \;

这个命令用于在指定的搜索路径 /path/to/search​ 下查找所有扩展名为 .tmp​ 的文件,并在删除每个文件之前询问用户是否确认。

  • ​find /path/to/search​:指定从 /path/to/search​ 目录开始搜索文件。

  • ​-type f​:指示 find​ 命令只查找类型为文件的项目,不包括目录。

  • ​-name "*.tmp"​:指定搜索条件为文件名以 .tmp​ 结尾的文件。

  • ​-exec rm -i {} \;​:对每个找到的文件执行 rm -i​ 命令。rm -i​ 表示删除文件时会提示用户确认。{}​ 是一个占位符,代表 find​ 命令找到的当前文件的路径。\;​ 表示 -exec​ 选项的结束。

命令中的反斜杠 \​ 是一个续行符,用于在命令行中将命令分成多行书写,以提高可读性。在实际执行时,反斜杠会被忽略,命令会连续执行。

这个命令的执行流程如下:

  1. ​find​ 命令在 /path/to/search​ 目录及其子目录中搜索所有以 .tmp​ 结尾的文件。

  2. 对于每个找到的文件,find​ 命令会执行 -exec​ 后面的 rm -i​ 命令。

  3. ​rm -i​ 命令会提示用户确认是否删除该文件。

  4. 如果用户输入 y​ 或 Y​,文件将被删除;如果用户输入 n​ 或 N​,文件将被保留。

使用 -exec rm -i {} \;​ 可以确保在删除大量文件时,用户有机会逐个确认,避免误删重要文件。

查找并批量执行命令:
find /root/work -name "*.txt" -exec rm {} +
find /root/work -name "*.gz" -exec rm {} +

​-exec rm {} +​ 会将所有找到的文件一次性传递给 rm​ 命令,这通常在处理大量文件时更有效率。

  1. ​find /root/work​:这是 find​ 命令的基本用法,用于在文件系统中查找文件。这里的路径 /root/work​ 是查找的起始目录。

  2. ​-name "*.txt"​:这是 find​ 命令的一个选项,用于指定查找的文件名模式。*.txt​ 表示查找所有以 .txt​ 结尾的文件。

  3. ​-exec rm {} +​:这是 find​ 命令的 -exec​ 选项,它允许对找到的每个文件执行指定的命令。

    • ​rm​:是删除文件的命令。

    • ​{}​:这是一个占位符,代表 find​ 命令找到的每个文件名。

    • ​+​:表示 find​ 命令会将所有找到的文件一次性传递给 rm​ 命令,而不是逐个传递。这种方式比逐个传递(使用 \;​ 结尾)更高效,因为它减少了 rm​ 命令的调用次数。

综上所述,这个命令的作用是:在 /root/work​ 目录及其子目录下查找所有扩展名为 .txt​ 的文件,并将这些文件一次性传递给 rm​ 命令进行删除。

查找并移动文件:
find /var/log -name "*.log" -exec mv {} /root/work/backup/ \;
  1. ​find /var/log​:这是find​命令的基本用法,用于在文件系统中查找文件。这里的路径/var/log​是查找的起始目录,通常用于存储系统日志文件。

  2. ​-name "*.log"​:这是find​命令的一个选项,用于指定查找的文件名模式。*.log​表示查找所有以.log​结尾的文件。

  3. ​-exec mv {} /root/work/backup/ \;​:这是find​命令的-exec​选项,它允许对找到的每个文件执行指定的命令。

    • ​mv​:是移动文件的命令。

    • ​{}​:这是一个占位符,代表find​命令找到的每个文件名。

    • ​/root/work/backup/​:这是目标目录,所有找到的.log​文件将被移动到这个目录下。

    • ​\;​:用来结束-exec​选项。注意,这里的分号前面有一个反斜杠\​,这是因为分号在shell中是一个特殊字符,用于分隔命令。在-exec​选项中,我们需要使用反斜杠来转义分号,以确保find​命令正确地将其视为-exec​选项的结束。

综上所述,这个命令的作用是:在/var/log​目录及其子目录下查找所有扩展名为.log​的文件,并将这些文件移动到/root/work/backup/​目录下。

按修改时间查找并压缩:
find /etc -mtime -3 -exec tar -czf recent_files.tar.gz {} +

find /etc -mtime -3 -exec tar -czf re.tar.gz {} +;
//-exec选项的结束是由+或\;来标记的
  1. ​find /etc -mtime -3 -exec tar -czf recent_files.tar.gz {} +​

    • ​/etc​:查找的起始目录。

    • ​-mtime -3​:查找在过去3天内被修改过的文件。

    • ​-exec tar -czf recent_files.tar.gz {} +​:对找到的每个文件执行tar​命令进行打包压缩。

      • ​tar​:是一个用于打包和压缩的工具。

      • ​-czf​:c​代表创建一个新的归档文件,z​代表gzip压缩,f​指定归档文件的名称。

      • ​recent_files.tar.gz​:输出的压缩文件名。

      • ​{}​:占位符,代表find​命令找到的每个文件。

      • ​+​:表示find​命令会将所有找到的文件一次性传递给tar​命令,而不是逐个传递。

    这个命令的作用是:查找/etc​目录下所有在过去3天内被修改过的文件,并将它们一次性打包压缩到名为recent_files.tar.gz​的文件中。

限制查找的目录深度:
 find /etc -maxdepth 1 -name "*.txt"
 find /etc -maxdepth 2 -name "*.txt"

这两个命令都是使用find​命令在Linux系统中查找文件,但它们的搜索范围和深度不同。

  1. ​find /etc -maxdepth 1 -name "*.txt"​

    • ​/etc​:这是查找的起始目录,/etc​是Linux系统中用于存储系统配置文件的目录。

    • ​-maxdepth 1​:这个选项指定了查找的最大深度。-maxdepth 1​意味着find​命令只在/etc​目录的第一级子目录中查找,不会进入更深层次的子目录。

    • ​-name "*.txt"​:这个选项指定了查找的文件名模式。*.txt​表示查找所有以.txt​结尾的文件。

    综合来看,这个命令的作用是在/etc​目录及其直接子目录中查找所有扩展名为.txt​的文件,但不会继续深入到子目录的子目录中。

  2. ​find /etc -maxdepth 2 -name "*.txt"​

    • ​/etc​:同样是查找的起始目录。

    • ​-maxdepth 2​:这个选项指定了查找的最大深度。-maxdepth 2​意味着find​命令会在/etc​目录及其第一级和第二级子目录中查找文件,但不会进入第三级或更深层次的子目录。

    • ​-name "*.txt"​:同样是查找所有以.txt​结尾的文件。

    综合来看,这个命令的作用是在/etc​目录及其直接子目录和第二级子目录中查找所有扩展名为.txt​的文件。

总结:

  • 第一个命令只搜索/etc​目录及其直接子目录。

  • 第二个命令搜索/etc​目录及其第一级和第二级子目录。

查找并按条件文件大小排序:
find /root/work -type f -exec ls -lh {} \; | sort -k 5 -h

这段代码是一个在Unix-like操作系统中使用的命令行语句,它由几个部分组成,用来查找文件并按照文件大小排序。下面是每个部分的解释:

  1. ​find /root/work​:这是find​命令的基本用法,用于在文件系统中查找文件。这里的路径/root/work​是查找的起始目录。

  2. ​-type f​:这是find​命令的一个选项,-type f​表示只查找文件(不包括目录)。

  3. ​-exec ls -lh {} \;​:这是find​命令的-exec​选项,它允许对找到的每个文件执行指定的命令。在这里,ls -lh​是用来列出文件详细信息的命令,{}​是一个占位符,代表find​命令找到的每个文件名。\;​用来结束-exec​选项。

    • ​ls​:列出文件。

    • ​-l​:长格式列出文件详细信息,包括文件权限、所有者、大小等。

    • ​-h​:使文件大小以易读的格式(如KB、MB)显示。

  4. ​|​:这是管道符,它将前一个命令的输出作为后一个命令的输入。

  5. ​sort -k 5 -h​:这是sort​命令,用于对输入进行排序。

    • ​-k 5​:指定排序的键值,这里是第5列,对于ls -lh​的输出,第5列通常是文件大小。

    • ​-h​:这个选项告诉sort​命令按照人类可读的数值(如1K、1G)进行排序,而不是按照字面值排序。

综上所述,这段代码的作用是:在/root/work​目录及其子目录下查找所有文件,使用ls -lh​列出它们的详细信息,然后通过管道将这些信息传递给sort​命令,按照文件大小(第5列)以人类可读的格式进行排序。这样,你可以得到一个按照文件大小排序的文件列表。

联合使用

sort
find ~ -mtime 2 -ls | sort -k9 -k10 | more
find /  -mtime 3 -ls | sort -k9 -k10 | more   

​find ~ -mtime 2 -ls​:

  • ​find ~​:从用户的主目录(由 ~​ 表示)开始查找文件。

  • ​-mtime 2​:查找在过去2天内修改过的文件。mtime​ 表示文件内容上次修改的时间。

  • ​-ls​:对每个找到的文件,执行 ls -l​ 命令,列出文件的详细信息,并将输出格式化为一行,包括文件名和文件的详细属性。

​| sort -k9 -k10​:

  • ​|​:管道符,将前一个命令的输出作为后一个命令的输入。

  • ​sort​:排序命令。

  • ​-k9 -k10​:指定排序的键值。这里 -k9​ 和 -k10​ 表示按照第9列和第10列的值进行排序。对于 ls -l​ 的输出,第9列通常是文件大小,第10列是文件名。这里首先按照文件大小排序,如果大小相同,则按照文件名排序。

​| more​:

  • ​|​:管道符,将前一个命令的输出作为后一个命令的输入。

  • ​more​:分页显示命令。如果输出超过一屏,more​ 会分页显示,允许用户逐页查看。

综上所述,这个命令组合的作用是:查找用户主目录下在过去2天内修改过的文件,列出它们的详细信息,然后按照文件大小和文件名排序,最后通过 more​ 命令分页显示这些信息。

ls
find . -type f -iname '*.sh' -mmin -30 -ls
find . -type f -iname '*.txt' -mmin -30 -ls

​find .​:从当前目录开始查找文件。

​-type f​:只查找文件类型的项(不包括目录)。

​-iname '*.txt'​:查找文件名符合模式 *.txt​ 的文件,-iname​ 选项表示不区分大小写的匹配。

​-mmin -30​:查找在过去30分钟内修改过的文件。-mmin​ 选项后面跟的数字表示分钟数,-30​ 表示文件修改时间在30分钟之前到现在之间。

​-ls​:对每个找到的文件执行 ls -l​ 命令,并输出详细的文件信息,包括文件权限、链接数、所有者、组、大小、最后修改时间等信息,以及文件名。

-exec rm
find -name '*.txt' -exec rm -rf {} \;
  1. ​find​:这是 find​ 命令的开始,用于在文件系统中查找文件。

  2. ​-name '*.txt'​:这个选项指定查找所有文件名以 .txt​ 结尾的文件。

  3. ​-exec rm -rf {} \;​:这是 find​ 命令的 -exec​ 选项,它允许对找到的每个文件执行指定的命令。

    • ​rm​:是删除文件或目录的命令。

    • ​-rf​:-r​ 表示递归删除,用于删除目录及其内容;-f​ 表示强制删除,不提示确认。

    • ​{}​:这是一个占位符,代表 find​ 命令找到的每个文件名。

    • ​\;​:用来结束 -exec​ 选项。注意,这里的分号前面有一个反斜杠 \​,这是因为分号在 shell 中是一个特殊字符,用于分隔命令。在 -exec​ 选项中,我们需要使用反斜杠来转义分号,以确保 find​ 命令正确地将其视为 -exec​ 选项的结束。

-user root -type f -perm
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null

find / -user root  -type f -perm -o=w -name '*.sh' 2>/root/work/t1.txt 
  1. ​find /​:从根目录 /​ 开始查找文件。

  2. ​-user root​:这个选项指定查找所有者为 root​ 的文件。

  3. ​-type f​:这个选项指定只查找文件(不包括目录)。

  4. ​-perm -o=w​:这个选项查找文件权限中至少有一个用户(所有者、所属组或其他用户)具有写权限的文件。-o=w​ 表示“或”操作,即文件对任何用户组是可写的。

  5. ​-name '*.sh'​:这个选项查找文件名符合模式 *.sh​ 的文件,即所有以 .sh​ 结尾的文件,通常这类文件是shell脚本。

  6. ​2>/root/work/t1.txt​:这部分是输出重定向操作。2>​ 表示重定向标准错误流(stderr),/root/work/t1.txt​ 是重定向的目标文件。这意味着 find​ 命令执行过程中产生的所有错误信息都会被写入到 /root/work/t1.txt​ 文件中。

综上所述,这个命令的作用是:在整个文件系统下查找所有者为 root​、至少有一个用户具有写权限、并且文件名以 .sh​ 结尾的文件,并将所有错误信息重定向到 /root/work/t1.txt​ 文件中。

用户命令

使用 useradd​ 命令创建用户

基本命令:

useradd username

这将创建一个名为 username​ 的新用户,其中 username​ 是你想要设置的用户名。

验证用户

id username

修改用户名

 usermod -l newusername username

这里 newusername​ 是你想要更改为的新用户名。

删除已存在的用户

userdel username

删除username用户

设置用户ID(UID):

useradd -u 9001 username

这将创建一个用户ID为9001的新用户。通常,系统会自动分配一个唯一的UID,但你可以指定一个特定的UID。

创建用户组(GID):

groupadd -g 8001 newgroup

这里 newgroup​ 是新组的名称,你可以根据需要更改它。

查看组

getent group 组名

将用户添加到组

usermod -a -G 8001 username
usermod -a -G 8001 username2

这里 -a​ 选项表示追加组,-G 8001​ 指定了组ID。如果用户已经属于其他组,他们将被添加到GID为8001的组,而不会从其他组中移除。

设置用户的主目录:

useradd -m -d /home/username username
  1. ​useradd​:这是用于创建新用户的命令。

  2. ​-m​:这个选项告诉 useradd​ 命令为新用户创建主目录。默认情况下,用户的主目录位于 /home/​,但可以通过 -d​ 选项指定不同的路径。

  3. ​-d /home/username​:这个选项指定新用户的主目录的路径。在这里,它被设置为 /home/username​,其中 username​ 是新用户的用户名。

  4. ​username​:这是新用户的用户名,系统将使用这个名称来识别用户。

综上所述,这个命令的作用是创建一个名为 username​ 的新用户,并为其在 /home/​ 目录下创建一个名为 username​ 的主目录。如果 /home/username​ 目录已经存在,useradd​ 命令会报错。如果需要在创建用户之前确保目录存在,可以使用 mkdir​ 命令先创建目录,或者在 useradd​ 命令中使用 -p​ 选项来指定密码,或者使用 -G​ 选项来指定用户所属的附加组。

设置用户的登录shell:

useradd -s /bin/bash username

这将设置新用户的默认shell为 /bin/bash​。如果不指定,系统会使用默认的shell。

  1. ​useradd​:这是用于创建新用户的命令。

  2. ​-s /bin/bash​:这个选项用于指定新用户的登录shell。在这里,/bin/bash​ 被设置为默认的shell。Bash(Bourne Again SHell)是Linux系统中最常用的shell之一,它功能强大且灵活。

  3. ​username​:这是新用户的用户名,系统将使用这个名称来识别用户。

综上所述,这个命令的作用是创建一个名为 username​ 的新用户,并将其默认shell设置为Bash。这将允许用户在登录时使用Bash shell,除非他们更改了自己的默认shell。

创建用户并设置密码:

passwd username

创建用户后,你需要为新用户设置密码:,系统会提示你输入新密码。

用户账号数据库

配置文件:

  • ​/etc/passwd​:存储用户账号的基本信息,如用户名、用户ID、用户组ID、用户描述信息、用户主目录和默认shell。

  • ​/etc/shadow​:存储用户密码的加密信息和密码属性,如密码最后修改时间、密码最短和最长使用期限等。只有root用户可以访问此文件。

命令:

passwd -l
passwd -l username

​sudo passwd -l username​:锁定用户账号,禁止其登录。

passwd -u
passwd -u username

​sudo passwd -u username​:解锁用户账号,允许其登录。

chage -E
sudo chage -E YYYY-MM-DD username

chage -E 2099-01-01 username

指定密码的过期日期,格式为 YYYY-MM-DD。例如,将 username 的密码过期日期设置为2099年1月1日,

passwd -S

passwd -S username

​passwd -S username​:显示用户账号的密码状态信息。

组账号管理

查看组账号:

​cat /etc/group​:查看系统中定义的所有组账号信息。

cat /etc/group  

​cat /etc/group​:查看组账号信息,包括组名和组成员。

禁用账号相关命令

锁定和解锁用户账号:
  • ​sudo passwd -l username​:锁定用户账号,禁止其登录。

  • ​sudo passwd -u username​:解锁用户账号,允许其登录。

设置密码过期:
  • ​sudo passwd -E YYYY-MM-DD username​:设置用户账号的密码过期日期,例如将“kali”用户的密码过期日期设置为“1990-01-01”。

查看密码状态:
  • ​passwd -S username​:显示用户账号的密码状态信息,包括密码是否已设置、密码最后一次修改时间等。

chage​ 命令

  • ​-M number​:设置密码的最大天数(密码在多少天后过期)。

  • ​-W number​:设置密码到期前的警告天数(在密码过期前多少天开始警告用户)。

  • ​-I number​:设置密码过期后的宽限天数(密码过期后用户仍能登录的天数)。

示例:
  • 设置密码在60天后过期:

    sudo chage -M 60 username
    
  • 设置在密码过期前7天开始警告用户:

    sudo chage -W 7 username
    
  • 设置密码过期后用户仍有3天时间可以更改密码:

    sudo chage -I 3 username
    

文件权限

文件系统权限

在Linux系统中,几乎所有的资源都被抽象为文件,包括硬件设备、进程间通信、网络连接等。这种设计使得对各种资源的管理可以通过统一的文件操作方式来进行,简化了系统的架构和管理。

查看权限

ls -la /etc/passwd

这个命令用于列出 /etc/passwd​ 文件的详细信息,包括文件的权限、所有者、所属组、文件大小和修改时间等。-l​ 选项表示长格式显示,-a​ 选项表示显示所有文件,包括以点(.)开头的隐藏文件。

更改文件所有者

chown root file

这个命令用于更改文件的所有者。在这里,root​ 是新的所有者用户名,file​ 是要更改所有者的文件名。执行这个命令后,文件的所有者将变为 root​ 用户。

修改文件权限

u=rwx,g=rwx,o=r

sudo chmod u=rwx,g=rwx,o=r file

这个命令用于修改文件的权限。u=rwx​ 表示设置用户(所有者)的权限为读(r)、写(w)、执行(x);g=rwx​ 表示设置组的权限为读、写、执行;o=r​ 表示设置其他用户的权限为读。file​ 是要修改权限的文件名。

  1. ​sudo​:这是一个命令行工具,允许授权的用户以另一个用户的安全权限来执行命令,默认情况下是以超级用户(root)的身份执行。使用 sudo​ 通常需要输入执行者的密码,除非已经配置了免密执行。

  2. ​chmod​:这是“更改模式”(change mode)的缩写,用于改变文件或目录的访问权限。

  3. ​u=rwx,g=rwx,o=r​:这是权限设置的指定方式,分别代表用户(user)、组(group)和其他(others)的权限设置。

    • ​u=rwx​:设置文件所有者(用户)的权限为读(read, r)、写(write, w)和执行(execute, x)。

    • ​g=rwx​:设置文件所属组的权限为读、写和执行。

    • ​o=r​:设置其他用户(除了文件所有者和所属组成员之外的用户)的权限为读。

  4. ​file​:这是要更改权限的文件或目录的名称。

综上所述,这个命令的作用是以超级用户权限将指定的 file​ 文件或目录的权限设置为:文件所有者和所属组成员可以对该文件进行读、写和执行操作,而其他用户只能进行读操作。这种权限设置通常用于确保文件的安全性,同时允许文件所有者和所属组成员对文件进行必要的操作。

u+x,g+w,o-r

sudo chmod u+x,g+w,o-r file

这个命令用于修改文件的权限,增加用户(所有者)的执行权限,增加组的写权限,移除其他用户的读权限。

这个命令的作用是:

  • ​u+x​:为文件所有者添加执行(execute)权限。

  • ​g+w​:为文件所属组添加写(write)权限。

  • ​o-r​:移除(remove)其他用户(others)的读(read)权限。

这样,文件 file​ 的权限就被修改为:所有者可以读、写和执行,所属组可以读和写,而其他用户没有任何权限。

数字权限

chmod 400 file

这个命令用于设置文件的权限为只读。400​ 表示所有者的权限为读(4)和写(0)和执行(0),组和其他用户的权限都为0,即没有权限。

  • ​chmod​:这是改变文件模式(权限)的命令。

  • ​400​:这是一个八进制数,表示文件的权限设置。在 chmod​ 命令中,权限可以通过八进制数来指定,其中每三位数字分别代表所有者(user)、组(group)和其他用户(others)的权限。

    • ​4​ 代表读权限(read),其八进制值为4。

    • ​0​ 代表没有权限,其八进制值为0。

    • 因此,400​ 表示所有者有读权限,而组和其他用户没有任何权限。

  • ​file​:这是你想要改变权限的文件的名称。

执行这个命令后,文件 file​ 将被设置为只读,只有文件的所有者可以读取文件内容,但无法写入或执行文件。组用户和其他用户将没有权限访问这个文件。

数字权限的解释

在Linux系统中,chmod​ 命令用于更改文件或目录的权限。权限可以通过数字来设置,这些数字代表了不同的访问权限级别。数字权限的设置是基于八进制数,每个八进制位代表不同的用户类别的权限:

  • 所有者(Owner):文件或目录的所有者,通常是创建文件或目录的用户。

  • 组(Group):文件或目录所属的用户组,所有者可以将文件或目录的组更改为系统中的任何现有组。

  • 其他(Others):除了所有者和组用户之外的所有用户。

每个用户类别的权限由以下三个八进制数字表示:

  • 读(Read, r):值4,表示可以读取文件内容或列出目录内容。

  • 写(Write, w):值2,表示可以修改文件内容或在目录中创建、删除文件。

  • 执行(Execute, x):值1,表示可以执行文件或进入目录。

这些值可以相加,以设置不同的权限组合。例如:

  • ​7​(4+2+1):所有者具有读、写和执行权限。

  • ​6​(4+2):所有者具有读和写权限。

  • ​5​(4+1):所有者具有读和执行权限。

  • ​4​:所有者只有读权限。

对于文件,权限的典型组合可能如下:

  • ​644​:所有者具有读和写权限,组和其他用户具有读权限。

  • ​755​:所有者具有读、写和执行权限,组和其他用户具有读和执行权限。

  • ​700​:所有者具有读、写和执行权限,组和其他用户没有任何权限。

对于目录,权限的典型组合可能如下:

  • ​755​:所有者具有读、写和执行权限,组和其他用户具有读和执行权限。这意味着其他用户可以查看目录内容,但不能在目录中创建或删除文件。

  • ​700​:所有者具有读、写和执行权限,组和其他用户没有任何权限。这意味着只有所有者可以查看和修改目录内容。

使用数字权限设置可以更精确地控制文件和目录的访问权限,从而增强系统的安全性。

Linux系统中查看日志文件

日志介绍

系统日志

  • ​ls -l /var/log​:列出 /var/log​ 目录下的所有日志文件及其详细信息。

认证信息日志

  • ​sudo tail -3 /var/log/auth.log​:使用 tail​ 命令查看 /var/log/auth.log​ 文件的最后三行内容。这个文件通常包含认证信息,如用户登录和注销的记录。

二进制日志

  • ​who /var/log/wtmp | tail -5​:使用 who​ 命令查看 /var/log/wtmp​ 文件的内容,并通过管道 |​ 将输出传递给 tail -5​ 命令,以显示最后五行内容。/var/log/wtmp​ 文件记录了所有的登录和注销事件。

dmesg

  • ​dmesg​:这个命令用于显示内核环缓冲区的消息,通常包含系统启动时的硬件检测和驱动加载信息。

systemd日志

  • ​journalctl​:这个命令用于查询和显示 systemd​ 日志。systemd​ 是现代Linux系统中用于初始化系统组件和服务的系统和服务管理器。

日志命令

系统日志相关命令

ls -l /var/log
  • ​ls​:这是Linux系统中用于列出目录内容的命令。

  • ​-l​:这是 ls​ 命令的一个选项,用于以长格式列出信息。长格式显示包括文件的权限、所有者、所属组、文件大小、最后修改时间以及文件名。

  • ​/var/log​:这是指定的目录路径,/var/log​ 是Linux系统中用于存储日志文件的目录。

日志内容
drwxr-xr-x  2 root              root               4096 10月 6日 16:00 apt
-rw-r-----  1 root              adm                7130 11月 7日 17:09 auth.log

这两行输出是 ls -l​ 命令的结果,展示了 /var/log​ 目录下的两个不同类型文件的详细信息。下面是对每一行的详细解释:

第一行:apt​
drwxr-xr-x 2 root root 4096 10月 6日 16:00 apt
  • 文件类型和权限:d​ 表示这是一个目录。rwxr-xr-x​ 表示目录的权限设置:所有者(root)有读(r)、写(w)和执行(x)权限;所属组(root)和其他用户有读(r)和执行(x)权限,但没有写权限。

  • 链接数:2​ 表示这个目录有两个硬链接。

  • 所有者:root​ 是这个目录的所有者。

  • 所属组:root​ 是这个目录所属的用户组。

  • 文件大小:4096​ 表示目录的大小,单位通常是字节。对于目录,这个大小通常表示目录结构本身的大小,而不是目录内容的大小。

  • 最后修改时间:10月 6日 16:00​ 表示目录最后修改的日期和时间。

  • 文件名:apt​ 是目录的名称。

第二行:auth.log​
-rw-r----- 1 root adm 7130 11月 7日 17:09 auth.log
  • 文件类型和权限:-​ 表示这是一个普通文件。rw-r-----​ 表示文件的权限设置:所有者(root)有读(r)和写(w)权限;所属组(adm)和其他用户只有读(r)权限。

  • 链接数:1​ 表示这个文件有一个硬链接。

  • 所有者:root​ 是这个文件的所有者。

  • 所属组:adm​ 是这个文件所属的用户组。

  • 文件大小:7130​ 表示文件的大小,单位通常是字节。

  • 最后修改时间:11月 7日 17:09​ 表示文件最后修改的日期和时间。

  • 文件名:auth.log​ 是文件的名称。

认证信息日志相关命令

tail -3 /var/log/auth.log
  • ​tail​:这是一个常用的命令行工具,用于显示文件的内容,特别是文件的末尾部分。

  • ​-3​:这是 tail​ 命令的一个选项,用于指定显示文件的最后三行。数字 3​ 表示行数。

  • ​/var/log/auth.log​:这是指定的文件路径。/var/log/​ 是Linux系统中存储日志文件的目录,而 auth.log​ 是记录认证信息的日志文件,通常包括用户登录、注销和其他与认证相关的事件。

认证信息内容
2024-11-07T17:15:01.500597+08:00 kali CRON[98063]: pam_unix(cron:session): session closed for user root
2024-11-07T17:17:01.507152+08:00 kali CRON[99273]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2024-11-07T17:17:01.510560+08:00 kali CRON[99273]: pam_unix(cron:session): session closed for user root

这三行日志条目来自 /var/log/auth.log​ 文件,它们记录了与 cron​ 守护进程相关的会话活动。下面是对每一行的详细解释:

第一行
2024-11-07T17:15:01.500597+08:00 kali CRON[98063]: pam_unix(cron:session): session closed for user root
  • 时间戳:2024-11-07T17:15:01.500597+08:00​ 表示事件发生在2024年11月7日17点15分01秒,时区为UTC+8。

  • 主机名:kali​ 是记录日志的计算机的主机名。

  • 进程信息:CRON[98063]​ 表示这是 cron​ 守护进程的日志,进程ID为98063。

  • PAM模块:pam_unix(cron:session)​ 表示使用的是 pam_unix​ 模块来处理 cron​ 服务的会话。

  • 事件描述:session closed for user root​ 表示 cron​ 服务为 root​ 用户关闭了一个会话。

第二行
2024-11-07T17:17:01.507152+08:00 kali CRON[99273]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
  • 时间戳:2024-11-07T17:17:01.507152+08:00​ 表示事件发生在2024年11月7日17点17分01秒,时区为UTC+8。

  • 主机名:kali​。

  • 进程信息:CRON[99273]​ 表示这是 cron​ 守护进程的日志,进程ID为99273。

  • PAM模块:pam_unix(cron:session)​。

  • 事件描述:session opened for user root(uid=0) by root(uid=0)​ 表示 cron​ 服务为 root​ 用户打开了一个会话,由 root​ 用户(uid=0)自己发起。

第三行
2024-11-07T17:17:01.510560+08:00 kali CRON[99273]: pam_unix(cron:session): session closed for user root
  • 时间戳:2024-11-07T17:17:01.510560+08:00​ 表示事件发生在2024年11月7日17点17分01秒,时区为UTC+8。

  • 主机名:kali​。

  • 进程信息:CRON[99273]​。

  • PAM模块:pam_unix(cron:session)​。

  • 事件描述:session closed for user root​ 表示 cron​ 服务为 root​ 用户关闭了一个会话。

这些日志条目显示了 cron​ 服务为 root​ 用户打开和关闭会话的时间。这通常发生在 cron​ 任务执行期间,当 cron​ 守护进程代表 root​ 用户执行计划任务时。这些信息对于监控 cron​ 任务的执行和诊断相关问题非常有用。

二进制日志相关命令

who /var/log/wtmp |tail -5

命令 who /var/log/wtmp | tail -5​ 用于查看系统登录记录的最后五条记录。下面是这个命令的详细解释:

  • ​who​:这是一个常用的命令,用于显示当前登录到系统的用户列表。它可以与不同的选项和文件一起使用来获取不同的信息。

  • ​/var/log/wtmp​:这是Linux系统中存储所有登录和注销事件的二进制文件。wtmp​ 代表 "who tmp",它记录了系统启动后的所有登录会话。

  • ​|​:管道符,它将前一个命令的输出作为后一个命令的输入。

  • ​tail -5​:tail​ 命令用于显示文件的最后几行内容。-5​ 选项表示显示最后五行。

综上所述,这个命令的作用是:使用 who​ 命令查看 /var/log/wtmp​ 文件的内容,并通过管道将输出传递给 tail -5​ 命令,以显示最后五条登录记录。

请注意,who​ 命令通常用于查看当前登录的用户,而 /var/log/wtmp​ 文件的内容可能需要使用 last​ 命令来正确解析。如果你想要查看最后五条登录记录,使用 last | tail -5​ 可能会更合适,因为 last​ 命令专门用于读取 wtmp​ 文件并将其转换为可读的格式。例如:

last | tail -5

这将显示最后五次登录的详细信息,包括登录和注销的时间、登录的终端和登录的主机名。

root     tty7         2024-10-23 22:43 (:0)

  • ​root​:这是登录会话的用户。在这个例子中,登录用户是 root​,即超级用户或系统管理员。

  • ​tty7​:这表示用户登录的终端类型和设备。tty​ 代表 “teletypewriter”,通常是物理终端或远程会话的表示。数字 7​ 表示这是第七个终端,这可能是一个图形界面的虚拟控制台或远程登录会话。

  • ​2024-10-23 22:43​:这是登录发生的时间,格式为年-月-日 时:分。在这个例子中,登录时间是2024年10月23日22点43分。

  • ​(:0)​:这通常表示会话的显示环境,特别是在图形界面中。:0​ 通常代表第一个(也是主要的)图形显示设备。在远程会话或虚拟控制台中,这个字段可能不适用或显示为其他内容。

dmesg命令

​dmesg​ 是一个在类 Unix 系统中用于显示内核环缓冲区消息的命令。这些消息通常包含系统启动时的硬件检测信息、驱动程序加载信息以及系统运行过程中的内核警告和错误信息。dmesg​ 命令对于系统管理员和开发人员来说是一个强大的工具,因为它提供了系统底层的详细信息。

如何使用 dmesg​

基本使用:

dmesg

这个命令将显示内核环缓冲区的所有消息,从最早的到最新的。由于这些消息可能非常多,特别是如果你刚刚启动或重启了系统,所以输出可能会非常长。

查看最新的日志条目:

dmesg | tail

这个命令将只显示最新的日志条目。tail​ 命令用于显示文件的最后几行,这对于快速查看最新的内核消息非常有用。

按时间排序:

dmesg | less

这个命令将显示所有内核消息,并通过 less​ 命令进行分页,使得长输出更容易阅读。你可以使用键盘上下键来滚动查看消息。

搜索特定消息:

dmesg | grep "关键字"
dmesg | grep 'root'
dmesg | grep "root“

这个命令将帮助你搜索包含特定关键字的消息,这对于查找特定的硬件错误或系统问题非常有用。

常见输出解释
  • 硬件检测信息:系统启动时,内核会检测所有硬件设备,如CPU、内存、硬盘等,并在 dmesg​ 输出中显示相关信息。

  • 驱动加载信息:内核加载驱动程序时的信息也会显示在 dmesg​ 输出中。

  • 错误和警告:如果系统检测到硬件问题或驱动程序错误,这些信息也会记录在 dmesg​ 输出中。

注意事项
  • ​dmesg​ 输出的信息可能包含敏感数据,如硬件序列号等,因此在安全敏感的环境中使用时需要小心。

  • 由于 dmesg​ 显示的是内核级别的信息,对于非技术用户来说,这些信息可能难以理解。通常需要具备一定的系统和硬件知识才能正确解读这些消息。

systemd日志相关命令

​journalctl​ 是一个用于查询和管理系统日志的命令行工具。它基于 systemd 日志守护进程(systemd-journald)的功能,可以查看和操作由 systemd-journald 收集的日志信息。这些日志信息涵盖了内核消息、系统服务日志、用户登录和注销信息等,为系统管理员提供了丰富的数据源。

journalctl​ 的基本用法
查看所有日志:
journalctl

或者使用不分页输出:
journalctl --no-pager

按时间倒序查看所有日志:
journalctl -r

查看最新的10条日志:
journalctl -n 10

实时查看新添加的日志条目:
journalctl -f

过滤日志条目

​journalctl​ 提供了多种方式来过滤和查找特定的日志条目。

根据服务名称过滤:
journalctl -u nginx

根据进程ID过滤:
journalctl _PID=2001

根据优先级过滤(0-7,0表示最重要)**:
journalctl -p err -b

​-p err​ 通常等同于 -p 3​,表示显示优先级为错误(err)及以上级别的消息,即错误、严重错误、警报和紧急消息。

时间戳和日志轮转

对于大型系统,日志文件可能会非常大。为了解决这个问题,journalctl​ 提供了日志轮转和时间戳功能。

  • 日志轮转:旧的日志条目被删除以释放空间给新的日志条目。默认情况下,Journal将根据配置在/var/log/journal中保存日志文件,并在磁盘空间不足时执行日志轮转。

  • 时间戳:允许你查找特定时间范围内的日志条目。例如:

    journalctl --since="2024-11-01" --until="2024-11-31 03:00"
    

高级应用

清空所有日志:

清除所有的系统日志,可使用 journalctl​ 的 --vacuum-time​ 或 --vacuum-size​ 选项。

清除所有日志:
sudo journalctl --vacuum-time=1s

清除超过特定大小的日志:
journalctl --vacuum-size=1

过滤掉某个服务日志:

例如,过滤掉systemd服务日志:

journalctl | grep -v systemd

注意事项
  • journal日志不会将程序输出的空行显示,日志会被压缩得满满当当。

  • journal日志不会自动持久化,重启系统后,历史日志将被清除。可参考journal日志持久化配置。

存储管理

内存使用量

  • ​free -m​:显示内存的使用情况,以兆字节(MB)为单位。

磁盘使用量

  • ​df -hT​:显示文件系统的磁盘空间使用情况,以人类可读的格式(如KB、MB、GB)和文件系统的类型。

文件或目录大小

  • ​sudo du ./* -hsc​:递归地显示当前目录下每个文件和子目录的大小,以人类可读的格式,并显示总计。

查看硬盘分区

  • ​sudo fdisk -l​:列出所有的硬盘分区信息。

挂载分区

  • ​sudo mount /dev/sdb1/mnt/usb​:将设备 /dev/sdb1​ 挂载到目录 /mnt/usb​。

内存使用量

free -m
  • ​free​:这是用于显示内存状态的命令。

  • ​-m​:这是 free​ 命令的一个选项,用于指定输出结果以兆字节(MB)为单位。如果不使用 -m​ 选项,free​ 命令默认以千字节(KB)为单位显示内存使用情况。

┌──(root㉿kali)-[~/work]
└─# free -m
               total        used        free      shared  buff/cache   available
内存:          3885        1160         327          14        2693        2724
交换:           974           0         974

内存使用情况

  • total:系统总内存为 3885 MB。

  • used:已使用的内存为 1160 MB。这包括所有正在运行的应用程序和系统进程所占用的内存。

  • free:完全未被使用的内存为 327 MB。这部分内存可以直接分配给需要它的进程。

  • shared:被多个进程共享的内存为 14 MB。这通常包括一些库代码和数据,多个进程可能会同时访问这些共享内存。

  • buff/cache:用作缓冲和缓存的内存为 2693 MB。这部分内存用于存储临时数据,如文件系统缓存,它可以提高系统性能,因为从内存中读取数据比从磁盘中读取要快得多。

  • available:可供新进程使用的内存为 2724 MB。这个数字考虑了操作系统可以不受限制地分配给新进程的内存量,包括 free​ 和 buff/cache​ 中的一部分。

交换空间使用情况

  • 总交换空间:系统配置的交换空间总量为 974 MB。

  • 已使用交换空间:当前没有使用交换空间(0 MB)。交换空间是硬盘上的一部分,当物理内存不足时,系统会将一些不常用的数据从内存移动到交换空间,以释放内存供其他进程使用。

总结

从这个输出可以看出,系统目前有充足的内存可用,因为大部分内存(包括缓冲和缓存)都未被使用。此外,系统尚未使用交换空间,这通常是一个好兆头,表明系统有足够的内存来处理当前的负载,无需依赖较慢的硬盘交换空间。这对于保持系统性能和响应速度是有益的。如果 used​ 和 buff/cache​ 的值较高,而 available​ 的值较低,可能表明系统内存压力较大,需要进一步监控或优化。

free命令

​free​ 是一个在类 Unix 系统中用于显示内存使用情况的命令行工具。它提供了关于系统内存(RAM)、交换空间(swap)以及其他所有相关内核缓冲区的详细信息。这个命令对于系统管理员和用户来说非常有用,因为它可以帮助他们监控系统的内存使用情况,从而进行性能调优或故障排除。

基本用法
  • 显示内存使用情况:

    free
    

    这个命令将显示内存的总量、已使用量、空闲量以及缓冲/缓存使用的内存量。

常用选项
  • 以兆字节为单位显示:

    free -m
    

    使用 -m​ 选项可以让 free​ 命令以兆字节(MB)为单位显示内存使用情况,而不是默认的千字节(KB)。

  • 以人类可读的格式显示(包括MB、GB等):

    free -h
    

    ​-h​ 选项使输出更易于阅读,自动选择合适的单位(如 KB、MB、GB)。

  • 显示所有内存设备的信息:

    free -l
    

    ​-l​ 选项显示所有内存设备的信息,包括内存插槽和内存模块的详细信息。

  • 显示内存使用趋势:

    free -t
    

    ​-t​ 选项显示内存使用趋势,通常与 watch​ 命令结合使用,以定期更新内存使用情况。

输出解释

​free​ 命令的输出通常包括以下几个部分:

  • total:显示内存的总大小。

  • used:显示已经被使用的内存大小。

  • free:显示当前未被使用的内存大小。

  • shared:显示被多个进程共享的内存大小。

  • buff/cache:显示被用作缓冲和缓存的内存大小。

  • available:显示在不回收缓冲和缓存的情况下,可以被分配给新进程的内存大小。

磁盘使用量

df -hT

​df -hT​:这个命令用于显示文件系统的磁盘空间使用情况。

  • ​df​ 命令用于显示磁盘空间使用情况。

  • ​-h​ 选项表示以人类可读的格式(如 KB、MB、GB 等)显示磁盘空间大小。

  • ​-T​ 选项显示文件系统类型。执行这个命令可以查看各个磁盘分区的总大小、已使​用空间、可用空间以及文件系统类型等信息。

  • 文件系统:显示文件系统的名称或挂载点。

  • 类型:显示文件系统的类型,例如 ext4​、devtmpfs​、devtmpfs​ 等。

  • 大小:显示文件系统的总大小。

  • 已用:显示已使用的磁盘空间。

  • 可用:显示剩余的可用磁盘空间。

  • 已用%:显示已使用空间的百分比。

  • 挂载点:显示文件系统的挂载点。

输出详解:

  • ​udev​:这是一个动态创建的文件系统,用于为所有设备提供节点。它的大小是 1.9G,目前没有使用。

  • ​tmpfs​:这是一个临时文件系统,通常用于存储临时文件。它在多个挂载点上被使用,大小从 389M 到 1.9G 不等。

  • ​/dev/sda1​:这是系统的主硬盘分区,文件系统类型为 ext4​。总大小为 62G,已使用 47G,可用空间为 13G,使用率为 79%。这个分区挂载点为 /​,表示它是根文件系统。

  • 其他 tmpfs​ 条目:这些是为特定服务和用户会话挂载的临时文件系统,通常用于存储临时数据和会话信息。

df命令

​df​(disk free)是一个在类 Unix 系统中用于显示文件系统磁盘空间占用情况的命令行工具。它提供了关于文件系统的总空间、已用空间、可用空间以及挂载点的信息。这对于系统管理员和用户来说非常有用,因为它可以帮助他们监控和管理磁盘空间。

​df​ 命令在 Linux 系统中用于显示文件系统的磁盘空间使用情况。以下是一些常用的 df​ 命令选项及其用途:

-h​

以人类可读的格式(例如 KB、MB、GB)显示磁盘空间使用情况。

df -h

-H​

以人类可读的格式显示磁盘空间使用情况,并显示总和可用的百分比。

df -H

​-T​

显示文件系统的类型。

df -T

​-i​

显示 inode 的使用情况,而不是磁盘块的使用情况。

df -i

​-k​

以千字节为单位显示磁盘空间使用情况(默认单位)。

df -k

​-m​

以兆字节为单位显示磁盘空间使用情况。

df -m

​-t​

仅显示指定类型的文件系统。例如,要仅显示 ext4 类型的文件系统:

df -t ext4

​-x​

排除指定类型的文件系统。例如,要排除 tmpfs 类型的文件系统:

df -x tmpfs

​-a​

显示所有文件系统,包括那些已挂载为只读的文件系统。

df -a

​--output​

自定义输出格式,可以选择显示哪些列。例如,只显示文件系统和挂载点:

 df --output=source,target

执行这个命令后,你会得到一个简化的列表,其中只包含每个文件系统的设备名(如 /dev/sda1​)和它们对应的挂载点(如 /​)。这种格式的输出对于快速查看哪些设备被挂载在哪些目录下非常有用,特别是在处理大量挂载点或进行脚本自动化时。

文件或目录大小

sudo du ./* -hsc
  • ​sudo du ./* -hsc​:

    • ​sudo​ 表示以管理员权限执行命令。

    • ​du​ 命令用于统计文件或目录的磁盘使用空间。

    • ​./*​ 表示当前目录下的所有文件和目录。

    • ​-h​ 选项以人类可读的格式显示大小(如 KB、MB、GB 等)。

    • ​-s​ 选项表示汇总显示每个参数的总大小。

    • ​-c​ 选项表示在最后显示总计。执行这个命令可以查看当前目录下每个文件和目录的大小,并在最后显示总计大小。

du命令文件空间使用量

​du​(disk usage)是一个在类 Unix 系统中用于估算文件空间使用量的命令行工具。它对文件和目录进行扫描,以显示它们占用的磁盘空间量。这对于管理磁盘空间和识别占用大量空间的文件或目录非常有用。

基本用法
  • 估算当前目录的磁盘使用量:

    du -sh
    

    ​-s​ 表示仅显示总计,-h​ 表示以人类可读的格式(例如 KB、MB、GB)显示。

常用选项
  • 以人类可读的格式显示(KB、MB、GB)**:

    du -h
    

    ​-h​ 选项使输出更易于理解,自动选择合适的单位。

  • 显示目录内容的大小:

    du -h /root/work
    

    这将显示指定目录及其子目录和文件的大小。

  • 递归地显示每个子目录的大小:

    du -ah /root/work
    

    ​-a​ 显示目录中每个文件的大小,-h​ 以人类可读的格式显示。

  • 仅显示目录本身的磁盘使用量,不包括其内容:

    du -s -h /root/work
    

    ​-s​ 仅显示总计,不包括子目录和文件。

  • 排除目录:

    du -h --exclude=/root/work /root/work/exam
    

    ​--exclude​ 选项用于指定应从扫描中排除的目录或文件。

  • 包括所有隐藏文件和目录:

    du -a -h /root/work
    

    ​-a​ 包括所有文件和目录,包括隐藏的。

输出解释

​du​ 命令的输出通常包括:

  • 文件或目录名:显示的条目名称。

  • 大小:显示的文件或目录的大小。

挂载分区

sudo mount /dev/sdb1 /mnt/usb:
  • ​sudo​ 以管理员权限执行。

  • ​mount​ 命令用于将一个文件系统挂载到指定的目录。

  • ​/dev/sdb1​ 是要挂载的磁盘分区设备路径。

  • ​/mnt/usb​ 是挂载点,即要将分区挂载到的目录。执行这个命令后,系统可以访问该分区中的文件和目录,就像访问本地文件系统中的其他目录一样。

​mount​ 命令

​mount​ 命令在类 Unix 和 Linux 系统中用于挂载文件系统到目录树中。挂载是一个过程,它使得文件系统能够访问存储设备(如硬盘、USB驱动器、CD-ROM 等)上的文件和目录,就像它们是本地文件系统的一部分一样。

基本用法
  • 挂载一个设备到指定的挂载点:

    mount /dev/sda1 /root/work
    

    mount:这是Linux系统中用来挂载文件系统的命令。

    /dev/sda1:这是要挂载的设备,/dev/sda1 表示第一个SATA硬盘的第一个分区。

    /root/work:这是挂载点,即文件系统将被挂载到的目录。在这个例子中,挂载点是 /root/work,这意味着 /dev/sda1 上的文件系统将被挂载到根用户(root)的 work 目录下。

    执行这个命令后,/dev/sda1 上的文件系统将被挂载到 /root/work 目录,你可以访问该目录来读取或写入 /dev/sda1 上的数据。

常用选项
显示所有已挂载的文件系统:
mount -a
  • ​mount​:这是Linux系统中用来挂载文件系统的命令。

  • ​-a​:这是 mount​ 命令的一个选项,代表“all”,即挂载所有在 /etc/fstab​ 文件中列出的文件系统。

​/etc/fstab​ 文件包含了系统启动时需要自动挂载的文件系统的信息。每行定义了一个文件系统,包括设备名、挂载点、文件系统类型、挂载选项等。当系统启动时,mount -a​ 命令会读取这个文件,并挂载所有列出的文件系统。

这个命令用于显示所有已经挂载的文件系统。

-a 选项告诉mount命令显示所有在/etc/fstab文件中定义的文件系统,包括那些已经挂载和未挂载的。

显示特定设备的信息:
mount /dev/sda1

mount | grep /dev/sda1

这个命令用于显示特定设备/dev/sda1的挂载信息。如果/dev/sda1已经挂载,它将显示挂载点和挂载选项;如果没有挂载,它将显示设备未挂载的信息。

查看 /dev/sda1​ 的详细信息:
lsblk -f /dev/sda1

​lsblk​ 命令可以显示包括 /dev/sda1​ 在内的所有块设备的详细信息,包括文件系统类型、挂载点等。

以只读方式挂载:
mount -o ro /dev/sda1 /root/work
  • ​mount​:这是Linux系统中用来挂载文件系统的命令。

  • ​-o ro​:这是 mount​ 命令的一个选项,-o​ 后面跟的是挂载选项。ro​ 表示“read-only”,即只读模式。这意味着一旦 /dev/sda1​ 被挂载到 /root/work​,你只能读取数据,不能写入或修改数据。

  • ​/dev/sda1​:这是要挂载的设备,/dev/sda1​ 表示第一个SATA硬盘的第一个分区。

  • ​/root/work​:这是挂载点,即文件系统将被挂载到的目录。在这个例子中,挂载点是 /root/work​,这意味着 /dev/sda1​ 上的文件系统将被挂载到根用户(root)的 work​ 目录下。

执行这个命令后,/dev/sda1​ 上的文件系统将被以只读方式挂载到 /root/work​ 目录,你可以访问该目录来读取 /dev/sda1​ 上的数据,但不能写入或修改数据。

这个命令以只读(ro)模式挂载/dev/sda1设备到/root/work目录。

-o ro选项指定挂载选项为只读。

使用特定文件系统类型挂载:
sudo mount -t vfat /dev/sda1 /root/work

sudo mount -t ext4 /dev/sda1 /root/work

​-t​ 选项后面跟文件系统类型(如 ext4​、fat32​、ntfs​ 等)。

  1. ​sudo mount -t vfat /dev/sda1 /root/work​

    • ​sudo​:以超级用户权限执行命令。

    • ​mount​:挂载命令。

    • ​-t vfat​:指定文件系统类型为 vfat​,这是一种常用于FAT32文件系统的文件系统类型,通常用于USB闪存盘、SD卡等。

    • ​/dev/sda1​:要挂载的设备,这里是第一个SATA硬盘的第一个分区。

    • ​/root/work​:挂载点,即文件系统将被挂载到的目录。

    执行这个命令后,如果 /dev/sda1​ 的文件系统类型确实是 vfat​,那么它将被挂载到 /root/work​ 目录,你可以访问该目录来读取或写入 /dev/sda1​ 上的数据。

  2. ​sudo mount -t ext4 /dev/sda1 /root/work​

    • ​sudo​:以超级用户权限执行命令。

    • ​mount​:挂载命令。

    • ​-t ext4​:指定文件系统类型为 ext4​,这是Linux中常用的第四代扩展文件系统。

    • ​/dev/sda1​:要挂载的设备,这里是第一个SATA硬盘的第一个分区。

    • ​/root/work​:挂载点,即文件系统将被挂载到的目录。

    执行这个命令后,如果 /dev/sda1​ 的文件系统类型确实是 ext4​,那么它将被挂载到 /root/work​ 目录。

重新挂载一个已经挂载的文件系统:
sudo mount -o remount /mnt/point
  • ​sudo​:以超级用户权限执行命令,因为重新挂载文件系统通常需要管理员权限。

  • ​mount​:这是用来挂载或重新挂载文件系统的命令。

  • ​-o remount​:这是 mount​ 命令的一个选项,-o​ 后面跟的是挂载选项。remount​ 选项告诉 mount​ 命令重新挂载指定的挂载点,即使它已经被挂载。

  • ​/mnt/point​:这是要重新挂载的文件系统的挂载点。在这个例子中,挂载点是 /mnt/point​。

执行这个命令后,/mnt/point​ 挂载点上的文件系统将被重新挂载。

挂载网络文件系统:
sudo mount -t nfs server:/share /mnt/nfs-share
  • ​sudo​:以超级用户权限执行命令。挂载网络文件系统通常需要管理员权限。

  • ​mount​:这是用来挂载文件系统的命令。

  • ​-t nfs​:指定文件系统类型为 nfs​,即网络文件系统。这是告诉 mount​ 命令你想要挂载的是一个NFS共享。

  • ​server:/share​:这是NFS服务器上的共享路径。server​ 是NFS服务器的主机名或IP地址,/share​ 是服务器上配置为共享的目录路径。

  • ​/mnt/nfs-share​:这是本地系统上的挂载点,即NFS共享将被挂载到的本地目录。在本例中,NFS共享将被挂载到 /mnt/nfs-share​ 目录。

执行这个命令后,NFS服务器上的 /share​ 目录将被挂载到本地的 /mnt/nfs-share​ 目录,你可以像访问本地文件一样访问NFS共享中的文件。

挂载ISO映像文件:
sudo mount -o loop /path/to/iso/file.iso /mnt/iso

sudo:以超级用户权限执行命令。挂载文件系统通常需要管理员权限。

mount:这是用来挂载文件系统的命令。

-o loop:这是 mount 命令的一个选项,-o 后面跟的是挂载选项。loop 选项告诉 mount 命令将后面的ISO文件作为一个循环设备挂载,这意味着ISO文件将被当作一个块设备来处理,你可以像访问普通目录一样访问ISO文件的内容。

/path/to/iso/file.iso:这是ISO映像文件的路径。你需要将其替换为实际ISO文件的路径。

/mnt/iso:这是挂载点,即ISO映像文件将被挂载到的本地目录。在本例中,ISO文件将被挂载到 /mnt/iso 目录。

执行这个命令后,ISO映像文件 /path/to/iso/file.iso 将被挂载到 /mnt/iso 目录,你可以访问 /mnt/iso 目录来读取ISO文件中的内容,就像它是一个普通的文件夹一样。

输出解释

​mount​ 命令的输出通常包括:

  • 挂载点:文件系统被挂载到的本地目录。

  • 源:被挂载的设备或远程文件系统。

  • 类型:文件系统的类型(如 ext4​、nfs​ 等)。

  • 选项:挂载时使用的挂载选项(如 ro​、rw​ 等)。

系统网络

网络工具

ifconfig:

  • 这是一个用于配置和显示网络接口信息的命令行工具。

  • 它可以显示网络接口的IP地址、子网掩码、MAC地址等信息。

  • 还可以用于启动、停止或配置网络接口。

    ifconfig
    

ip addr:

  • 这是另一个用于查看和管理网络接口的命令。

  • 它提供了比 ifconfig​ 更详细和灵活的网络接口信息显示,包括接口的状态、IP地址、子网掩码、广播地址等。

    ip addr
    

ifconfig eth0 up/down

ifconfig eth0 up

ifconfig eth0 down

sudo ifdown/ifup eth0

资源:

ifconfig up/down与ifup/ifdown同时使用产生的冲突以及使用ip link解决问题

sudo ifdown eth0:
  • 这个命令以管理员权限执行。

  • ​ifdown​ 用于关闭指定的网络接口。

  • ​eth0​ 是网络接口名称,这里表示关闭名为 "eth0" 的网络接口。

ifdown eth0

sudo ifup eth0:
  • 同样以管理员权限执行。

  • ​ifup​ 用于启动指定的网络接口。

  • ​eth0​ 表示启动名为 "eth0" 的网络接口

    ifup eth0
    

使用 ifdown​ 和 ifup​ 命令:(没有实现命令)

  1. 关闭 eth0​ 接口:

    sudo ifdown eth0
    
    ifdown eth0
    

    这个命令会关闭 eth0​ 网络接口。

  2. 打开 eth0​ 接口:

    sudo ifup eth0
    ifup eth0
    

    这个命令会重新启动 eth0​ 网络接口。

使用 ip​ 命令:

  1. 关闭 eth0​ 接口:

    sudo ip link set eth0 down
    
    ip link set eth0 down
    

    这个命令会将 eth0​ 接口设置为关闭状态。

  2. 打开 eth0​ 接口:

    sudo ip link set eth0 up
    
    ip link set eth0 up
    

    这个命令会将 eth0​ 接口设置为开启状态。

Linux系统中网络配置

/etc/network/interfaces​ 文件

  • 这是一个系统文件,用于配置网络接口的静态 IP 地址、子网掩码、网关等信息。

  • 在一些 Linux 发行版中,通过编辑这个文件可以实现网络接口的手动配置。

  • 这个文件通常用于那些不需要动态 IP 地址分配(DHCP)的场景,或者当网络配置需要固定不变时。

  • ​/etc/network/interfaces​ 文件的配置示例:

    auto eth0
    iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    

    这段配置表示自动启动 eth0​ 接口,并为其设置静态 IP 地址、子网掩码和网关。

NetworkManager

  • 是一个动态网络控制和配置守护进程。

  • 它可以自动管理网络连接,包括有线网络、无线网络和 VPN 连接等。

  • NetworkManager 提供了图形界面和命令行工具来配置和管理网络,使得网络配置更加方便和灵活。

  • 它可以自动检测网络变化,并根据配置自动连接到可用的网络。

  • 在现代Linux系统中,NetworkManager 是默认的网络管理工具,它简化了网络配置过程,特别是对于需要频繁切换网络环境的用户。

NetworkManager 的命令行工具:
  • ​nmcli​:NetworkManager 的命令行界面,用于查看和修改网络设置。

  • ​nmtui​:NetworkManager 的文本用户界面,提供一个字符界面来管理网络连接。

NetworkManager 的配置文件:
  • ​/etc/NetworkManager/NetworkManager.conf​:NetworkManager 的主配置文件,可以在这里设置 NetworkManager 的行为和策略。

服务管理:

启动 NetworkManager 服务:

sudo systemctl start NetworkManager

停止 NetworkManager 服务:

sudo systemctl stop NetworkManager

重启 NetworkManager 服务:

sudo systemctl restart NetworkManager

网络连接

连接工具

netstat -natup:

netstat -natup
  • ​netstat​ 是一个用于显示网络连接、路由表、接口统计等信息的命令。

  • ​-n​ 选项表示以数字形式显示地址和端口号,避免进行域名解析。

  • ​-a​ 选项显示所有的连接和监听端口。

  • ​-t​ 选项显示 TCP 连接。

  • ​-u​ 选项显示 UDP 连接。

  • ​-w​ 显示与每个连接关联的窗口大小。

    ​-r​ 显示路由表。

  • ​-i​ 显示网络接口统计信息。

  • ​-p​ 选项显示与连接相关的进程 ID 和程序名称。执行这个命令可以查看系统当前的网络连接状态,包括连接的协议、本地地址和端口、远程地址和端口等信息。

ss -natup:

ss -natup
  • ​ss​ 是另一个用于显示网络套接字状态的工具,它比 netstat​ 更快速和高效。

  • 选项的含义与 netstat​ 中的类似,用于显示 TCP 和 UDP 连接的状态、地址和端口信息,以及相关的进程信息。

    • ​-e​ 显示套接字的使用情况(类似于 netstat -e​)。

    • ​-o​ 显示计时器信息。

    • ​-M​ 显示内存使用情况。

二层地址查看工具

​arp​ 命令,这是一个用于查看和管理地址解析协议(ARP)缓存表的工具。ARP 是一种网络层协议,用于将网络层的 IP 地址解析为数据链路层的 MAC 地址。

arp -en
  • ​arp​ 是地址解析协议(Address Resolution Protocol)的工具。

  • ​-e​ 选项以详细格式显示 ARP 缓存表。这包括 IP 地址和对应的 MAC 地址映射关系,用于在局域网中进行二层地址解析。

  • ​-n​ 选项以数字形式显示 IP 地址,避免进行域名解析。这有助于快速查看和避免解析延迟。

补充内容:

  • ARP 缓存表:

    • ARP 缓存表是一个临时存储 IP 地址到 MAC 地址映射的表格。当一个设备需要与另一个设备通信时,它会首先检查 ARP 缓存表,看是否已经有目标设备的 MAC 地址。如果没有,它会发送一个 ARP 请求到网络中,询问哪个设备拥有特定的 IP 地址,然后接收 ARP 响应,将 IP 地址和 MAC 地址的映射存储在 ARP 缓存表中。

  • ARP 命令的其他选项:

    • ​-a​ 显示所有的 ARP 缓存条目。

    • ​-d​ 删除指定的 ARP 缓存条目。

    • ​-s​ 手动添加一个静态 ARP 缓存条目。

  • ARP 欺骗:

    • ARP 协议的一个安全问题是 ARP 欺骗(ARP spoofing),攻击者可以发送虚假的 ARP 响应,使得受害者的设备将流量发送到攻击者的设备。为了防止 ARP 欺骗,可以使用静态 ARP 条目或部署安全措施,如动态 ARP 检查(DAI)。

  • ARP 的用途:

    • 用于网络故障排除,检查网络设备之间的连通性。

    • 用于网络安全监控,检测和防止 ARP 欺骗攻击。

管理路由信息的工具

route:

route
  • ​route​ 是一个用于显示和管理系统路由表的命令。

  • 它可以查看系统当前的路由信息,包括目标网络、网关、子网掩码等。

  • 还可以用于添加、删除或修改路由条目。

ip route:

ip route
  • ​ip route​ 是 ip​ 命令的一部分,用于管理系统的路由表。

  • 它提供了更强大和灵活的路由管理功能,可以进行更复杂的路由配置操作。

补充内容:

  • 路由表:路由表是操作系统用来决定数据包发送路径的表格。它包含了网络目的地、子网掩码、网关、接口等信息,用于指导数据包的转发。

  • 添加路由条目:

    • sudo ip route add 10.13.37.0/24 dev eth1
      
    • 这条命令用于添加一条路由条目。

    • 10.13.37.0/24​ 是目标网络地址和子网掩码,

    • dev eth1​ 表示通过名为 "eth1" 的网络接口到达目标网络。

    • sudo route add -net 10.13.37.0 netmask 255.255.255.0 gw 10.13.37.1
      
    • :这是使用 route​ 命令的等效方式,-gw​ 指定网关地址。

  • 删除路由条目:

    • sudo ip route del 10.13.37.0/24 dev eth1
      

      删除之前添加的路由条目。

    • sudo route del -net 10.13.37.0 netmask 255.255.255.0 gw 10.13.37.1
      
    • 使用 route​ 命令删除路由条目。

  • 查看路由表:

    • ​ip route show​ 或 route -n​:这两个命令都可以用来显示当前的路由表,-n​ 选项以数字形式显示地址,不进行域名解析。

  • 永久路由条目:添加的路由条目在系统重启后会消失。要使路由条目永久生效,需要将它们添加到 /etc/network/interfaces​(对于使用 ifup​ 和 ifdown​ 的系统)或 /etc/sysconfig/network-scripts/​(对于使用 system-config-network​ 的系统)中的配置文件里。

路由路径的工具

traceroute offensive-security.com:

  • ​traceroute​ 是一个网络诊断工具,用于显示数据包到达目标主机所经过的路由节点。

  • ​offensive-security.com​ 是目标主机的域名或 IP 地址。在这个例子中,traceroute​ 命令将跟踪到达 offensive-security.com​ 的路径。

traceroute offensive-security.com

补充内容:

  • 工作原理:traceroute​ 通过发送一系列带有逐渐增加的 TTL(Time to Live)值的 ICMP(Internet Control Message Protocol)回显请求或 UDP 数据包来工作。每经过一个路由节点,TTL 值减一,当 TTL 值减到零时,路由器会丢弃数据包并返回一个 ICMP 时间超时消息。traceroute​ 记录这些消息,从而确定数据包经过的路由节点。

  • 选项:

    • ​-n​:使用数字形式的 IP 地址,不进行域名解析。

    • ​-w​:设置等待每个响应的超时时间。

    • ​-p​:指定发送数据包使用的端口号。

    • ​-I​:使用 ICMP 回显请求代替 UDP 数据包。

  • 用途:

    • 确定网络延迟或丢包的来源。

    • 识别网络中的路由节点。

    • 诊断网络连接问题。

  • 安全性:在某些网络环境中,traceroute​ 可能会被防火墙阻止,因为它使用 ICMP 或 UDP 协议。此外,一些路由器可能配置为不响应 ICMP 时间超时消息,这会使得 traceroute​ 无法显示完整的路由路径。

  • 替代工具:在现代 Linux 系统中,traceroute​ 的功能已经被 tracepath​ 和 mtr​ 等工具所增强或替代。tracepath​ 是 traceroute​ 的一个简化版本,而 mtr​ 结合了 traceroute​ 和 ping​ 的功能,提供了更全面的网络诊断能力。

ssh服务

ssh服务

sudo systemctl start ssh:

  • ​sudo​ 表示以管理员权限执行命令。在Linux系统中,许多系统级的操作都需要管理员权限。

  • ​systemctl​ 是用于管理系统服务的工具。它可以用来启动、停止、重启、禁用或启用服务。

  • ​start​ 是 systemctl​ 命令的一个参数,用于启动服务。

  • ​ssh​ 是服务的名称,这里指的是SSH(Secure Shell)服务,它允许远程用户通过加密的方式安全地访问系统。

补充内容:

  • SSH 服务:SSH 是一种网络协议,用于安全地访问远程计算机。它提供了一种加密的方法来传输数据,保护数据免受窃听和中间人攻击。

  • systemctl 命令的其他用途:

    开启SSH服务:

    sudo systemctl start ssh
    

    停止SSH服务:

    sudo systemctl stop ssh
    

    重启SSH服务:

    sudo systemctl restart ssh
    

    设置SSH服务在系统启动时自动启动:

    sudo systemctl enable ssh
    

    禁止SSH服务在系统启动时自动启动:

    sudo systemctl disable ssh
    

    查看SSH服务的状态:

    sudo systemctl status ssh
    
  • SSH 服务配置:SSH 服务的配置通常在 /etc/ssh/sshd_config​ 文件中进行。这个文件包含了SSH服务的各种配置选项,如端口号、允许的认证方法、日志记录等。

  • 安全性:SSH 是一种非常安全的远程访问方法,因为它使用加密来保护数据传输。然而,为了进一步提高安全性,建议使用密钥认证而不是密码认证,并且定期更新和维护SSH服务。

连接本地主机

ssh root@localhost:

  • ​ssh​ 是 Secure Shell 的客户端命令,用于安全地访问远程计算机。

  • ​root​ 表示要以 root​ 用户身份进行登录。root​ 是Linux系统中的超级用户,拥有最高权限。

  • ​@localhost​ 表示连接到本地主机。localhost​ 是指当前正在使用的计算机。

  • ssh root@localhost:
    

补充内容:

  • SSH 协议:SSH 是一种网络协议,用于安全地访问远程计算机。它使用加密技术来保护数据传输,防止数据被窃听或篡改。

  • SSH 配置:SSH 的配置通常在 /etc/ssh/sshd_config​ 文件中进行。这个文件包含了SSH服务的各种配置选项,如端口号、允许的认证方法、日志记录等。

  • SSH 登录:在默认情况下,SSH 使用密码认证。用户需要输入正确的用户名和密码才能登录。为了提高安全性,建议使用密钥认证,即生成一对公钥和私钥,将公钥放在远程主机上,使用私钥进行登录。

  • SSH 端口:SSH 默认使用端口 22。如果需要,可以在 sshd_config​ 文件中更改这个端口号。

  • SSH 命令的选项:

    • ​-v​:显示详细的调试信息。

    • ​-i​:指定私钥文件的路径。

    • ​-p​:指定远程主机的端口号。

  • SSH 的用途:SSH 不仅用于远程登录,还可以用于安全地传输文件(如使用 scp​ 或 rsync​ 命令),或者作为其他网络服务的安全隧道。

配置文件

这段文字介绍了 SSH 服务器的主要配置文件 /etc/ssh/sshd_config​。

/etc/ssh/sshd_config:

  • 这是 SSH 服务器(sshd)的主要配置文件,用于定义 SSH 服务的行为和特性。

  • 通过编辑这个文件,可以对 SSH 服务器进行定制化配置,以满足特定的安全和功能需求。

  • /etc/ssh/sshd_config
    

补充内容:

  • 配置参数:sshd_config​ 文件包含了多种参数,这些参数控制着 SSH 服务的各个方面,例如:

    • ​Port​:指定 SSH 服务监听的端口号,默认为 22。

    • ​PermitRootLogin​:控制是否允许 root 用户通过 SSH 登录。

    • ​PubkeyAuthentication​:是否启用公钥认证。

    • ​PasswordAuthentication​:是否启用密码认证。

    • ​X11Forwarding​:是否允许 X11 转发。

    • ​AllowUsers​:指定允许通过 SSH 登录的用户列表。

    • ​DenyUsers​:指定禁止通过 SSH 登录的用户列表。

  • 配置文件的修改:在修改 sshd_config​ 文件时,需要使用具有适当权限的用户(通常是 root 用户)进行编辑。修改完成后,需要重启 SSH 服务以使更改生效:

    sudo systemctl restart ssh
    
  • 安全性:合理配置 SSH 服务对于保障系统安全至关重要。例如,禁用密码认证并仅使用公钥认证可以提高安全性。此外,限制允许登录的用户和使用强密码或密钥也是良好的安全实践。

  • 日志记录:sshd_config​ 文件中还可以配置日志记录选项,如 SyslogFacility​ 和 LogLevel​,用于记录 SSH 服务的日志信息,这对于监控和审计很有帮助。

  • 服务状态检查:可以使用以下命令检查 SSH 服务的状态:

    sudo systemctl status ssh
    

客户端

hash knownHosts yes:

  • 这个配置选项用于指示 SSH 客户端对 known_hosts​ 文件中的主机名进行哈希处理。

  • ​known_hosts​ 文件通常位于用户的 ~/.ssh​ 目录下,用于存储已知远程主机的公钥信息。

  • 哈希处理可以提高安全性,因为它防止了潜在的主机名伪造攻击。即使攻击者能够读取 known_hosts​ 文件,他们也无法轻易地将主机名与对应的公钥关联起来。

~/.ssh:

  • 这是用户主目录下的一个隐藏目录,用于存储 SSH 客户端的配置和相关文件。

  • 该目录通常包含以下文件:

    • ​id_rsa​:用户的私钥文件。

    • ​id_rsa.pub​:用户的公钥文件。

    • ​known_hosts​:已知主机文件,存储了远程主机的公钥信息。

补充内容:

  • SSH 密钥认证:SSH 支持基于密钥的认证,这是一种比密码认证更安全的方法。用户生成一对密钥(公钥和私钥),将公钥添加到远程主机的 authorized_keys​ 文件中,然后使用私钥进行登录。

  • SSH 配置文件:SSH 客户端的配置通常存储在 ~/.ssh/config​ 文件中。这个文件允许用户为不同的远程主机定义特定的配置选项,如用户名、端口号、使用的密钥等。

  • SSH 代理:SSH 代理(如 ssh-agent​)是一个程序,用于管理用户的私钥,以便在需要时自动提供密钥进行认证,而不需要用户手动输入密码或密钥。

  • SSH 连接管理:.ssh​ 目录中的文件用于 SSH 客户端的身份认证和连接管理。正确配置这些文件可以简化 SSH 连接过程并提高安全性。

远程拷贝

这段文字展示了如何使用 scp​ 命令进行远程文件拷贝。

scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc

scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc
  • ​scp​ 是 secure copy​ 的缩写,用于在本地和远程计算机之间安全地复制文件。

  • ​root@1.1.1.1​ 表示远程主机的用户名和 IP 地址。在这个例子中,用户名是 root​,IP 地址是 1.1.1.1​。

  • ​/home/kali/.bashrc​ 是远程主机上的文件路径,这是要复制的文件。

  • ​Copiedbashrc​ 是本地计算机上的目标文件路径,这是文件将被复制到的位置。

scp passwd -p kali ssh root@127.0.0.1

scp passwd -p kali ssh root@127.0.0.1
  • 这个命令也使用 scp​ 进行文件传输,但这次是将本地的 passwd​ 文件复制到远程主机。

  • ​-P​ 选项用于指定远程主机的端口号。在这个例子中,端口号是 kali​,这可能是一个错误,因为端口号应该是一个数字。如果 -P​ 后面没有指定端口号,它将使用 SSH 的默认端口 22。

  • ​ssh​ 可能是命令行的一部分,用于指定使用 SSH 进行连接,但在这个上下文中,scp​ 命令本身已经隐含了使用 SSH。

补充内容:

  • 安全性:scp​ 使用 SSH 协议进行文件传输,这意味着所有传输的数据都是加密的,从而保护了数据的安全性。

  • 文件权限:scp​ 会保留文件的权限和所有权,但在复制到新位置时,可能会受到目标系统权限设置的影响。

  • 错误处理:如果 scp​ 命令失败,可能是因为网络问题、权限不足、错误的用户名或密码等原因。检查错误消息并相应地调整命令或系统设置。

  • 使用 scp​ 的其他选项:

    • ​-r​:递归复制整个目录。

    • ​-v​:显示详细的处理过程,用于调试。

    • ​-C​:启用压缩选项,可以加快传输速度。

历史命令

​history​ 命令在 Linux 和类 Unix 系统的 shell 中用于显示用户输入过的命令历史。这个功能对于快速回顾和重复执行之前运行过的命令非常有用。

history

基本用法

  • 仅输入 history​ 命令,将显示一个按编号排序的命令列表,每个命令前面都有一个唯一的数字标识符。

选项

  • ​history [选项]​:history​ 命令支持多种选项来自定义输出。

    • ​-c​:清除当前用户的历史记录。

    • ​-d <offset>​:删除从指定偏移量开始的条目。

    • ​-a​:将当前会话的命令追加到历史文件中。

    • ​-w​:将当前会话的历史记录写入历史文件。

    • ​-r​:从历史文件中读取历史记录,用于初始化当前会话的历史记录。

搜索历史

  • ​history | grep <pattern>​:可以结合使用 grep​ 命令来搜索历史记录中的特定模式或命令。

重放历史命令

​!<number>​:执行历史列表中指定编号的命令。:

!390

​!!​:执行上一个命令。:

!!

​!-<number>​:执行倒数第 <number>​ 个命令。:

!-9

历史文件

  • 历史命令默认保存在用户主目录下的 .bash_history​ 文件中(对于使用 Bash shell 的用户)。这个文件的内容会在每次 shell 会话结束时更新。

  • 可以通过修改 HISTFILE​ 环境变量来改变历史文件的位置。

配置历史记录

  • 可以通过修改 HISTSIZE​ 和 HISTFILESIZE​ 环境变量来控制保存在历史记录中命令的数量和历史文件的大小。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值