Linux
教程:兄弟连的Linux教程
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
一、Linux由来
Linux系统诞生于1991年,由芬兰大学李纳斯和后来陆续加入的众多爱好者共同开发完成。
Linux是开源软件,源代码开放的UNIX。
二、Linux发展
Linux主要版本:
LAMP代表
三、Linux应用领域
- 基于Linux企业服务器
- 嵌入式应用
- Linux在电影娱乐业
四、Linux分区
4.1、分区
Linux系统只能有4个分区,3个主分区,1个扩展分区。而扩展分区可以再次分4小分区?
4.2、格式化
写入文件格式,通常一个新硬盘,都是需要格式化,才能进行存储文件内容的,而格式化就是写一个架子来规定硬盘可以存储什么样的文件,在Linux中有EXT2
、EXT3
、EXT4
4.3、分区设备文件名
系统自己做的,对于我们来说是透明的
4.4、挂载
就像于给分区分配实际内存,比如Windows中C盘有100G的空间
Linux中,必须分区
-
/(根分区)
-
swap
分区(交换分区,内存2倍,不超过2G) -
推荐分区
/boot
(启动分区,200MB)
五、VMware网卡之间关系
VMware虚拟机中的网络选项
桥接模式 --- 使用的是真实网卡就是从路由中分配IP
NAT 模式 ---- 使用VMware 8网卡通信
仅主机模式 --- 使用VMware1网卡通信
六、Linux学习建议
6.1、Linux不靠扩展名区分文件类型
- 压缩包:
*.gz
、*.bz2
、*.tar.bz2
、*.tgz
等 - 二进制软件包:
*.rpm
- 脚本文件:
*.sh
- 配置文件:
*.conf
七、Linux常用命令
7.1、文件处理命令
以点开头的文件就是隐藏文件
命令格式
命令 [-选项] [参数]
如 ls -a /etc
-
命令名称:ls
-
命令英文原意:list
-
命令所在目录:/bin/ls
-
命令执行权限:所有用户
-
功能描述:显示目录文件
-
语法:`ls 选项[-aldh] [文件或目录]
- -a 显示所有文件,包括隐藏文件
- -l 详细 信息显示
- -d 查看目录属性
- -i 显示ID
- -h 以单位(KB、MB)显示文件大小
文件头表示意义
d
开头表示是一个文件夹
-
开头表示是一个文件
-rw-r--rr--
:rw
对应root所属人,-r
对应所属组,那么r、w、x都是意思呢?
r:读
w:写
x:执行
7.1.2、目录处理命令
创建一个目录
-
命令名称:mkdir
-
命令英文原意:make directories
-
命令所在路径:/bin/mkdir
-
执行权限:所有用户
-
语法:mkdir -p [目录名]
-
功能描述:创建新的目录
- -p 代表递归创建
-
示例
-
mkdir -p /tmp/project/c mkdir /tmp/project/c++
进入目录
cd
cd ../返回上级目录
cd ./同级目录
查看当前所有路径
命令名称:pwd
命令英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录
示例:
pwd
/tmp/project/c
删除文件夹
删除目录
命令名称:rmdir
命令英文原意:remove empty directories
命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录名]
功能描述:只能删除空目录,所以此命令用的少
示范
rmdir /tmp/project/c
文件拷贝
命令名称:cp
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp -rp [原文件路径] [目标文件路径]
-r 复制目录
-p 保留原文件属性
功能描述:复制文件或目录,目录需要带上-r
示例
cp -r /tmp/project/c /home/roo
也可以一次性赋值多个目录
cp -r /tmp/project/c /tmp/project/c++ /home/root
剪切、改名文件或目录
命令名称:mv
命令原意:move
命令所在目录:/bin/mv
执行权限:所有永辉
语法:mv [原文件或目录路径] [目标目录]
功能:剪切文件、改名
示例:
mv /tmp/pro/c /home/roo
改名
mv /tmp/pro/c++ /tmp/pro/c
删除文件或目录
命令名称:rm
命令英文原意:remove
命令所在路径;/bin/rm
执行权限:所有用户
语法:rm -rf [文件或目录]
-r 删除目录
-f 强制删除
功能描述:删除文件
示例
rm /tmp/pro/c
7.1.3、文件处理命令
创建文件
命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:创建空文件
示例:touch /tmp/Hello.java
注意事项:可以创建带有空格的文件,必须加双引号才行,不然会当做两个文件来创建
如:touch Project File
会当做两个文件
解决办法是加上双引号:touch "C++ Java Project"
显示文件全部内容
命令名称:cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
-n 显示行号
功能描述:显示文件内容
示例:cat /etc/issue
cat -n /etc/issue
倒序显示文件全部内容
命令名称:tac
命令所在路径:/bin/tac
执行权限:所有用户
语法:tac [文件名]
-n 显示行号
功能描述:显示文件内容
示例:tac /etc/issue
tac -n /etc/issue
显示文件内容带分页
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
语法:more [文件名]
(空格) 或 f 翻页
回车 换行
q或Q 退出
功能描述:分页显示文件内容
示例:more /etc/servimces
分页显示文件内容带上下翻页
命令名称:less
命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less [文件名]
PU 和 PD 上一页,下一页
回车 换行
q或Q 退出
输入/ 再输入关键字进行搜索,再输入n表示下一个
功能描述:分页显示文件内容(可向上翻页)
示例:less /etc/servimces
显示文件前面几行内容
命令名称:head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]
-n 指定行数
示例:head -n 20 /etc/servimces
如果不指定默认显示前10行
显示文件末尾内容
命令名称:tail
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
-n 执行从尾部开始显示几行
-f 动态显示文件默认内容
示例:tail -n 18 /etc/servimces
7.1.4、链接命令
链接文件 软连接 or 硬链接
命令名称:ln
命令影院原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [原文件] [目标文件]
-s 创建软连接
去掉-s硬链接
功能描述:生成链接文件
软链接与硬链接的区别
软链接:像是一个windows中的快键方式
硬链接:是一个文件的拷贝 + 同步更新
7.2、权限管理命令
7.2.1、权限管理命令chmod
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
语法:
-
chmod [{ugoa} {+-=} {rwx} [文件或目录]]
符号 代表 u 所属者 g 所属组 o 其他人 a 所有人 对应字母 所代表的权限 r 读 w 写 x 执行 -
chmod [权限数字 [文件或目录]]
权限对应数字 r 4 w 2 x 1 -
参数 : -R 递归修改,就是修改目录中所有权限
功能描述:改变文件或目录的权限
以字符方式修改权限
-rw-r--r-- 1 root root 0 Apr 29 17:56 Hello.java
chmod u=rwx Hello.java
-rwxr--r-- 1 root root 0 Apr 29 17:56 Hello.java
以数字修改权限
chmod 774 Hello.java
[root@iZ8vb6xljiklnfnmawnio3Z temp]# chmod 774 Hello.java
7.2.2、其他权限管理命令
修改文件或目录所属者
命令名称:chown
命令英文原意:change file ownership
命令所在路径;/bin/chown
执行权限:所有用户
语法:chown [所属者] [文件或目录]
功能描述:改变文件或目录的所有者
示例:chown xiaoxin /temp
修改/temp目录所属者为:xiaoxin
改变文件或目录所属组
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组] [文件或目录]
功能描述:改变文件或目录所属组
示例:chgrp xiaoxin /tmp/temp
改变/tmp/temp目录用户组为xiaoxin
修改默认创建文件或目录的权限
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
-S 以rwx形式显示新建文件默认权限
功能描述:显示、设置文件的默认权限
示例:umask -S
注意事项:
- 如果加上-S参数以可读方式显示
- 如果没有加上-S是数字方式显示,而且数字方式不是正常阅读的,需要用777-得到的数字等于的就是权限表示
[root@iZ8vb6xljiklnfnmawnio3Z ~]# umask
0022
777 - 0022 = 0755 ===> -rwx r-x r-x
7.3、文件搜索命令
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
7.3.1、find各种使用方法以及举例
7.3.1.1、根据名字查询找
find /etc/ -name init
不区分大小写查找
find /etc/ -iname init
模糊查找
find / -name *init* # 查询包括init字符的文件
find / -name init??? # init开头后面3个位置字符的文件名
7.3.1.2、根据文件大小查找
linux中文件大小划分
1数据块 ======== 521字节 0.5kb
100MB === 102400KB
find / -size +大小
符号代表 | 作用 |
---|---|
+n | 大于n |
-n | 小于n |
n | 等于 |
7.3.1.3、根据文件或目录所属者查找
find /home -user xiaoxin # 根据所属者查找
find /home -group xiaoxin # 根据所属组查找
7.3.1.4、根据文件属性来查找
find /etc -cmin -5
# 在/etc目录下查找被修改过属性的文件和目录
参数
amin
访问时间cmin
问价耐属性mmin
文件内容
7.3.1.5、根据文件类型查找
-type
- f 文件
- d 目录
- l 软连接文件
find /etc -name init -a -type f
7.3.1.6、根据i编号查询
根据文件的编号来查询文件或目录
find / -inum 1179683
7.3.1.7、逻辑命令 与 或
- -a 就是与
- -o 就是或
示例
find /etc -size +100 -a size -200
7.3.1.8、根据查询结果进行筛选显示
find /etc -name init -exec ls -l {} ;
就是对查询结果进行再一次操作,还可以再次进行筛选
-exec相当于连接另一个命令的意思
7.3.2、其他搜索命令
7.3.2.1、文件搜索命令,与find类似,但是比它快
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate
文件名
功能描述:在文件资料库中查找文件
范围:locate init
与find
命令的比较,locate
命令查找比find命令快,但是有缺点,locate命令是通过一个文件来查找的,所以他快,但是有时候,你新建里的文件,var/lib/mlocate
没有更新到最新创建的文件,就会搜索不到,如果想要解决,就需要updatedb
命令来更新一下文件
7.3.2.2、命令搜索工具
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which
命令
功能描述:搜索命令所在目录以及别名信息
示例:which cp
另一个命令搜索工具,搜索出来的命令带命令的帮助文档位置
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径,以及配置文件所在位置
示例:whereis ls
7.3.2.3、文件内容搜索
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -i v [指定字符串] [文件]
功能描述:在文件中搜寻字符串匹配的行并输出
-i 不区分大小写
-v 排除指定字符串
示范:grep mysql /root/install.log
grep "on an" /etc/issue
帮助类型
1:命令帮助
5:配置文件帮助
7.4、帮助命令man
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
功能描述:获取帮助信息
示例:
- 获取命令的帮助
man ls
- 查看ls命令的帮助信息,是less和more命令的组合
- 获取配置文件的帮助
man servimces
- 查看配置文件servimces的帮助信息
- 在获取配置信息的帮助的时候不要带上绝对路径
7.4.1、帮主命令help获取Shell内置命令的帮助
命令名称:help
命令所在路径:Shell
内置命令
执行权限:所有用户
语法:help 命令
功能描述:获取Shell
内置命令的帮助信息
示例:help cd
7.4.2、简介获取命令信息whatis
命令名称:whatis
命令所在路径:/usr/bin/whatis
语法:whatis 命令
示例:whatis cp
7.4.3、简介获取配置文件信息apropos
命令名称:apropos
命令所在路径:/usr/bin/apropos
语法:apropos 配置文件
示例:apropos servimces
7.5、用户管理命令
7.5.1、添加用户useradd
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd用户名
功能描述:添加新用户
示例:useradd xiaoxin
7.5.2、设置密码passwd
命令名称:passwd
命令所在领:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码
示例:passwd xiaoxin
7.5.3、查看登陆用户信息who
命令名称:who
命令所在领:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登陆用户信息
示例:who
7.5.4、更加详细查看登陆用户信息w
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登陆用户详细信息
示例:w
7.6、压缩解压命令
7.6.1解压缩gzip、
压缩
命令名称:gzip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:只能压缩文件
压缩后文件格式:.gz
注意事项:压缩后,原文件就会没有
解压
命令名称:gunzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:加压缩.gz的压缩文件
压缩后文件格式:gz
注意事项:解压后,原压缩文件就会没有
7.6.2、解压缩tar
压缩
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar 选项[-zcf] [压缩后文件名] [目录]
-c 打包
-v 显示详细信息
-f 指定文件名
-z 打包同时压缩
功能描述:打包目录:
压缩后文件格式.tar.gz
注意事项:
- 如果想要打包的同时压缩命令一定要这么写:
tar -zcf 名字.tar.gz] [要压缩的目录]
解压缩tar
tar命令加压缩语法:
-x 解包
-v 显示详细信息
-f 执行解压文件
-z 解压缩
示例:tar -zxvf [需要解压名.tar.gz]
注意事项:
- 这里顺序也不能换
tar -zxvf [需要解压名.tar.gz]
也就是说先要加压缩,在解包
7.6.3、解压缩zip
压缩
命令名称:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:zip 选项[-r] [压缩后的文件名] [文件或目录]
-r是压缩目录所用到的
压缩后的文件格式:.zip
解压
命名名称:unzip
命令所在目录:/usr/bin/unzip
执行权限:所有用户
示例:unzip test.zip
7.6.4、压缩命令bzip2
压缩
命令名称:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
语法:bzip2 选项[-k] [文件]
参数说明:-k产生压缩文件后保留原本文件
压缩后文件格式:.bz2
示例:bzip2 -k temp
;
tar -cjfv JavaProject.tar.bz2 JavaProject
解压
命令名称:bunzip2
命令所在路径:/usr/bin/bunzip2
执行权限:所有用户
语法:bunzip2 选项[-k] [压缩文件]
-k 解压后保留原文件
示例:bunzip2 -k temp.bz2
tar -xjf Java.tar.bz2
7.7、网络命令
7.7.1、write给本地用户发送信息
指令名称:write
所在路径:/usr/bin/write
执行权限:所有用户
语法:write <用户名>
功能描述:给本地用户发信息,以Ctrl + D保存结束
示例:write xiaoxin
7.7.2、wall-给所有用户发送信息
指令名称:wall
所在路径:/usr/bin/wall
执行权限:所有用户
语法:wall [message]
示例:wall 消息
7.7.3、ping-发送网络请求
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping [-c] IP地址
-c 执行发送次数
示例:ping www.baidu.com
会一直发送,Ctrl+D结束
ping -c 3 www.baidu.com
3次结束
7.7.4、ifconfig-查看网络
命令名称:ifconfig
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
示例:ifconfig eth0 192.168.8.250
ifconfig
只是查看网络信息
7.7.5、last-列出过去登入系统的用户信息
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
示例:last
7.7.6、lastlog-特定用户最后登入时间
命令名称:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有用户
语法:lastlog
功能描述:检查某特定用户上次登录的时间
示例:lastlog -u 用户ID
7.7.7、traceroute-查看数据到主机间路径
命令名称:traceroute
命令所在路径:/bin/traceroute
执行权限:所有用户
语法:traceroute
功能描述:显示数据包到主键间路径
示例:traceroute www.baidu.com
详细看:https://commandnotfound.cn/linux/1/335/traceroute-%E5%91%BD%E4%BB%A4
7.7.8、netstat-显示网络相关信息
命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [参数]
参数:
- -t : TCP协议
- -u:UDP协议
- -l:监听
- -r:路由
- -n :显示IP地址和端口号
功能描述:显示网络相关信息
示例:
netstat -tlun
查看本机监听端口netstat -an
查看本机所有的网络netstat -rn
查看本机路由表
7.7.9、setup-配置网络
命令名称:setup
命令所在路径:/usr/bin/setup
执行权限:root
语法:setup
功能描述:配置网络
安装:https://blog.csdn.net/zhangzhikaixinya/article/details/46691323
7.7.10、mount-挂载命令
命令名称:mount
命令所在路径:/bin/mount
执行权限:所有用户
语法:mount [-t文件系统] 设备文件名 挂载点
示例:mount -t iso9660 /dev/sr0 /mnt/cdrom
7.8、关机重启命令
7.8.1、shutdown
语法:shutdown [参数] 时间
参数:
- -c : 取消前一个关机命令
- -h:关机
- -r:重启
使用举例:shutdown -r now
now当前时间
7.8.2、退出登录命令
logout
八、vim
8.1、vim常用操作
- 创建或打开文件
vim filename
- 退出
:wq
- esc退出编辑模式,切换命令模式
8.1.1、插入命令
命令 | 作用 |
---|---|
a | 在光标所在字符后插入 |
A | 在光标所在行尾插入 |
i | 在光标所在字符前插入 |
I | 在标签所在行行首插入 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
8.1.2、定位命令
命令 | 作用 |
---|---|
:set nu |
设置行号 |
:set nonu |
取消行号 |
gg |
到第一行 |
G |
到最后一行 |
nG |
到第n行 |
:n |
到第n行 |
:$ |
移至行尾 |
:0 零 |
移至行首 |
8.1.3、删除命令
命令 | 作用 |
---|---|
x |
删除光标所在处字符 |
nx |
删除光标所在处后n个字符 |
dd |
删除光标所在行,ndd 删除n行 |
dG |
删除光标所在行到文件末尾内容 |
D |
删除光标所在处到行尾内容 |
:n1,n2d |
删除指定范围的行 |
8.1.4、复制和剪切命令
命令 | 作用 |
---|---|
yy |
复制当前行 |
nyy |
复制当前行一下n行 |
dd |
剪切当前行 |
ndd |
剪切当前行一下n行 |
p、P |
粘贴在当前光标所在行下或行上 |
8.1.5、替换和取消命令
命令 | 作用 |
---|---|
r |
取代光标所在字符 |
R |
从光标所在处开始替换字符,按Esc 结束 |
u |
取消上一步操作 |
8.1.6、搜索和搜索替换命令
命令 | 作用 |
---|---|
/string |
搜索指定字符串 搜索时忽略大小写 :set ic |
n |
搜索指定字符的下一个出现位置 |
:%s /old/new/g or c |
全文替换指定字符串 |
:n1,n2s/old/new/g or c |
在一定范围内替换指定字符串 |
g
代表不询问替换
c
询问替换
8.1.7、保存与退出命令
命令 | 作用 |
---|---|
:w |
保存修改 |
:w new_filename |
另存为指定文件 |
:wq |
保存修改并退出 |
ZZ | 保存修改并退出 |
:q! |
不保存修改退出 |
:wq! |
强制修改保存并退出(文件所有者与root可以使用) |
8.2、vim使用技巧
导入那个执行结果 : :r 命令
:r 文件路径,就会将这个文件导入到打开文件所在路径
:!which 指令
:显示执行所在路径
自定义快捷键
:map 命令+自定义操作
:map ^p I#<ESC>
在头部插入#
:map ^B 0x
删除首行第一个字符:map i2210075017@qq.com
在光标处插入邮箱
注意:^
是 Ctrl + V + 你要设置的快捷键
连续行注释
:n1, n2s/^/#/g
^行首,#要替换内容 g不用询问
:n1, n2s/^#//g
去掉行首的#号
替换
:ab mymail 2210075017@qq.com
输入mymail后就会自动替换邮箱
如果想永久生效,那么配置文件就必须写在用户目录下命名为
.vimmrc
文件就会自定义的配置就会永久生效
九、软件包管理
软件包分类
- 源码包
- 二进制包(RPM包、系统默认包)
9.1、RPM包管理
安装略过
9.1.1、查询是否安装
rpm -q 包名 不用全包名,只要包名就可以了
rpm -qa 查询所有已经安装包
9.1.2、查询详细信息
rpm -qi 包名
- i 查询软件信息
- p 查询未安装包信息,得在包目录下
9.1.3、查看系统文件属于哪个rpm包
rpm -qf 系统文件名
rpm -ql 包名,查看包名安装在哪个文件路径下
9.1.4、查看软件包的依赖性
rpm -qR 包名
-R: 查询软件包的依赖性
-p: 查询未安装包信息(在没有安装包的路径下查询)
9.1.5、RPM包校验
rpm -V 已经安装的报名
-V: 晓燕指定RPM包中文件
验证内容参数如下:
S : 文件大小是否修改
M : 文件类型或文件的权限是否被修改
5 : 文件MD5校验和是否修改(可以看做文件内容是否改变)
D : 设备中,从代码是否改变
L : 问价你路径是否改变
U : 问价耐属性(所有者)是否改变
G : 文件属组是否改变
T : 文件修改时间是否改变
文件类型:
c : 配置文件
d : 普通文件
g : "鬼"文件
l : 授权文件
r : 描述文件
9.1.6、RPM包中文件提取
rpm2cpio 包全名 cpio -idv .文件绝对路径
cpio 选项 <文件|设备>
选项:
-i: copy-in,还原
-d: 还原时自动新建目录
-v: 显示还原过程
rpm2cpio 将rpm包转换为cpio格式的命令
cpio 是一个标注农工局,用于创建软件档案文件和档案文件中提取文件
示例
rpm -qf /bin/ls
# 查询ls属于哪个包
mv /bin/ls /tmp/
# 造成ls命令误删除假象
rpm2cpio /mnt/cdrom/Packages/coreutil-8.4-19.el16.i686.rpm | cpio -div ./bin/ls
cp /root/bin/ls /bin/
9.2、yum在线管理
9.2.1、IP地址配置
setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT = "no" 改为yes
servimce network restart
9.2.2、修改yum源
vim /etc/yum.repos.d/CentOS-Base.repo
参数说明
- [base] 容器名称,一定要放在[]中
- name : 容器说明,自己可以随意写
- mirrorlist : 镜像站点,这个可以注释掉
- baseurl : 我们yum源服务器的地址。默认是CenOS服务yum源服务器
- enabled : 此容器是否生效,如果不写或写成enabled=1都是生效,写成enabled=0就是不生效
- gpgcheck : 如果是1是指RPM的数字证书生效
- gpgkey : 数字证书的公钥文件保存位置。不用修改
9.2.3、查询可用软件包列表
yum list
# 查询所有可用软件包列表
9.2.4、搜索安装包
yum search 关键字
# 搜索服务器删给所有和关键字相关的包
9.2.5、安装
yum -y install 包名
参数:
install 安装
-y : 自动回答yes
9.2.6、升级
yum -y update 包名
参数:
update 升级
-y: 自动回答yes
注意事项:
- 如果
yum -y update
没有写指定包名,那么就会升级所有软件包括内核,如果升级内核,需要在服务器本地进行配置,所以千万不要全部升级 - 使用yum安装的,尽量不要卸载
9.2.7、卸载
yum -y remove 包名
9.2.8、Yum软甲那组管理命令
# 1. 查出所有可用的软件组列表
yum grouplist
# 2. 安装指定软件组,组名可以由grouplist查出来,如果名字有空格,要用双引号抱起来
yum groupinstall 软件组名
# 3. 卸载指定软件组
yum groupremove 软件组名
9.2.9、光盘yum源
9.3、源码包管理
区别
- 概念上区别
- 可选安装位置
安装准备
- 安装C语言编译器
gcc
- 下载要安装的源码
注意事项
- 源代码保存位置:/usr/local/src
- 软件安装位置:/usr/local/
- 如何确定安装过程报错:
- 安装过程停止,并出现error、warning或no的提示
源码包安装过程
- 下载源码包
- 解压缩下载的源码包
- 进入解压缩目录
./config 软件配置与检查
- 定义需要的功能选项
- 检查系统环境是否符合安装要求
- 把定义好的功能选项和检测系统的信息都吸入
Makefile
文件,用于后续编辑
在解决之后,需要先查看两个文件
INSTALL
后README
分别是:安装说明,使用说明
开始操作
- 进入到包目录后,直接解压
./config --prefix=/usr/local/名字
make
编译make install
编译安装
注意事项
- 如果在编译的时候出现错误,可以使用
make clean
来清理编译出的垃圾文件
9.4、脚本安装包
概念
- 脚本安装包并不是独立的软件包类型,常见的安装十源码包
- 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简答参数,即可安装
以.sh
后缀的文件,直接运行即可,进入目录,./*.sh
*代表当前文件的名字
十、用户和用户组管理
10.1、用户配置文件
10.1.1、用户信息文件
用户信息文件/etc/passwd
概念
在Linux中主要是通过用户配置文件来查看和修改用户的信息
/etc/passwd文件中每个用户字段的说明
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
- 0: 超级用户
- 1-499: 系统用户(伪用户)
- 500-65535:普通用户
第4字段:GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
- 普通用户:
/home/用户名/
- 超级用户:
/root/
第7字段:登陆之后的Shell
什么是初始组和附加组
初始组:就是用户一登陆就立刻拥有的用户组先关权限,每个用户的初始组只能有一个,一半就是和这个用户的用户名相同的组名作为这个用初始组
附加组:指用户可以加入多个其他用户组,并拥有这个用户组对应的权限。附加组可以加入多个
用户对应的密码在影子文件中:/etc/shadow
10.1.2、影子文件
影子文件所在路径
/etc/shadow
vim /etc/shadow
第1字段:用户名
第2字段:加密密码
- 如果密码位是:
!!
或*
代表没有密码,不能登录
第3字段:面膜最后一次修改日期
- 使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段比)
第5字段:密码有效期(和第3个字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段比较)
- 0:代表密码过期后立即生效
- -1:代表密码永久不会失效
第8字段:账号失效时间
- 用时间戳表示
第9字段:保留
时间戳换算
- 把时间戳换算为日期
date -d "1970-01-01 时间戳 days"
- 日期换算为时间戳
echo $(($(date --date="时间" +%s)/86400+1))
echo $(($(date --date="2020/07/02" +%s)/86400+1))
10.1.3、组信息文件
组信息文件
/etc/group
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户
组密码文件
/etc/gshadow
第1字段:组名
第2字段:组面膜
第3字段:组管理员用户名
第4字段:组中附加用户
10.1.4、用户管理相关文件
10.1.4.1、用户的家目录
普通用户:/home/用户名
,所有者和所属组都是此用户,权限是700
超级用户:/root/
,所有这和所属组都是root用户,权限是550
10.1.4.2、用户的邮箱
目录:/var/spool/mail/用户名/
如果有邮件就会出现在这个文件中
10.1.4.3、用户模板目录
目录:/etc/skel/
此目录下所有文件,在创建新用户的时候都会从这里copy一份到新用户家目录下
10.2、用户管理命令
10.2.1、useradd-用户添加命令
命令格式
useradd [参数] 用户名
参数:
-u UID : 手工指定用户的UID
-d 家目录: 手工指定用户的家目录
-c 用户说明: 手工指定用户的说明
-g 组名:手工指定用户的初始组 --> 不建议使用
-G 族名: 指定用户的附加组
-s shell: 手工指定用户的登陆shell。默认是/bin/bash.
示例:useradd -u 666 -G root,bin -d /home/lamp1 -c "test user" -s /bin/bash sc
useradd sc
后修改的其实就是一下文件
grep sc /etc/passwd
grep sc /etc/shadow
grep sc /etc/group
grep sc /etc/gshadow
ll -d /home/lamp/
ll /var/spool/mail/lamp
用户默认值文件
/etc/default/useradd
GROUP=100
用户默认组HOME=/home
用户家目录INACTIVE=-1
密码过期宽限天数(shadow文件7字段)EXPIRE=
密码失效时间SHELL=/bin/bash
默认shellSKEL=/etc/skel
模板目录CREATE_MAIL_SPOOL=yes
是否建立邮箱
注意事项:
- Linux中有共有模式与私有模式,现在创建的用户默认都是私有,所以GROUP=100 就不起作用
/etc/login.defs
PASS_MAX_DAYS 99999 # 密码有效期
PASS_MIN_DAYS 0 # 密码修改间隔
PASS_MIN_LEN 5 # 密码最小5位
PASS_WARN_AGE 7 # 密码到期警告
UID_MIN 1000 # 最小和最大UID范围
UID_MAX 60000
ENCRYPT_METHOD SHA512 # 加密模式
10.2.2、passwd-修改用户密码
命令格式:
passwd [参数] 用户名
参数:
-S : 查询用户密码的密码状态。仅root用户可用
-l : 暂时锁定用户。仅root用户可用
-u : 解锁用户。仅root用户可用
--stdin : 可以通过管道符输出的数据作为用户的密码
使用举例
查看密码状态
passwd -S user1
user1 PS 2020-07-02 0 99999 7 -1 (Password set, SHA512 crypt.)
# 用户名密码设定时间(2020-07-02) 密码修改间隔时间(0)
# 密码有效期(99999) 警告时间(7) 密码不失效(-1)
锁定用户与解锁用户
passwd -l user1
passwd -u user1
其实锁定用户,就是改的是/etc/shadow
文件,在密码前面加了个!!
没有加锁
已经加锁
使用字符串作为密码
echo "123" | passwd --stdin user1
10.2.3、usermod-修改用户信息 和 chage-修改用户密码状态
修改用户信息-usermod
命令格式
usermod [参数] 用户名
参数:
-u: UID 修改用户名的UID号
-c: 用户说明 修改用户的说明信息
-G: 组名 修改用户的附加组
-L: 临时锁定用户(lock)
-U: 解锁用户锁定(unLock)
举例:
usermod -c "test user" -G root -u 550 user1
修改用户密码状态-chage
命令格式
chage [参数] 用户名
参数:
-l: 列出用户的详细密码状态
-d日期: 修改密码最后一个更改日期(shadow3字段)
-m 天数: 两次密码修改间隔(4字段)
-M 天数: 密码有效期(5字段)
-W 天数: 密码过期前警告天数(6字段)
-I 天数: 密码过后宽限天数(7字段)
-E 日期: 账号失效时间(8字段)
注意事项:
其实上面的功能我们可以在/etc/shadow
文件中直接通过Vim来修改,但是为什么要学习这个命令呢?
chage -d 0 用户名
# 这个命令其实就是把密码修改日期归0了(shadow3字段)
# 这样用户一登录就要修改密码
就是为了这条命令。
10.2.4、userdel-删除用户 和 su-用户切换命令
删除用户userdel
命令格式
userdel [-r] 用户名
参数:
-r: 删除用户的同时删除用户家目录
底层做的事情
vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm -rf /var/spool/mail/用户名
rm -rf /home/用户名/
查看用户ID
命令格式
id 用户名
uid=1000(user1) gid=1000(user1) groups=1000(user1)
切换用户身份su
命令格式:
su [参数] 用户名
参数:
-: 选项只使用"-"代表连带用户的环境变量一起切换
-c: 仅执行一次命令,而不是切换用户身份
例子:
su - root
su - root -c "useradd user2"
10.3、用户组管理
10.3.1、添加用户组
命令格式
groupadd [参数] 组名
参数:
-g GID 指定组ID
10.3.2、修改用户组
命令格式
groupmod [参数] 组名
参数:
-g GID 指定组ID
-n 新组名 修改组名
例子
groupmod -n testgrp groupl
# 把组名groupl 修改为testgrp
10.3.3、删除用户组
groupdel 组名
10.3.4、用户添加组或从组中删除
gpasswd [参数] 组名
参数:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
10.3.5、修改用户组的注意事项
- 要删除组,但是要删除组中已经有用户,那得看该用户的初始组是哪个,如果不是要删除的组,那么可以直接把这个组删除掉;如果组下用户的初始组是该组,那么就必须先删除用户
十一、权限管理
11.1、ACL权限
什么是 ACL权限,它的出现以及应用场景
Linux系统所自带的权限系统,已经无法满足我们的需求。
比如,创建一个/project
目录,指定它的所属组,所有人,以及其他人。对属主(root)以及属组都有rwx
权限,其他人无权限。
这个时候又来一个用户,他得有r-x
读与运行权限,这个时候就需要ACL
权限
一个目录只能属于一个用户组
首先来查看系统有哪些分区
df -h
查看ACL权限是否开启
dumpe2fs -h /dev/vda1
参数:
-h: 仅显示超级块中信息,而不显示磁盘快组的详细信息
目前所有Linux系统都已默认开启ACL
临时开启分区ACL权限
mount -o remount.acl
# 重新挂载根分区,并挂载加入acl权限
永久生效开启ACL权限
vim /etc/fstab
# UUID=1114fe9e-2309-4580-b183-d778e6d97397 / ext4 defaults,acl 1 1
mount -o remount
# 重新挂载文件系统或重启系统,使修改生效
上图场景的模拟
# 先来添加几个用户
useradd student1
useradd student2
useradd student3
# 创建一个学生用户组
groupadd Stu
# 添加用户到组
gpasswd -a student1 Stu
gpasswd -a student2 Stu
gpasswd -a student3 Stu
# 创建目录
mkdir /project
# 修改目录权限
chown root:Stu /project
# 设置权限
chmod 770 /project #xrwx
# 查看权限
ll -d /project
# 添加试听用户
useradd st
passwd st
# 开始给st用户设置ACL权限
setfacl -m u:st:rx /project
# u表示给用户
# g表示给用户组
# 后面跟目录或文件
# 查看ACL权限
# getfacl 目录或文件
getfacl /project
11.1.1、查看与设定ACL权限
查看ACL权限
getfacle 目录/文件名
# 查看ACL权限
设定ACL权限
setfacl [参数] 目录/文件名
参数:
-m: 设定ACL权限
-x: 删除指定的ACL权限
-b: 删除所有的ACL权限
-d: 设定默认ACL权限
-k: 删除默认ACL权限
-R: 递归设定ACL权限
示例:
setfacl -m u:用户名:对应权限 目录
u: 表示用户
g: 表示用户组
setfacl -m u:st:rx /project
11.1.2、最大有效权限mask与删除ACL权限
mask的作用
mask用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
[root@iZ8vb6xljiklnfnmawnio3Z ~]# getfacl /root/project
getfacl: Removing leading \'/\' from absolute path names
# file: root/project
# owner: root
# group: Stu
user:st:r-x
mask::r-x
只有mask 和 user 全向相与才是真正可用权限
删除ACL权限
setfacl -x u:用户名 文件名
# 删除指定用户的ACL权限
setfacl -x g:用户组名 文件名
# 删除指定用户组的ACL权限
setfacl -b 文件名
# 删除文件的所有ACL权限
11.1.3、默认ACL权限和递归ACL权限
什么是递归
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
递归的给目录设置权限
setfacl -m u:用户名:权限 -R 文件名
注意事项:
- 使用上面命令,是对已经存在的文件或目录设置权限,如果是之后再新建的就不会有权限
- 解决办法是:设置默认权限
默认ACL权限
默认ACL权限就是如果父目录设定ACL权限,那么父目录所新建的子文件都会继承父目录的ACL权限
setfacl -m d:u:用户名:权限 文件名
11.2、文件特殊权限
11.2.1、SetUID----4
什么是SetUID
用来以该文件属主身份运行的一个权限。
简单的说:一个文件有SUID权限的话,那么其他用户在运行这个文件的时候,就会拥有属于该文件的属主权限
- 只有可执行的二进制程序才能设定SUID权限。
- 命令执行者要对该程序拥有
x
(执行)权限 - 命令执行者在执行噶程序时,获得程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
简单的应用场景
passwd
命令拥有SetUID权限,所以普通用户可以修改自己的密码
ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
cat
命令没有SetUID权限,所以普通用户不能查看/etc/shadow
文件内容
ll /bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31 2018 /bin/cat
SetUID权限的执行流程
11.2.1.1、设定SetUID的方法
4代表SUID
chmod 4755 文件名 # 建议这种方式来操作。如果文件没有x权限那么就会有错误 是大写的`S`
chmod u+s 文件名
这是没有x
权限,但是以chmod u+s 文件
给予的SETUID权限,会发现有大写S
建议
对于关键目录严格控制此权限。比如:/
、/usr
等
11.2.2、SetGID -- 2
SetGID对目录的作用
- 普通用户必须对此目录拥有
r
和x
权限,才能进入此目录 - 普通目录在此目录中的有小组会变成此目录的属组
- 若普通用户对此目录拥有
w
权限时,新建的文件默认数组就是这个目录的属组
SetGID对文件的作用
-
只有可执行的二进制程序才能设置
SGID
权限 -
命令执行者要对该程序拥有
x
(执行)权限 -
命令执行在执行程序的时候,组身份升级为该程序文件的属组
-
SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
11.2.2.1、设定SetGID
chmod 2755 文件名
chmod g+s 文件名
实战举例
cd /tmp/
mkdir test
# 设置GID
chmod g+s test
# 设置所有用户都有权限
chmod 777 test
# 切换用户,查看user1用户以上是关于Linux基本使用的主要内容,如果未能解决你的问题,请参考以下文章
linux打开终端如何启动scala,如何在终端下运行Scala代码片段?
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段