linux基础知识
一、OpenSSL
OpenSSL
是一个广泛使用的开源工具库,它提供了多种功能,包括用于实现安全通信协议(如 SSL/TLS)的加密功能。它广泛应用于服务器、客户端和各种网络应用中,支持多种加密算法、证书管理和数据加密解密等功能。
openssl passwd -1 123password----表示这个命令用于处理密码相关的操作。-1参数-----指定使用MD5加密算法对密码“123”进行加密处理。-5参数-----表示使用SHA-256哈希算法对密码“123”进行加密处理。
MD5
是一种常用的哈希算法,它将任意长度的输入数据转换为固定长度的输出(通常是 128 位的哈希值)。使用这个命令可以将“123”生成为MD5加密后的密文。
SHA-256
是一种更安全的哈希算法,他生成的哈希值长度为256位。每次对相同的密码进行SHA-256加密时,由于加密过程中通常会引入随机因素(如盐值等),所以每次生成的密文都是不一样的,这增加了密码的安全性,及时攻击者获得了密文,也很难通过逆向计算得到原始密码。
二、文件管理
1.创建空文件
touch newfile
2.删除文件
rm newfile
3.新建目录
mkdir newdir
4.删除空目录
rmdir newdir
5.重命名文件
mv file.txt new.txt
6.移动文件
mv newfile ../newdir
7.拷贝文件
cp file.txt newdir.txt
8.软链接
ln -s original.txt symlink.txt
9.硬链接
ln sec123.txt hardlink.txt
软硬链接区别
-
硬链接:指向文件的实际数据块,多个硬链接共享相同的 inode。删除一个硬链接不会删除数据,直到所有硬链接都删除为止。
-
软链接:指向文件路径,类似快捷方式。删除目标文件会导致软链接失效。
三、搜索文件
1.which
which
命令用于查找可执行文件的位置,尤其是在 PATH
环境变量中定义的路径下。它通常用来查找某个命令的实际位置。
例如,查询“ls” 命令在系统中的具体位置
which ls
2.locate (local.db)
locate
命令通过访问预建的数据库来快速查找系统上的文件或目录。与 which
不同,locate
可以查找任何类型的文件,而不仅仅是可执行文件。
sudo updatedb 通过更新数据库,可以确保locate能够查找到新创建或修改的文件。locate whoami.exe
3.find
find
命令是用于在指定目录及其子目录中查找文件或目录的工具。
find ~ -mtime 2 -ls | sort -k9 -k10 | more
-
-mtime 2
:2表示查找最近2天内修改过的文件。(+2:查找修改时间超过 2 天的文件,-2:查找修改时间少于 2 天的文件。) -
-ls
:显示匹配文件的详细信息,包括权限、所有者、大小、修改时间等。 -
sort -k9 -k10
:按照第九行和第十行的内容对文本进行排序。` -
more
: 用于分页显示结果,方便查看
find . -type f -iname '*.sh' -mmin -30 -ls
-
find .
:从当前目录开始查找。 -
-type f
:f 表示仅查找普通文件(不包括目录、符号链接等),因此只有普通文件会被匹配。。 -
-iname '*.sh'
:查找文件名以 .sh 结尾的文件,一般用通配符应该紧贴在前面的字符后面,比如“*sh”。 -
-mmin -30
:查找在过去 30 分钟内修改过的文件。 -
-ls
:显示文件的详细信息。
find . -name '*.svn' -exec rm -rf {} \;
-
find .
:从当前目录开始查找 -
-name '*.svn'
:查找名为 “.svn” 的文件或目录 -
-exec rm -rf {} \;
:表示对找到的每个结果执行rm -rf
命令,即删除找到的文件或目录。 -
{}
是find
命令用来代表每个匹配的文件或目录的占位符。 -
\;
用来结束-exec
命令的执行。
find / -user root -type f -perm -o=w -name '*.sh’ 2>/dev/null
-
find /
:表示从根目录开始查找,也就是遍历整个文件系统。 -
-user root
:用来筛选出所有者是root
的文件。 -
-perm -o=w
:表示筛选出其他用户(即文件的“其他”权限,通常是除所有者和所属组外的其他用户)具有写权限的文件。o
代表“other”(其他用户),w
代表“write”(写权限)。-perm
用来根据文件权限进行筛选。 -
2>/dev/null
:2>
是重定向标准错误输出(文件描述符 2)。/dev/null
是一个特殊的设备文件,它会丢弃所有写入它的内容。即不在终端显示错误内容。
4.echo
echo
是一个非常基础但非常重要的命令,用于在终端中打印输出。它广泛应用于脚本和命令行操作中,帮助开发者和管理员输出调试信息、提示信息或者变量内容。
echo $PATH用于显示当前系统中配置的 `PATH` 环境变量的内容。
PATH
是一个包含多个目录路径的环境变量,用于告诉操作系统在哪些目录中查找可执行文件。当你在终端中输入命令时,系统会根据 PATH
中列出的目录顺序查找该命令的可执行文件。
四、用户账号数据库
一、用户账号数据库相关文件
/etc/passwd
-
这是一个重要的系统文件,存储了系统中用户账号的基本信息。
-
每行代表一个用户,包含了用户名、密码占位符、用户 ID、用户组 ID、用户描述信息、用户主目录、用户默认 shell等字段。
etc/shadow
-
这个文件也与用户账号相关:主要存储用户密码的加密信息以及密码的一些属性,如密码最后一次修改时间、密码最短使用期限、密码最长使用期限等。
-
只有具有足够权限的用户(通常是“root)才能读取这个文件,以提高密码的安全性。
二、组账号相关命令
cat /etc/group查看用户账号信息的同时,也可以间接了解用户所属的组信息,因为其中包含了用户组 ID。
三、禁用账号相关命令
sudo passwd -l username
-
sudo
:表示以管理员权限执行命令。 -
passwd
:用于管理用户密码的命令。 -
-l
:用于锁定用户账号。
执行这个命令后,用户username
账户将被锁定,无法登录系统。
change -E 1990-01-01_kali
-
change
:用于修改用户密码的过期信息 -
-E
: 选项后面跟着一个日期,表示设置用户账号的过期时间,在这个例子中,将“kali”用户账号的过期时间设置为“1990-01-01”,通常意味着在这个日期之后该账号将无法使用,除非重新设置过期时间或进行其他管理操作。
passwd-S username
-
passwd 命令的另一个用法。
-
-S
:选项用于显示指定用户账号的密码状态信息,包括账号是否被锁定、密码是否已设置、密码最后一次修改时间等。
五、文件系统权限
一、Linux 系统中一切都是文件
在Linux系统中,几乎所有的资源都被抽象为文件,包括硬件设备(如硬盘、网卡等)、进程间通信、网络连接等,这种设计理念使得对各种资源的管理可以通过统一的文件操作方式来进行,大大简化了系体的架构为管理。
二、查看权限
ls -la /etc/passwd
-
ls
命令:用于列出目录中的文件和文件夹。 -
-l
:长格式输出(long listing),显示文件的详细信息,如权限、所有者、大小、修改时间等。 -
-a
:显示所有文件,包括隐藏文件(以.
开头的文件)。 -
/etc/passwd
是一个系统文件,存储了系统中所有用户的基本信息,如用户名、用户ID、组ID、用户的家目录、登录Shell等。
三、更改文件所有者
chown root file
-
chown
:是 "change owner"(改变所有者)的缩写,用于更改文件或目录的所有者(用户)。 -
root
:是新的文件所有者。在这个命令中,文件将被更改为由root
用户拥有。 -
file
:是你要修改所有者的文件或目录的名称。这个文件可以是当前目录下的一个文件或一个路径。
四、修改文件权限
sudo chmod u=rwx,g+rw,o-r file
-
sudo
:以超级用户(root)权限运行命令。chmod
命令通常需要管理员权限,特别是在修改某些受保护的文件时。 -
chmod
:是 "change mode"(更改模式)的缩写,用于修改文件或目录的权限。 -
u=rwx,g+rw,o-r
:这是设置文件权限的符号模式,分为三部分:u
(用户,文件所有者)、g
(组)、o
(其他用户)。 -
file
:表示需要更改权限的文件或目录的名称。
chmod 400 file
-
chmod
:是 "change mode"(更改模式)的缩写,用于修改文件或目录的权限。 -
400
:这个数字表示权限设置。文件权限是通过三个数字来表示的,分别控制 文件所有者(user)、所属组(group)和其他用户(others)的权限。 -
file
:是你要更改权限的文件或目录的名称。
六、系统日志
一、系统日志相关命令
ls -l /var/log
-
ls
:列出指定目录中的文件和目录。 -
-l
:是ls
命令的一个选项,表示 "长格式"(long format)。使用此选项时,ls
会显示文件的详细信息,包括权限、所有者、大小、修改时间等。 -
/var/log
:指定要查看的目录路径,通常是 Linux 系统中存放日志文件的目录。
二、认证信息日志相关命令
sudo tail -3 /var/log/auth.logs
-
sudo
表示以管理员权限执行命令 -
tail
命令用于查看文件的末尾部分。 -
-3
表示显示文件的最后 3行内容 -
/var/iog/auth.log
是存储系统认证信息的日志文件,包括用户登录、认证失败等信息。执行这个命令可以查看最近的三条认证相关的日志记录。
三、二进制日志相关命令
who /var/log/wtmp | tail -5
-
var/log/wtmp
是一个二进制日志文件,记录了系统的登录和注销信息。 -
|
是管道符号, 将前一个命令的输出作为后一个命令的输入。 -
tail -5
表示显宗最后5行内容。执行这个命令可以查看最近的五次登录或注销记录。
四、dmesg
dmesg:这个命令用于显示内核环形缓冲区(kernel ring buffer)中的信息,包括系统启动时的硬件检测信息、内核模块加载信息、设备驱动的初始化信息等,它可以帮助用户了解系统的硬件状态和内核的运行情况。
五、systemd 日志相关命令
journalctl:这是一个用于查看的管理 systemd日志的命令,systemd是Linux系统的初始化系统和服务管理器,它会记录系统和服务的启动,运行和错误信息等日志,journalctl可以根据不同的参数来筛选、查看特定时间段、特定服务或特定优先级的日志记录。
七、存储管理
一、内存使用量
free -m
-
free
是一个用于显示系统内存使用情况的命令。它可以显示物理内存、交换空间(swap)以及缓冲区和缓存的使用情况。 -
-m
是free
命令的一个选项,表示以 MB(兆字节) 为单位显示内存使用情况。默认情况下,free
会以 KB(千字节)为单位显示数据,加上-m
选项后,单位会转换为 MB,这样输出结果更加易于阅读。
二、磁盘使用量
df -hT
-
df
(disk free)命令用于显示文件系统的磁盘空间使用情况,包括总空间、已用空间、可用空间和挂载点。 -
-h
选项表示 human-readable(人类可读)格式,会将输出的大小以合适的单位显示(如 KB、MB、GB),使其更易于理解,而不是以字节为单位显示。 -
-T
选项用于显示 文件系统类型,即每个挂载点所使用的文件系统类型(如 ext4, xfs, nfs 等)。
三、文件或目录大小
sudo du ./* -hsc
-
sudo
: 以超级用户权限执行命令。某些目录或文件可能需要更高权限才能查看其磁盘使用情况,因此使用sudo
。 -
du
:du
(disk usage)命令用于显示目录或文件占用的磁盘空间。默认情况下,du
会递归地列出每个子目录的大小。 -
./*
: 代表当前目录下的所有文件和子目录。./
表示当前目录,*
是通配符,表示当前目录下的所有内容(包括文件和文件夹)。 -
-h
: 以“人类可读”的格式显示磁盘使用情况(例如,自动选择KB、MB、GB等单位)。这个选项使得输出更易读。 -
-s
: 仅显示每个文件或目录的总大小,而不列出每个子目录的详细大小。即总计显示每个目录的磁盘使用情况。 -
-c
: 计算并显示所有条目的总和(即所有文件和子目录的总磁盘使用量)。
四、查看硬盘分区
sudo fdisk -l
-
sudo
:以超级用户权限执行命令。由于磁盘分区信息通常需要管理员权限才能查看,因此需要使用sudo
。 -
fdisk
:fdisk
是一个磁盘分区工具,通常用于管理磁盘分区、创建、删除、修改分区等。使用fdisk -l
命令时,它的作用是列出所有磁盘和分区的详细信息。 -
-l
:-l
是fdisk
命令的一个选项,表示 列出 系统中所有的磁盘及其分区信息。
五、挂载分区
sudo mount /dev/sdb1 /mnt/usb
-
sudo
:以超级用户权限执行命令。mount
命令通常需要管理员权限来操作磁盘或分区,因此使用sudo
运行。 -
mount
:mount
是一个用于挂载文件系统的命令。它将指定的磁盘分区或设备与指定的目录关联,使得你可以访问该磁盘上的内容。 -
/dev/sdb1
:这是你要挂载的磁盘设备。/dev/sdb1
表示第二块磁盘的第一个分区,通常命名规则如下:-
sda
是第一个硬盘,sdb
是第二个硬盘,以此类推。 -
sdb1
表示第二块硬盘上的第一个分区。 -
如果该设备是 USB 驱动器或外部硬盘,通常会标记为
/dev/sdb
或类似名称。
-
-
/mnt/usb
:这是挂载点,指定你希望将设备挂载到系统中的哪个目录。在这个例子中,设备/dev/sdb1
会被挂载到/mnt/usb
目录。通常,/mnt/
是一个用于临时挂载设备的目录,而/mnt/usb
是该目录下用于挂载 USB 存储设备的子目录。
八、基本网络工具
一、基本网络工具
ifconfig
ifconfig
是 Linux(以及其他类 Unix 操作系统)中的一个命令,用于显示或配置网络接口的相关信息。
ip addr
ip addr
是 Linux 系统中用来查看和管理网络接口的 IP 地址配置的命令。它是 ip
命令家族的一部分,ip
命令通常用于替代旧的 ifconfig
命令,提供更强大和灵活的功能。
sudo ifdown eth0
sudo表示以管理员权限执行命令。 ifdown用于关闭指定的网络接口 eth0是网络接口名称,这里表示关闭名为“eth0”的网络接口。
sudo ifup eth0
eth0表示启动名为”“etho” 的网络接口。
二、网络配置
/etc/network/interfaces
/etc/network/interfaces
是 Linux 系统中用于配置网络接口的文件,特别是在基于 Debian 的发行版(如 Ubuntu)中。这个文件定义了如何配置系统的网络接口,包括 IP 地址、网关、DNS 服务器等。你通常会在这里配置静态 IP 地址或启用 DHCP。
NetworkManager
NetworkManager 是一个用于 Linux 系统的网络管理工具,旨在简化网络配置和管理过程。它提供了图形用户界面和命令行工具,使用户能够轻松地连接到有线和无线网络,以及管理网络连接和设置。
主要功能
-
自动连接:NetworkManager 可以自动识别可用的网络连接并自动连接,极大地方便了移动设备的用户。
-
图形界面:大多数 Linux 桌面环境(如 GNOME、KDE)都集成了 NetworkManager 提供的图形界面,用户可以通过简单的点击操作来管理网络。
-
多种连接类型:支持多种类型的连接,包括有线(Ethernet)、无线(Wi-Fi)、VPN、移动宽带等。
-
动态配置:可以根据网络环境的变化动态调整配置,无需手动干预。
-
命令行工具:提供了
nmcli
(NetworkManager Command Line Interface)工具,允许用户通过终端管理网络连接。 -
配置文件:NetworkManager 会根据网络连接的需要自动生成和维护配置文件,用户也可以手动编辑。
九、网络链接
一、网络连接状态查看工具
netstat -natup
netstat -natup
是一个常用的网络诊断命令,在 Linux 系统中用来查看网络连接的状态及相关信息。
-
-n
:以数字格式显示地址和端口号,而不是解析为域名和服务名称。例如,端口 80 会显示为80
,而不是http
。 -
-a
:显示所有的连接和监听端口(包括本地和远程连接)。 -
-t
:显示 TCP 连接(只显示 TCP 协议的连接)。 -
-u
:显示 UDP 连接(只显示 UDP 协议的连接)。 -
-p
:显示与每个连接相关联的进程 ID(PID)和进程名称。只有具有相应权限(如 root 用户)才能查看进程信息。
ss -natup
ss -natup
是一个用于查看网络连接的命令,类似于 netstat
,但它更快且提供更详细的信息。它使用 ss
工具来显示 TCP 和 UDP 连接的状态,并显示与每个连接相关联的进程信息。
二、二层地址查看工具
arp -en
-
arp是地址解析协议(Address Resolution Protocol)的工具。
-
-e:以详细格式显示ARP 缓存表,
-
-n:以数字形式显示IP 地址,避免进行域名解析,执行这个命令可以查看系统的 ARP缓存表,其中包含了 IP 地址和对应的 MAC 地址映射关系,用于在局域网中进行二层地址解析。
三、路由信息相关工具
route
-
用于显示和管理系统的路由表。
-
可以查看系统当前的路由信息,包括目标网络、网关、子网掩码等。还可以用于添加、删除或修改路由条目。
ip route
-
是 ip命令的一部分,用于管理系统的路由表。
-
他提供了更强大和更灵活的路由管理功能,可以进行更复杂的路由配置操作。
sudo ip route add 10.13.37.0/24 dev eth1
-
sudo
:使用超级用户权限执行命令,因为修改路由表需要管理员权限。 -
ip route add
:这部分是告诉系统要向路由表添加一条新路由。 -
10.13.37.0/24
:这是目标网络地址和子网掩码,10.13.37.0/24
表示网络10.13.37.0
,并且子网掩码是255.255.255.0
。这意味着该路由适用于10.13.37.0
到10.13.37.255
的所有 IP 地址。 -
dev eth1
:指定流量应该通过eth1
网络接口(即第二个以太网接口)转发。也就是说,数据包发送到10.13.37.0/24
网络时,将通过eth1
网络接口进行转发。
四、路由跟踪工具
traceroute offensive-security.com
-
traceroute
:traceroute
是一个网络诊断工具,用于显示数据包从本地主机到目标主机所经过的每一跳(即每个路由器)。它通过发送带有不同 TTL(生存时间,Time to Live)值的 ICMP 请求,记录每个路由器的响应,以此来跟踪路由路径。 -
offensive-security.com
:这是目标主机的域名,traceroute
将尝试通过互联网跟踪到该域名的路由路径。系统会首先通过 DNS 将域名解析为 IP 地址,然后跟踪从本地计算机到该 IP 地址的路由。
十、ssh服务
SSH 是一种用于在不安全的网络中进行安全通信的协议,常用于远程登录服务器或进行文件传输等。
一、启动服务
sudo systemctl start ssh
-
sudo
表示以管理员权限执行命令 -
systemctl
可以用于启动、停止、重启和查看系统服务的状态,或者查看系统日志等。 -
当执行
systemctl start ssh
时,系统会尝试启动 SSH 服务(即sshd
服务)。
二、连接本地主机
ssh root@localhost
-
ssh
用于启动一个安全的远程连接。 -
root
是登录的用户名,表示以超级用户身份访问计算机。 -
@
是分隔符,用于将用户名与目标计算机地址分开。 -
localhost
指定连接的目标是本地计算机,而非远程服务器。
三、配置文件
/etc/ssh/sshd_config
-
该文件用于配置
sshd
服务的行为,包括安全选项、认证方法、允许的用户和密钥配置等。修改这个文件后,需要重启 SSH 服务来使更改生效。
四、客户端配置
hash knownHosts yes
HashKnownHosts
选项用于决定是否将 ~/.ssh/known_hosts
文件中的主机名(或 IP 地址)以哈希形式存储。哈希化是为了增强安全性,防止攻击者通过查看已知主机文件来了解连接过的主机列表及其 IP 地址。
-
yes
— 启用哈希化,所有的主机名和 IP 地址在known_hosts
文件中都将被存储为哈希值。 -
no
— 不启用哈希化,known_hosts
文件中将直接存储主机的 IP 地址和主机名。
十一、远程拷贝
scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc
-
scp
:这是用于在本地和远程主机之间进行安全文件拷贝的命令,基于 SSH 协议。与传统的cp
命令不同,scp
可以跨主机拷贝文件。 -
root@1.1.1.1
:-
root
是远程主机的用户名,在这个命令中意味着你将使用root
用户身份进行登录。 -
1.1.1.1
是远程主机的 IP 地址,表示你要从这个 IP 地址的机器上获取文件。
-
-
:/home/kali/.bashrc
:-
:/home/kali/.bashrc
是远程机器上的文件路径,指定了你要从远程主机上拷贝的文件。具体来说,/home/kali/.bashrc
是kali
用户的.bashrc
文件,通常是用户的 Bash shell 配置文件,包含了用户自定义的环境变量、别名、函数等设置。
-
-
Copiedbashrc
:-
Copiedbashrc
是你希望将文件拷贝到本地时的目标文件名。该文件将会存储在当前工作目录下,名字为Copiedbashrc
。
-
二、查看历史命令 history:这个命令用于显示命令历史记录,即之前在当前终端会话中执行过的命令列表。可以通过查看历史记录来快速重复执行之前的命令,或者查找之前执行过的特定命令。