linux系统命令
操作系统
操作系统分为windows和linux
linux发展历程:
unix ----linux -----安卓/ios/macos
windows:管理员admin,命令不区分大小写
linux:管理员root,命令严格区分大小写!(⭐)
命令解释器bash、shell
命令行编辑的几个辅助操作:
Tab键:自动补齐 反斜杠\:强制换行 Ctrl + U:清空至行首 Ctrl + K:清空至行尾 Ctrl + L :清屏 ctrl + c 停止本次命令的编辑 ctrl shift + 放大字体 ctrl - 缩小字体 选中即复制 鼠标滚轮按下即粘贴
用户管理:
普通用户 管理员 root su:切换用户时不改变位置 su -:切换用户时将目录改为切换用户的家目录(安全) su - 切换用户为管理员,那么再次输入su -为重新登录用户 su - 用户名称 切换普通用户
命令行格式:
[root@localhost ]# 第一个root是用户 第二个localhost是主机名 第三个是当前位置 ~:当前用户的家目录 格式:命令字 [选项][参数] 选项:功能 参数:命令的执行对象 选项:通过-引导 短格式-长格式-- 两个短格式的选项可以合并 -a -l -al
(⭐)linux目录:
Linux所有的内容都是以文件或目录的形式显示,并且严格区分大小写
/ 根目录一个大的文件夹 /boot:用于引导操作系统 /etc :存放配置文件 /root:管理员的家目录 /home:普通用户的家目录 /dev:存放硬件设备的目录
目录操作命令:
pwd # pwd显示的一定是绝对路径!
cd 切换目录 格式:cd 要切换的目录 路径: 绝对路径:从根目录开始的路径 相对路径:直接切换到当前目录之下的目录 cd .. 切换到上级目录
ls 查看当前目录内容 格式:ls [选项 参数(目录)] 选项: -a 显示全部内容包括隐藏文件 名称前带.的是隐藏文件 -l 显示详细信息: [root@localhost ~]# ls -l drwxr-xr-x. 2 root root 6 4月 24 14:45 桌面 -rw-------. 1 root root 1839 4月 24 14:42 anaconda-ks.cfg 第一部分:项目 -文件 d目录 第二部分:权限 rwx读写执行 第三部分:归属 -d 查看当前目录本身 .当前目录 ..上级目录 --color:以不同颜色区分不同类型文件,默认开启,关闭:--color=none
mkdir 创建目录 格式:mkdir [选项] 目录名称 -p 迭代创建 mkdir -p jtxy/{zhangsan,lisi,wangwu}
文件操作命令:
touch
cp 选项 源文件 复制成功的文件 例子:cp /root/aa /home/bb 将root下的aa复制到/home下并改名叫bb -r 同时复制目录内容
mv 选项 源文件 复制成功的文件 重命名:将文件重新移动到当前位置相当于改名 例子:mv /opt/aa /opt/bb 移动目录时不需要加-r选项
(⭐)复制和移动的区别?
复制:是在目标位置创建一个相同的文件,详细信息(权限,所有者,属组,安全类型上下文等)根据对方目录决定,复制目录需要加-r 移动:将当前内容移动到对方目录,详细信息不变
rm 删除 选项: -r 删除目录及内容 -f 无需确认 (⭐注意rmdir只能删除空目录!) rmdir 删除空目录
ln 软链接:相当于快捷方式 ln -s /root/aa /opt/jtxy 硬链接:相当于副本文件
文件内容操作命令
cat 文件名称: 正序查看文件内容 tac 文件名称: 倒叙查看文件内容 (⭐) less 文件名称: 全屏显示文件内容 操作:滚轮可以上下查看,回车。空格翻到下一页,b翻到上一页,q退出 more 文件名称: 正序查看一部分文件内容(分屏查看文件内容) head 文件名称:查看文件前几行 默认查看前十行 选项: -n: n为行数 tail 文件名称:查看文件后几行 默认查看后十行 选项: -n: n为行数
查找命令
(⭐) find [查找范围] [查找条件] 选项: -name 按照文件名称查找 find /root/ -name "aa" #查找/root目录下名称为aa的内容 find /root/ -name "a*" #查找/root目录下以a开头的文件 -type 按照文件类型查找 find /root/ -name "aa" -type d #查找/root目录下目录名称为aa的内容 find /root/ -name "aa" -type f #查找/root目录下文件名称为aa的内容 -user 按照文件归属查找 与:条件都满足 -a 默认 或:满足一个即可 -o 非:查找不满足的 ! 注意:-a和-o是放在选项之间,!放在选项之前 例子: (⭐)find /etc/ -name "a*" -o -name "b*" #查找名称以a开头或者以b开头的内容 find / ! -name "aa" # 在根目录查找名称不是aa的
(⭐) grep [选项] 查找条件 目标文件 grep "a" /root/anaconda-ks.cfg # 查看文件中包含a的字符所在行 特殊符号: ^.... 以...开头 ....$ 以...结尾 ^$ 表示空行 [root@localhost opt]# grep "^a" /root/anaconda-ks.cfg #查看以a开头的行 autopart --type=lvm [root@localhost opt]H# grep "a$" /root/anaconda-ks.cfg #查看以a结尾的行 ignoredisk --only-use=sda (⭐)选项: -i:查找时忽略大小写 -v:反转查找,输出与查找条件不相符的行 -r:目录下递归查找某个字符 -n:显示行号 例子:grep -rn "a" # 搜索出当前目录下所有文件中含有"a"字符串的行
压缩文件
tar (⭐)格式: 创建归档:tar 选项 归档后文件的位置以及名称 目标文件或者目录 释放归档:tar 选项 归档文件名 [-C 目标目录] 选项: -c 创建归档文件 -f 指定归档文件,通常需要设备归档文件名,需要加-f并且放在所有选项之后 -v 显示进度 -t 查看归档内容 -x 释放归档文件 -z gzip格式的归档(压缩) -j bz2格式的归档(压缩) 例子: tar -×f /opt/aa.tar #释放归档 tar -cf /opt/aa.tar /root/anaconda-ks.cfg #将/root下的文件打包到/opt下以aa.tar命名 # 注意,使用上面的命令压缩之后,可能会报错,如果是中文版的,报错信息如下: # [root@localhost ~]# tar -cf /opt/aa.tar /root/anaconda-ks.cfg # tar: 从成员名中删除开头的“/” # tar: Removing leading '/' from member names # 其实这并不是报错了,这是警告,因为实际上已经压缩成功了,警告信息的意思是: # 当前压缩不仅仅压缩了文件内容,还把文件所在的路径信息给压缩了,首先是泄露路径信息不安全,其次是解压后会给使用者一定的使用困扰 # 进入到需要压缩的文件下,使用相对路径就可以 # [root@localhost ~]# cd /root # [root@localhost ~]# tar -cf /opt/aa.tar anaconda-ks.cfg 注意: 1、ls查看时归档文件和压缩文件都是红色显示 2、默认情况释放归档到当前目录下,如果想要指定需要加-C 3、如果打包时加了压缩选项,解包时也需要添加
其他命令
history n 命令历史最后n条 in:执行历史中的第几条命令 选项:-c 清除命令历史 # 重启后失效
alias命令别名 为使用频率较高的复杂命令行设置简短的调用命令 alias查看命令别名 alias a="ping 127.1.1.1"设置命令别名 简单-> 复杂的命令 unalias -a #取消所以得命令别名 unalias 简答的别名 #取消命令别名 注意:命令别名重启之后即丢失 如果想永久生效:将设置命令保存到root用户的.bashrc文件中
将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上 (⭐)要求:每天中午12点查看cpu,内存,硬盘的状态保存到/home/zt文件中(重定向可以实现) crontab -e # 先进入到计划任务视图 0 12 * * * ps -ef >> /home/zt (⭐) > 代表清空源文件并保存重定向的结果, >> 表明将重定向的结果追加到文件中 重定向的分类: 重定向标准输出 > :清空目标文件的内容,并且将命令的输出结果保存到某个文件 >> :将命令的输出结果追加到某个文件中 例子:ls -al >> /root/test #将ls-al命令的输出结果重定向到test文件中 重定向标准错误: 2> :清空目标文件的内容,并且将错误结果保存到某个文件 2>> :将错误结果追加到某个文件中 重定向标准输出和错误: &> :清空目标文件的内容,并且将标准输出和标准错误结果保存到某个文件 &>> :追加
wc 行数、字数、字符 选项: -l 行数 -w 字数 -c 字符数
| 作用:将第一个命令的输出结果作为第二个命令的输入 例子: grep "b" /root/initial-setup-ks.cfg | wc #统计文件中包含b的行数字数字符数 20 58 879 搜索出当前目录下所有文件名中含有"data"字符串的行 find * | grep "data" 搜索出当前目录下所有文件内容中含有"data"字符串的一共有多少行 grep -r "data" * | wc -l
格式: vim 文件的位置及名称 vim /root/data 模式: 命令模式:复制、粘贴、查找 输入模式:输入内容 末行模式:保存、另存为、打开其他文件 0∶快速跳转行首 $∶快速跳转行尾 gg:快速跳转首行 G︰快速跳转末行 : set nu显示行号 : set nonu关闭显示行号 dd :删除光标所在行 yy ︰复制光标所在行 粘贴: p(小)∶粘贴到光标所在行之后 P(大)广∶粘贴到光标所在行之前 u(小)撤销上一步操作,多次按下u,撤销多步操作 末行模式操作 : w 文件位置及名称 另存为 : q 未保存退出 : q! 不保存并退出 : wq 保存并退出 : e 打开新的文件进行编辑 : r 导出其他文件的内容到当前文件中 :%s 需要替换的/替换后的g替换全部 例子: :% s/old/new/g将整个文件中的old替换为new
用户和组
用户分类:
- root管理员(UID 0) - 普通用户(UID 1000---60000) - 程序用户
UID(用户标识号):唯一标识,一个标识一个用户
组账号:
- 基本组:一个用户一个基本组 - 附加组:一个用户可以有多个附加组
GID(用户组标识号):唯一标识,一个标识一个用户组,一般来说创建用户的时候会自动创建一个和用户同名的用户组,为用户的基本组
(⭐)常用的四个文件
- (⭐)**/ect/passwd:存放用户的基本信息** root:x:0:0:root:/root:/bin/bash
字段1:用户名称
字段2:用户的密码占位符 字段3:用户UID 字段4:用户组GID 字段5:当前用户的作用 字段6:当前用户的家目录 字段7:登录shell信息 /bin/bash 允许登录shell /sbin/nologin 不允许登录shell **不允许在命令行界面登录当前用户** - (⭐)**/etc/shadow:存放用户的密码信息** root:$6$EmzudMqq.j53ThAX$i5rX2hQeGJt1bJhJVc5mqfmy3.Yk0IzJ4jJhNXBiDUhSpctKEBgGGEUveyvSPqdmqCLRRMO98FAkDS6SdTeQw0::0:99999:7:::
字段1:用户名称
字段2:加密的用户密码 字段3:上次的修改密码距离1970.1.1多少天,没有则代表没有修改过密码 字段4:密码的最短有效天数,默认值为0 字段5:密码的最长有效天数,默认值99999 字段6:提前多少天提醒用户密码过期 字段7:在密码过期之后多少天禁用此用户 字段8:账号失效时间,默认为空 字段9:保留字段,未使用 - (⭐)**/etc/group:存放用户组信息** root:x:0:
字段1:用户组名称
字段2:用户组密码占位符 字段3:用户组GID 字段4:用户组成员 - **/etc/gshadow:存放用户组密码信息**
(⭐⭐⭐)用户的相关命令
useradd 创建用户 格式:useradd 选项 用户名 # 注意:创建的用户是没有密码的,需要手动配置 选项: -u 指定UID 例子: useradd -u 2000 bb -s 指定shell登录信息 例子:useradd -s /sbin/nologin dd -d 改变用户根目录位置 例子:useradd -d /opt/ee/ ee -g 更改用户的基本组以及GID 例子:useradd -g 2000 mm -G 将用户加入到某个组(附加组) 例子:useradd -G aa gg # 创建gg用户并添加到aa用户组中 # 使用-g -G时的用户组必须存在 # 对谁进行操作就将谁放到最后 # 上面的选项全部要记,下面这俩可以不记 -M 创建用户不创建家目录 -N 创建用户不创建基本组
passwd 更改密码 格式:passwd 选项 【更改用户】 选项: -d 清空用户的密码,使之无需密码即可登录 -l 锁定用户(无法以当前用户登录系统) -S 查看用户是否锁定 LK:锁定 NP:锁定 Passwd:存在密码 -U 解锁用户(可以登录系统) 例子:passwd -l gg 锁定用户 (⭐)echo "redhat" | passwd --stdin ff # 批量修改多个用户的密码 解释:将echo 输出做passwd命令输入,但是要以passwd命令的标准输入因此加--stdin echo直接输出 --stdin标准输入 # 注意:当用户存在密码时即可以以用户身份登录系统,su - 是以用户身份登录shell
usermod 更改用户信息 格式:usermod 选项 用户名 选项: -u 指定UID 例子: usermod -u 2000 bb -s 指定shell登录信息 例子:usermod -s /sbin/nologin dd -d 改变用户根目录位置 例子:usermod -d /opt/ee/ ee -g 更改用户的基本组以及GID -G 将用户加入到某个组(附加组) -a 添加 例子: usermod -l jtxy ee 将用户ee的名称改为jtxy -m 一般与-d一起使用,更改家目录时配置文件一块改 usermod -aG aa gg # 添加用户gg的附加组为aa uid=2003(gg) gid=2003(gg) 组=2003(gg),2002(aa) # group 是用户组:第一个用户组时基本组 逗号分隔的第二个是附加组
id 查看用户的信息 [root@localhost ~]# id gg uid=2005(gg) gid=2001(cc) groups=2001(cc),2000(bb) #groups是用户组:第一个用户组时基 本组 逗号分隔的第二个是附加组
userdel 删除用户 格式:userdel 选项 用户名 选项: (⭐)-r # 连同家目录一起删除
chage 查看并修改用户的密码策略 格式:chage [选项] 用户名 选项: (⭐) -l # 查看用户的密码策略 查看的信息: 上次密码更改 有效期 多长时间禁用 登录的有效期 最短天数 最长天数 提前多少天警告 -M:密码的最长有效天数 -m:密码的最短有效天数 -W:密码的警告天数 -Ⅰ(大写的i)∶密码的过期之后多长时间禁用用户 -E:账号的过期时间 -d:更改时间
用户组
groupadd 创建用户组 格式:groupadd 选项 用户组名 选项: -g 指定GID 例子: groupadd -g 3000 fujiazu #创建用户组指定GID为3000
groupdel 删除组账号 格式: groupdel 组帐号名 组成员管理
gpasswd 组成员管理 格式: gpasswd [选项] 组帐号名 选项 -a:添加用户当前组中 -d:将用户从当前组中删除 #题目:将dd用户加入到jtxy中 #方法一: usermod -aG jtxy dd #方法二: gpasswd -a dd jtxy (⭐)# 对谁操作就把谁放在最后!!!
用法:groupmod [选项] 组 选项: -g, --gid GID 将组 ID 改为 GID -h, --help 显示此帮助信息并推出 -n, --new-name NEW_GROUP 改名为 NEW_GROUP -o, --non-unique 允许使用重复的 GID -p, --password PASSWORD 将密码更改为(加密过的) PASSWORD -R, --root CHROOT_DIR chroot 到的目录 -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
权限
文件权限
读权限:如果用户对该文件拥有读权限,即可读取文件内容,cat、less、more、vim、head
写权限:如果用户对该文件拥有读权限,即可写入,可以使用vim、echo
执行权限:可以将该shell脚本文件执行
对于目录
读权限:ls
写权限:最高权限:cp、mv、touch、mkdir、rm3
执行权限: cd
归属
属主:文件的所有者,默认谁创建的就归谁
属组:属主的基本组,因此一个用户的基本组时属主的基本组,那这个用户就拥有属组的权限
其他用户
aa 用户﹑创建jtxy文件 jtxy 文件所有者: aa 属组 drwx r-x r-x. 2 root root 6 4月 24 14:45 桌面 所有者 属组 其他用户 权限是3位一组, r:读 w:写 ×:执行
(⭐⭐⭐)权限命令
chmod 更改用户权限 格式1: chmod [ugoa] [+-=] [rwx]文件或目录 u:所有者 g∶属组 o:其他用户 a:所有用户 +加权限 -减权限 =设置权限 例子: [root@localhost ~]# chmod u=rwx anaconda-ks.cfg [root@localhost ~]# chmod g=rwx anaconda-ks.cfg [root@localhost ~]# chmod o=--x anaconda-ks.cfg [root@localhost ~]# ls -l anaconda-ks.cfg -rwxrwx---. 1 root root 1839 4月 24 14:42 anaconda-ks.cfg # 注意,linux系统在处理命令时,处理到-的时候,就不会继续处理,因此没有权限 (⭐⭐)格式2:chmod xxx 文件目录 读(r) : 4 写(w) : 2 执行(x) : 1 第一个数字:所有者的权限 第二个数字:属组的权限 第三个数字:其他用户的权限 644 所有者:rw- 属组:r 其他:r 例子: [root@localhost ~]# chmod 764 anaconda-ks.cfg [root@localhost ~]# ls -l anaconda-ks.cfg -rwxrw-r--. 1 root root 1839 4月 24 14:42 anaconda-ks.cfg # 注意:对于文件来说,权限取决于父目录(上级目录)的权限 # 例子:如果该用户没有aa文件的权限,但是该用户拥有aa上级目录的权限,即可对aa进行强制操作 选项: -R:递归修改指定目录下所有文件、子目录的权限﹐#格式1、格式2
chown 更改所有者和属组 格式: chown 属主 文件或目录 chown :属组 文件或目录 chown 属主:属组 文件或目录 -R: 递归修改指定目录下所有文件、子目录的归属
chgrp 格式: chgrp 属组文件或目录
ACL
问题:-rwxI-----. 1 bb root 0 May 9 21:24 abc.txt
要求: aa可以只能查看文件(r)
cc只能拥有写权限()
dd只能拥有执行权限()
ACL权限可以对单一用户和单一用户组进行细致的读写执行权限设置
getfacl 文件或目录
setfacl -m u:用户名:rw 文件或目录 选项: -m 设置权限 -x 删除acl权限 -b 清除所有的ACL权限 -d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限; -k:删除默认 ACL 权限; -R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效; 预设权限(mask) setfacl -m m:r bb #修改预设权限 #注意:预设权限会和设置的ACL权限进行与运算(同真为真),计算的结果权限结果就是有效的权限 (⭐)例子: setfacl -m u:aa:r /root/abc.txt #设置aa用户拥有abc.txt的读权限 setfacl -x u:natasha bb #删除ACL权限 setfacl -b bb #清除bb文件所有的acl权限 案例1: #设置用户组natasha对文件权限rwx,再将dd用户的基本组改为该组,查看dd对该文件的权限 [root@localhost opt]# touch bb [root@localhost opt]# ll 总用量 0 -rw-r--r--. 1 root root 0 5月 10 10:29 bb [root@localhost opt]# setfacl -m g:natasha:rwx bb [root@localhost opt]# getfacl bb # file: bb # owner: root # group: root user::rw- group::r-- group:natasha:rwx mask::rwx other::r-- [root@localhost opt]# id dd uid=2001(dd) gid=2001(dd) 组=2001(dd),2006(jtxy) [root@localhost opt]# usermod -g natasha dd [root@localhost opt]# id dd uid=2001(dd) gid=2008(natasha) 组=2008(natasha),2006(jtxy) [root@localhost opt]# su dd [dd@localhost opt]$ ll 总用量 0 -rw-rwxr--+ 1 root root 0 5月 10 10:29 bb 案例2: # 对bb文件设置只读预设权限,查看natasha的effective(有效权限)权限 [root@localhost opt]# getfacl bb # file: bb # owner: root # group: root user::rw- group::r-- group:natasha:rwx mask::rwx other::r-- [root@localhost opt]# setfacl -m m:r bb [root@localhost opt]# getfacl bb # file: bb # owner: root # group: root user::r-- group::r-- group:natasha:rwx #effective:r-- mask::r-- other::r--
Set权限
set权限,s就是set权限的标识
分类:
SUID
(⭐)作用:如果该文件拥有SUID权限,其他用户执行该文件时,将拥有所有者的权限
(⭐)chmod u+s
(⭐)注意:前提条件为必须要有执行权限
#举个例子,存放密码的/etc/shadow文件,其他用户没有写的权限,却依旧能修改密码运行passwd指令,就是因为shadow文件具有suid权限,其他用户执行该文件时,将会拥有所有者的权限,那么去除/usr/bin/passwd的suid,查看普通用户是否可以更改密码 [root@localhost opt]# ls -l /etc/shadow ----------. 1 root root 3246 5月 10 09:11 /etc/shadow [root@localhost opt]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 33544 12月 14 2019 /usr/bin/passwd [root@localhost opt]# chmod u-s /usr/bin/passwd [root@localhost opt]# su natasha [natasha@localhost opt]$ passwd 更改用户 natasha 的密码 。 Current password: 新的 密码: 重新输入新的 密码: passwd: 鉴定令牌操作错误
SGID(通常设置到目录上)
(⭐)作用:在该目录内所建立的文件或目录的属组,将会自动继承父目录的属组
(⭐)chmod g+s
sticky(粘滞位) 通常设置目录上
标识为t
(⭐)作用:用户不能删除该目录中其他用户的文件
对其他用户进行操作
(⭐)chmod o+t 文件或目录
chmod mxxx 文件或目录 m:特殊权限 x:普通权限 m:SUID:4 SGID:2 粘滞位:1 例子:chmod 4765 aa # 设置权限为所有者:rwx,其他属组:rw,其他用户:rx,增加SUID # 不要随便添加set位权限
磁盘和文件系统管理
机械硬盘:
磁盘、磁头、磁头臂
N极和S极:
磁盘的磁性材质,举例:N:1,S:0
数据:
假如数据保存在c:\交通学院,那么电脑应该怎么找到呢
扇区:最小的读写单元:512B
磁道:多个扇区组成的一圈,从外向里,编号从0开始
柱面:多个磁盘中相同位置/编号的磁道共同组成一个柱面
磁头:表示数据在盘片的正反面,磁头编号从上到下磁头编号:0、1、2.....
主引导扇区(MBR):引导操作系统启动、以及决定分区的数量
位置:0磁头0柱面1扇区
0磁头:数据在第一个盘片的正面
0柱面:数据在磁道
分区表:
MBR
MBR分区表长度:64字节,一个分区占16个字节,最多可以分4个分区
分区类型:
主分区(P):16字节的分区,最多有4个主分区
拓展分区(L):是将最后一个主分区当作拓展分区使用
逻辑分区(E):逻辑分区实在拓展分区的基础上划分的
GPT
最多可以分128个分区
linux将硬盘、分区等设备均表示为文件
磁盘命令
lsblk 查看硬盘信息 选项: -f 查看文件系统以及挂载信息 分区: # MBR分区方式: fdisk 硬盘名称 举例:fdisk /dev/sdb 操作命令: n 分区 p 查看分区表 d 删除分区 t 改变分区类型 w 保存退出 例子: 命令(输入 m 获取帮助):n 分区类型 p 主分区 (0个主分区,0个扩展分区,4空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (1-4, 默认 1): 2 第一个扇区 (2048-41943039, 默认 2048): 上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +10G 创建了一个新分区 2,类型为“Linux”,大小为 10 GiB # GPT分区: gdisk 硬盘名称 最多可以分128个分区 # 2T以上的分区GPT:gdisk,2T以下的分区:MBR:fdisk
文件系统(建立文件系统的过程就是格式化)
文件系统是操作系统用于明确磁盘分区上的文件的方法和数据结构;即在磁盘上组织文件的方法
文件系统的作用:
-
通过文件系统记录数据的存放位置、
-
只有创建文件系统之后,才可以存放数据
NFTS windows默认的文件系统 分配单元大小4096字节
FAT16,FAT32:单个文件不超出4G,这种文件系统常用于U盘
linux中默认使用的文件系统类型
EXT4,第四代扩展(Extended)文件系统
XFS,一种非常优秀的日志文件系统(redhat8操作系统使用的文件系统)
SWAP,交换文件系统
mkfs 建立文件系统 格式:mkfs 选项 分区或硬盘 选项: -t 指定文件系统的类型 # 拓展分区不能格式化 简单配置:mkfs.文件系统类型 例子: [root@localhost ~]# mkfs.ext4 /dev/sda1 mke2fs 1.45.4 (23-Sep-2019) 创建含有 2621184 个块(每块 4k)和 655360 个inode的文件系统 文件系统UUID:bbe48970-c3a8-4369-8658-34371d4ce16e 超级块的备份存储于下列块: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 正在分配组表: 完成 正在写入inode表: 完成 创建日志(16384 个块)完成 写入超级块和文件系统账户统计信息: 已完成 格式化成功的标志: ext4:出现done xfs:出现meta-data=分区位置 vfat: mkfs.fat 4.1 (2017-01-24) blkid:查看文件系统和UUID #注意:UUID唯一表示一个分区
挂载:
为什么要挂载?
windows操作系统和Linux分区有区别
Linux系统1个根目录
windows系统1个分区1个根目录
所以将根目录中的某个目录和分区进行关联
注意:重启之后挂载就没了
#前提:挂载的目录必须存在 mount 分区位置以及名称 挂载目录 例子:[root@localhost ~]# mount /dev/sda1 /mnt/a1 umount 分区位置 挂载目录 #注意:如果已经挂载之后,需要删除分区,首先要卸载挂载点,才能删除分区,配置的挂载重启之后即丢失
开机后自动挂载
/etc/fstab
/dev/mapper/rhel-swap swap swap defaults 0 0 分区位置以及命令 挂载点目录 文件系统 挂载规则 是否检查 是否备份
交换分区
手机:
虚拟内存:使内存增加
8G +4G =12G
原理:将部分磁盘容量当做内存容量使用
安卓基于Linux改进
linux:
交换分区:将分区容量当做内存使用
交换文件系统:swap
步骤:
步骤: 1、建立交换分区 t 改变分区类型为82 2、格式化 mkswap 分区名 mkswap /dev/sda1 3、挂载 swapon 分区名 挂载交换分区 swapoff 分区名 卸载挂载点 free -h查看内存 swapon -s查看交换分区 swapon -a重新挂载交换文件分区 交换分区自动挂载:挂载点目录和文件系统均为swap
破解密码
-
重启系统,在选择系统界面,按下e
-
在倒数第二行最后输入rd.break ctrl+x 进入终端界面
-
输入mount -o remount, rw /sysroot
-
chroot /sysroot #切换shell,进入bash界面,才能输入passwd命令
-
passwd root指定修改root用户的密码
-
touchl /.autorelabel
-
输入两次exit退出
(⭐⭐⭐)逻辑卷(LVM)
逻辑卷(LV):从卷组划分的容量,用于分配给用户使用
卷组(VG):多个物理卷组成
物理卷(PV):由多个硬盘或者分区组成,默认4MB大小的PE 基本单元
创建物理卷:pvcreate 格式:pvcreate 物理卷的成员 例子:pvcreate /dev/sda1 查看物理卷:pvsan、pvs 查看物理卷的详细:pvdisplay
创建卷组:vgcreate 格式:vgcreate 卷组名称 物理卷成员 (⭐)选项:-s 指定PE大小 例子:vgcreate -s 100M vgname /dev/sda1 查看卷组:vgs 查看卷组的详细信息:vgdisplay 将新的物理卷加入到已有的卷组中 vgextend wgroup /dev/sdb
vgremove 格式:vremove 卷组名
lvcreate 格式:lvcreate -l/-L -n 逻辑卷的名称 卷组名称 选项: -l pe数量,逻辑卷大小由多少个pe组成 -L 指定逻辑卷大小 查看逻辑卷:lvs 逻辑卷的删除:lvremove /dev/vgname/lvname 逻辑卷的路径:/dev/卷组名/逻辑卷名 /dev/mapper/卷组名-逻辑卷名 #注意:/dev/mapper专门用于存放逻辑卷文件 格式化: mkfs.ext4 /dev/vgname/lvname mkfs.ext4 /dev/mapper/vgname-lvname 挂载: 例子:mount /dev/mapper/vgname-lvname /shandong df -hT 查看挂载目录的信息 例子:PE大小为16MB。指定创建逻辑卷为513MB,513MB无法整除16,因此不够一个PE大小,按照一个PE大小计算,512MB+16MB=528MB
扩容和缩容
vgextend:扩容 格式:vgextend/cgreduce 卷组名 物理卷成员 vgreduce:缩容Ⅰ
lvextend 格式: lvextend -L 空间 逻辑卷的路径 lvextend -L +20G /dev/mapper/vgname-lvname #注意:容量直接写20G,是将逻辑卷的容量改为20G,+20G是增加20G df-hT查看挂载目录的信息(包括容量) #注意:扩容逻辑卷的同时也需要扩容文件系统 ext4文件系统的扩容: resize2fs -p 逻辑卷的路径 xfs文件系统的扩容: xfs_growfs 逻辑卷的路径 例子: lvextend -r -L +20G /dev/mapper/vgname-lvname 扩容文件系统和逻辑卷 lvreduce 格式: lvreduce -r -L 容量 /dev/mapper/vgname-lvname #注意:缩容逻辑卷的前提—定要卸载挂载点(扩容不需要) 挂载小知识: 挂载之后创建的数据,在卸载之后挂载数据依然存在 挂载之前创建的数据,在卸载之后挂载数据被系统隐藏 步骤: 1、卸载挂载点 2、fsck -f 逻辑卷路径 #将要缩容的数据调整到其他位置 3、lvreduce -r -L 容量 逻辑卷路径 #缩容逻辑卷和文件系统 4、重新挂载 #xfs文件系统不支持缩容
(⭐⭐⭐)vdo
存放硬盘中的数据以0、1二进制表示
vdo卷通过三步来优化空间,实现小容量存放大数据
通过rpm -qa |grep "vdo"查询当前系统是否有vdo
-
零区块排除:通过将非0的数记录,将0的数据删除,保留0数据位置以及数量即可
-
重复数据删除:将重复的数据删除
-
压缩
(⭐⭐) vdo create --name=vdo0 --device=/dev/sdb1 --vdoLogicalSize=10T 名字 vdo卷的成员 vdo卷的大小 vdostats --human-readable 查看vdo卷的大小 格式化: ext4快速格式化:mkfs.ext4 nodiscard -E vdo卷的路径 xfs快速格式化:mkfs.xfs -K vdo卷的路径 挂载: mount /dev/mapper/vdo1 /test 开机后自动挂载: vim /etc/fstab /dev/mapper/vdo1 /test xfs _netdev 0 0 # _netdev:网络设备 # 系统在挂载的时候顺序:先挂载磁盘、网络设备以及其他后挂载 # 注意:vdo技术实现的基础是vdo软件、先挂载vdo的话,软件没有启动 dd if=/dev/zero of=jtxy1 bs=1024 count=3 # 建立一个0填充的3Gb文件
进程管理
程序(软件):静态保存的到吗
进程:动态执行的代码
父进程:用于引导子进程的启动
守护进程:用于引导操作系统启动的进程 svstemd PID1
ps:查看静态进程(当前状态) 格式:ps 选项 ps aux 查看所有用户的进程信息 BSD ps -ef ps -ef | less 全屏查看系统信息 ps 查看当前运行的进程 内容: PID:进程ID 唯一标识一个进程 TTY:终端 STAT:状态 R:运行 S:睡眠 Z:僵死 s:当前进程存在子进程 PPID:父进程ID
top 选项: 按k结束进程(9:强制结束进程) 按r修改优先级(NI) nice优先级 (-20 ---- 19) 值越小越优先
kill 根据PID结束进程 格式:kill 选项 PID 选项: -9 强制结束进程 killall 根据名称结束进程 例子:killall -9 top pkill 终止终端登录用户 w 查看哪些用户登录到系统中
ssh 对方用户@对方ip地址
前台启动:命令直接执行:ls 后台启动:命令放在后台执行 命令后面加上&符号 # 注意:执行时间长的命令可以放在后台执行 ctrl + z 将前台进程放置后台运行 fg 编号 将后台进程更改为前台进程 jobs 查看后台进程 date 选项:-s 修改时间 调度启动(计划任务) (⭐⭐)at 一次性计划任务 格式:at + 时间 [root@localhost ~]# at 10:20 warning: commands will be executed using /bin/sh at> touch /home/jtxy # 回车 at> <EOT> # ctrl+d job 1 at Tue May 23 10:20:00 2023 atq 查看一次性计划任务 atrm 删除一次性计划任务
crontab 重复计划任务 服务:crond 全局配置文件,位于文件:/etc/crontab # 内容::: 分钟:(0-59) 小时:(0-23) 日期:(1-31) 月份:(1-12) 星期:(0-7) 0和7都代表星期天 命令: crontab -e [-u 用户名] 设置计划任务 命令输入内容格式:分钟 小时 日期 月份 星期 执行命令 crontab -l [-u 用户名] 查看计划任务 crontab -r [-u 用户名] 删除计划任务 * 表示该范围内的任意时间 , 表示间隔的多个不连续时间点 - 表示一个连续的时间范围 / 指定间隔的时间频率用示例 0 17 * * 1-5 #周一到周五每天17:00 30 8 * * 1,3,5 #每周一、三、五的8点30分 0 8-18/2 * * * #8点到18点之间每隔2小时 0 0 */3* * #每隔3天 例子: 30 8-18/2 * * 1,3,5 touch aa #星期一三五的8点半到18点半每隔两小时执行创建aa文件
软件安装
硬件平台:
x86、arm、aarch64(arm升级版)
rpm
格式: rpm 选项 软件包名称 选项 -i:安装一个新的rpm软件包 -U:升级某个rpm软件,若原本未装,则进行安装 -F:更新某个rpm软件,若原本未装,则放弃安装 -h:以"#"号显示安装的进度 -v:显示安装过程中的详细信息 --nodeps:安装、升级或卸载软件时,忽略依赖关系 例子:rpm -ivh 软件名 rpmfind 存放RPM软件包的网站 rpm -q 软件名查看软件是否安装 rpm -qa 查看所有已经安装的软件 rpm -qi 查看软件包的详细信息 rpm -ql 查看已经安装的rpm安装目录文件列表 rpm -qR 查看软件的依赖关系 rpm -qf 查询指定文件属于哪个RPM软件包 rpm -e 删除软件包 # rpm的问题:rpm只能记录依赖关系,无法解决依赖关系
wget 软件包的链接 安装openoffice 1、下载软件包 2、解压,打开 3、进入RPMs,安装软件rpm -ivhopenoffice-* 4、安装快捷方式,打开desktop,安装openoffice4.1.1-redhat-menus-4.1.1-9775.noarch.rpm
linux查看ip地址
# 方法一 ip addr # 方法二 ifconfig
YUM
yum # dnf 是yum 的升级版本,所以下面所有的yum命令都可以将yum字段替换成dnf # 软件仓库,能够解决软件的依赖关系 # 使用yum的前提,配置yum源文件 yum clean all # 清除缓存 yum repolist -v # 查看yum源信息 yum install 软件名 # 安装软件 yum remove 软件名 # 卸载软件 可以加-y,无需确认 yum list # 列出所有已经安装的软件 yum info # 列出软件的详细信息 yum provides 命令 # 查看命令通过哪个软件实现 yum download 软件名 # 只下载不安装 yum update 软件名及版本 # 更新软件 yum grouplist # 查看软件包组 yum groupinstall 软件包名称 # 安装软件包组 yum install @软件包名称 # 安装软件包组 yum groupremove 软件包名称 # 卸载软件包组 yum remove @软件包名称 # 卸载软件包组 #注意:安装软件包组时名称必须加引号
# 使用yum的前提,配置yum源文件 yum源文件:/etc/yum.repos.d yum源文件的后缀必须是repos.d 本地yum源(使用的是镜像的软件) 1、将右下角的光驱连接,挂载(将镜像中的内容和目录关联) 例子: mount/dev/ sr0/ aa 挂载成功的标志: mounted read-only. 2、编辑yum源文件 [] yum源的编号 name= yum源的名称 baseurl=yum源的链接(位置):file:///run/media/root/RHEL-8-2-0-BaseOS-x86_64 /AppStream (⭐)gpgcheck=是否检查yum源,不检查设为0,检查设为1,如果为1,则需要设置密钥 (⭐)gpgkey=RPM-GPG-KEY-redhat-release enable=是否使用该yum源,不使用设为0,使用设为1,默认是使用的 例子: vim /etc/yum.repos.d/redhat.repo [aa] name=aa baseurl=file:///run/media/root/RHEL-8-2-0-BaseOS-x86_64/AppStream gpgcheck=0 [bb] name=bb baseurl=file:///run/media/root/RHEL-8-2-0-BaseOS-x86_64/BaseOS gpgcheck=0 网络下载: 华为: 1、EPEL,打开地址 2、找到对应的版本 3、打开Everything,找到对应硬件平台,找到packages、repodata 4、复制链接到url中 例子: [huawei] name=huawei baseurl=https://repo.huaweicloud.com/epel/8/Everything/x86_64/ gpgcheck=0 [aliyun] name=aliyun baseurl=https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/ gpgcheck=0 加解密: 如果gpgcheck=1,那么还需要加一个词条为密钥 gpgkey=RPM-GPG-KEY-redhat-release
网络与服务
windows/硬件设备:ipconfig 查看网卡信息
linux:ifconfig 查看网卡信息
ip route 查看网关地址
更改网卡信息:
-
更改配置文件(⭐)
vim/etc/sysconfig/network-scripts/ ifcfg-ens160 配置文件位置
B00TPROTO=网络类型 dhcp自动分配 static:静态配置 none:自适配 DEVICE=网卡名称 IPADDR=IP地址 NETMASK=掩码 或者PREFIX:前缀 GETWAY=网关地址 ONBOOT=重启是否激活网卡 值必须为yes,否则重启后网卡信息丢失 例子: TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 默认为dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens160 UUID=4a566eb1-6776-4c00-a748-a4d8c4484d5f DEVICE=ens160 ONBOOT=yes # 默认为yes IPADDR=10.178.187.128 # ip地址,注意,这是a类私网ip地址 NETMASK=255.255.0.0 # a类ip地址的子网掩码 GETWAY=10.178.255.254 # 网关,一般取地址池范围内的最后一位,即254,取1或者其他未被使用的地址也可 systemctl restart NetworkManager # 重启网卡服务 # 红帽7/ centos7重启网卡生效 ifdown ens169 # 断开网卡 ifup ens160 # 开启网卡 -
更改图形化界面
hostname 主机名 更改主机名(重启即丢失) hostnamectl set-hostname 主机名 更改主机名(重启不丢失) # 注意:更改主机后需要重新登录生效 nmtui 进入伪图形界面 Edit a connection 编辑网卡信息 # 注意:IP地址后需要加后缀 Activate a connection 激活网卡信息 # *号代表已激活网卡 


