标签:mem 过期 详细信息 内存 编译器 用户和用户组管理 发送信息 挂载u盘 声明
教程:兄弟连的Linux教程
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux系统诞生于1991年,由芬兰大学李纳斯和后来陆续加入的众多爱好者共同开发完成。
Linux是开源软件,源代码开放的UNIX。
Linux主要版本:
LAMP代表
Linux系统只能有4个分区,3个主分区,1个扩展分区。而扩展分区可以再次分4小分区?
写入文件格式,通常一个新硬盘,都是需要格式化,才能进行存储文件内容的,而格式化就是写一个架子来规定硬盘可以存储什么样的文件,在Linux中有EXT2
、EXT3
、EXT4
系统自己做的,对于我们来说是透明的
就像于给分区分配实际内存,比如Windows中C盘有100G的空间
Linux中,必须分区
/(根分区)
swap
分区(交换分区,内存2倍,不超过2G)
推荐分区
/boot
(启动分区,200MB)VMware虚拟机中的网络选项
桥接模式 --- 使用的是真实网卡就是从路由中分配IP
NAT 模式 ---- 使用VMware 8网卡通信
仅主机模式 --- 使用VMware1网卡通信
*.gz
、*.bz2
、*.tar.bz2
、*.tgz
等*.rpm
*.sh
*.conf
以点开头的文件就是隐藏文件
命令格式
命令 [-选项] [参数]
如 ls -a /etc
命令名称:ls
命令英文原意:list
命令所在目录:/bin/ls
命令执行权限:所有用户
功能描述:显示目录文件
语法:`ls 选项[-aldh] [文件或目录]
文件头表示意义
d
开头表示是一个文件夹
-
开头表示是一个文件
-rw-r--rr--
:rw
对应root所属人,-r
对应所属组,那么r、w、x都是意思呢?
r:读
w:写
x:执行
创建一个目录
命令名称:mkdir
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -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
创建文件
命令名称: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
链接文件 软连接 or 硬链接
命令名称:ln
命令影院原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [原文件] [目标文件]
? -s 创建软连接
? 去掉-s硬链接
功能描述:生成链接文件
软链接与硬链接的区别
软链接:像是一个windows中的快键方式
硬链接:是一个文件的拷贝 + 同步更新
命令名称: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
修改文件或目录所属者
命令名称: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
注意事项:
[root@iZ8vb6xljiklnfnmawnio3Z ~]# umask
0022
777 - 0022 = 0755 ===> -rwx r-x r-x
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
find /etc/ -name init
不区分大小写查找
find /etc/ -iname init
模糊查找
find / -name *init* # 查询包括init字符的文件
find / -name init??? # init开头后面3个位置字符的文件名
linux中文件大小划分
1数据块 ======== 521字节 0.5kb
100MB === 102400KB
find / -size +大小
符号代表 | 作用 |
---|---|
+n | 大于n |
-n | 小于n |
n | 等于 |
find /home -user xiaoxin # 根据所属者查找
find /home -group xiaoxin # 根据所属组查找
find /etc -cmin -5
# 在/etc目录下查找被修改过属性的文件和目录
参数
amin
访问时间cmin
问价耐属性mmin
文件内容-type
find /etc -name init -a -type f
根据文件的编号来查询文件或目录
find / -inum 1179683
示例
find /etc -size +100 -a size -200
find /etc -name init -exec ls -l {} ;
就是对查询结果进行再一次操作,还可以再次进行筛选
-exec相当于连接另一个命令的意思
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate
文件名
功能描述:在文件资料库中查找文件
范围:locate init
与find
命令的比较,locate
命令查找比find命令快,但是有缺点,locate命令是通过一个文件来查找的,所以他快,但是有时候,你新建里的文件,var/lib/mlocate
没有更新到最新创建的文件,就会搜索不到,如果想要解决,就需要updatedb
命令来更新一下文件
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which
命令
功能描述:搜索命令所在目录以及别名信息
示例:which cp
另一个命令搜索工具,搜索出来的命令带命令的帮助文档位置
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径,以及配置文件所在位置
示例:whereis ls
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -i v [指定字符串] [文件]
功能描述:在文件中搜寻字符串匹配的行并输出
? -i 不区分大小写
? -v 排除指定字符串
示范:grep mysql /root/install.log
? grep "on an" /etc/issue
帮助类型
1:命令帮助
5:配置文件帮助
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
功能描述:获取帮助信息
示例:
man ls
man servimces
命令名称:help
命令所在路径:Shell
内置命令
执行权限:所有用户
语法:help 命令
功能描述:获取Shell
内置命令的帮助信息
示例:help cd
命令名称:whatis
命令所在路径:/usr/bin/whatis
语法:whatis 命令
示例:whatis cp
命令名称:apropos
命令所在路径:/usr/bin/apropos
语法:apropos 配置文件
示例:apropos servimces
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd用户名
功能描述:添加新用户
示例:useradd xiaoxin
命令名称:passwd
命令所在领:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码
示例:passwd xiaoxin
命令名称:who
命令所在领:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登陆用户信息
示例:who
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登陆用户详细信息
示例:w
压缩
命令名称:gzip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:只能压缩文件
压缩后文件格式:.gz
注意事项:压缩后,原文件就会没有
解压
命令名称:gunzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:加压缩.gz的压缩文件
压缩后文件格式:gz
注意事项:解压后,原压缩文件就会没有
压缩
命令名称: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]
也就是说先要加压缩,在解包压缩
命令名称:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:zip 选项[-r] [压缩后的文件名] [文件或目录]
-r是压缩目录所用到的
压缩后的文件格式:.zip
解压
命名名称:unzip
命令所在目录:/usr/bin/unzip
执行权限:所有用户
示例:unzip test.zip
压缩
命令名称: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
指令名称:write
所在路径:/usr/bin/write
执行权限:所有用户
语法:write <用户名>
功能描述:给本地用户发信息,以Ctrl + D保存结束
示例:write xiaoxin
指令名称:wall
所在路径:/usr/bin/wall
执行权限:所有用户
语法:wall [message]
示例:wall 消息
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping [-c] IP地址
-c 执行发送次数
示例:ping www.baidu.com
会一直发送,Ctrl+D结束
ping -c 3 www.baidu.com
3次结束
命令名称:ifconfig
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
示例:ifconfig eth0 192.168.8.250
ifconfig
只是查看网络信息
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
示例:last
命令名称:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有用户
语法:lastlog
功能描述:检查某特定用户上次登录的时间
示例:lastlog -u 用户ID
命令名称:traceroute
命令所在路径:/bin/traceroute
执行权限:所有用户
语法:traceroute
功能描述:显示数据包到主键间路径
示例:traceroute www.baidu.com
详细看:https://commandnotfound.cn/linux/1/335/traceroute-%E5%91%BD%E4%BB%A4
命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [参数]
参数:
功能描述:显示网络相关信息
示例:
netstat -tlun
查看本机监听端口netstat -an
查看本机所有的网络netstat -rn
查看本机路由表命令名称:setup
命令所在路径:/usr/bin/setup
执行权限:root
语法:setup
功能描述:配置网络
安装:https://blog.csdn.net/zhangzhikaixinya/article/details/46691323
命令名称:mount
命令所在路径:/bin/mount
执行权限:所有用户
语法:mount [-t文件系统] 设备文件名 挂载点
示例:mount -t iso9660 /dev/sr0 /mnt/cdrom
语法:shutdown [参数] 时间
参数:
使用举例:shutdown -r now
now当前时间
logout
vim filename
:wq
命令 | 作用 |
---|---|
a | 在光标所在字符后插入 |
A | 在光标所在行尾插入 |
i | 在光标所在字符前插入 |
I | 在标签所在行行首插入 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
命令 | 作用 |
---|---|
:set nu |
设置行号 |
:set nonu |
取消行号 |
gg |
到第一行 |
G |
到最后一行 |
nG |
到第n行 |
:n |
到第n行 |
:$ |
移至行尾 |
:0 零 |
移至行首 |
命令 | 作用 |
---|---|
x |
删除光标所在处字符 |
nx |
删除光标所在处后n个字符 |
dd |
删除光标所在行,ndd 删除n行 |
dG |
删除光标所在行到文件末尾内容 |
D |
删除光标所在处到行尾内容 |
:n1,n2d |
删除指定范围的行 |
命令 | 作用 |
---|---|
yy |
复制当前行 |
nyy |
复制当前行一下n行 |
dd |
剪切当前行 |
ndd |
剪切当前行一下n行 |
p、P |
粘贴在当前光标所在行下或行上 |
命令 | 作用 |
---|---|
r |
取代光标所在字符 |
R |
从光标所在处开始替换字符,按Esc 结束 |
u |
取消上一步操作 |
命令 | 作用 |
---|---|
/string |
搜索指定字符串 搜索时忽略大小写 :set ic |
n |
搜索指定字符的下一个出现位置 |
:%s /old/new/g or c |
全文替换指定字符串 |
:n1,n2s/old/new/g or c |
在一定范围内替换指定字符串 |
g
代表不询问替换
c
询问替换
命令 | 作用 |
---|---|
:w |
保存修改 |
:w new_filename |
另存为指定文件 |
:wq |
保存修改并退出 |
ZZ | 保存修改并退出 |
:q! |
不保存修改退出 |
:wq! |
强制修改保存并退出(文件所有者与root可以使用) |
导入那个执行结果 : :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 -q 包名 不用全包名,只要包名就可以了
rpm -qa 查询所有已经安装包
rpm -qi 包名
- i 查询软件信息
- p 查询未安装包信息,得在包目录下
rpm -qf 系统文件名
rpm -ql 包名,查看包名安装在哪个文件路径下
rpm -qR 包名
-R: 查询软件包的依赖性
-p: 查询未安装包信息(在没有安装包的路径下查询)
rpm -V 已经安装的报名
-V: 晓燕指定RPM包中文件
验证内容参数如下:
S : 文件大小是否修改
M : 文件类型或文件的权限是否被修改
5 : 文件MD5校验和是否修改(可以看做文件内容是否改变)
D : 设备中,从代码是否改变
L : 问价你路径是否改变
U : 问价耐属性(所有者)是否改变
G : 文件属组是否改变
T : 文件修改时间是否改变
文件类型:
c : 配置文件
d : 普通文件
g : "鬼"文件
l : 授权文件
r : 描述文件
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/
setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT = "no" 改为yes
servimce network restart
vim /etc/yum.repos.d/CentOS-Base.repo
参数说明
- [base] 容器名称,一定要放在[]中
- name : 容器说明,自己可以随意写
- mirrorlist : 镜像站点,这个可以注释掉
- baseurl : 我们yum源服务器的地址。默认是CenOS服务yum源服务器
- enabled : 此容器是否生效,如果不写或写成enabled=1都是生效,写成enabled=0就是不生效
- gpgcheck : 如果是1是指RPM的数字证书生效
- gpgkey : 数字证书的公钥文件保存位置。不用修改
yum list
# 查询所有可用软件包列表
yum search 关键字
# 搜索服务器删给所有和关键字相关的包
yum -y install 包名
参数:
install 安装
-y : 自动回答yes
yum -y update 包名
参数:
update 升级
-y: 自动回答yes
注意事项:
yum -y update
没有写指定包名,那么就会升级所有软件包括内核,如果升级内核,需要在服务器本地进行配置,所以千万不要全部升级yum -y remove 包名
# 1. 查出所有可用的软件组列表
yum grouplist
# 2. 安装指定软件组,组名可以由grouplist查出来,如果名字有空格,要用双引号抱起来
yum groupinstall 软件组名
# 3. 卸载指定软件组
yum groupremove 软件组名
区别
安装准备
gcc
注意事项
源码包安装过程
./config 软件配置与检查
Makefile
文件,用于后续编辑在解决之后,需要先查看两个文件
INSTALL
后README
分别是:安装说明,使用说明开始操作
./config --prefix=/usr/local/名字
make
编译make install
编译安装注意事项
make clean
来清理编译出的垃圾文件概念
以.sh
后缀的文件,直接运行即可,进入目录,./*.sh
*代表当前文件的名字
用户信息文件/etc/passwd
概念
在Linux中主要是通过用户配置文件来查看和修改用户的信息
/etc/passwd文件中每个用户字段的说明
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
第4字段:GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
/home/用户名/
/root/
第7字段:登陆之后的Shell
什么是初始组和附加组
初始组:就是用户一登陆就立刻拥有的用户组先关权限,每个用户的初始组只能有一个,一半就是和这个用户的用户名相同的组名作为这个用初始组
附加组:指用户可以加入多个其他用户组,并拥有这个用户组对应的权限。附加组可以加入多个
用户对应的密码在影子文件中:/etc/shadow
影子文件所在路径
/etc/shadow
vim /etc/shadow
第1字段:用户名
第2字段:加密密码
!!
或 *
代表没有密码,不能登录第3字段:面膜最后一次修改日期
第4字段:两次密码的修改间隔时间(和第3字段比)
第5字段:密码有效期(和第3个字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段比较)
第8字段:账号失效时间
第9字段:保留
时间戳换算
date -d "1970-01-01 时间戳 days"
echo $(($(date --date="时间" +%s)/86400+1))
echo $(($(date --date="2020/07/02" +%s)/86400+1))
组信息文件
/etc/group
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户
组密码文件
/etc/gshadow
第1字段:组名
第2字段:组面膜
第3字段:组管理员用户名
第4字段:组中附加用户
普通用户:/home/用户名
,所有者和所属组都是此用户,权限是700
超级用户:/root/
,所有这和所属组都是root用户,权限是550
目录:/var/spool/mail/用户名/
如果有邮件就会出现在这个文件中
目录:/etc/skel/
此目录下所有文件,在创建新用户的时候都会从这里copy一份到新用户家目录下
命令格式
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
是否建立邮箱注意事项:
/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 # 加密模式
命令格式:
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
修改用户信息-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字段)
# 这样用户一登录就要修改密码
就是为了这条命令。
删除用户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"
命令格式
groupadd [参数] 组名
参数:
-g GID 指定组ID
命令格式
groupmod [参数] 组名
参数:
-g GID 指定组ID
-n 新组名 修改组名
例子
groupmod -n testgrp groupl
# 把组名groupl 修改为testgrp
groupdel 组名
gpasswd [参数] 组名
参数:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
什么是 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
查看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
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权限
什么是递归
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
递归的给目录设置权限
setfacl -m u:用户名:权限 -R 文件名
注意事项:
默认ACL权限
默认ACL权限就是如果父目录设定ACL权限,那么父目录所新建的子文件都会继承父目录的ACL权限
setfacl -m d:u:用户名:权限 文件名
什么是SetUID
用来以该文件属主身份运行的一个权限。
简单的说:一个文件有SUID权限的话,那么其他用户在运行这个文件的时候,就会拥有属于该文件的属主权限
x
(执行)权限简单的应用场景
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权限的执行流程
4代表SUID
chmod 4755 文件名 # 建议这种方式来操作。如果文件没有x权限那么就会有错误 是大写的`S`
chmod u+s 文件名
这是没有x
权限,但是以chmod u+s 文件
给予的SETUID权限,会发现有大写S
建议
对于关键目录严格控制此权限。比如:/
、/usr
等
SetGID对目录的作用
r
和x
权限,才能进入此目录w
权限时,新建的文件默认数组就是这个目录的属组SetGID对文件的作用
只有可执行的二进制程序才能设置SGID
权限
命令执行者要对该程序拥有x
(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
chmod 2755 文件名
chmod g+s 文件名
实战举例
cd /tmp/
mkdir test
# 设置GID
chmod g+s test
# 设置所有用户都有权限
chmod 777 test
# 切换用户,查看user1用户在使用test目录的时候,所属组的情况
su - user1
cd /tmp/test
touch abc
# 查看权限
ll
chmod 755 文件名
chmod g-s 文件名
SBIT粘着位作用
w
和x
权限,即普通用户可以在此目录拥有写入权限w
权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root
可以删除所有文件,普通用户就算拥有w
权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件粘着位具体作用
对于一个目录,这个目录是/tmp
目录,所有用户都可以并拥有wrx
权限,那么,需求是:在这目录下所有用户都可以读,但是每个用户只能对自己创建的文件进行修改或删除,这个时候就需要SBIT粘着位了
# 设置粘着位
chmod 1755 目录名
chmod o+t 目录名
# 取消粘着位
chmod 777 目录名
chmod o-t 目录名
命令格式,注意:如果使用该命令设置权限,使用ll
权限是查看不了权限的,只能使用lsattr
命令来查看
chattr [+-=] [参数] 文件或目录名
+: 增加权限
-: 删除权限
=: 等于某权限
参数:
i: 如果对文件设置i属性,那么不允许对文件进行 删除、改名、也不能添加和修改数据。
对目录:只能修改目录下文件的数据,但不允许建立(新建)和删除文件
a: 如果对文件设置a属性,那么只能在文件中增加数据,不能删除、修改数据;
对目录:只允许在目录中建立和修改文件,不允许删除
使用举例
chattr +i abc
查看文件系统属性
命令格式
lsattr 参数 文件名
参数:
-a: 显示所有文件和目录
-d: 若目标是目录,仅列出目录本身的属性,而不是子文件的
使用举例
lsattr -a abc
什么是sudo权限?作用。以及场景
场景:Linux上,只能有一个root
用户,对有些命令,其他普通用户也会用得到,如果普通用户需要使用root
级别命令。老是通知Liunx中root
用户来帮我们执行的话,不现实,root
管理员有他自己的事情要做
sudo权限:root
把本来只能超级用户执行的命令赋予普通用户来执行。
sudo的操作对象是系统命令
这个时候就需要sudo权限登场了。它可以由root
指定我们可以执行哪些命令
sudo实际上修改的就是
/etc/sudoers
文件
visudo
# 打开/etc/sudoers文件
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
# 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
给予普通用户权限
# 在/etc/sudoers文件中加入
# 用户名 ALL=绝对权限路径 参数
sc ALL=/sbin/shutdown -r now
普通用户查看可用的sudo命令
sudo -l
# 普通用户执行sudo赋予的命令
sudo /sbin/shutdown -r now
# 当前时间重启
注意:千万不要给他vim软件的权限。因为给他这样类似的软件之后普通用户可以通过软件来修改重要的文件了
分区类型
df [参数] [挂载点]
参数
-a: 显示所有的文件系统信息,包括特殊文件系统如 /proc、/sysfs
-h: 使用习惯单位显示容量,如KB, MB或GB等
-T: 显示文件系统类型
-m: 以MB为单位显示容量
-k: 以KB为单位显示容量。默认就是以KB显示
du [参数] [目录]
参数:
-a: 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h: 使用习惯单位显示磁盘占用量, 如KB、MB、GB
-s: 统计总占用量,而不列出子目录和子文件占用量
有趣的问题
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 1.9G 36G 5% /
du -sh /
1.8G /
可以很清楚看到,都是/
目录,df
查看的却比du
查看的占用空间要大,这是为什么?
du命令与df命令的区别
df
命令是从文件系统考虑的,不光要考虑文件占用空间,还要统计被命令和程序占用的空间(最常见的是文件已经删除了,但是程序并没有释放空间)du
命令是面向文件的,只会计算文件或目录占用的空间fsck [参数] 分区设备文件名
参数:
-a: 不用显示用户提示,自动修复文件系统
-y: 自动修复。和-a作用一致,不过有些文件兄只支持-y
dumpe2fs 分区设备文件名
查询与自动挂载
mount -l
# 查询系统已经挂载的设备, -l 会显示卷标名称
mount -a
# 依据配置文件/etc/fstab的内容,自动挂载
挂载命令格式
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
参数:
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以ext3、ext4,、iso9660文件系统
-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项: 可以指定挂载的额外选项
挂载光盘
# 1. 先来创建挂载点,所谓挂载点就是一个目录,可以理解为Widnows中盘符
mkdir /mnt/cdrom # /mnt目录是CoentOS系统专门留的目录
# 2. 挂载点与设备名建立关系
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
# 上面连个命令是一样的效果;iso9660是光盘的文件系统
#-----
# 卸载光盘
umount 设备文件名或挂载点
umonnt /mnt/drom
挂载U盘
# U盘的话就和硬盘是一样的了,设备名是系统分配的,我们要系那个知道那么只能查询
# 查询设备文件名
fdisk -l
# 建立联系
mount 设备文件名 挂载点
mount /dev/sdb1 /mnt/usb
注意:Liunx默认不支持NTFS
文件系统
# 1. 添加硬盘
# 2. 使用命令,查看硬盘,得到硬件名
fdisk -l
# 3. 使用fdisk 命令分区
fdisk 得到的硬件名
# 4. 进入工具后开始分区,具体看下面的指令图
n # 新建分区
--> e extended
--> p primary partition(1-4)
Partition number (1-4): 1 # 主分区号
First cylinder (1-1305, default 1): # 指定分区大小 开始位置
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G #指定分区大小可以用G、M、K表示
#--- 到此第一个分区完成,不过只是示例,到时候具体看
fdisk分区交互指令说明
什么是fstab文件和fstab文件作用
是用来存放文件系统的静态信息的文件
Fstab文件:就当前对我而言,这个文件作用是为了完成自动挂载而存在的,只要里面写的东西,在系统启动的时候就会自己去挂载,不用每次手动挂载
第一字段:分区设备名或UUID(硬盘通用唯一UUID)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份;1代表每天备份;2代表不定期备份
第六字段:指定分区是否被fsck
检测,0代表不检测;其他数字代表检测的优先级,那么1的优先级最高,其他依次。
# 查看设备的UUID
dumpe2fs -h 设备名
添加需自动挂载的
vim /etc/fsttab
# 打开文件后,自己写就行了
# 添加完成后,检测是否修改正确,重新挂载
mount -a
# 上面就是根据配置文件/etc/fstab的内容自动挂载
/etc/fstab
文件修复
mount -o remount, rw /
# 然后修改/etc/fstab文件即可
# 查看内存与swap分区使用情况
free [参数]
参数:
-m: 以M格式查看
-g: 以G格式查看
什么是Shell
百度百科:在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
对于我们而言,Shell就是一个解释器,把我们的代码转换成为计算机能够识别的二进制。
第一个Shell程序
#!/bin/bash # 这个表示是一个声明吧 一定要加
# 这是第一个脚本,上面表示SH编程
echo "Hello, World"
#!/bin/bash
表示是一个shell程序注意事项:
.sh
为后缀。cat -A hello.sh
来查看,这个时候可以通过dos2unix
来转化一下dos2unix的安装
# 1. 安装
yum -y install dos2unix
# 2. 开始转换
dos2unix hello.sh
方式一:赋予运行权限
chmod 755 hello.sh
./hello.sh
方式二:通过bash调用执行
bash hello.sh
历史命令
history [参数] [历史命令保存文件]
参数:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件中,刷新历史命令文件,讲历史命令写入.bash_history文件中
每个用户的history
文件在/home/用户名
目录下.bash_history
文件中
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile
中修改
历史命令的调用
!n
重复执行第N条历史命令
history
命令查看编号!!
重复执行上一条命令!字符串
会执行最近以字符串
开头的命令命令补全
在bash中,命令与文件补全是非常方便与常用的功能,我们只要输入命令或文件时,按Tab
键就会自动补全。
按两次Tab
键就会提示出与你要输入的类似的命令
既可以补全命令也可以补全文件名
别名的设置方式
# 设置别名
alias 别名=‘原命令‘
# 查询命令别名
alias
命令执行顺序
bash
的内部命令$PATH
环境变量定义的目录查找顺序找到的第一个命令设置别名永久生效
写入文件,文件位置为:/root/.bashrc
每个用户目录下的.bashrc
文件
vim /root/.bashrc
# .bashrc
# User specific aliases and functions
alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘
alias vi=‘vim‘
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
删除别名
unalias 别名
快捷键 | 作用 |
---|---|
Ctrl + A | 把光标移动到命名行开头。如果我们输入的命令过长,想把光标移动到命令行开头时使用。 |
Ctrl + E | 把光标移动到命令行结尾 |
Ctrl + C | 强制终止当前的命令 |
Ctrl + L | 清屏,相当于clear 命令 |
Ctrl + U | 删除或剪切光标之前的命令。我输入了一行很长的命令,不适用退格键一个一个删除字符,使用这个快捷键更方便 |
Ctrl + K | 删除或剪切光标之后的内容 |
Ctrl + Y | 粘贴 Ctrl + U 或 Ctrl + K剪切的内容 |
Ctrl + R | 在历史命令中搜索,按下Ctrl + R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索 |
Ctrl + D | 退出当前终端 |
Ctrl + Z | 暂停,并放入后台。这个快捷键牵扯工作管理内容,我们在系统管理章节详细介绍。 |
Ctrl + S | 暂停屏幕输出 |
Ctrl + Q | 恢复屏幕输出 |
什么是重定向
举个例子来说,原本ls
命令是讲该目录中文件输出到屏幕中来,而我想让他输出到一个文件当中去,这就是重定向
wc [参数] [文件名]
参数:
-c: 统计字节数
-w: 统计单词数
-l: 统计行数
如果什么都写 : wc abc
会统计abc文件的字节数、单词数、行数
代码示例
ls; date; cd /usrssdxx; pwd
# 会照样执行 执行到cd报错因为没有目录
dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子
date; dd if=/dev/zero of=/root/testfile bs=1k count=100000; date
命令1 | 命令2
# 将命令1的一个正确的输出,作为命令2的操作对象
# 例子:
ll -a /etc/ | more
#ll -a /etc 出的结果使用more分页
netstat -an | grep "ESTABLESHED"
# netstat -an的输出,然后使用grep搜索
grep [参数] "搜索内容"
参数
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出来的关键字用颜色显示
bash
中变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定变量的类型为数值型。代码示例
# 变量定义
name=hello
# 变量调用
echo name
# 变量查看,查看所有变量包括环境变量以及自己定义的变量
set
# 变量删除
unset name
# 下面是变量定义
name="xiao bai"
# 变量叠加
aa=123
aa="$aa"456
aa=${aa}789
在内存中定义环境变量
export 变量名=变量值
# 查询变量
env
# 如果查询不到,太多不好看,可以这么玩,管道流
env | grep ‘变量名‘
# 删除变量
unset 变量名
在内存中插入目录到PATH环境变量中
ls
这种命令其实都是可执行文件,可以使用相关命令查看该命令所在路径。PATH
中,这样我们可以自己创建一个可执行文件,把目录加入PATH
环境变量中。然后直接执行我们的sh
脚本# 先来创建目录 并创建文件
# 当前目录是/root/目录
mkdir test
cd test
vi Hello.sh
# 设置权限,提升为可以执行
chmod 755 Hello.sh
# 添加到PATH环境变量中
PATH=${PATH}:/root/test
# 然后就可以在任意目录执行
Hello.sh
位置参数变量 | 作用 |
---|---|
$n |
n为数字,$0 代表命令本身,$1-$9 代表第一个参数到第9个参数,十以上的参数需要用大括号使用${10} |
$* |
这个变量代表命令行中所有参数,把插入的参数看做一个整体,其实就是字符串 |
$@ |
这个变量也代表命令行中所有参数,和上面不同的是这个封装为数组 |
$# |
这个表示参数的个数 |
$n的实例
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
# ----一下是运行的时候
# 先提权
chmod 755 canshu1.sh
canshu1.sh 11 22 33
# ----- 结果
./canshu1.sh is ./canshu1.sh
11 is 11
22
33
$*
与$@
区别
#!/bin/bash
for i in "$*"
do
echo $i
done
x=1
for y in "$@"
do
echo $y
done
# ---- 结果
[root@iZ8vb6xljiklnfnmawnio3Z temp]# bash ./canshu2.sh 1 2 3 4
1 2 3 4
1
2
3
4
预定义变量 | 作用 |
---|---|
$? |
验证上一条命令是否正确的被执行,如果这个变量的值为0,证明上一个命令正确执行;如果变量为非0,则证明上一条命令执行不正确 |
$$ |
当前进程的进程号(PID) |
$! |
后台运行的最后一个进程的进程号 |
$?的实例
echo $?
--->:0
lst
--->:-bash: lst: command not found
echo $?
--->:127
可以看到,上次命令执行成功那$?
的值是0,如果错误,则是非0的值。
$$与$!的实例
#!/bin/bash
echo "The current process is $$"
# 输出当前进程的PID
# 是这个脚本在运行的时候的PID
find /root -name hello.sh &
# 使用find命令在root目录下查找hello.sh文件
# 符号& 的意思是把命令放入后台执行。
echo "The last one Daemon process is $! "
#----输出结果
The current process is 13959
The last one Daemon process is 13960
read [参数] [变量名]
参数
-p: "提示信息" 在等待read输入时,输出提示信息
-t: 秒数 read命令会一直等待用户输入,使用此选项可能指定等待字符数,就会执行
-n: 字符数 read命令值接受指定的字符数 就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
代码示例
#!/bin/bash
read -t 30 -p "Please input your name: " name
echo -e "\n"
echo "Is your name? $name "
read -t 30 -p "Please input your age" -s age
# 加密输入 -s
echo -e "\n"
echo "Is your age? $age "
read -t 30 -p "Please input your gender[M/F]" -n 1 gender
echo -e "\n"
echo "Is your gender? $gender"
declare [+/-] [参数] 变量名
参数:
-: 给变量设定类型的属性
+: 取消变量的类型属性
-i: 将变量声明为整数型
-x: 将变量声明为环境变量
-p: 显示指定变量被声明的类型
#-----使用举例
aa=11
declare -p aa
--->:declare -- aa="11"
# -----方法一:
aa=11
bb=22
# 计算和
declare -i cc=$aa+$bb
# ------方法二:
aa=11
bb=11
dd=$(expr $aa + $bb)
# 注意空格必须有
#------方法三:
aa=11
bb=22
ff=$(( $aa+$bb ))
代码示例
x=${y-new} # new 就是新值 x肯定没有 y也是,那么y没有 那x肯定是新值了
echo $x
---->:new
什么是环境变量配置文件
主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH
、HISTSIZE
、PSI``HOSTNAME
等等默认的环境变量
常用环境变量配置文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
~/.bash_profile
~/.bashrc
以/etc/
开头的都是每个用户读取的环境变量配置文件,其余都是用户家目录下的配置文件
source 配置文件
也可以,这么玩
. 配置文件
主要用于 ,一般对配置文件修改后需要重启什么的,使用这个命令修改之后不必重启,直接生效
/etc/profile
文件的主要作用
/etc/profile.d/*.sh
文件~/.bash_prifile的作用
PATH变量,对于一些新的环境配置需要的可以加入这个环境中
~/.bashrc
文件PATH=$PATH:$HOME/bin
注销时生效的配置变量文件
~/.bash_logout
其他配置文件
~/bash_history
远程终端欢迎信息:
/etc/issue.net
ssh
的配置文件/etc/ssh/sshd_config
决定,加入Banner /etc/issue.net
行才能显示(还得重启SSH服务service sshd restart
)登陆后欢迎信息
/etc/motd
不管是本地登陆还是远程登陆,都可以显示欢迎信息
正则表达式用来在文件中匹配符合条件的字符串。正则是包含匹配。grep
、awk
、sed
等支持正则
元字符 | 作用 |
---|---|
* |
前一个字符匹配0次或任意多次 |
. |
匹配出了换行符外任意1个字符 |
^ |
匹配行首,例如^he 以he 开头的hello |
$ |
匹配行尾,例子和上面一样 |
[] |
匹配括号中指定的1个字符,如[0-9]或[a-z]匹配0到9或a到z小写 |
[^] |
匹配括号以外的1个字符,就是说只要不是括号里的字符 |
\ |
转移符。 |
\{n\} |
表示其前面的字符恰好出现n次,如:a\{2\} 两个字符a |
\{n, \} |
表示其前面字符出现不小于n次。例如[0-9]\{2\} 表示两位以上数字 |
\{n, m\} |
表示前面的字符至少出现n次,最多出现m次例如:[a-z]\{6,8\} 匹配6-8个小写字母 |
代码示例
grep "a*" test.txt
# 匹配所有内容,包括空白行。*是匹配0次或多次,所以
grep "aa*" test.txt
# 匹配至少包含有一个a的行
grep "aaa*" test.txt
# 匹配最少包含2个连续a的字符串
grep "aaaa*" test.txt
# 匹配最少包含4个连续a的字符串
cut [参数] 文件名
参数:
-f: 列号,提取第几列
-d: 分隔符,按照指定分隔符分割列
#----示例
1 xiaohong 89
2 xiaobai 100
cut -f 2 student.txt
--->:xiaohong
--->:xiaobai
printf ‘输出类型输出格式‘ 输出内容
输出类型
%ns: 输出字符串。n是输出几个字符
%ni: 输出整数。n是输出几个数字
%m.nf: 输出浮点数,m和n是数字,代指输出的整数和小数位数
输出格式
\a: 输出警告声
\b: 输出退格键
\f: 清楚屏幕
\n: 回车
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab键
\v: 垂直输出退格键,也就是Tab键
awk ‘条件1{动作1} 条件2{动作2}...‘ 文件名
条件一般为表达式
动作:
格式化输出
流程控制
前-后:加入BEGIN和END关键字
awk ‘BEGIN {printf"This is a book"} {printf $2 "\t" $4 "\n"}‘ student.text
--->:This is a bookxiaohong
xiaobai
sed是一种几乎包括在UNIX
平台的轻量级编辑器。主要是用来将数据进行选取、替换、删除、新增的命令
sed [参数][动作] 文件名
参数:
-n: 一般sed会直接把所有数据输出屏幕,如果加入此参数,则只会输出经过sed命令处理的输出屏幕上
-e: 允许对输出数据应用多条sed命令编辑
-i: 用sed的修改结果直接修改读取数据文件,而不是由屏幕输出
代码示例
sed ‘2p‘ -n student.text
# 查看文件第二行
--->:2 xiaobai 100
####-------字符串替换
sed ‘s/旧字符串/新字符串/g‘ 文件名
[root@iZ8vb6xljiklnfnmawnio3Z temp]# cat student.text
1 xiaohong 89
2 xiaobai 100
3 xiaohuang 50
4 xiaohei 90
5 baibai 100
[root@iZ8vb6xljiklnfnmawnio3Z temp]# sed ‘3s/50/150/g‘ student.text
1 xiaohong 89
2 xiaobai 100
3 xiaohuang 150
4 xiaohei 90
5 baibai 100
sort [参数] 文件名
参数
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串排序
-r: 反向排序
-t: 指定分隔符,默认是分隔符是制表符
-k n[,m]: 安装指定字段范围排序,从n字段开始m字段结束(默认到行尾),简单说就是指定根据哪列进行排序
sort /etc/passwd
sort -k 3,3 /etc/passwd
wc [参数] 文件名
参数:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
什么不写,都统计
# 两种判断格式
test -e /root/install.log
[ -e /root/install.log ]
# 然后通过
echo $? # 来验证上次命令是否执行正常
#----
[ -d /root ] && echo "yes" || echo "no"
# 如果文件存在则打印yes
使用方式和上面的一样
[ canshu1.sh -nt canshu2.sh ] && echo "yes" || echo "no"
--->: no
name=sc
# 给name赋值
[ -z "$name"] && echo "yes" || echo "no"
aa=11
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
if [ 条件表达式 ]; then
程序
fi
if [ 条件表达式 ]
then
程序
fi
#!/bin/bash
rete=$(df -h | grep "/dev/vda1" | awk ‘{print $5‘} | cut -d "%" -f1)
# 把分区使用率给变量rete
if [ $rete -ge 80 ]
then
echo "Warning! /dev/vda1 is full!!"
fi
if...else
if [ 条件表达式 ]
then
条件成立,执行此处
else
条件不成立,执行此处
fi
#!/bin/bash
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk ‘{print$2}‘ " )
if[ "$port" == "open" ]
then
echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpd start &>/dev/null
echo "$(date) restart httpd !!" >> /tmp/autostart-error.log
fi
多分支if使用
if [ 表达式1 ]
then
语句1
elif [ 表达式2 ]
then
语句2
...
else
所有不满足,执行此
fi
case相当于编程语言中的switch
case $变量名 in
"值1")
语句1
;;
"值2")
语句2
;;
"值2")
语句2
;;
*)
都不满足,执行此处
;;
esac
使用方式1
for 变量 in 值1 值2 值3 值3
do
程序
done
#!/bin/bash
#-----示例
for i in 1 2 3 4 5
do
echo "date is ${i}"
done
语法二
for (( 初始值; 循环控制条件; 变化值 ))
do
程序
done
while [ 条件判断 ] # 成立执行程序
do
程序
done
xinetd
的服务服务的启动与自启动
启动:就是当前系统中启动的服务
自启动:就是指重启系统后,软件的服务会随着系统重启一起启动
RPM服务的查询
systemctl list-unit-files
# 查看服务的自启动状态,可以看到所有RPM包安装的服务
# 回车是下一页
# 左边是名称,右边是:enabled 是开机启动; disabled开机不启动
源码包安装的服务
# 一般是/usr/local目录下
RPM包安装的一下位置中,默认位置
/etc/init.d/
:启动脚本位置
/etc/sysconfig/
:初始化环境配置文件位置
/etc/
:配置文件位置
/etc/xinetd.conf
:xinetd配置文件
/etc/xinetd.d
:基于xinetd服务的启动脚本
/var/lib/
:服务产生的数据放在这里
/var/log/
:日志
独立服务的启动
systemctl start|stop|status|restart 服务名.service
关闭一个服务
systemctl stop xxx.service
重启一个服务
systemctl restart xxx.service
显示一个服务的状态
systemctl status xxxx.service
查看一个服务是否开机启动
systemctl is-enabled xxxx.service
查看已启动的服务列表
systemctl list-unit-files | grep enabled
设置开机时启动服务
systemctl enable xxx.service
设置开机禁止服务的启动
systemctl disable xxx.service
在每个源码包里,都有启动方式的介绍
路径+脚本 start
想要源码包的安装像rpm那样启动,用到时候再说吧
# 查看系统中所有进程,使用BSD操作系统格式
ps aux [推荐使用]
# 查看系统中所有进程,使用Liunx标准命令格式
ps -le
每列的说明
USER
:进程是由哪个用户产生的
PID
:进程的ID号
%CPU
:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEM
:该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ
:该进程占用虚拟内存大小,单位KB
RSS
:该进程占用实际物理内存的大小。单位KB
TTY
:该进程是在哪个终端运行的。其中tty1-tty7
代表本地控制台终端。tty1-tty6
是本地字符界面终端。tty7
是图形终端。pts/0-256
代表虚拟终端
STAT
:进程状态。常用的有R:运行
、S:睡眠
、T:停止状态
、s:包含子进程
、+:位于后台
。
TIME
:进程占用CPU的运算时间,注意不是系统时间。
COMMAND
:产生此进程的命令名
进程管理作用
top [参数]
参数:
-d: 秒数 指定top命令每个几秒更新。默认是3秒,在top命令的交互模式当中可以执行的命令。
? 或 h: 显示交互模式的帮助
P: 以CPU使用率排序,默认就是此项
M: 以内存使用率排序
N: 以PID排序
q: 退出top
信息说明
第一行任务队列信息
内容 | 说明 |
---|---|
20:12:57 | 当前时间:时分秒 |
up 7 days, 3:14 | 系统运行时间。本机已经7天3个小时 |
1 users | 当前登录了1个用户 |
load average: 0.01, 0.04, 0.05 | 系统在前1分钟,5分钟,15分钟的平均负载。一般认为小于1小时,负载较小,大于1,系统已经超出负载 |
第二行进程信息
内容 | 说明 |
---|---|
Tasks: 75 total | 系统中进程总数 |
1 running | 正在运行的进程数 |
74 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程,如果是0需要手工检查僵尸进程 |
第三行CPU信息
内容 | 说明 |
---|---|
Cpu(s): 0.2 us | 用户模式占用的CPU百分比 |
0.2 sy, | 系统模式占用的CPU百分比 |
0.0 ni | 改变过优先级的用户进程占用的百分比 |
99.7 id | 空闲的CPU的CPU百分比 |
0.0 wa | 等待输入/输出的进程的占用CPU百分比 |
0.0 hi | 硬中断请求服务占用的CPU百分比 |
0.0 si | 软中断请求服务占用的CPU百分比 |
0.0 st | st(Steal time)虚拟时间占用的百分比,就是当有虚拟机时2,虚拟CPU等待实际CPU的时间百分比 |
第四行物理内存信息
内容 | 说明 |
---|---|
Mem : 3880340 total, | 物理内存总量,单位KB |
2873604 free | 空闲的物理内存数量,我们使用的虚拟机,总共分配了628M内存 |
88604 used | 已经使用的物理内存数量 |
918132 buff/cache | 作为缓冲区的内存数量 |
第五行交换分区
内容 | 说明 |
---|---|
Swap: 0 total | 交换分区(虚拟内存)的总大小 |
0 free | 空闲交互分区的大小 |
0 used | 已经使用的交互分区的大小 |
3509836 avail Mem | 作为缓存的交互分区大小 |
KiB Swap: 0 total, 0 free, 0 used. 3509836 avail Mem
pstree [参数]
参数
-p: 显示进程的PID
-u: 显示进程的所属用户
kill -l
常用的进程号
代码示例
kill -1 xxxx
# 重启该进程
kill -9 xxx
# 强制杀死该进程
killall [参数][进程号] 进程名
参数
-i: 交互式,询问是否要杀死某个进程
-I: 忽略进程名的大小写
killall -9 httpd
# 杀死httpd进程
pkill [参数][进程号] 进程名
参数:
-t: 终端号 按照终端号踢出用户
#----
# 使用w命令查询本机登陆用户获取TTY
w
# 踢出用户
pkill -t -9 上面获取的TTY
# 进程放入后台的方式有两种
# 第一种,放入后台
tar -zcf etc.tar.gz /etc/ &
# 第二种,暂停进程放入后台
top #然后Ctrl + Z快捷键
jobs [-l]
-l: 显示工作的PID
# +号代表最近一个放入后台工作,-号代表第二个放入后台工作
fg %工作号
参数
%工作号 %号可以省略,但是注意工作号与PID的区别
bg %工作号
#注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
vmstat [刷新延时 刷新次数]
#例如
vmstat 1 3
dmesg
dmesg | grep CPU
free [-b|-k|-m|-g]
参数
-b: 以字节为单位显示
-k: 以KB为单位显示,默认是KB
-m: 以MB为单位电视
-g: 以GB为单位显示
uptime
# 也就是top命令的第一行,
uname [参数]
参数
-a: 查看系统所有相关信息
-r: 查看内核版本
-s: 查看内核名称
file /bin/ls
# 查看ls命令格式
lsb_release -a
lsof [参数]
参数
-c 字符串: 只列出以字符串开头的进程打开的文件
-u 用户名: 只列出某个用户的进程打开的文件
-p pid: 列出某个PID进程打开的文件
# 意思就是说该进程调用了哪些文件
lsof -p xxxx
查看该服务是否开启
systemctl list-unit-files | grep crond
crontab [参数]
参数
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
crontab -e
# 进入crontab编辑界面,会打开vim编辑你的工作
* * * * * 执行的任务
时间的定义,每个*的作用
项目 | 含义 | 范围 |
---|---|---|
第一* | 一个小时当中第几分钟 | 0-59 |
第二个* | 一天当中第几个小时 | 0-23 |
第三个* | 一个月当中第几天 | 1-31 |
第四个* | 一年当中第几月 | 1-12 |
第五个* | 一周当中星期几 | 0-7(0和7都是代表星期日) |
特殊符号
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个*代表一小时中每分钟都执行一次 |
, | 代表不连续的时间,比如"0 8, 12, 16 * * *"命令,就是代表每天8点0分,12点0分16点0分都执行一次 |
- | 代表连续的时间范围,比如"0 5 * * 1-6"命令,代表每周一和周六凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如"*/10 * * * *"命令,代表每隔10分钟都执行一次 |
例子
时间 | 含义 |
---|---|
45 22 * * * 命令 | 每天22点45分执行命令 |
0 17 * * 1 命令 | 每周1的17点0分执行 |
0 5 1, 15 * * 命令 | 每月1号和15号的凌晨5点0分执行命令 |
40 4 * * 1-5 | 每周一到周五的凌晨4点40分执行命令 |
*/10 4 * * * 命令 | 每天的凌晨4点,每隔10分钟执行一次命令 |
0 0 1,15 * 1命令 | 每月1号和15号,每周1的0点0分执行一次 |
注意:星期几和几号最好不用一起使用,容易混乱
# 查看服务是否启动
ps aux | grep rsyslogd
# 查看服务是否自启动
systemctl list-unit-files | grep rsyslog
常见日志作用
日志文件 | 说明 |
---|---|
/var/log/cron |
记录系统定时任务相关的日志 |
var/log/cpus |
记录打印信息的日志 |
var/log/dmesg |
记录系统开机时内核自检的信息。也可以使用dmesg命令直接查看 |
/var/log/btmp |
记录错误登陆的日志。这个文件是二进制的,不能vi 看,使用lastb 命令查看 |
/var/log/lastlog |
记录系统中所有用户最后一次的登陆时间,这个文件也是二进制,要使用lastlog 命令查看 |
/var/log/secure |
记录验证和授权方面信息。只要涉及账户和密码的程序都会记录。 |
/var/log/message |
记录系统重要信息日志,这个日志会记录Linux系统绝大多数重要信息,如果系统出现问题,首先应该坚持这个 |
/var/run/utmp |
记录当前一登录的用户信息。这个文件会随着用户登录和注销不断变化,只记录当前登录用户的信息。要使用w 、who 、users 等命令查看 |
除了系统默认的日志之外,采用RPM
安装的系统服务也会默认把日志记录在/var/log
目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd
服务来记录和管理的。而是由各个服务使用自己的日志管理文档来记录自身日志
基本日志格式包含以下四列
/etc/rsyslog.conf
配置文件
authpriv.* /var/log/secure
# 服务名称[连接符号]日志等级 日志记录位置,
# 认证相关服务.所有日志等级
服务名称
服务名称 | 说明 |
---|---|
auth | 安全和认证相关信息(不推荐使用authpriv代替) |
authpriv | 安全和认证相关消息(私有的) |
cron | 系统定时任务cront和at产生的日志 |
daemon | 和各个守护进程产生的日志 |
ftp | ftp守护进程产生的日志 |
kern | 内核产生的日志(不是用户进程产生的) |
loca10-loca17 | 为本地使用预留的服务 |
连接号
*
代表所有日志等级,比如:authpriv.*
代表authpriv
认证信息服务产生的日志。.
代表只要比后面的等级高的(包含该等级)日志都记录下来,比如cron.info
代表cron
服务产生的日志,只要日志等级大于info
等级,就要记录=
代表只记录所需等级的日志,其他等级都不记录。比如果*.emerg
代表人和日志服务产生的日志,只要等级是emerg
等级就记录.!
代表不等于,也就是说除了该等级的日志外,其他等级日志都记录日志等级
日志论题简单的说,就是为了防止日志被替换,比如,今天的服务器记录的日志写到secure
文件中,那么到明天之后,日志名就变为secure-日期
。然后今天又会有新的日志。依次类推
这种配置的方式要在/etc/logrotate.conf
文件中修改。
先来看一下配置文件中参数
logrotate配置文件中参数
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate 数字 | 保留的日志文件个数。0指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组 如 create 0600 root utmp |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略日志警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替。否则就算时间到达也不会轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k |
dateext | 使用日期作为日志轮替文件后缀,如secure-20200709 |
vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log{
daily
create
rotate 30
}
# 只要这么写appche就会加入日志
logrotate命令
logrotate [参数] 配置文件名
参数
-v: 显示日志轮替过程
-f: 强制进行日志轮替。不管日志轮替条件是否符合
#---
logrotate -f /etc/lofrotate.conf
ContOS运行级别
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,只要用于系统修复,常用语修改root密码 |
2 | 不完全的命令行模式,不含NFS服务 |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
查看当前系统运行几倍
runlevel
运行级别的修改
init 运行级别
修改系统默认运行级别
vim /etc/inittab
id:3:initdefault:
# 系统开机后直接进入哪个运行级别
Linux需要备份的目录
/root/
目录/home/
目录/var/spool/mail/
目录/etc/
目录完全备份:完全备份是指把所有需要备份的数据全部备份。可以是整个硬盘,也可以是整个目录
增量备份:第一次备份,整个都备份,第二次备份只备份增加的数据,依次类推
差异备份:第一次全部备份。第二次对一第一次只备份增加的。第三次备份对第一次备份对比,备份增加的
1.验证是否安装该命令
rpm -qa | grep dump
# 安装
yum -y install dump
使用方式
dump [参数] 备份之后的文件名 原文件或目录
参数
-level: 就是我们说的0-9十个备份级别 0完全备份 1第一次增量 2第二次增量 最多可以9次
-f 文件名: 指定备份之后的文件名
-u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
-v: 显示备份过程中更多的输出信息
-j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
-W: 显示允许被dump的分区的备份等级及备份时间
注意事项
dump备份分区的时候可以使用增量备份
当备份为独立分区时,可以使用-u
参数。如果备份分区下文件不能使用-u
会报错误
DUMP: You can‘t update the dumpdates file when dumping a subdirectory
DUMP: The ENTIRE dump is aborted.
restore [参数] [选项]
参数:
-C: 比较备份数据和实际数据的变化
-i: 进入交互模式,手工选择需要恢复的文件
-t: 查看模式,用于查看备份文件中拥有哪些数据。
-r: 还原模式,用于数据还原
选项:
-f: 指定备份文件的文件名
# 还原
# 1. 先创建新目录
# 之后 restore -r -f 备份文件.bz2
标签:mem 过期 详细信息 内存 编译器 用户和用户组管理 发送信息 挂载u盘 声明
原文地址:https://www.cnblogs.com/q2210075017/p/13289580.html