Linux基础1

时间:2024-11-15 14:18:25

Linux基础1

Linux基础1学习笔记

声明!

​​​学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章

笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!

有兴趣的小伙伴可以点击下面连接进入b站主页​**B站泷羽sec声明**


文件管理

touch newfile(创建空文件newfile)

rm newfile(删除newfile文件)

mkdir newdir(新建newdir目录)

rmdir newdir(删除newdir目录)

mv file.txt new.txt(将file.txt文件重命名为new.txt)

mv newfile newdir(将newfile文件移动到newdir目录下)

cp file.txt newfile.txt(复制file.txt文化并重命名为newfile.txt)

ln -s original.txt symlink.txt(类似Windows的快捷方式,删除源文件后软链接无法打开

本质区别

硬链接:同一个文件,多个名称,共享同一个inode信息,实质就是链接指向的磁盘文件数据。

软链接:不同的文件,指向另一个文件的路径,实质就是链接指向的是存储位置的路径,类似与Windows的快捷方式。

可用性

硬链接:不支持对目录创建,只能对文件创建。

软链接:可以对文件和目录创建。

删除的影响

硬链接:删除其中一个硬链接不会影响其他硬链接,只有当所有硬链接都被删除时,原始文件才会被删除。

软链接:删除软链接不会影响原始文件,但如果原始文件被删除,软链接将失效。

创建方式

硬链接:使用In命令创建。

软链接:使用in -s命令创建,需要指定原始文件的路径。

具体例子和用途

软链接常用于方便管理,例如将复杂路径的文件链接到简单路径下,或者解决文件系统空间不足的问题。硬链接则主要用于防止误删除文件。

搜索文件

1、which

使用方法 which 命令名

例如,如果你想要找到 id 命令的位置,你可以运行:which id​,这将返回 id 命令的完整路径,通常是 /usr/bin/id​。

在这里插入图片描述

2、locate

locate​ 命令在 Linux 系统中用于快速查找文件或目录,它通过查询一个预先构建的数据库来实现快速搜索,这个数据库包含了系统中所有文件的路径信息。以下是 locate​ 命令的一些核心含义和作用:

  1. 数据库依赖性locate​ 命令依赖于一个名为 mlocate​ 或 updatedb​ 的数据库,该数据库包含了系统中所有文件和目录的索引。这个数据库需要定期更新以反映文件系统的变化。

  2. 快速搜索: 由于 locate​ 命令是基于数据库的,它能够比 find​ 命令更快地返回搜索结果,尤其是在大型文件系统中。

  3. 配置文件locate​ 命令的配置文件通常位于 /etc/updatedb.conf​,这个文件定义了哪些目录和文件类型应该被排除在索引之外。

  4. 数据库文件位置locate​ 命令使用的数据库文件通常存储在 /var/lib/mlocate/mlocate.db​。如果需要手动更新数据库,可以使用 updatedb​ 命令。

  5. 使用场景locate​ 命令适用于快速查找特定文件或目录,例如配置文件、日志文件或文档文件。它也适用于查找包含特定关键字的文件或目录。

  6. 注意事项

    • locate​ 命令可能不会显示最新的文件或目录,如果它们是在上次数据库更新之后创建或修改的。
    • locate​ 命令只能根据文件名或部分文件名来搜索文件或目录,不能根据内容或属性来搜索。
    • locate​ 命令只能在终端中使用,不能在图形界面中使用。
  7. 更新数据库: 如果需要手动更新 locate​ 数据库,可以运行 sudo updatedb​ 命令。这可能需要一些时间和管理员权限。

  8. 实用示例: 以下是一些 locate​ 命令的实用示例:

    • 查找所有以 .txt​ 结尾的文件:locate *.txt
    • 忽略大小写差异:locate -i *.txt
    • 只输出匹配的文件数量:locate -c *.txt
    • 只输出指定数量的匹配结果:locate -l 2 *.txt
    • 只匹配文件的基本名称:locate -b filename
    • 使用正则表达式指定模式:locate -r 'file[0-9].txt'​。

3、find

find​ 命令在 Unix 和 Linux 系统中用于搜索文件和目录。

  1. 按名称搜索文件

    find /path/to/search -name "filename"
    

    这将在指定路径下搜索名为 filename​ 的文件或目录(必须全匹配,也可以用?代替一个字符或者*代替所有字符。

  2. 按类型搜索

    -type f:搜索普通文件(默认排除目录)。
    find /path/to/search -type f
    
    -type d:搜索目录。
    find /path/to/search -type d
    
    -type l:搜索符号链接。
    find /path/to/search -type l
    
    -type c:搜索字符设备文件。
    find /path/to/search -type c
    
    -type b:搜索块设备文件。
    find /path/to/search -type b
    
    -type s:搜索套接字文件。
    find /path/to/search -type s
    
    -type p:搜索 FIFO(先进先出队列)。
    find /path/to/search -type p
    
  3. 使用正则表达式搜索

    find /path/to/search -regex ".*\.txt"
    

    这将搜索所有以 .txt​ 结尾的文件。

    需要注意的是,在正则表达式中,.​ 是一个特殊字符,它匹配任意单个字符(除了换行符)。例如,正则表达式 a.c​ 会匹配 “abc”、“adc”、“aec” 等字符串,其中 a​ 匹配 “a”,.​ 匹配 “b”、“d”、“e” 等任意单个字符,c​ 匹配 “c”。

    而当你使用 \.​ 时,你实际上是在告诉正则表达式引擎将点号视为普通字符,而不是特殊字符。这样,\.​ 就会匹配文本中的点号字符。例如,正则表达式 \.​ 会匹配 “abc.” 中的点号,或者 “example.com” 中的点号。

  4. 按大小搜索

    find /path/to/search -size +10M
    

    这将搜索所有大于 10MB 的文件。

  5. 按修改时间搜索

    find /path/to/search -mtime -7
    

    这将搜索过去 7 天内被修改过的文件。

  6. 使用管道符号过滤

    find /path/to/search -name *.txt|grep "abc"
    

    这将搜索/path/to/search目录下*.txt中文件名含有abc的文件。

  7. 执行操作

    find /path/to/search -name "*.txt" -exec rm {} \;
    

    这将删除所有找到的 .txt​ 文件。

  8. 使用find命令进行应用:

    find ~ -mtime 2 -ls l sort -k9 -k10 | more
    

    “find”:表示在用户的主目录(“~"代表主目录)下进行查找。

    “-mtime 2”:表示查找在两天内被修改过的文件。

    “-ls”:用干以长列表形式显示找到的文件信息。

    “|”:是管道符号,将前一个命令的输出作为后一个命令的输入。

    “sort -k9-k10":是按照第九列和第十列的内容对文件信息进行排序。

    “more":用于分页显示结果,方便查看。

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

    “find .”:在当前目录下进行查找。

    “-type f”:表示查找类型为普通文件。

    “-iname”:’ .sh’查找文件名以’.sh’结尾的文件,注意这里的空格可能会导致不准确匹配,一般用通配符应该紧贴在前面的字符后面,比如’sh’,不过可以用’.sh’来精确匹配以’.sh’结尾的文件

    “-mmin -30”:表示查找在30分钟内被修改过的文件。

    “-ls”:以长列表形式显示找到的文件信息。

    find . -name '*.svn -exec rm -rf {} ;
    

    “find .”:在当前目录下查找。

    “-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”用户的文件。

    “-type f”:表示查找类型为普通文件。

    ”-perm -o=w“:表示查找其他用户有写权限的文件。

    “-name '*.sh":查找文件名以“.sh”结尾的文件。

    “2>/dev/null”:将错误输出重定向到“/dev/null”,即不显示错误信息。


用户账号数据库

一、用户账号数据库相关文件

/etc/passwd

文件名:用户密码文件

这个文件存储了系统中所有用户的信息,每个用户的记录占一行,包含了用户的一些基本信息,如用户名、用户ID(UID)、组ID(GID)、家目录、登录Shell等,/etc/passwd文件对所有用户可读。‌

/etc/shadow

文件名:影子卫士

这个文件用于存储用户的密码信息,与所有用户都可以读取的/etc/passwd文件不同,/etc/shadow文件只有足够权限用户(通常是root用户)才能访问,从而极大地增强了系统的安全性。‌

二、组账号相关命令

cat /etc/group

用户组信息文件,这个文件用于管理Linux系统中的用户组信息。使用这个命令查看用户账号信息的同时,也可以间接了解用户所属的组信息,因为其中包含了用户组ID。但这并不是专门用于查看组账号的最佳方式,通常使用cat /etc group来查看组账号信息。

三、禁用账号相关命令

sudo passwd -l username

“sudo”:表示以管理员权限执行命令。

“passwd”:是用于管理用户密码的命令。

“-l”:该选项用于锁定用户账号。

当执行这个命令后,指定的“username“用户账户将被锁定,无法登陆系统。

chage -E 1990-01-01 kali

“chage”:命令用于修改用户密码的过期信息。

“-E”:选项后面跟着一个日期,表示设置用户账号的过期时间。

在这个例子中,将“kali”用户账号的过期时间设置为“1990-01-01”,通常意味着在这个日期之后该账号将无法使用,除非重新设置过期时间或进行其他管理操作。

passwd -S username

“passwd”:命令的另一个用法。

“-S”:选项用于显示指定用户账号的密码状态信息,包括账号是否被锁定、密码是否已设置、密码最后一次修改时间等等。

文件系统权限

一、Linux系统中一切都是文件

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

二、查看权限

ls -la /etc/passwd

“ls”:列出目录内容的命令。

“-l”:以长格式显示文件信息、包括文件的权限、所有者、所属组、文件大小、修改时间等详细信息。

“-a”:显示包括隐藏文件在内的所有文件。

“/etc/passwd”:用户密码文件路径,这个文件存储了系统用户账号的基本信息。

执行这个命令可以看到 /etc/passwd文件的权限设置、所有者、所属组等信息。

三、更改文件所有者

chown root file

“chown”:改变文件所有者的命令。

“root”:用户名,这里表示将文件的所有者改为“root”用户。

“file”:文件名称。

执行此命令后,文件的所有者将会更改为“root”用户。

四、修改文件权限

sudo chmod u=rwx,g+rw,o-r file

“sudo”:以管理员权限执行命令。

“chmod”:改变文件权限的命令。

“u=rwx”:表示文件所有者(user)具有读(r)、写(w)、执行(x)权限。

“g+rw”:表示文件所属组(group)增加读(r)和写(w)权限。

“o-r”:表示其他用户(other)去除读(r)权限。

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

“sudo”:以管理员权限执行命令。

“chmod”:改变文件权限的命令。

“u+x”:表示增加文件所有者的执行(x)权限。

“g+w”:表示增加文件所属组的写(w)权限。

“o+r”:表示增加其他用户的读(r)权限。

chmod 400 file

“chmod”:改变文件权限的命令,可用rwx来进行改变,也可用数字0(不具有任何权限)、1(执行权限)、2(写权限)、4(读权限)、5(读、执行权限)、6(读、写权限)、7(读、写、执行权限)来进行改变。

“400”:400是权限的数字表示,其中第一位数字“4”表示文件所有者的权限,这里数字是4,代表了读(r)权限,后两位数字“00”分别表示文件所属组和其他用户没有任何权限。

系统日志

一、系统日志相关命令

ls -l /var/log
“ls”:是列出自录内容的命令。

“-I”:选项以长格式显示文件和目录的详细信息,包括权限、所有者、所属组、文件大小、修改时间等。

“/var/log”:是系统日志文件所在的自录。

	执行这个命令可以查看该目录下的日志文件列表及相关信息。

二、认证信息日志相关命令

sudo tail -3 /var/log/auth.log

“sudo”:表示以管理员权限执行命令。

“tail”:命令用于查看文件的未尾部分。

“-3”:表示显示文件的最后3行内容。

“/var/log/auth. log”:是存储系统认证信息的日志文件,包括用户登录、认证失败等信息。

执行这个命令可以查看最近的三条认证相关的日志记录。

三、二进制日志相关命令

who /var/log/wtmp | tail -5

“who”:命令用于显示当前登录的用户信息。

“/var/log/wtmp”:是一个二进制日志文件,记录了系统的登录和注销信息。

“|”:是管道符号,将前一个命令的输出作为后一个命令的输入。

“tail -5”:表示显示最后5 行内容。

执行这个命令可以查着最近的五次登录或注销记录。

四、dmesg

dmesg:这个命令用于显示内核环形缓冲区(kernel ring buffer)中的信息,包括系统启动时的硬件检测信息、内核模块加载信息、设备驱动的初始化信息等。它可以帮助用户了解系统的硬件状态和内核的运行情况。

五、systemd 日志相关命令

journalctl:这是一个用于查看和管理systemd 日志的命令。 systemd是Linux系统的初始化系统和服务管理器,它会记录系统和服务的启动、运行和错误信息等日志。journalctl可以根据不同的参数来筛选、查看特定时间段、特定服务或特定优先级的日志记录。

存储管理

一、内存使用量

free -m

“free”:命令用于显示系统内存的使用情况。

“-m”:选项表示以兆字节(MB)为单位显示内存信息。

执行这个命令后,会显示系统的总内存、已使用内存、可用内存、缓冲内存和缓存内存等信息,帮助用户了解系纳当前的内存使用状态,

二、磁盘使用量

df -hT

“df”:命令用于显示磁盘空间使用情况。

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

“-T”:选项显示文件系统类型。

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

三、文件或目录大小

sudo du ./ -hsc*

 *“* sudo *”:表示以管理员权限执行命令。*

 *“* du *”:命令用于统计文件或目录的磁盘使用空间。*

 *“* ./* *”:* 表示当前自录下的所有文件和自录。

“-h”:选项以人类可读的格式显示大小。

“-s”:选项表示汇总显示每个参数的总大小。.

“-c”:选项表示在最后显示总计。

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

四、查看硬盘分区

sudo fdisk -l

“sudo”:以管理员权限执行。

“fdisk”:是一个磁盘分区工具。

“-I”:选项表示列出系统中的所有磁盘分区信息,包括磁盘的大小、分区类型、分区编号、起始和结束扇区等。

这个命令可以帮助用户了解系统的硬盘分区情况。

五、挂载分区

sudo mount /dev/sdb1 /mnt/usb

“sudo”:以管理员权限执行。

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

“/dev/sdb1”:是要挂载的磁盘分区设备路径。

“/mnt/usb”:是挂载点,即要将分区挂载到的目录。

执行这个命令后,系统可以访问该分区中的文件和目录,就像访问本地文件系统中的其他目录一样。

基本网络工具、配置

一、基本网络工具

ifconfig:

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

它可以显示网络接口的iP地址、子网掩码、MAC地址等信息,还可以用于启动、停止或配置网络接口。

ip addr :

也是用于查看和管理网络接口的命令。

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

sudo ifdown eth0:

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

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

eth0是网络接口名称,这里表示关闭名为“eth0”的网络接口。

sudo ifup eth0:

同样以管理员权限执行。

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

etho表示启动名为“ethO”的网络接口。

二、网络配置

/etc/network/interfaces :

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

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

NetworkManager :

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

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

NetworkManager提供了图形界面和命令行工具来配置和管理网络,使得网络配置更加方便和灵活。它可以自动检测网络变化,并根据配置自动连接到可用的网络。

网络连接

一、网络连接状态查看工具

netstat -natup:

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

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

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

-t选项显示TCP连接。

-u选项显示UDP连接。

-p选项显示与连接相关的进程ID和程序名称。

执行这个命令可以查看系统当前的网络连接状态,包括连接的协议、本地地址和端口、远程地址和端口等信息。

ss -natup:

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

选项的含义与netstat中的类似,用于显示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是目标网络地址和子网掩码。

dev eth1表示通过名为“eth1”的网络接口到达目标网络。

执行这个命令可以向系统的路由表中添加一条路由,指定如何到达特定的网络。

四、路由跟踪工具

traceroute offensive-security.com:

traceroute是一个用于跟踪数据包从本地主机到目标主机所经过的路由路径的工具。

offensiv-seourity.com是目标主机的域名或P地址。

执行这个命令会逐跳显示数据包经过的路由器的IP地址和响应时间,帮助用户了解网络连接的路径和可能存在的网络问题。

ssh服务

一、启动服务

sudo systemctl start ssh:

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

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服务器进行定制化配置。

四、客户端配置

hash knownHosts yes:

通常情况下, /.ssh/known_hosts文件用于存储已知的远程主机的公钥信息,以确保连接的安全性。这个配置选项指示对已知主机文件中的主机名进行哈希处理,这样可以提高一定的安全性,但俱体效果可能因不同的SSH实现而有所差异。

~/.ssh:

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

通常包含私钥文件〈如id_rsa)、公钥文件(如id_rsa.pub)以及已知主机文件(known_hosts)等。这些文件用于SSH客户端的身份认证和连接管理。

远程拷贝

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。

查看历史命令

history: 这个命令用于显示命令历史记录,即之前在当前终端会话中执行过的命令列表。可以通过查看历史记录来快速重复执行之前的命令,或者查找之前执行过的特定命令。