-
通过命令行设置(numcli)
服务
服务是通过软件实现的功能
守护进程:systemd systemctl 用于控制systemd 系统管理工具 (⭐)格式: systemctl 动作 服务 动作: start 开启服务 stop 停止服务 status 查看服务的状态 is-enabled 查看服务是否开机自启 enbale 设为开机自启 disable 关闭开机自启 restart 重启服务 --reload重载服务 重新加载配置文件 systemctl list-units --type service 列出所有服务的状态 vim /etc/services 存放服务的端口号
服务的分类:
系统服务:防火墙(filewalld)
防火墙的服务管理工具
防火墙是基于区域保证安全
硬件防火墙区域:
local(本地):100
tnunst:信任区域:85
untrunst:非信任区域:5
DMZ:用来存放服务器的区域:50
通过接口区分区域,级别低的不可以访问级别高的
linux中的防火墙:
一共存在十种区域
firewall-cmd --list-all-zones # 查看防火墙的区域 firewall-cmd --list-all # 查看前区域的内容 firewall-cmd --add-service=http # 添加服务至当前区域 firewall-cmd --set-default-zone=# 更改默认区域 firewall-cmd --list-all-zone=public # 查看public区域的规则 firewall-cmd --permanent --add-service=http # 将服务永久添加到的当前区域 firewall-cmd --permanent --add-service=http --zone=drop # 为其他区域添加服务 firewall-cmd --reload # 重新启动防火墙 # 防火墙限制内容的级别:端口号>服务>协议 # 规则: REJECT(拒绝):存在区域的就拒绝,不存在就允许 default(默认):存在当前区域的内容就允许,不存在就丢弃 DROP(丢弃):存在当前区域的就丢弃,不存在就允许 public 默认的区域 规则为default
网络服务:http、ftp、nfs、ntp
(1)安装软件 (2)开启服务、设置开启自启、修改配置文件、重启服务 systemctl start httpd # 开启服务 systemctl enable httpd # 设置开机自启 (systemctl is-enable httpd #查看是否开机自启) systemctl status httpd # 查看当前状态 systemctl restart httpd # 重启服务 (3)允许服务通过防火墙 firewall-cmd --add-service=http # 允许http通过防火墙 (若要永久启动http通过防火墙,在--add前面加上--permanent, 即:firewall-cmd --permanent --add-service=http ) firewall-cmd --reload # 重载防火墙 浏览器:直接输入ip地址 /var/www/html/ # http网页文件存放位置 /etc/httpd/conf/httpd.bonf #http配置文件,可以更改端口号等
(1)安装软件 (2)开启服务、设置开启自启、修改配置文件、重启服务 systemctl start vsftpd # 开启服务 systemctl enable vsftpd # 设置开机自启 (systemctl is-enable vsftpd #查看是否开机自启) systemctl status vsftpd # 查看当前状态 systemctl restart vsftpd # 重启服务 (3)允许服务通过防火墙 firewall-cmd --add-service=ftp # 允许ftp通过防火墙 (若要永久启动ftp通过防火墙,在--add前面加上--permanent, 即:firewall-cmd --permanent --add-service=ftp) firewall-cmd --reload # 重载防火墙 文件管理器:ftp://10.178.187.128:22/ /var/ftp # 存放共享文件的位置 /etc/vsftpd/vsftpd.conf # ftp配置文件 anonymous_enable=YES # 允许匿名访问 anonymous # ftp匿名访问用户
# 两个linux操作系统,IP地址必须属于同一个网段 # 服务器将自己的内容共享给客户端使用 # 服务器端 (1)创建一个文件夹,用于共享文件 mkdir /jtxy (2)将共享文件夹改为公告目录,权限为777 chmod 777 /jtxy (3)服务: systemctl start nfs-server # 开启nfs-server systemctl enable nfs-server # 设置nfs-server systemctl start rpcbind # 开启RPC服务 systemctl enable rpcbind # 设置RPC开机自启 (4)防火墙: firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd firewall-cmd --reload # 重载防火墙 (5)配置文件: /etc/exports # nfs的配置文件 内容: 共享目录 允许谁访问(*或者ip地址) (权限,传输方式) 例子:/jtxy 10.178.187.136(rw,async) 传输方式:sync 同步传输 async 异步传输 传输的数据会先放到缓冲器(内存),因此速度快,数据易丢失 no_root_squash 客户端已root用户登录,赋予root权限 systemctl restart nfs-server.service # 重启服务 # 客户端 (1)创建目录(用于和服务器端目录进行连接) (2)挂载 mount 服务器端ip地址:/共享目录 /本地目录
systemctl start chronyd # 开启时间同步 systemctl enbale chronyd /etc/chrony.conf # ntp的配置文件 pool ntp.ntsc.ac.cn iburst # 指定一个ntp(国家授时中心服务器)服务器 chronyd sources # 查看ntp是否正常 chronyc makestep # 快速时间时间同步(重启服务) timedatectl status # 查看时间信息 data -s # 修改时间
selinux安全
访问控制
DAC:自由访问控制
MAC:强制访问控制(selinux)
selinux:程序只能访问特定的文件,selinux基于程序和文件的安全类型上下文判断权限
ps -efZ # 查看程序的安全类型上下文 system_u: system_r: httpd_t:se # httpd进程 ls -Z # 查看文件的安全类型上下文 unconfined_u:object_r:httpd_sys_content_t:s0 # index.html文件 # 安全类型上下文:用户:角色:类型:等级 # selinux规定程序访问文件时,类型必须一致
# 临时修改安全类型上下文的内容(重启会丢失): 格式:chcon -t 类型 文件/目录名 选项: -t 指定类型 -R 递归修改 例子: chcon -R -t httpd_sys_content_t /root/aa # 修改目录aa以及目录aa下所有的文件和目录的安全类型上下文 httpd文件类型(背下来):httpd_sys_content_t # 永久修改安全类型上下文内容 semanage fcontext 选项: -a 添加/修改类型 -t 指定类型 -d 删除类型 -D 删除所有的类型 例子: semanage fcontext -a -t httpd_sys_content_t23 # 永久修改23的类型 # semanage fcontext命令更改的是预设模版,不会立即生效 restorecon -v 文件或目录 # 预设模版立即生效 man semanage-fcontext # 查看命令手册 semanage fcontext -a -t httpd_sys_content_t "/目录名(/.*)?" # 更改目录的类型 # 当服务端口不是常见的端口 # http: 80 ftp: 20 21 ssh 22 Telnet 23 # selinux会拦截,导致服务无法实现 解决:将端口加入httpd的selinux的允许端口中 semanage port -l | grep http # 查看selinux允许那些端口访问 semanage port -a -t http_port_t -p tcp 82 # 允许82端口通过selinux
当一个文件被复制到了另外的文件夹,那么复制出的文件的安全类型上下文的类型会发送改变,但是当移动的话,安全类型上下文不变
selinux规则:
宽容(Permissive)--会判断安全类型上下文,如果不一样也不阻止
强制(enforcing)--默认--必须按照安全类型上下文,否则无权限
关闭(disabled)--DAC--不看安全类型上下文
getenforce # 查看当前selinux规则 # 前两种规则可以临时切换,但是前两种规则与关闭切换必须要重启才能生效 setenforce 0/1# 修改临时切换规则,如果后面是0就是宽容模式,如果是1就是强制 # 永久修改规则 vim /etc/selinux/config # selinux配置文件 SELINUX=enforcing # 测试http服务 1.在root目录下创建一个文件root.html,移动到/var/www/html/index.html 2.使用ip地址/root.html访问,注意,主机ip和服务器ip地址应在同一网段!且服务器开启httpd服务并且关闭防火墙,可以在主机cmd上ping服务器ip地址来判断服务器是否在同一网段 3.观察宽容模式和强制模式的区别
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步