在 Linux/类 Unix 系统上,文件链接(File Link)是一种特殊的文件类型,可以在文件系统中指向另一个文件。常见的文件链接类型有两种:
1、硬链接(Hard Link)
ln
命令用于创建硬链接。2、软链接(Symbolic Link 或 Symlink)
ln -s
命令用于创建软链接。硬链接为什么不能跨文件系统?
我们之前提到过,硬链接是通过 inode 节点号建立连接的,而硬链接和源文件共享相同的 inode 节点号。
然而,每个文件系统都有自己的独立 inode 表,且每个 inode 表只维护该文件系统内的 inode。如果在不同的文件系统之间创建硬链接,可能会导致 inode 节点号冲突的问题,即目标文件的 inode 节点号已经在该文件系统中被使用。
Linux 支持很多文件类型,其中非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。
每种文件类型都有不同的用途和属性,可以通过命令如ls
、file
等来查看文件的类型信息。
# 普通文件(-)
-rw-r--r-- 1 user group 1024 Apr 14 10:00 file.txt
# 目录文件(d,directory file)*
drwxr-xr-x 2 user group 4096 Apr 14 10:00 directory/
# 套接字文件(s,socket)
srwxrwxrwx 1 user group 0 Apr 14 10:00 socket
Linux 使用一种称为目录树的层次结构来组织文件和目录。目录树由根目录(/)作为起始点,向下延伸,形成一系列的目录和子目录。每个目录可以包含文件和其他子目录。结构层次鲜明,就像一棵倒立的树。
常见目录说明:
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
文件的类型:
Linux 中权限分为以下几种:
文件和目录权限的区别:
对文件和目录而言,读写执行表示不同的意义。
对于文件:
权限名称 | 可执行操作 |
---|---|
r | 可以使用 cat 查看文件的内容 |
w | 可以修改文件的内容 |
x | 可以将其运行为二进制文件 |
对于目录:
权限名称 | 可执行操作 |
---|---|
r | 可以查看目录下列表 |
w | 可以创建和删除目录下文件 |
x | 可以使用 cd 进入目录 |
需要注意的是:超级用户可以无视普通用户的权限,即使文件目录权限是 000,依旧可以访问。
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
ls ‐ahl
命令可以看到文件的所有者 也可以使用 chown
用户名 文件名来修改文件的所有者 。ls ‐ahl
命令可以看到文件的所有组也可以使用 chgrp
组名 文件名来修改文件所在的组。修改文件/目录的权限的命令:chmod
示例:修改/test 下的 aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。
chmod u=rwx,g=rw,o=r aaa.txt
或者 chmod 764 aaa.txt
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux 用户管理相关命令:
useradd [选项] 用户名
:创建用户账号。使用useradd
指令所建立的帐号,实际上是保存在 /etc/passwd
文本文件中。userdel [选项] 用户名
:删除用户帐号。usermod [选项] 用户名
:修改用户账号的属性和配置比如用户名、用户 ID、家目录。passwd [选项] 用户名
: 设置用户的认证信息,包括用户密码、密码过期时间等。。例如:passwd -S 用户名
,显示用户账号密码信息。passwd -d 用户名
: 清除用户密码,会导致用户无法登录。passwd 用户名
,修改用户密码,随后系统会提示输入新密码并确认密码。su [选项] 用户名
(su 即 Switch User,切换用户):在当前登录的用户和其他用户之间切换身份。每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
Linux 系统用户组的管理相关命令:
groupadd [选项] 用户组
:增加一个新的用户组。groupdel 用户组
:要删除一个已有的用户组。groupmod [选项] 用户组
: 修改用户组的属性。htop [选项]
:类似于 top
,但提供了更加交互式和友好的界面,可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。uptime [选项]
:用于查看系统总共运行了多长时间、系统的平均负载等信息。vmstat [间隔时间] [重复次数]
:vmstat (Virtual Memory Statistics) 的含义为显示虚拟内存状态,但是它可以报告关于进程、内存、I/O 等系统整体运行状态。du [选项] [文件]
:用于查看指定目录或文件的磁盘空间使用情况,可以指定不同的选项来控制输出格式和单位。sar [选项] [时间间隔] [重复次数]
:用于收集、报告和分析系统的性能统计信息,包括系统的 CPU 使用、内存使用、磁盘 I/O、网络活动等详细信息。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。systemctl [命令] [服务名称]
:用于管理系统的服务和单元,可以查看系统服务的状态、启动、停止、重启等。ping [选项] 目标主机
:测试与目标主机的网络连接。ifconfig
或 ip
:用于查看系统的网络接口信息,包括网络接口的 IP 地址、MAC 地址、状态等。netstat [选项]
:用于查看系统的网络连接状态和网络统计信息,可以查看当前的网络连接情况、监听端口、网络协议等。ss [选项]
:比 netstat
更好用,提供了更快速、更详细的网络连接信息。sudo + 其他命令
:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。grep 要搜索的字符串 要搜索的文件 --color
:搜索命令,–color 代表高亮显示。kill -9 进程的pid
:杀死进程(-9 表示强制终止)先用 ps 查找进程,然后用 kill 杀掉。shutdown
:shutdown -h now
:指定现在立即关机;shutdown +5 "System will shutdown after 5 minutes"
:指定 5 分钟后关机,同时送出警告信息给登入用户。reboot
:reboot
:重开机。reboot -w
:做个重开机的模拟(只有纪录并不会真的重开机)。按照作用域来分,环境变量可以简单的分成:
~/.bashrc
、~/.bash_profile
。/etc/bashrc
、/etc/environment
、/etc/profile
、/etc/profile.d
。上述配置文件执行先后顺序为:/etc/environment
–> /etc/profile
–> /etc/profile.d
–> ~/.bash_profile
–> /etc/bashrc
–> ~/.bashrc
如果要修改系统级别环境变量文件,需要管理员具备对该文件的写入权限。
建议用户级别环境变量在 ~/.bash_profile
中配置,系统级别环境变量在 /etc/profile.d
中配置。
按照生命周期来分,环境变量可以简单的分成:
export
命令,在当前终端下声明环境变量,关闭 shell 终端失效。top
:用于实时查看系统的 CPU 使用率、内存使用率、进程信息等。
top -H -p <pid>
free
:用于查看系统的内存使用情况,包括已用内存、可用内存、缓冲区和缓存等。df
:用于查看系统的磁盘空间使用情况,包括磁盘空间的总量、已使用量和可用量等,可以指定文件系统上。例如:df -a
,查看全部文件系统。ps
:用于查看系统中的进程信息,包括进程的 ID、状态、资源使用情况等。如果想要查看特定的进程可以使用这样的格式:ps aux | grep redis
(查看包括 redis 字符串的进程)。使用 lsof
命令:可以列出打开的文件和关联的进程,网络端口也被视为文件,所以可以用来查看占用端口的进程。
lsof -i :端口号
,输出中会显示占用该端口的进程的 PID、用户、文件描述符等信息。
使用 netstat
命令:网络统计工具,可以显示网络连接、路由表、接口统计等信息。可以结合 grep
来过滤出特定端口的占用信息。netstat -tunlp | grep 端口号
使用 ss
命令:ss
和 netstat
类似,也可以查看端口占用情况:ss -tunlp | grep 端口号
lsof -i -P -n | grep java
netstat -tunlp | grep java
ss -tunlp | grep java