目录
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。
文件管理
创建空文件
touch newfile
创建一个名为"newfile"的文件
删除文件
rm newfile
删除一个名为"newfile"的文件
新建目录
mkdir newfile
创建一个名为"newfile"的目录
删除目录
rmdir newfile
删除一个名为"newfile"的目录
重命名文件
mv newfile newfile1
将newfile文件重命名为newfile1
移动文件
mv newfile1 /root
将1.txt文件移动到root目录下面
软链接(Symbolic Link)
软链接类似于Windows中的快捷方式。它是一个特殊的文件,包含了对另一个文件或目录的路径名。你可以将软链接看作是一个指向其他文件或目录的“快捷方式”。软链接的主要特点包括:
-
软链接有自己的inode,它存储的是目标文件或目录的路径信息。
-
软链接可以跨越不同的文件系统。
-
软链接指向的是文件的路径,如果目标文件被移动或删除,软链接就会失效,变成所谓的“悬空链接”。
-
通过软链接访问文件时,实际上是访问目标文件,所以对软链接的修改实际上是对目标文件的修改。
创建软链接的命令通常是:
ln -s [目标文件或目录路径] [软链接文件名]
软链接示例
假设我们有一个文件 /home/user/file.txt,我们想在 /home/user/ 目录下创建一个名为 soft_link.txt 的软链接指向这个文件。
ln -s /home/user/file.txt /home/user/soft_link.txt
执行这个命令后,soft_link.txt 就是一个指向 file.txt 的软链接。你可以通过点击软链接或者使用文本编辑器打开 soft_link.txt 来查看或编辑 file.txt 的内容。
硬链接(Hard Link)
硬链接是文件系统中的多个文件名指向同一个物理文件(即inode)。可以理解为给文件的物理存储位置取了多个名字。硬链接的主要特点包括:
-
硬链接实际上是在目录中创建了一个新的目录项,这个目录项的inode号与被链接文件的inode号相同。
-
硬链接不能跨越不同的文件系统。
-
由于硬链接指向的是同一个物理文件,所以对任何一个硬链接文件进行修改,实际上都是对同一个文件内容进行修改。
-
删除一个硬链接并不会影响原文件,只有当所有的硬链接都被删除后,文件数据才会被系统释放。
创建硬链接的命令通常是:
ln [源文件] [硬链接文件名]
总结来说,软链接类似于一个包含目标路径的指针,而硬链接则是文件inode的另一个名称。软链接提供了跨文件系统的灵活性,而硬链接主要用于在同一文件系统中为文件创建额外的访问路径。
硬链接示例
继续使用上面的文件 /home/user/file.txt,我们想在同一个目录下创建一个名为 hard_link.txt 的硬链接指向这个文件。
ln /home/user/file.txt /home/user/hard_link.txt
执行这个命令后,hard_link.txt 就是一个指向 file.txt 的硬链接。这意味着 hard_link.txt 和 file.txt 实际上指向的是同一个inode,对任何一个文件的修改都会反映在另一个文件上。由于硬链接不能跨文件系统,所以 hard_link.txt 和 file.txt 必须位于同一个文件系统中。
搜索文件
1.find命令
find 命令是 Linux 中一个非常强大的工具,用于在文件系统中搜索文件和目录。它可以根据文件名、文件类型、大小、权限、所有者、修改时间等多种属性来查找文件。以下是 find 命令的一些详细解释和常用选项:
基本语法
find [搜索路径] [搜索条件] [操作]
-
搜索路径:指定开始搜索的目录。如果不指定,默认从当前目录开始搜索。
-
搜索条件:定义搜索文件的规则。
-
操作:对符合条件的文件执行的操作。
find ~ -mtime 2 -ls | sort -k9 -k10 | more
-
find ~ -mtime 2 -ls:
-
find:这是用来搜索文件的命令。
-
~:表示当前用户的主目录。例如,对于用户 user,~ 通常指向 /home/user。
-
-mtime 2:这个选项用于根据文件的修改时间来查找文件。-mtime 2 表示查找修改时间距离现在正好是两天的文件。
-
-ls:这是 find 命令的一个动作选项。它会以类似 ls -l 命令的长格式显示找到的文件的详细信息,包括文件类型、权限、硬链接数、所有者、组、大小、修改时间和文件名等内容。
-
-
| sort -k9 -k10:
-
|:这是管道符,它将前一个命令的输出作为后一个命令的输入。
-
sort:这是一个用于对文本行进行排序的命令。
-
-k9 -k10:-k 选项用于指定排序的关键字。-k9 表示以每行的第9个字段作为第一个关键字进行排序,-k10 表示以每行的第10个字段作为第二个关键字进行排序。在 find -ls 输出的长格式信息中,第9个字段是文件大小,第10个字段是修改时间。所以这个命令实际上是先按照文件大小排序,文件大小相同的情况下,再按照修改时间排序。
-
-
| more:
-
|:同样是管道符。
-
more:这是一个用于分页显示文本内容的命令。当 find 命令找到的文件信息较多时,more 命令可以让用户逐页查看这些信息,按回车键可以逐行查看,按空格键可以翻页。
-
综上所述,整个命令的作用是:在当前用户的主目录及其子目录中查找所有修改时间为两天前的文件,并以 ls -l 格式列出这些文件的详细信息,然后按照文件大小排序(相同大小的文件再按修改时间排序),最后通过 more 命令分页显示这些排序后的结果,以便用户可以逐页查看。这样的命令组合在需要对大量文件进行排序和查看时非常有用,尤其是当输出结果很多,不适合一次性全部显示在屏幕上时。
find . -type f -iname '*.sh' -mmin -30 -ls
-
find .:
-
find:这是用来搜索文件的命令。
-
.:表示当前目录,是查找操作开始的路径起点。也就是说,查找范围是当前目录以及它下面的所有子目录。
-
-
-type f:
-
-type:find 命令的一个选项,用于指定要查找的文件类型。
-
f:表示普通文件,即排除了目录、设备文件、符号链接等其他类型的文件,只查找普通的文本文件、二进制文件等这类常规意义上的文件。
-
-
-iname '*.sh':
-
-iname:find 命令的选项,类似于 -name,但在匹配文件名时不区分大小写。
-
.sh:这是一个通配符模式, 表示任意字符序列,所以 -iname '*.sh' 的作用是匹配文件名以 .sh 结尾的文件,无论文件名中的字母是大写还是小写。例如,它可以匹配 test.sh、TEST.SH、aBc.sh 等文件。
-
-
-mmin -30:
-
-mmin:find 命令用于根据文件的修改时间来查找文件的选项。
-
-30:表示查找在过去 30 分钟内被修改过的文件。如果是 -mmin +30,则表示查找修改时间超过 30 分钟的文件;如果是 -mmin 30,则表示查找修改时间刚好是 30 分钟之前的文件。
-
-
-ls:
-
-ls:这是 find 命令的一个动作选项。它会以类似 ls -l 命令的长格式显示找到的文件的详细信息,包括文件类型、权限、硬链接数、所有者、组、大小、修改时间和文件名等内容。
-
综上所述,整个命令的作用是:在当前目录及其子目录中查找所有在过去 30 分钟内被修改过的、文件名以 .sh 结尾的普通文件,并且不区分大小写,然后以 ls -l 格式列出这些文件的详细信息。这样的命令组合在需要对特定类型的文件进行快速查找和查看其详细信息时非常有用,尤其是在进行脚本编写或系统管理时。
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
-
find /:
-
find:这是用来搜索文件的命令。
-
/:表示根目录,是整个查找操作的起始路径,意味着要在整个文件系统(从根目录开始,包含其下所有子目录)中进行查找。
-
-
-user root:
-
-user:find 命令的一个选项,用于指定文件的所有者。
-
root:这里表示只查找属于 root 用户的文件。
-
-
-type f:
-
-type:find 命令的一个选项,用于指定要查找的文件类型。
-
f:表示普通文件,即排除了目录、设备文件、符号链接等其他类型的文件,只查找普通的文本文件、二进制文件等这类常规意义上的文件。
-
-
-perm -o=w:
-
-perm:find 命令用于根据文件权限来查找文件的选项。
-
-o=w:表示查找具有其他用户(除了文件所有者和所属组用户之外的用户)可写权限的文件。这里的 -o 表示 “其他用户”(英文为 “others”),=w 表示可写权限。
-
-
-name '*.sh':
-
-name:find 命令用于指定文件名模式的选项。
-
*.sh:这是一个通配符模式,其中 * 表示任意字符序列,所以 -name '*.sh' 的作用是匹配文件名以 .sh 结尾的文件。例如,它可以匹配 test.sh、script.sh 等文件。
-
-
2>/dev/null:
-
2>:这是输出重定向操作符,用于重定向错误输出(文件描述符2)。
-
/dev/null:这是一个特殊的设备文件,它会丢弃写入其中的任何数据。所以 2>/dev/null 的作用是将命令执行过程中可能产生的所有错误输出都重定向到 /dev/null,使得在终端上看不到这些错误信息,只显示正常的查找结果(如果有的话)。
-
综上所述,整个命令的作用是:在整个文件系统中查找所有属于 root 用户的、文件名以 .sh 结尾的、其他用户具有可写权限的普通文件,并且忽略所有错误信息。这样的命令组合在安全审计或系统维护时可能有用,尤其是在寻找可能具有安全隐患的脚本文件时。
2.locate命令
locate 命令在 Linux 中用于快速定位文件。它通过查询一个预先建立的数据库来查找文件,这个数据库包含了文件系统中所有文件的路径信息。以下是 locate 命令的一些关键点:
优点
-
速度快:由于 locate 命令是基于数据库查询的,所以查找速度通常比 find 命令快得多,尤其是对于大型文件系统。
-
简单易用:使用 locate 命令进行文件搜索非常简单,只需要提供文件名或部分文件名即可。
缺点
-
实时性差:locate 命令依赖于数据库,而这个数据库并不是实时更新的。如果文件系统发生了变化(如新建、删除或移动文件),而这些变化还没有被更新到数据库中,那么 locate 命令可能无法找到这些文件。
-
依赖数据库:数据库需要定期更新,通常是通过 updatedb 命令来完成。如果数据库长时间未更新,那么 locate 命令的搜索结果可能会不准确。
基本语法
locate [选项] [搜索关键词]
常用选项
-
-r:使用正则表达式进行搜索。
-
-e:只有当数据库中存在该文件时才搜索。
-
-i:忽略大小写。
-
-l:显示数据库中文件的列表。
-
-o:显示数据库中文件的列表,但不包括隐藏文件。
-
-n:限制搜索结果的数量。
-
-A:显示文件名前 N 个目录。
-
-D:显示数据库的路径。
示例
-
搜索名为config的文件:
locate config
-
使用正则表达式搜索所有.txt文件:
locate -r '\.txt$'
-
忽略大小写搜索MyFile:
locate -i MyFile
注意事项
-
如果你刚刚创建或移动了一个文件,并且希望 locate 命令能够找到它,你需要更新数据库。这可以通过运行 sudo updatedb 命令来完成。
-
locate 命令通常在用户的 $PATH 环境变量中不可用,因为它可能包含敏感文件的路径。如果你需要在任何地方使用 locate,你可能需要将其添加到 $PATH 中,或者直接使用全路径调用它。
总的来说,locate 命令是一个非常方便的工具,特别是当你需要快速查找文件系统中的文件时。但是,由于它依赖于数据库,所以在使用时需要注意数据库的更新情况。
3.which命令
which 命令在 Linux 中用于查找特定命令的可执行文件的位置。它在环境变量 PATH 所指定的目录路径中搜索指定的可执行文件,并返回第一个找到的可执行文件的完整路径。以下是 which 命令的一些关键点:
功能
-
查找可执行文件:which 命令主要用于查找用户输入的命令对应的可执行文件路径。
-
环境变量 PATH:which 命令只在 PATH 环境变量中列出的目录里搜索。
-
快速定位:它可以快速告诉你一个命令在哪个目录下,这对于理解命令的来源和行为非常有用。
基本语法
which [选项] [命令]
常用选项
-
无选项:默认情况下,which 命令会返回第一个找到的可执行文件的路径。
示例
-
查找ls命令的位置:
which ls
-
查找python命令的位置:
which python
输出解释
-
如果找到了可执行文件,which 命令会输出该文件的完整路径。
-
如果没有找到,which 命令不会输出任何内容,并且返回一个非零退出状态。
注意事项
-
which 命令只能查找 PATH 环境变量中的目录,如果一个命令不在 PATH 中,即使它存在,which 命令也找不到它。
-
which 命令不会查找当前目录(.),除非你将当前目录显式地添加到 PATH 环境变量中。
-
which 命令区分大小写,因为它依赖于文件系统的大小写敏感性。
-
which 命令不适用于查找脚本语言编写的命令,如 shell 脚本或 Python 脚本,除非这些脚本有对应的可执行权限并且位于 PATH 中。
4.whereis命令
whereis 命令在 Linux 中用于查找特定文件的位置,包括可执行文件、源代码文件和手册页(man pages)。它会在预定义的路径集合中搜索这些文件,这些路径通常是系统上存放这些类型文件的标准目录。以下是 whereis 命令的一些关键点:
功能
-
查找文件位置:whereis 命令用于查找二进制文件、源代码文件和手册页的位置。
-
预定义路径:它会在如 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin 等目录中搜索。
基本语法
whereis [选项] [文件名]
常用选项
-
-b:只查找二进制文件。
-
-s:只查找源代码文件。
-
-m:只查找手册页。
-
-u:显示不匹配的文件(即在预定义路径中不存在的文件)。
示例
-
查找gcc的二进制文件、源代码文件和手册页:
whereis gcc
-
只查找ls的二进制文件:
whereis -b ls
输出解释
-
如果找到了文件,whereis 命令会输出每个文件的路径,分别对应二进制文件、源代码文件和手册页。
-
如果没有找到某个类型的文件,相应的部分会显示为“none”。
注意事项
-
whereis 命令依赖于预定义的路径,这些路径可以在 /etc/whereis.conf 或类似的配置文件中定义。
-
whereis 命令不会搜索 PATH 环境变量中未列出的目录,这意味着如果一个文件不在预定义路径中,即使它是可访问的,whereis 命令也找不到它。
-
whereis 命令不会检查文件的可执行权限,它只是简单地查找文件名。
-
whereis 命令对于查找手册页很有用,因为手册页通常存放在特定的目录中,而这些目录可能不在 PATH 环境变量中。
5.updatedb
-
功能:updatedb 命令会扫描整个文件系统,并将文件信息添加到 locate 命令使用的数据库中。这个数据库通常位于 /var/lib/mlocate/mlocate.db(在某些系统中可能是 /etc/slocate.db)。
-
用途:当你在系统中添加、删除或修改文件后,为了确保 locate 命令能够反映这些变化,你需要运行 updatedb 来更新数据库。
-
权限:通常只有 root 用户才有权限运行 updatedb,因为它需要访问系统中的所有文件和目录。
-
配置文件:updatedb 命令会读取 /etc/updatedb.conf 配置文件,该文件定义了哪些文件和目录应该被包含或排除在数据库之外。
-
安全性:由于 updatedb 会读取系统中的所有文件,出于安全考虑,/etc/shadow(存储用户密码的文件)默认被排除在扫描之外。
-
使用示例:
updatedb # 更新 locate 数据库 updatedb -u # 只更新 /usr 目录下的数据库
-
效率:定期运行 updatedb 可以确保 locate 命令的数据库是最新的,从而提高文件搜索的效率。
-
自动化:在许多 Linux 发行版中,updatedb 命令被配置为在 cron 任务中定期运行,以自动更新数据库。
用户账号信息位置
/etc/passwd (存储用户信息)
文件格式
/etc/passwd 文件中的每条记录都包含了一个用户账户的信息,并且每条记录由一系列的字段组成,这些字段之间用冒号(:)分隔。一个典型的条目可能看起来像这样:
username:x:UID:GID:User Name:Home Directory:Shell
-
username:用户的登录名。
-
x:这是一个占位符,通常用于系统中的密码验证,但实际上密码并不存储在这里。在现代系统中,密码通常存储在 /etc/shadow 文件中以提高安全性。
-
UID(User Identifier):用户的用户ID,是一个数字,唯一标识系统中的一个用户。
-
GID(Group Identifier):用户的主要组ID,通常与用户名相同的组的GID相同。
-
User Name:用户的全名或描述性名称。
-
Home Directory:用户的主目录路径。
-
Shell:用户的默认 shell,即用户登录时使用的命令行解释器。如果用户的账户被禁用,这里可能会被设置为 /sbin/nologin 或 /bin/false。
权限和安全
-
/etc/passwd 文件的权限通常是 -rw-r--r--(或数字表示法644),这意味着只有 root 用户可以修改这个文件,而所有用户都可以读取它。
-
由于 /etc/passwd 包含了所有用户的基本信息,它是一个敏感文件。因此,它的权限被限制得非常严格,以防止未授权的修改。
/etc/shadow (存贮用户与哈希密码)
作用
/etc/shadow 文件的主要作用是保护用户密码不被轻易访问。在早期的 Unix 系统中,密码是明文存储在 /etc/passwd 文件中的,这导致了严重的安全隐患。为了解决这个问题,Linux 系统引入了 /etc/shadow 文件,将用户的密码信息从 /etc/passwd 文件中分离出来,并进行了加密处理。
文件结构
/etc/shadow 文件的每一行包含 9 个字段,以冒号(:)分隔。这些字段分别是:
-
用户名:与 /etc/passwd 文件中的用户名相对应,标识系统中的一个用户。
-
加密密码:存储用户密码的加密形式。Linux 系统通常使用 SHA512 散列加密算法对密码进行加密,以提高安全性。密码字段的开头标记表示使用的哈希算法,例如:
-
$1$:MD5-based 加密(DES-based 加密是过时的)。
-
$2$:Blowfish 加密。
-
$5$:SHA-256 加密。
-
$6$:SHA-512 加密。
如果密码字段为 * 或者 !!,则表示密码被锁定或者禁用,该用户无法通过密码登录。
-
-
最后一次修改密码的时间:记录用户最后一次修改密码的日期,通常表示为自 1970 年 1 月 1 日以来的天数。
-
最小修改时间间隔:指定密码在被要求更改之前可以使用的最小天数。
-
密码有效期:指定密码在被要求更改之前可以使用的最大天数。
-
密码需要变更前的警告天数:在密码到期前的多少天开始警告用户。
-
密码过期后的宽限天数:密码过期后,用户还可以登录的天数。
-
账号失效日期:账号在多少天后失效,以从 1970 年 1 月 1 日开始的天数表示。如果此字段为空,则表示账号永不过期。
-
保留字段:未使用,通常为空。
安全性
/etc/shadow 文件的安全性是其最重要的特性之一。只有 root 用户拥有读取 /etc/shadow 文件的权限,其他用户无法直接查看或修改该文件。这确保了即使系统被攻击,攻击者也无法轻易获取用户的密码信息。
操作
由于 /etc/shadow 文件的重要性,对其操作需要格外谨慎。一般情况下,只有 root 用户才有权限修改该文件。系统管理员可以使用 passwd、useradd、usermod 等命令来管理用户密码,这些命令会安全地更新 /etc/shadow 文件。
注意事项
-
如果 /etc/shadow 文件的权限发生了改变,则需要注意是否是恶意攻击。
-
忘记密码的情况下,普通账户的密码遗失可以通过 root 账户解决,而 root 账号的密码遗失则需要通过单用户模式或挂载根目录来解决。
组管理文件
cat /etc/group
-
文件作用:
-
/etc/group 文件包含了系统中定义的所有用户组的信息,这些信息用于权限管理和访问控制。
-
-
文件内容格式:
-
/etc/group
文件的每一行代表一个组账户,字段之间用冒号(:)分隔。通常包含四个字段:
-
组名:系统上唯一的组标识符。
-
密码占位符:通常为空或者x,表示组密码不存储在此文件中,而是存储在 /etc/gshadow 或 /etc/shadow 文件中。
-
组ID(GID):一个唯一的十进制整数,用于标识用户组。
-
成员列表:属于该组的用户名列表,用户名之间用逗号分隔。
-
-
-
文件访问权限:
-
通常,/etc/group 文件对所有用户都是可读的,但只有 root 用户才有写权限。这确保了系统进程可以读取组信息,同时防止未授权的用户修改组数据。
-
-
管理工具:
-
管理员可以使用以下命令来管理用户组信息:
-
groupadd:添加新的用户组。
-
groupmod:修改现有用户组的信息,如组名或 GID。
-
groupdel:删除现有的用户组。
-
-
-
与用户权限的关系:
-
在 Linux 中,每个用户都可以属于一个或多个组。/etc/group 文件中的信息与 /etc/passwd 文件中的用户信息相结合,用于确定用户对文件和目录的访问权限。
-
-
示例内容:
root:x:0:root bin:x:1:root,bin,daemon sys:x:3:root,sys
-
上面的示例中,root 是组名,x 表示密码占位符,0 是 GID,最后的 root 是该组的成员。
-
-
重要性:
-
/etc/group 文件对于系统安全和多用户环境下的权限管理至关重要。正确的配置和管理这个文件可以确保系统资源的合理分配和保护。
-
禁用账号
sudo passwd -l username
-
sudo:
-
sudo 是一个命令行实用程序,允许授权的用户以另一个用户的安全权限执行命令,默认情况下是以超级用户(root)的权限执行。
-
使用 sudo 时,系统会提示输入当前用户的密码,而不是请求超级用户(root)的密码。
-
-
passwd:
-
passwd 是一个用于管理用户账户密码的命令。
-
-
-l:
-
-l 是 passwd 命令的一个选项,用于锁定用户的账户(lock)。
-
当一个账户被锁定后,该用户将无法通过密码登录系统。
-
-
username:
-
这是要锁定账户的用户名。
-
替换 username 为实际要锁定的账户名。
-
综上所述,执行 sudo passwd -l username 命令后,指定的 username 用户账户将被锁定,该用户将无法使用密码登录系统。这通常用于账户安全管理,比如当一个账户被发现有安全风险时,管理员可能会暂时锁定该账户以防止未授权访问。
请注意,锁定账户并不影响已经通过 SSH 或其他远程方式登录的用户。此外,如果系统中有其他服务或程序依赖于该账户的正常运作,锁定账户可能会产生意外的后果。因此,在执行锁定操作之前,应该确保了解所有潜在的影响。
change -E 1990-01-01 kali
-
chage:
-
chage 是一个用于更改用户账户过期信息的命令。
-
-
-E:
-
-E 是 chage 命令的一个选项,用于设置账户的过期日期(Expiration date)。
-
-
1990-01-01:
-
这是设置的过期日期,格式为 YYYY-MM-DD。
-
在这个例子中,1990-01-01 表示账户将在 1990 年 1 月 1 日过期。
-
-
kali:
-
这是要修改账户过期时间的用户名。
-
在这个命令中,kali 是用户名,即你想要设置账户过期日期的用户。
-
综上所述,执行 chage -E 1990-01-01 kali 命令后,kali 用户的账户将被设置为在 1990 年 1 月 1 日过期。一旦到达这个日期,kali 用户的账户将自动被禁用,无法再登录系统。请注意,这个命令通常由系统管理员使用,以管理用户账户的生命周期。
passwd -S username
-
passwd:
-
passwd 是一个用于管理用户账户密码相关操作的命令。
-
-
-S:
-
-S 是 passwd 命令的一个选项,代表 “status”(状态)。
-
这个选项用于显示指定用户账户的密码状态信息。
-
-
username:
-
这是要查看其密码状态的用户名。
-
替换 username 为实际要检查的账户名。
-
综上所述,执行 passwd -S username 命令后,系统会显示指定用户账户的密码状态,包括密码是否过期、密码是否锁定、密码到期前的警告天数、密码过期后的宽限天数等信息。
输出的信息可能包括以下几个部分:
-
Password:密码的当前状态,例如 expires、locked 或 none。
-
passwd:密码上次更改的日期。
-
age:密码的最小年龄(自上次更改以来的天数)。
-
minimum:密码的最小年龄限制。
-
maximum:密码的最大年龄限制。
-
warning:密码到期前用户将收到警告的天数。
-
inactive:密码过期后账户将被禁用前的天数。
-
expire:账户的过期日期。
例如,输出可能如下所示:
Password expires : May 18, 2024 Password inactive : never Account expires : never Minimum password age : 0 days Maximum password age : 99999 days Password last changed: May 11, 2024 Password must be changed: no
文件系统权限
Linux系统中一切皆文件
查看权限
ls -la /etc/passwd
-
ls:
-
ls 是一个常用的命令行工具,用于列出目录内容。
-
-
-la:
-
-l:这个选项告诉 ls 命令以长格式(long format)列出文件和目录的信息。长格式会显示文件的权限、所有者、所属组、大小、最后修改时间以及文件名。
-
-a:这个选项告诉 ls 命令显示所有文件,包括以点(.)开头的隐藏文件。
-
-
/etc/passwd:
-
这是指定给 ls 命令的目录或文件路径。在这里,/etc/passwd 是一个文件,它是系统上所有用户账户信息的存储文件。
-
综上所述,执行 ls -la /etc/passwd 命令后,系统会显示 /etc/passwd 文件的详细信息,包括文件权限、所有者、所属组、文件大小、最后修改时间和文件名本身。由于 /etc/passwd 是一个文件而不是目录,所以 -a 选项在这个特定情况下不会有任何效果,因为 /etc/passwd 文件本身不是一个目录,不会包含隐藏文件。
更改文件所有者
chown root file
-
chown:
-
chown 是一个用于更改文件或目录的用户所有者(user owner)和/或组所有者(group owner)的命令。
-
-
root:
-
这里指定了新的所有者是 root 用户。root 是 Linux 系统中的超级用户账户,拥有系统中所有的权限。
-
-
file:
-
这是要更改所有者的文件名。在这个命令中,file 是一个占位符,应该被替换为实际的文件或目录名称。
-
综上所述,执行 chown root file 命令后,指定的 file 文件的所有者将被更改为 root 用户。这个命令通常由系统管理员使用,用于调整文件或目录的所有权,以确保系统安全性或满足特定的权限需求。
注意事项
-
只有具有适当权限的用户(通常是 root 用户)才能更改文件的所有者。
-
更改系统文件的所有者可能会影响系统的稳定性和安全性,因此应该谨慎操作,并确保了解更改所有权的后果。
-
在执行 chown 命令时,如果目标是目录,你可能还需要递归地更改目录内所有文件和子目录的所有权,这可以通过添加 -R(递归)选项来实现,如 chown -R root directory。
-
在某些情况下,仅仅更改文件的所有者可能不足以满足权限需求,可能还需要更改文件的权限,这可以通过 chmod 命令来实现。
修改文件权限
两种表达与操作
sudo chmod u=rwx,g+rw,o-r file
-
sudo:
-
sudo 是一个命令行实用程序,允许授权的用户以另一个用户的安全权限执行命令,默认情况下是以超级用户(root)的权限执行。
-
使用 sudo 时,系统会提示输入当前用户的密码,而不是请求超级用户(root)的密码。
-
-
chmod:
-
chmod 是一个用于更改文件或目录权限的命令。
-
-
u=rwx,g+rw,o-r:
-
这部分指定了具体的权限更改操作,它由三部分组成,分别对应用户(user)、组(group)和其他(others)的权限设置。
-
u=rwx:u 代表文件的所有者(user)。= 表示设置确切的权限,rwx 代表读(read)、写(write)和执行(execute)权限。这意味着所有者的权限被设置为读、写和执行。
-
g+rw:g 代表文件所属的组(group)。+ 表示添加权限,rw 代表读和写权限。这意味着组的权限增加了读和写权限。
-
o-r:o 代表其他用户(others)。- 表示移除权限,r 代表读权限。这意味着其他用户的读权限被移除。
-
-
file:
-
这是要更改权限的文件名。在这个命令中,file 是一个占位符,应该被替换为实际的文件或目录名称。
-
综上所述,执行 sudo chmod u=rwx,g+rw,o-r file 命令后,指定的 file 文件的权限将被更改为:
-
所有者(user):读、写、执行(rwx)
-
所属组(group):原有的权限加上读和写(rw)
-
其他用户(others):原有的权限减去读(r)
注意事项
-
使用 sudo 是为了确保命令以超级用户权限执行,因为更改文件权限可能需要更高的权限。
-
更改文件权限会影响文件的安全性和访问控制,因此应该谨慎操作,并确保了解更改权限的后果。
-
如果 file 是一个目录,并且你希望递归地更改目录内所有文件和子目录的权限,可以添加 -R(递归)选项,如 sudo chmod -R u=rwx,g+rw,o-r directory。
-
chmod 命令也可以使用数字模式来设置权限,例如 755 表示所有者有读、写和执行权限,组和其他用户有读和执行权限。
chmod 400 file
-
chmod:
-
chmod 是一个用于更改文件或目录权限的命令。
-
-
400:
-
这个数字代表权限的设置。在
chmod
的数字模式中,每一位数字对应不同的权限级别:
-
第一位数字代表特殊权限(通常是系统管理员设置,普通用户不常用)。
-
第二位数字代表文件所有者的权限。
-
第三位数字代表文件所属组的权限。
-
第四位数字代表其他用户的权限。
-
-
在这个例子中,
400
表示:
-
所有者(user)有读(4)权限。
-
组(group)没有任何权限(0)。
-
其他用户(others)没有任何权限(0)。
-
-
-
file:
-
这是要更改权限的文件名。在这个命令中,file 是一个占位符,应该被替换为实际的文件名。
-
综上所述,执行 chmod 400 file 命令后,指定的 file 文件的权限将被设置为:
-
所有者(user):读权限。
-
所属组(group):无权限。
-
其他用户(others):无权限。
注意事项
-
权限的数字表示法是基于二进制的,其中读(r)= 4,写(w)= 2,执行(x)= 1。因此,400 表示所有者有读权限(4),而组和其他用户没有任何权限(0)。
-
使用 chmod 命令更改文件权限会影响文件的安全性和访问控制,因此应该谨慎操作,并确保了解更改权限的后果。
-
如果 file 是一个目录,并且你希望递归地更改目录内所有文件和子目录的权限,可以添加 -R(递归)选项,如 chmod -R 400 directory。
-
确保在执行 chmod 命令时具有足够的权限,如果没有,可能需要使用 sudo 来获取超级用户权限。
系统日志
查看日志文件目录
ls -l /var/log
-
ls:
-
ls 是一个常用的命令行工具,用于列出目录内容。
-
-
-l:
-
-l 是 ls 命令的一个选项,它告诉 ls 以长格式(long format)列出文件和目录的信息。长格式会显示文件的权限、所有者、所属组、大小、最后修改时间以及文件名。
-
-
/var/log:
-
这是指定给 ls 命令的目录路径。/var/log 是 Linux 系统中存储日志文件的目录,它包含了系统、应用程序和服务的日志信息。
-
综上所述,执行 ls -l /var/log 命令后,系统会显示 /var/log 目录下所有文件和子目录的详细信息,包括:
-
文件权限:显示文件的权限,例如 -rw-r--r--。
-
链接数:显示文件的硬链接数。
-
所有者:显示文件的所有者用户名。
-
所属组:显示文件所属的用户组。
-
文件大小:显示文件的大小,单位通常是字节。
-
最后修改时间:显示文件最后被修改的日期和时间。
-
文件名:显示文件或目录的名称。
查看系统认证日志的最后三条
tail -3 /var/log/auth.log
-
tail:
-
tail 是一个常用的命令行工具,用于显示文件末尾的内容。
-
-
-3:
-
这个选项指定 tail 命令显示文件末尾的3行内容。数字 3 可以替换为其他数字,以显示不同数量的行。
-
-
/var/log/auth.log:
-
这是指定给 tail 命令的文件路径。/var/log/auth.log 是许多基于 Debian 和 Ubuntu 的系统中存储认证信息日志的文件,记录了用户登录、注销以及认证相关的事件。
-
综上所述,执行 tail -3 /var/log/auth.log 命令后,系统会显示 /var/log/auth.log 文件末尾的最后3行内容。这个命令通常用于快速查看最近的认证日志条目,以了解最近的用户活动或认证事件。
二进制日志
who /var/log/wtmp | tail -5
-
who:
-
who 是一个命令行工具,用于显示当前登录系统的用户信息。
-
-
/var/log/wtmp:
-
这是 who 命令的参数,指定了一个特殊的日志文件。/var/log/wtmp 是一个记录系统登录和注销信息的二进制文件,它包含了系统启动以来所有用户登录和注销的历史记录。
-
-
|:
-
管道符,它将前一个命令的输出作为后一个命令的输入。
-
-
tail -5:
-
tail 是一个命令行工具,用于显示文件末尾的内容。
-
-5 选项指定 tail 命令显示文件末尾的5行内容。
-
综上所述,执行 who /var/log/wtmp | tail -5 命令后,系统会先使用 who 命令解析 /var/log/wtmp 文件中的登录记录,然后通过管道将这些记录传递给 tail 命令,最终显示最近5条登录记录。
dmesg
dmesg 命令在 Linux 系统中用于显示内核环缓冲区(ring buffer)中的消息,这些消息通常包括系统启动时的内核和驱动程序输出信息。
功能
-
显示内核消息:dmesg 命令可以显示内核环缓冲区中的消息,这些消息包括系统启动时的硬件检测、设备初始化、驱动加载等信息。
-
问题诊断:它可以用来诊断系统启动问题、硬件故障或驱动程序错误。
-
系统调试:系统管理员可以使用 dmesg 来调试系统,特别是在系统启动或运行时遇到问题时。
常用选项
-
没有选项:直接运行 dmesg 会显示环缓冲区中的所有消息。
-
-T:以人类可读的格式显示时间戳。
-
-c:清空环缓冲区的内容。
-
-f:显示自从上次 dmesg 命令执行以来新产生的信息。
-
-H:使输出自动通过 less 命令分页显示。
-
-L:强制彩色输出。
-
-n:显示指定的消息等级(例如,-1 显示所有消息)。
-
-u:显示指定单元(例如,特定服务或设备)的消息。
示例用法
-
dmesg:显示所有内核消息。
-
dmesg | grep usb:显示所有包含 "usb" 的内核消息。
-
dmesg -T:以人类可读的格式显示内核消息及其时间戳。
-
dmesg -c:清空内核消息并显示当前环缓冲区的内容。
-
dmesg -H:以人类可读的格式显示内核消息,并自动分页。
注意事项
-
由于 dmesg 显示的是内核级别的信息,因此通常需要 root 权限才能执行。用户可能需要使用 sudo 来获取必要的权限。
-
环缓冲区的内容可能会非常庞大,因此使用 less 或 more 命令来分页查看输出是一个好方法。
-
某些系统配置可能允许非 root 用户访问 dmesg,但这可能会带来安全风险,因为它会显示系统的所有硬件和驱动程序信息。
systemd日志相关命令
journalctl
功能
-
查看日志:journalctl 可以查看 systemd 系统日志,这些日志包括了系统启动日志、服务日志以及内核日志。
-
过滤日志:可以根据时间、服务、优先级等多种条件过滤日志。
-
实时监控:可以使用 -f 或 --follow 选项实时监控日志的更新,类似于 tail -f 的功能。
常用选项
-
-b:查看系统本次启动的日志。
-
-b -1:查看上一次系统启动的日志。
-
--since:根据指定的时间点过滤日志。
-
--until:指定一个时间点,显示直到该时间点的日志。
-
-p:根据优先级过滤日志,例如 -p err 显示错误日志。
-
-u:根据服务单元过滤日志,例如 -u sshd 显示 sshd 服务的日志。
-
-o 或 --output:指定输出格式,如 json、short、verbose 等。
-
-f 或 --follow:实时跟踪日志更新。
-
-n 或 --lines:显示指定行数的日志。
-
--disk-usage:显示所有日志文件的当前磁盘使用率。
-
--list-boots:列出所有已知的系统启动记录。
-
--no-pager:不使用分页器,直接输出所有内容。
示例用法
-
journalctl:显示所有日志。
-
journalctl -b:显示本次启动的日志。
-
journalctl -b -1:显示上一次启动的日志。
-
journalctl -p err:显示错误日志。
-
journalctl -u nginx:显示 nginx 服务的日志。
-
journalctl -f:实时跟踪日志更新。
-
journalctl --since "2024-01-01":显示从 2024 年 1 月 1 日开始的日志。
-
journalctl -o json:以 JSON 格式显示日志。
注意事项
-
journalctl 的日志存储在 /run/log/journal(临时,重启后丢失)或 /var/log/journal(持久化)。
-
需要有足够的磁盘空间来存储日志文件。
-
某些选项可能需要 root 权限才能执行,例如查看所有用户的日志或更改日志配置。
存储管理
内存使用量
free -m
1.free:
-
这是一个 Linux 命令,用于显示系统内存的使用情况,包括物理内存和交换空间。
2.-m:
-
这个选项告诉 free 命令以兆字节(MB)为单位显示内存使用情况,而不是默认的千字节(KB)。
硬盘使用量
df -hT:
-
df:这是一个用于显示文件系统的磁盘空间使用情况的命令。
-
-h:这个选项让 df 命令以人类可读的格式显示信息,例如以千字节(KB)、兆字节(MB)、吉字节(GB)等单位显示,而不是以字节为单位。
-
-T:这个选项让 df 命令显示文件系统的类型。
-
综合来看,df -hT 命令用于以易读的格式显示文件系统的磁盘空间使用情况,包括每种文件系统的类型。
文件或目录大小
sudo du ./* -hsc
-
sudo:这个命令允许授权的用户以另一个用户的安全权限执行命令,默认情况下是以超级用户(root)的权限执行。
-
du:这是一个用于估算文件或目录占用的磁盘空间大小的命令。
-
./*:这表示当前目录下的所有文件和目录。
-
-h:这个选项让 du 命令以人类可读的格式显示大小,例如以KB、MB、GB等单位显示。
-
-s:这个选项让 du 命令为每个参数(这里是 ./*)显示一个总计的大小,而不是列出每个子目录的大小。
-
-c:这个选项让 du 命令在显示所有参数的总计大小后,再显示一个总计的合计值。
-
综合来看,sudo du ./* -hsc 命令用于以易读的格式显示当前目录下所有文件和目录的大小,以及它们的总大小。
查看硬盘分区
sudo fdisk -l
-
sudo:这个命令允许授权的用户以另一个用户的安全权限执行命令,默认情况下是以超级用户(root)的权限执行。
-
fdisk:这是一个用于操作磁盘分区表的命令。
-
-l:这个选项让 fdisk 命令列出所有磁盘的分区表信息,而不需要交互式操作。
-
综合来看,sudo fdisk -l 命令用于列出所有磁盘的分区信息,通常包括磁盘大小、分区类型、分区大小等。
挂载分区
sudo mount -t /dev/sda2 /mnt/data
-
sudo:这个命令允许授权的用户以另一个用户的安全权限执行命令,默认情况下是以超级用户(root)的权限执行。
-
mount:这是一个用于挂载文件系统的命令。
-
-t:这个选项用于指定文件系统的类型。
-
/dev/sda2:这是要挂载的设备文件,表示磁盘 sda 的第二个分区。
-
/mnt/data:这是挂载点,即文件系统将被挂载到的目录。
-
综合来看,sudo mount -t /dev/sda2 /mnt/data 命令用于将 /dev/sda2 分区挂载到 /mnt/data 目录,并且指定了文件系统的类型(通过 -t 选项)。如果没有指定文件系统类型,系统将尝试自动检测。
基本网络操作
基本网络工具
ifconfig
用于配置和显示网络接口信息的命令行工具,可以显示网络接口的ip地址、子网掩码、mac地址等信息,还可以用于启动、停止或配置网络接口。
ip addr
用于查看和管理网络接口的命令,提供了比ifconfig更详细的信息显示,包括接口状态、IP地址、子网掩码、广播地址
sudo ifdom eth0
用于关闭网卡eth0
sudo ifup eth0
用于启动网卡eth0
网络配置文件
/etc/network/interfaces
这是一个系统文件,用于配置网络接口的静态ip地址、子网掩码、网关等信息。
Networkmanager
是一个动态网络控制和配置守护进程,它可以自动管理网络连接,包括有线网络、无线网络和VPN连接等。
NerworkManager
提供了图形界面和命令行工具来配置和管理网络,使得网络配置更加方便和灵活。
它可以自动检测网络变化,并根据配置自动连接到可用的网络。
网络连接
netstat -natup
-
netstat是一个用于显示网络连接、路由表、接口统计等信息的命令
-
-n表示以数字形式显示地址和端口号,避免进行域名解析
-
-a显示所有的连接和监听端口
-
-t显示tcp连接
-
-u显示udp连接
-
-p显示与连接相关的进程ID和程序名称。
ss -natup
-
ss
是一个用于查看网络套接字(socket)信息的工具,它可以替代传统的netstat
命令,并且在某些情况下性能更好。-natup
是它的一组选项,用于获取特定类型的网络状态信息。
二层地址
arp -en
-
arp
是地址解析协议的工具 -
-e
以详细格式显示arp缓存表
-
-n
以数字形式显示ip地址,避免进行域名解析
路由信息
route
-
用于显示和管理系统的路由表
-
可以查看系统当前的路由信息,包括目标网络、网关、子网掩码等。还可以添加、删除或修改路由条目
ip route
是ip命令的一部分,提供了路由管理功能,进行更复杂的路由配置操作
sudo ip rout add 10.13.27.0/24 dev eth1
-
ip route add
用于添加一条路由条目 -
10.13.37.0/24
是目标网络地址和子网掩码 -
dev eth1
表示通过名为
eth1`的网络接口到达目标网络 -
执行这个命令可以向系统的路由表中添加一条路由,指定如何到达特定的网络。
路由跟踪工具
tracerout offensive-security.com
-
tracerout
是一个用于跟踪数据包从本地主机所经过的路由路径的工具 -
offensive-security
是目标主机的域名或ip地址。执行这个命令会逐跳显示数据包经过的路由器的ip地址和响应时间,帮助用户了解网络连接的路径和可能存在的网络问题。
ssh服务
启动服务
sudo systemctl start ssh
-
systemctl
是用于管理系统服务的工具 -
start ssh
是启动名为ssh
的服务,就是启动SSH服务器,其他设备可以使用SSH协议进行登录连接
连接本地主机
ssh root@localhost
-
ssh
是SSH服务命令 -
root
是指定的登录用户 -
localhost
指定登录的机器,这里是指本机
配置文件
/etc/ssh/sshd_config
/etc/ssh/sshd_config 是 Linux 系统中 SSH 服务的配置文件,用于定义 SSH 服务器的行为和安全设置。SSH(Secure Shell)是一种网络协议,用于在网络上的计算机之间进行加密的数据通信,常用于远程登录和管理服务器。
客户端配置
HashKnownHosts yes
通常情况下,~/.ssh/known_hosts
文件用于存储已知的远程主机的公钥信息,以确保连接的安全性。这个配置选项可能是指示对已知主机文件中的主机名进行哈希处理,这样可以提高一定的安全性,但具体的效果可能因不通的ssh实现而有所差异。
~/.ssh
-
这是用户主目录下的一个目录,用于存储SSH客户端的配置和相关文件
-
通常包含私钥文件(如id_rsa)公钥文件(如id_rsa.pub)及已知主机文件(known_hostss).这些文件将用于客户端的身份认证和连接管理
远程拷贝
scp [email protected]:/home/kali/.bashrc Copiebashrc
-
scp:
-
scp 是一个命令行工具,用于在本地主机和远程主机之间安全地复制文件。它使用 SSH 协议来确保数据传输的安全性。
-
-
[email protected]:/home/kali/.bashrc:
-
root:这是远程主机上的用户名,表示将以 root 用户的身份登录。
-
1.1.1.1:这是远程主机的 IP 地址。
-
:/home/kali/.bashrc:这是远程主机上的文件路径,表示要复制的文件是 /home/kali/ 目录下的 .bashrc 文件。
-
-
Copiebashrc:
-
这是本地主机上的目标文件名。scp 命令会将远程主机上的 /home/kali/.bashrc 文件复制到本地主机的当前工作目录,并将其命名为 Copiebashrc。
-
综上所述,执行这个命令后,scp 会从 IP 地址为 1.1.1.1 的远程主机上的 /home/kali/ 目录复制 .bashrc 文件到本地主机的当前工作目录,并将其重命名为 Copiebashrc。如果本地主机的当前工作目录下已经存在名为 Copiebashrc 的文件,系统可能会提示是否覆盖该文件。
scp passwd -p kali ssh [email protected]
-
scp
远程链接 -
passwd -p
用户密码 -
ssh
ssh远程连接 -
[email protected]
目标主机
查看历史命令
history
-
history 是一个常见的命令行工具命令,它的主要作用是显示用户在当前终端会话中执行过的命令历史记录。