泷羽sec----Linux基础命令学习 (Part 1)
声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec
linux基础
在学习之前需要知道,对于命令都是有帮助手册的,一定要看【命令】 -h
或【命令】 --help
,以及命令的详细手册man 【命令】
linux系统中一切都是文件
openssl是一个开源的加密工具包,kali自带,功能很多
openssl password -1 123
参数password
表示这个命令用于处理密码相关的操作
-1参数表示对密码123使用MD5加密算法
-5参数表示使用SHA-256哈希算法进行加密
文件管理命令
linux命令 | 作用 |
---|---|
touch 【文件名】 |
创建空文件并命名 |
rm 【文件名】 |
删除文件 |
mkdir 【目录名】 |
创建目录 |
rmdir 【目录名】 |
删除目录 |
mv 【目录/文件】 【目录/文件】 |
mv移动文件至指定目录,并可修改文件名 如 mv /var/test /home/notest 表示把原本在 /var 目录下的文件test 移动到/home 目录下并改名为 notest |
cp 【目录/文件】 【目录/文件】 |
用法与mv类似,不过性质不一样,这个是用于复制的 |
ln -s 【源文件】 【目标文件】 |
这里的源文件表示的是最初的文件,目标文件指生成的名称。 生成一个文件的软链接,可以查看目标文件,内容是一样的 当源文件更改时,目标文件也会更改。 |
ln ~/xxx.txt hardlinnk.txt |
硬链接 |
硬链接与软链接的区别:
- 定义
- 硬链接(Hard Link):硬链接是文件系统中的一个概念,它实际上是指向文件物理存储位置(即 inode)的一个额外指针。在 Linux 文件系统中,每个文件都有一个对应的 inode,其中包含了文件的元数据(如文件大小、权限、所有者等)以及指向文件实际数据块的指针。硬链接可以理解为同一个文件的不同名称,多个硬链接指向同一个 inode。
- 软链接(Symbolic Link):软链接也称为符号链接,它是一个特殊的文件类型。软链接文件包含的是另一个文件的路径名(可以是绝对路径或者相对路径),它就像是一个快捷方式,当系统访问软链接时,会根据其中包含的路径名去查找真正的目标文件。
- 创建方式
- 硬链接:使用
ln
命令创建硬链接。例如,如果要为文件file1
创建一个硬链接file2
,命令为ln file1 file2
。 - 软链接:使用
ln -s
命令创建软链接。例如,要为文件file1
创建一个软链接link_to_file1
,命令为ln -s file1 link_to_file1
。
- 硬链接:使用
- inode 与文件内容关系
- 硬链接:硬链接和源文件具有相同的 inode 编号,因为它们本质上是同一个文件的不同引用。对其中一个硬链接进行读写操作,实际上是对同一个文件内容进行操作,文件内容的改变会在所有硬链接中体现出来。例如,通过硬链接
file2
修改文件内容后,从原始文件file1
读取内容时会发现内容也被修改了。 - 软链接:软链接有自己独立的 inode,其文件内容是指向目标文件的路径。当访问软链接时,系统会根据路径去访问目标文件。如果目标文件被移动或者删除,软链接就会失效(除非移动后重新建立了正确的路径关联)。例如,软链接
link_to_file1
指向file1
,如果file1
被移动到其他目录,软链接可能无法正常访问file1
,除非更新软链接中的路径。
- 硬链接:硬链接和源文件具有相同的 inode 编号,因为它们本质上是同一个文件的不同引用。对其中一个硬链接进行读写操作,实际上是对同一个文件内容进行操作,文件内容的改变会在所有硬链接中体现出来。例如,通过硬链接
- 文件属性和权限
- 硬链接:硬链接和源文件的文件属性(如文件大小、文件类型、权限等)完全相同,因为它们共享同一个 inode,这些属性是存储在 inode 中的信息。修改其中一个硬链接的权限,会同时改变所有指向该 inode 的硬链接的权限。
- 软链接:软链接的文件属性主要是和自身有关,如软链接文件大小是其指向路径字符串的长度,而不是目标文件的大小。软链接的权限主要用于控制对软链接文件本身的访问,而不是目标文件的访问。例如,软链接本身可以设置为只有所有者可读,但是如果目标文件的权限是开放的,并且用户通过合适的权限访问软链接所指向的路径,依然可以访问目标文件。
- 跨文件系统的支持
- 硬链接:硬链接通常不能跨文件系统创建。因为不同的文件系统有自己独立的 inode 编号和存储结构,无法在两个不同的文件系统中创建指向同一个 inode 的硬链接。
- 软链接:软链接可以跨文件系统创建,因为它只是记录了目标文件的路径,不受限于文件系统的边界。例如,可以在一个挂载的外部硬盘(一个文件系统)上创建一个软链接,指向内部硬盘(另一个文件系统)中的文件。
- 应用场景
- 硬链接:适用于在同一个文件系统内备份文件,或者在不希望额外占用存储空间的情况下为文件创建多个可访问的名称。例如,在系统备份时,如果需要对重要文件进行备份,并且希望备份文件和原始文件完全一致(包括 inode),可以使用硬链接。
- 软链接:常用于创建快捷方式,或者在需要灵活地指向不同目标文件的场景中使用。例如,在软件安装过程中,可创建软链接来指向不同版本的库文件,方便在需要时切换版本。
命令实践图片
touch创建文件与rm删除文件命令
mkdir创建目录与rmdir删除目录命令
mv移动命令
cp复制命令
ln -s软链接命令
ln硬链接命令
文件系统权限
一、查看权限
ls -la /etc/passwd
ls ------>是列出目录内容的命令
-l ------>以长格式显示文件信息,包括文件的权限、所有者、所属组、文件大小、修改时间等信息
-a ------>显示包括隐藏文件在内的所有文件(隐藏文件一般以 . 开头命名)
/etc/passwd ------>要查看的文件,这个文件存储了系统用户账户的基本信息
二、更改文件所有者
chown root 【文件】
chown ------>改变文件所有者命令
root ------>是新的所有者用户名,表示将该文件的所有者改为root用户
三、修改文件权限
chmod可以修改文件权限,方式有两种,可通过英文简写的形式添加,或者数字添加,因为数字代表一种权限
读权限(r)或者4
写权限(w)或者2
执行权限(x)或者1
并且文件对应的三个权限的顺序是 读(r)-写(w)-执行(x)
对应着数字形式就是 读(4)-写(2)-执行(1)
当这个文件没有哪一个权限的时候,数字的表现形式是 0
如,没有执行权限 读(4)-写(2)-执行(0)
需要注意,数字形式计算权限,是加在一起,比如6,就是这个文件有读(r/4)写(w/2)的权限
当然也需要注意文件对于 所属者-所属组-其他用户 的排序及权限
一个文件权限排序是 所属者-所属组-其他用户 这样排序
所以所属者会有一个文件权限的问题,当所属者下方是rwx或者7的时候,表示有读、写、执行的权限
当所属组下方是rw-或者6的时候,表示有读、写的权限
当其他用户下方是---或者0的时候,表示什么权限都没有
所属组与所属者都有唯一的ID对应,可以在/etc/passwd文件中查看到
sudo chmod u=rwx,g+rw,o-r 【文件】
sudo ------>表示以管理员权限执行命令
chmod ------>改变文件权限的命令
u=rwx ------>表示文件所有者(user)具有读(r)、写(w)、执行(x)权限
g+rw ------>表示文件所属组(group)增加读(r)和写(2)权限
o-r ------>表示其他用户(other)去除读(r)权限
sh
sudo chmod u+x,g+w,o-r 【文件】
u+x ------>表示文件所有者(user)增加执行(x)权限
g+w ------>表示文件所属组(group)增加写(w)权限
o-r ------>表示其他用户(other)去除读(r)权限
chmod 400 【文件】
400 ------>表示所属者有读(r)权限,所属组和其他用户没有权限
命令实践图片
ls -la查看文件权限等信息
chown命令修改
当然这里需要有kal用户才行,没有的话可以通过adduser`命令添加一个用户
chmod修改文件所属者权限
chmod修改文件所属组权限,首先查看所属组的问题
这里先把创建好的用户组添加kali组中,也就是两个不同的用户在同一组中,方便测试
查看/etc/group
文件可以看到组信息
修改文件权限,然后使用同一组中的用户test
进行验证
chmod修改文件其他用户权限
搜索文件命令
linux命令 | 作用 |
---|---|
which 【命令】 |
显示这个命令的文件在哪个位置 |
locate 【文件名】 |
会把所有与含有该文件名的文件路径展示出来。 是通过查询一个预先构建的文件数据库实现的( local.db ) |
find |
用于查找文件、文件夹、文件中的内容等,非常强大,下面进一步了解 |
sudo updatedb |
sudo 是用于以管理员权限执行命令的前缀;updatedb 用于更新locate命令所使用的文件数据库 |
echo $PATH |
echo 是用于输出内容的命令;$PATH 环境变量 |
find 的进一步了解
find ~ -mtime +2 -ls | sort -k9 -k10 | more
find ~ ------>表示在当前用户主目录下进行查找
-mtime +2 ------>表示查找在两天前被修改过的文件
-ls ------>长列表显示找到的文件信息
sort -k9 -k10 ------>按照第9列和第10列的内容对文件信息进行排序
more ------>分页显示信息
find . -type f -iname '*.sh' -mmin -30 -ls
find . ------>表示在当前目录下进行查找
-type f ------>表示要查找类型为普通文件
-iname '*.sh' ------>查找文件名以.sh结尾的文件
-mmin -30 ------>表示查找在30分钟内被修改过的文件
find . -name '*.svn' -exec rm -rf {} \;
-name '*.svn' ------>表示查找名为 .svn的文件或目录
-exec rm -rf {} ------>表示对找到的每个结果执行rm -rf 命令,即删除找到的文件或目录
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
find / ------>表示整个文件系统下进行查找(/ 表示根目录)
-user root ------>表示查找所有者为root用户的文件
-perm -o=w ------>表示查找其他用户有写权限的文件
-2>/dev/null ------>将错误信息输出重定向到/dev/null,即不显示错误信息
命令实践图片
which命令
locate命令
echo $PATH 命令
find命令
在根目录下找到两天前修改过的文件,并以第9列第10列进行排序,使用more
命令显示
find / -mtime +2 -ls | sort -k9 -k10 | more
在当前目录下寻找类型为普通文件,以.sh
结尾的文件,并且30分钟内修改过的文件,用ls
显示
find . -type f -iname '*.sh' -mmin -30 -ls
在当前目录下寻找以.sh
结尾的文件,并执行后面的强制删除的命令
find . -name '*.sh' -exec rm -rf {} \;
在根目录下寻找文件所属者为root
,类型为普通文件,权限为其他用户可读/写/执行,且名称以.sh
结尾的文件。并不把错误信息显示出来
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
find / -user root -type f -perm -o=r -name '*.sh' 2>/dev/null
用户与组相关内容
一、用户账号密码相关文件
/etc/passwd
存储了系统中用户账号的基本信息。每一行代表一个用户,包含用户名、密码占位符、用户组ID、用户描述 信息、用户主目录、用户默认shell等字段
/etc/shadow
主要存储用户密码的加密信息以及密码的一些属性,如密码最后一次修改时间、密码最短/最长使用期限等
只有足够高权限的用户才能读取这个文件,通常是root
二、组账户相关命令
cat /etc/group
显示出用户所属组的信息
在查看用户账户信息的同时,也可以间接了解用户所属的组信息,因为其中包含了用户组ID。不过这并不是专门查看组账号的最佳方式,通过使用这个命令查看组账号信息
三、禁用账户相关命令
sudo passwd -l 【用户名】
sudo ------>表示以管理员权限执行命令
passwd ------>用于管理用户密码的命令
-l ------>用于锁定用户账户,当执行这个命令后,指定的【用户名】账号锁定,无法登录
chage -E 1990-01-01 kali
chage ------>用于修改用户密码的过期时间
-E ------>后面跟着日期,表示设置用户账号的过期时间。意味着在这个日期之后该账户将无法 使用,除非重新设置过期时间或其他操作
passwd -S 【用户名】
passwd ------>用于管理用户密码的命令
-S ------>用于显示指定用户账户的密码状态信息,包括账户是否被锁定、密码是否已设置、密 码最后一次修改时间等
命令实践图片
/etc/passwd文件内容
/etc/shadow文件内容
/etc/group文件内容
passwd相关命令
锁定用户test
解锁用户test
查看test
用户的状态
chage相关命令
查看test
用户的密码相关信息
修改test
用户的密码过期时间
设置test
用户的密码为永不过期
日志相关文件
为什么要知道日志文件,为了清除痕迹,也就是把自己操作过目标电脑的痕迹清除,因为日志文件会记录这些
一、系统日志
ls -l /var/log
/var/log ------->是系统日志文件所在,可以看到该目录下的日志文件列表及相关信息
二、认证信息日志
sudo tail -3 /var/log/auth.log
tail ------>用于查看文件的末尾部分,与head命令相反
-3 ------>表示文件的最后行内容
/var/log/auth.log ------>存储系统认证信息的日志文件,包括用户登录、认证识别等信息
结合起来就是看最近的三条认证相关的日志记录
auth.log文件需要系统打开rsyslog服务的时候,才会记录这个日志文件
如果没有这个服务,需要通过apt-get install rsyslog 进行安装
systemctl status rsyslog 查看服务开启状态
三、二进制日志
who /var/log/wtmp | tail -5
who ------>显示当前登录的用户信息
/var/log/wtmp ------>二进制日志文件,记录系统的登录和注销信息
| ------>管道符,将前一个命令的输出结果作为后一个命令的输入
四、dmesg命令
dmesg
命令用于显示内核环形缓冲区(kernel ring buffer)中的信息,包括系统启动时的硬件检测信息、内核模块加载信息、设备驱动的初始化信息等。可以帮助用户了解系统的硬件状态和内核的运行情况
五、systemd
日志相关命令
journalctl
:这是一个用于查看和管理systemd
日志的命令。
systemd
是linux系统的初始化系统和服务管理器,会记录系统和服务的启动、运行和错误等日志,还可以根据不同的参数来筛选、查看特定时间段、特定服务或特定优先级的日志记录
实践图片
/var/log目录下的各种日志文件
/var/log/auth.log日志文件的内容
/var/log/wtmp日志文件的内容
dmesg命令查看
journalctl命令
存储管理
一、内存使用量
free -m
free ------>用于显示系统内存的使用情况
-m ------>以兆字节(MB)为单位显示内存信息
执行这个会显示系统的总内存、已使用内存、可用内存、缓冲内存和缓存内存等信息
二、磁盘使用量
df -hT
df ------>显示磁盘空间使用情况
-h ------>以人类可读的格式显示磁盘空间大小(KB、MB、GB等)
-T ------>显示文件系统类型
执行这个会显示哥哥磁盘分区的总大小、已使用空间、可用空间以及文件系统类型等信息
三、文件或目录大小
sudo du ./* -hsc
du ------>用于统计文件或目录的磁盘使用空间
./* ------>当前目录下的所有文件和目录
-h ------>以人类可读的格式显示
-s ------>汇总显示每个参数的总大小
-c ------>在最后显示总计
执行这个会显示当前目录下每个文件和目录的大小,并在最后显示总计大小
四、查看磁盘分区
sudo fdisk -l
fdisk ------>磁盘分区工具
-l ------>列出系统中的所有磁盘分区情况,包括磁盘的大小、分区类型、分区编号、起始和结 束扇区等
这个命令可帮助用户了解系统的磁盘分区情况
五、挂载分区
sudo mount /dev/sdb1 /mnt/usb
mount ------>将一个文件系统挂载到指定的目录
/dev/sdb1 ------>要挂载的磁盘分区设备路径
/mnt/usb ------>表示挂载点,要将分区挂载到的目录
执行这个,系统可以访问该分区的文件和目录。就像访问本地文件系统中的一样
一般linux中会把挂载的镜像等放在/media 或者/mnt目录下。
命令实践图片
free查看内存命令
df查看磁盘使用
du查看文件或目录大小等信息命令
fdisk查看磁盘分区情况等信息
mount挂载与umount卸载设备的命令
基本网络枚举
一、基本网络工具
-
ifconfig
是一个用于配置和显示网络接口信息的命令行工具
可以显示网络接口的IP地址、子网掩码、MAC地址等信息,还可启动、停止或配置网络接口
-
ip addr
也是用于查看和管理网络接口的命令
提供比
ifconfig
更详细和灵活的网络接口信息,包括接口的状态、IP地址、子网掩码、广播地址等 -
sudo [ifup / ifdown] eth0
ifup
用于启动指定的网络接口
ifdown
用于关闭指定的网络接口
eth0
表示网络接口的名称但是现在使用更先进的
NetworkManager
,这个与ifup/ifdown
有冲突,因为这个命令是同识别/etc/network/interfaces
中的网络接口信息确定网络接口的名称的,通过AI搜索,两个管理工具的冲突导致,当然也可以配置/etc/network/interfaces
使得ifup/ifdown
生效,但是可以学习另一个NetworkManager
提供的命令nmcli
使用
二、网络配置
-
/etc/network/interfaces
这是系统文件,含有网络接口的静态IP地址、子网掩码、网关等信息
基本上都可以通过编辑这个文件来实现手工配置
-
NetworkManager
是一个动态网络控制和配置守护进程
可以自动管理网络连接,包括有线网络、无线网络和VPN连接等
提供了图形化界面和命令行工具
实践图片
ifconfig命令
ip addr命令
nmcli命令
原本是这个ifup/ifdown 【】网络接口,但这里选择nmcli
nmcli device disconnect eth0
关闭eth0
网络接口的连接
nmcli device connect eth0
打开eth0
网络接口的连接
网络链接
一、网络连接状态查看工具
netstat -natup
netstat ------>用于显示网络连接、路由表、接口统计等信息的命令
-n ------>以数字形式显示地址和端口号,避免进行域名解析
-a ------>显示所有的连接和监听端口
-t ------>显示使用TCP协议的连接
-u ------>显示使用UDP协议的连接
-p ------>显示与连接相关的进程ID和程序名称
执行这个可以显示系统当前的网络连接状态,包括连接的协议、本地地址和端口、远程地址和端口等
ss -natup
ss ------>是另一个用于显示网络套接字状态的工具,比netstat更快速和高效
二、二层地址查看工具
arp -en
arp ------>是地址解析协议(Address Resolution Protocol)的工具
-e ------>以详细格式显示ARP缓存表
-n ------>以数字形式显示IP地址,避免进行域名解析
执行这个可以显示系统的ARP缓存表,其中包含IP地址和对应的MAC地址映射关系,用于在局域网中进行二层解析
三、路由信息相关工具
route
route ------>用于显示和管理系统的路由表
可以查看系统当前的路由信息,包括目标网络、网关、子网掩码等。还可以添加、删除或修改路由条目
ip route
它是ip命令的一部分,用于管理系统的路由表
提供了更强大和灵活的路由管理功能,可以进行更复杂的路由配置操作
如:
sudo ip route add 10.10.10.0/24 dev eth0
ip route add ------>添加一条路由条目
10.10.10.0/24 ------>是目标网络地址和子网掩码
dev eth0 ------>表示通过eth0的网络接口到达目标网络
执行这个可以向系统中的路由表添加一条路由,指定如何到达特定的网络
四、路由跟踪工具
traceroute www.xxx.com
traceroute ------>是一个用于跟踪数据包从本地主机到目标主机所经过的路由路径工具
www.xxx.com ------>是目标主机的域名,也可以是IP地址
执行这个会逐步逐跳的显示数据包经过的路由的IP地址和响应时间
实践图片
netstat命令查看网络连接信息
ss 命令查看网络连接信息,与netstat显示信息一样,就是比它快
arp地址解析命令
route查看路由表
ip route查看路由条目信息
ip route添加/删除路由条目
traceroute跟踪路由命令
SSH服务
一、启动服务
sudo systemctl start ssh
systemctl ------>用于管理系统各种服务的工具
start ssh ------>启动名为ssh的服务,启动ssh服务器,使得其他设备可通过ssh协议连接到该主机
二、连接本地主机
ssh root@localhost
ssh ------>是Secure Shell的客户端命令
root ------>表示以root的身份登录
localhost ------>连接到本地主机
执行这个可以使用ssh协议以root用户的身份登录到本地主机,如果ssh服务已启动且配置正确,并且用户有相应的权限,就可以登录成功获得一个远程命令行会话
三、配置文件
/etc/ssh/sshd_config
这是SSH服务器的主要配置文件
其中包含各种参数,可以用来配置ssh服务器的行为,如端口号、允许的登录用户、认证方式、访问控制等。通过这个文件,可根据具体需求对ssh服务器进行定制化配置编辑
四、客户端配置
hashknownHost yes
通常情况下,/.ssh/known_hosts文件用于存储已知的远程主机的公钥信息,确保连接的安全性。这个配置选项可能是指示对已知主机文件中的主机名进行哈希处理,这可以提高一定的安全性,但具体效果可能因不同的ssh实现而有所差异
~/.ssh
这是用户主目录下的一个目录,用于存储ssh客户端的配置和相关文件
通常是包含私钥文件(如id_rsa)、公钥文件(如id_rsa.pub)以及已知主机文件(known_hosts)等。这些文件用于ssh客户端的身份认证和连接管理
SSH内容很多,比如可以关闭密码认证,只允许通过公私钥进行验证等操作
systemctl status ssh查看ssh服务状态(start开启, stop关闭)
通过ssh连接
查看/etc/ssh/sshd_config配置文件
查看/etc/ssh/ssh_config中有配置hashknownHost是否开启的配置文件
找到/.ssh/known_hosts位置,并查看
发现用has加密,如果生成公私钥,可以把其放入/.ssh文件中,这样在进行私钥验证时,可直接从这里读取,然后直接登录成功
远程copy和历史记录
一、远程copy
scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc
scp ------>是Secure Copy的缩写,用于在不同主机之间安全的复制
root@1.1.1.1 ---->表示从IP地址1.1.1.1的主机上以root用户身份进行操作
/home/kali/.bashrc ------>这是源文件路径,也就是要从远程主机上复制的文件
Copiedbashrc ------>是目标文件名称或目标路径,也就是远程文件复制到本地的名称或存放位置
这个命令会从指定的远程主机复制.bashrc文件到本地,并重命名为Copiedbashrc
scp passwd -p kali ssh root@127.0.0.1
一般格式为:scp [选项] [源文件路径] [目标用户@目标主机:目标文件路径]
-p通常是scp命令用于保留文件的权限、修改时间等属性的选项,但是它应该紧跟在scp后面,而不是在文件名中间。
如果你想把本地的passwd文件复制到本地(127.0.0.1)的root用户主目录下,并且保留文件属性,正确的命令应该是scp -p passwd root@127.0.0.1:~。其中~代表root用户的主目录。
所以说这个命令可能不太准确或不太清晰
二、查看历史记录命令
history
用于显示命令历史记录,之前在当前终端会话中执行的命令列表。可通过查看历史记录快速重复之前的命令,或查找之前执行过的特定命令
实践图片
scp下载使用
history查询历史使用的命令
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578439