Linux
快捷键
命令区分大小写
常用的信息查看路径
/var/log/
这个目录包含了大量的日志文件
子目录
message包含了系统启动后的各种信息、服务和守护进程的日志
syslog在debian 和ubantu等linux中,是系统日志的主要文件
auth.log: 包含了与身份验证相关的日志信息,如用户登录、注销、使用 su 命令等。
boot.log: 记录了系统启动过程中的各种信息。
dmesg: 包含了内核在启动过程中从内核环形缓冲区中读取的消息。
apache2/access.log: 如果安装了Apache Web服务器,这个文件将包含Web服务器的访问日志。
其他应用程序和服务通常也会在 /var/log/ 下创建自己的日志文件或子目录。
/etc/
包含了系统的配置文件。
passwd: 包含了用户账户信息。
group: 包含了组账户信息。
shadow: 包含了加密的用户密码信息。
resolv.conf: 包含了DNS解析的配置信息。
sysconfig/, /network/, /network/interfaces: 这些目录和文件包含了网络配置的信息。
yum.repos.d/: 如果你的系统使用YUM作为包管理器,这个目录包含了YUM仓库的配置文件。
hostname: 包含了系统的主机名。
以及其他各种系统和服务的配置文件。
其他
/proc/: 这个目录是虚拟的,它包含了内核和进程的信息。例如,/proc/meminfo 包含了关于系统内存的信息。
/root/: 这是root用户的家目录,通常包含了root用户的个人文件和配置。
/home/: 这是非root用户的家目录的默认位置。每个用户都有自己的子目录(例如 /home/username),用于存储个人文件和配置。
设置主机名
hostname name 临时
hostnamectl set-hostname name
echo
echo $PSL#查看用户提示符,也就是[root@ii~]这种,只是临时更改
#长久更改需要在/etc/profile/中添加自定义name.sh,重启后生效
cd /etc/profile
vim PName.shell
chmod
修改文件、目录的权限
chmod [对谁操作] [操作符] [赋予的权限] 文件名
操作对象:
u 用户user,表现文件或目录的所有者
g 用户组group,表现文件或目录所属的用户组
o 其他用户
a 所有用户
操作符:
+ 添加权限 - 减少权限 =直接给定一个权限
权限:1、r 2、w 3.x
读、写、执行
chmod ug+x [filename]
ls
ls-l,简写ll
列出当前目录中的文件和目录的详细信息
-a 列出当前目录中的所有文件和目录(包括隐藏文件)的详细信息
-l 显示权限、所有者、大小等信息
-lh 可读方式显示
-s按文件大小对文件目录进行排序
-t 按修改时间对文件和目录进行排序
-r 反序
-d 仅显示目录的详细信息
-i 递归式
filename 显示文件的
-U不排序,按文件和目录在磁盘上的顺序显示
--color=auto不同颜色显示不同类型的文件和目录
可以与管道组合实现复杂的显示
ll *.text 显示以text为后缀的文件
系统命令
# 查看ip地址
ip a
ip addr
# ping网络(测试网络连通)
ping 目标机器的ip
# 查看系统时间
date
# 注销
logout
# 关机
shutdown now
# 重启
reboot
# 清屏
clear
文件目录系统
文件和目录被组织称一个单根倒置树结构
文件系统从根目录下开始,用’/'表示
标准的linux文件系统(ext4),文件名称大小写敏感
以.开头的为隐藏文件
文件名最长255个字节
包括路径在内最长4095个字节
各种颜色
蓝色 目录
绿色 可执行文件
红色 压缩文件
浅蓝色 链接文件
灰色 其他文件
除了斜杠和nul,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用有些字符需要引号来引用
每个文件都有两类相关数据:元数据metadata 也就是属性,数据:data也就是内容
Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard
文件目录结构作用及说明
/ 根目录,整个文件系统的起始点
/bin/ 存放系统核心命令,如cp、mv、mkdir等
/boot/ 存放启动Linux系统所需的文件,如内核、启动菜单等
/dev/ 存放设备文件,包含所有硬件设备及终端设备等
/etc/ 存放系统全局配置文件,如网络、用户、系统设置等
/home/ 存放用户的主目录
/lib/ 存放共享库文件,为程序的运行提供支持
/media/ 存放可移动设备,如U盘、光盘等
/mnt/ 临时挂载目录,用于挂载网络或本地的文件系统
/opt/ 第三方软件的安装目录,如Oracle、Google Chrome等
/proc/ 存放内存中的进程信息等系统信息
/root/ root用户的主目录
/sbin/ 存放系统管理命令,如reboot、shutdown等
/tmp/ 存放临时文件的目录,重启系统后该目录下的文件将被删除,因此该目录可以用于存放临时文件、缓存文件等。
/usr/ 存放用户安装的软件目录
/var/ 存放日志、锁定文件、缓存等可变的数据目录
文件类型
文件管理命令
ls
- 列出目录内容
cd
- 改变目录
pwd
- 显示当前工作目录的路径
mkdir
- 创建新目录
rmdir
- 删除空目录
touch
- 创建空文件或更新文件时间戳
cp
- 复制文件或目录
mv
- 移动或重命名文件或目录
rm
- 删除文件或目录
cat
- 连接并打印文件内容到标准输出
more
或 less
- 分页显示文件内容
head
- 输出文件开头部分
tail
- 输出文件结尾部分
chmod
- 改变文件或目录权限
chown
- 改变文件或目录的所有者
find
- 在目录树中查找文件
grep
- 文件中搜索字符串
inode
inode表,用来存储元数据,内有指针指向数据,存储了
inode number #每个文件独一无二的节点号
文件类型 权限 UID GID 链接数
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
直接指针,间接指针(指向指针的指针),多重间接指针
df -i可以查看到能分配的inode
节点编号用完之后只能删文件
文件共享
多个用户共享同一份文件,系统只需要保存一个该文件的副本即可,其他都是链接指向
硬链接
基于索引结点的共享方式
树形结构目录中,当有两个或多个用户需要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中
通俗而言,就是将一个文件和另一个文件目录关联起来,共享同一个数据块和inode
硬链接允许一个文件在文件系统中存在多个入口点
创建硬链接
ln <目标文件> <链接名>
删除目标文件不会立即删除其硬链接,只有当最后一个指向该文件的硬链接被删除时,才会真正释放磁盘空间
意味着硬链接之间没有所谓的原始和副本,它们都是相等的。删除任何一个硬链接都不会影响其他硬链接,只有当所有硬链接都被删除后,文件的内容才会被释放。
还可以使用
unlink <链接名>
进行解绑
在文件删除时,做了两件事
1.将目录中对应的记录删除
2.将硬链接数-1,如果为0,则进行磁盘释放
即使数据块仅存储一次,该文件也会在文件系统中以多个名称存在。这是硬链接的重要特性之一。
普通文件的硬链接数为1,因为它只有一个硬链接,而目录的硬链接数至少为2,因为它包括一个自身的硬链接和一个父目录的硬链接,并且会随着目录中的文件和子目录的增加而增加。
目录结构不能创建硬链接,为了维护文件系统的一致性和避免潜在问题
如:循环引用,如果目录A有一个硬链接指向B,B又指向A,将创建一个循环引用,会导致文件系统遍历目录时出现无限循环
软连接
使用户 B 能够共享用户 A的一个文件FILE,可以由系统创建一个LINK类型的新文件,也取名为FILE,并将该文件写入用户B的目录中,已实现用户B的目录与文件FILE的链接。
也就是一对一共享,硬链接是多对一共享
类似于一个快捷方式或别名
创建软连接
ln -s <目标文件或目录> <链接名>
与硬链接不同的是,当目标文件或目录被删除时,软连接将指向一个无效的目标
在使用软连接时,目标文件或目录的存在性和有效性至关重要
使用场景
可执行程序在系统中的某一个路径下藏得很深,或者自己写的一个软件放在系统很深的目录下时就考虑使用。
对比
链接的类型:
硬链接:硬链接是文件系统中的多个文件项,它们都指向同一个inode(磁盘上的数据块和元数据)。这意味着硬链接之间没有所谓的原始和副本,它们都是相等的。删除任何一个硬链接都不会影响其他硬链接,只有当所有硬链接都被删除后,文件的内容才会被释放。
软链接:软链接是一个特殊类型的文件,其中包含了指向另一个文件或目录的路径。软链接本身是一个独立的文件,它存储了目标文件的路径信息。如果原始文件或目录被删除,软链接仍然存在,但它会成为一个"死链接",指向一个不存在的目标。
跨文件系统:
硬链接:通常只能在同一文件系统内创建硬链接,因为硬链接与inode相关,而不同文件系统的inode不会关联。
软链接:软链接可以跨越文件系统边界,因为它们只是包含目标路径的文本文件。
文件类型:
硬链接:只能链接到文件,不支持链接到目录。
软链接:可以链接到文件或目录,也可以链接到其他软链接。
大小和性能:
硬链接:硬链接几乎没有大小,因为它们共享相同的inode和磁盘块。由于硬链接不需要额外的磁盘空间,因此通常更高效。
软链接:软链接的大小通常比硬链接大,因为它们需要存储目标路径信息。软链接需要解析目标路径,这可能会引入微小的性能开销。
修改和权限:
硬链接:硬链接的修改会反映在所有硬链接上,因为它们都共享相同的inode。硬链接之间没有权限区别。
软链接:软链接的修改不会影响目标文件或目录,因为它们只是指向目标的路径。软链接和目标之间可能具有不同的权限设置。
用途:
硬链接:常用于备份工具和版本控制系统,可以减少磁盘占用,因为它们共享相同的数据块。
软链接:常用于创建快捷方式或引用其他位置的文件或目录,也用于跨文件系统的链接。
重定向和管道
重定向
更改重新更改命令读取/输入以及输出的方式、方向。
有三种类型,输入重定向>、输出重定向<、错误输出重定向2>
command > file #输入重定向,将command结果重定向到file
command >> file #追加方式重定向到file,不会删除file中的原数据
command < file #输出重定向,将file中的内容作为输入内容
输入重定向
在需要将执行的结果到指定文件时使用
输出重定向应用场景
从文件中读取数据作为命令的输入:
自动化脚本中的多步骤处理:
处理大型数据集:
交互式命令的自动化
错误输出重定向用于向屏幕或其他输出目标写入错误信息
#将命令的错误输出重定向到一个文件
command 2> error.log
command 2>> error.log#追加
command > output.log 2>&1#同时重定向标准输出和错误输出到同一个文件(覆盖):
#简洁写法,某些可用
command &> output.log
可以实现邮件报警
多行重定向
cat > file.txt <<EOF
line 1
line 2
line 3
EOF
#实现多行重定向并且会输出
管道
管道符 “|”
用以进程之间的通信,让不同的进程看到同一份“资源”
将管道符左侧的输出,作为右侧的输入
也就是说,左侧需要能够输出,右侧需要能够输入
不是每个指令都能够接收输入
输出1…+100的值
seq -s + 100 | bc
#seq生成一个序列 -s 用+号作为分隔符
#bc进行运算
可以多次管道符
Linux安全模型
资源分派:是一个token
authentication:认证、验证用户身份
authorization:授权,不同的用户设置不同权限
accounting|audition:审计
当用户登录成功时,系统会自动分配令牌token,包括:用户标识和组成员等信息
用户组
类型
基本组,随用户创建,组名同用户名,只有一个
附加组,用户加入的其它组,一个用户可以同属于多个组。除基本组以外的组,称为附加组
创建
groupadd [opion] [group]
-g 指定新用户组(基本组)的组标识号(GID)
-G 指定附加组的组标识号(GID)
-o一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
例子:
groupadd group1#新增一个组1
groupadd -g 1001 group2#新增一个组2指定组标识号是1001
删除
groupdel 用户组
修改
groupmod
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
文件权限
文件特殊属性FACL,让root用户也无法删除修改
文本处理命令
cat #-A查看不可见字符
rev#翻转
more#分页显示
less
head#显示头
tail#显示尾
cut#按列抽取
-d指定分隔符 -f指定取的列
#小实例:ll | tail -n +2 | tr -s " " | cut -d" " -f3,9
#取出ll的第三列和第九列,tail -n +2从第二行开始取,因为第一行是total tr -s " "压缩空格 cut -d" " -f3,9空格为分隔符取第三行和第九行
paste#合并多个文件 -d指定分隔符 -s所有行合成一行显示
grep#搜索文件中的字符串
wc#统计单词数,行数,字符数
#- `-c`:统计字节数。
#- `-l`:统计行数。
#- `-w`:统计字数。
#这些选项可以组合使用,以同时显示字节数、字数和行数。例如,`wc -lcw file1 file2` 会显示 `file1` 和 `file2` 的字节数、字数和行数,以及它们的总计。
diff#比较两个文件、目录的差异
cmp#比较两个文件是否有差异
patch#可以将git diff 等命令生成的比较文件(patch文件)应用到不同版本的同一个工程中,是合并代码的一种方式。
tr#字符转换,一一对应,无对应关系的转换为最后一个
#可以实现转换大小写tr 'a-z' 'A-Z'
#-d可以用于删除
#-s压缩,连续的会压缩为1个
tee#-a保留原文件内容
#可以和管道搭配让既输入重定向又在终端显示,感觉也可以cat.
sort#排序
#常用选项 -n依照数值的大小排序,默认是按照asicc码对比。-u去重 -o<输出文件>排序结果输出到指定文件 -r倒序
#应用场景:查看分区占用最高的 df | tail -n +2|tr -s ' '% |cut -d%-f5|sort -nr
unique#去重
#从输入中删除前后相接重复的行
#-c 显示每行重复出现的次数 -d 仅显示重复过的行 -u仅显示不重复的行
正则
基本正则BRE
-
^
:匹配行的开始。 -
$
:匹配行的结束。 -
.
:匹配任意单个字符(除了换行符)。 -
*
:匹配前面的字符零次或多次。 -
[]
:匹配方括号中的任意一个字符。例如,[abc]
匹配a
、b
或c
。 -
[^]
:匹配不在方括号中的任意一个字符。例如,[^abc]
匹配除了a
、b
和c
之外的任意字符。 -
\{n,m\}
:匹配前面的字符至少n
次,但不超过m
次。注意,在大多数基本正则表达式实现中,需要使用反斜杠\
进行转义,即\{n,m\}
写作\{n,m\}
。 -
\
:转义字符,用于匹配特殊字符本身。例如,\.
匹配.
字符。举例
grep 'abc' filename#查找包含abc的行 grep '^abc' filename#以abc开头的
拓展正则ERE
-
+
:匹配前面的字符一次或多次。 -
?
:匹配前面的字符零次或一次。 -
|
:匹配逻辑或,即匹配|
两边的任意一个模式。 -
()
:将多个字符组合成一个整体,并可以引用(通过\1
、\2
等)已经匹配到的内容。 -
{n,m}
:匹配前面的字符至少n
次,但不超过m
次。注意,在扩展正则表达式中,不需要使用反斜杠\
进行转义。grep -E 'abc|xyz' filename#查找包含abc或xyz的行 grep -E '^abc.*xyz$' filename#查找以abc开头,后面跟着任意字符,再以xyz结尾的行
文件查找
find
https://blog.csdn.net/m0_46674735/article/details/112390027
基本格式
find 目录 -选项 动作[-print -exec -ok …]
常规选项
-a:and 必须满足两个条件才显示
-o:or 只要满足一个条件就显示
-name:按照文件名查找文件
-iname:按照文件名查找文件(忽略大小写)
-type:根据文件类型进行搜索 f普通文件 l软连接文件 d目录 b块设备 s套接字
-perm:按照文件权限来查找文件
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-fprint 文件名:将匹配的文件输出到文件。
-newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件
下面有举例
#搜索/home目录下txt结尾的文件,并将输出到指定文件中(re.txt)
[root@localhost home]# find /home/ -type f -name "*.txt" -fprint /tmp/re.txt
[root@localhost home]# cat /tmp/re.txt
/home/a.txt
/home/b.txt
根据目录深度搜索
#搜索最大深度为3,类型为目录
find /usr/local/ -maxdepth 3 -type d
#搜索深度距离当前目录至少2个子目录的所有文件
find /usr/local/ -mindepth 2 -type f
根据时间戳搜索
时间戳:访问时间、修改时间、变化时间
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
#搜索七天内被访问过的所有文件
find /etc/ -type f -atime -7#若为+7则为超过七天被访问的所有文件
#-amin七分钟内被访问的
根据文件大小搜索
find . -type f -size 文件大小单元
文件大小单元:b块 c字节 w字 k千字节 M兆字节 G字节
#搜索大于10K的
find /etc/ -type f -size +10k
#搜索小于10k的
-10k
#搜等于10k的
10k
#搜大于10G的日志文件并删除
find /var/log -type f -name "*.log" -size +10G -delete
根据权限搜索
-perm
locate
并不是真的查找文件,查的数据库,所以速度比find快
locate [选项] 文件名
"-c" 查询指定文件的数目
"-e" 只显示当前存在的文件条目
"-h" 显示"locate"命令的帮助信息
"-i" 查找时忽略大小写区别
"-n" 最大显示条数" 至多显示"最大显示条数"条查询到的内容。
"-r" 使用正则运算式做寻找的条件
文件打包与压缩
文本处理三剑客
sed
可以执行包括替换文本、插入和删除行、格式化输出等操作在内的多种功能,可以和正则表达式配合使用
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
常规选项
-e 用指定的命令或脚本来处理输入的文本
-f 用指定的脚本文件来处理输入的文本文件
-n、-quite或silent 表示仅表示处理后的结果
-i:直接编辑文本文件
操作
a:增加,在当前行下面增加一行指定内容。
c:替换,讲选定行替换为指定内容。
d:删除,删除选定的行。
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果又非打印字符,则以ASCLL码输出。通常与“-n”选项一起使用。
s:替换,替换指定字符
y:字符转换
awk
grep
定时任务调度
crontab
systemctl start crond#启动服务
分区和挂载
使用了载入的处理方法,文件系统包含了一整套的文件和目录将一个分区和一个目录联系起来
网络配置
NAT
RPM包管理
查找提供某种服务的包
rpm -q --whatprovides sshd