编写Shell监听端口重启服务
服务总是自动挂掉,为解决运维人员不能及时重启,所以写个定时脚本,一分钟监控一次端口是否占用,不占用说明服务挂了,自动重启服务。
脚本,以80端口为例
编写taskStartNginx.sh
#!/bin/bash
nginx=`netstat -an | grep ":80" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
if [ $nginx -eq 0 ];then
#端口没有占用,重启服务
echo "重启Nginx服务"
/usr/local/nginx/sbin/nginx
else
echo "运行正常!"
fi
-----------------------------------
添加到定时任务
1、crontab -e : 修改 crontab 文件. 如果文件不存在会自动创建。
2、crontab -l : 显示 crontab 文件。
3、crontab -r : 删除 crontab 文件。
4、crontab -ir : 删除 crontab 文件前提醒用户。
执行crontab -e
#每分钟执行一次taskStartNginx.sh脚本
*/1 * * * * /usr/local/nginx/taskStartNginx.sh
定时任务服务开关重启设置
systemctl enable crond.service # 让服务开机启动
systemctl disable crond # 不让开机启动
systemctl status crond # 查看服务状态
systemctl stop crond # 暂停服务
systemctl start crond # 启动服务
systemctl restart crond # 重启服务
systemctl is-enabled crond # 查看服务是否开机启动
Linux安装JDK
上传JDK包解压
修改/etc/profile文件
vi /etc/profile
在profile文件末尾配置jdk环境:
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存然后使用命令使profile重新生效
source /etc/profie
Linux查询CPU
https://www.cnblogs.com/mengchunchen/p/9669704.html
Linux中多种查看系统时间的方法
date 这个是最经典的系统查看时间的命令
[root@localhost ~]# date
2021年 1月 21日 木曜日 15:06:56 CST
uptime
[root@localhost ~]# uptime
15:08:31 up 52 days, 6:38, 1 user, load average: 0.00, 0.00, 0.00
Linux修改系统时间的方法
方法1
比如说把时间设为2021-01-21 18:00:00
我们会先设日期
date -s 20210121
再设时间
date -s 18:00:00
方法2
date -s "20210121 18:00:00"
查看Linux iptables是否启动
systemctl status iptables 查看iptables状态
注意:systemctl 为Centos7的命令 Centos6可以使用service
systemctl和防火墙firewalld命令
一、防火墙的开启、关闭、禁用命令
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld
二、使用firewall-cmd配置端口
(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
(5)关闭防火墙端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent
查询Linux使用的镜像版本
cat /etc/redhat-release
查询服务器主机名
uname -n
hostname
定时任务
systemctl enable crond.service # 让服务开机启动
systemctl disable crond # 不让开机启动
systemctl status crond # 查看服务状态
systemctl stop crond # 暂停服务
systemctl start crond # 启动服务
systemctl restart crond # 重启服务
systemctl is-enabled crond # 查看服务是否开机启动
https://www.cnblogs.com/miaocbin/p/11540312.html
https://www.cnblogs.com/clsn/p/8428257.html
查看Linux自启动服务列表
systemctl list-unit-files|grep enabled
-----------------------------------以上为补充内容-----------------------------------------
1、Linux
主要学习
CentOs6
CentOs7
Linux:
1.开源免费
2.安全稳定(开源使得linux更加安全可靠)
3.适合服务器使用
---------------------------------------------------------------------------
unix操作系统简述:
1969年,美国贝尔实验室的肯 • 汤普森在DEC PDP-7机器上开发出了UNIX系统。
1971年,肯 • 汤普森的同事丹尼斯 •里奇发明了C语言;
1973年,UNIX系统的绝大部分源代码用C语言重写,这为提高UNIX系统的可移植性打下基础。
unix主要发行版本:
系统 公司 硬件平台
AIX IBM PowerPC
UX HP PA-RISC
Solaris SUN SPARC
linux操作系统简介:
Linux系统诞生于1991年,由芬兰大学生李纳斯(Linus Torvalds)和后来陆续加入的众多爱好者共同开
发完成。
linux版本分类:
1.内核版: www.kernel.org
RHEL6.X 2.6.X
RHEL7.X 3.10.X
2.发行版:(Red Hat Enterprise Linux Red Hat公司发布的面向企业用户的Linux操作系统)
RedHat系列:
个人版:Fedora
服务器版:RHEL(RedHat Enterprise Linux) --收费(收取一些售后服务费 Centos是抄ReaHat
免费开源的 已经被RedHat公司收购了)
Debian系列:
ubuntu
查看网站使用的什么操作系统
www.netcraft.com(网站扫描器)
注意:
通过VM虚拟机引用CentOs镜像创建Linux虚拟机,分配的最小内存为628MB,如果小于628MB则默认为简易
安装。(相当于只安装了一个裸机)
2、VMware配置
安装VMware会创建两个虚拟网卡。
VMnet1 VMnet8
VMware网络模式有三种:
桥接模式:使用的是本机真实网卡(自动模式 如果本机有多个网卡自动桥接其中一个。
设置桥接模式固定连接某个网卡,关闭虚拟机后,通过VMware 编辑 -> 虚拟网络编辑器 ->设置桥接连接方式)
NAT模式:使用的是VMnet8。
仅主机模式:使用的是VMnet1。
桥接模式: 1.可以连接到本机 2.可以连接到局域网 3.可以连接到公网
NAT模式: 1.可以连接到本机 2.不可以连接到局域网 3.可以连接到公网
仅主机模式: 1.可以连接到本机 2.不可以连接到局域网 3.不可以连接到公网
3、分区
MBR分区:最大支持2.1TB硬盘(超过部分无法识别使用),每块硬盘最多支持4个分区。
GPT分区:最大支持9.4ZB硬盘(1ZB=1024PB 1PB=1024EB 1EB=1024TB),分区数没有限制,但是windows限制
128个主分区。
MBR分区类型:
主分区:最多只能有4个。
扩展分区(归属于主分区):
最多只能有一个。
主分区加扩展分区最多有4个。
不能写入数据,只能包含逻辑分区。
格式化:
写入文件系统,并清除旧数据,在磁盘特定区域写入特定数据,在分区中划分一片用于存放文件分配表、目录表等用于文件管理
的磁盘空间。
分区设备文件名:
/dev/hda1/(IDE硬盘接口)
/dev/sda1/(SCSI硬盘接口、SATA硬盘接口)
a第一个硬盘 b第二个硬盘 依此类推
1第一个分区 2第二个分区 依此类推 (1 2 3 4必须给主分区 5开始为逻辑分区)
挂载:
必须分区:
/(根分区)
swap分区(交换分区 也可称为虚拟内存 当内存不够时,将会使用swap分区)
推荐分区:
/boot(启动分区)
挂载点:使用已经存在的空目录作为挂载点(特殊目录不行:/bin /lib /etc)
4、IP配置
Centos6.5以后(包括6.5)提供了setup命令,图形化配置ip
Centos6 重启网络服务
service network restart
--------------------------------------------------------------
连接进入linux系统 默认存在三个日志
[root@localhostCentos6 ~]# ls
anaconda-ks.cfg install.log install.log.syslog
install.log :记录安装在系统中的软件包及其他版本信息
install.log.syslog :记录安装过程中留下的事件记录
anaconda-ks.cfg :记录安装过程中系统设置下选项
5、xshell
xshell linux远程连接工具(家庭/学生免费版)
下载地址:https://www.netsarang.com/zh/
xshell手动上传和下载软件包(通过yum源在线安装,可学习下文yum源安装软件包)
作用类似winScp的上传和下载功能。
注意:只能在xshell窗口使用
6、winScp
windows到linxu文件传输工具。
下载地址:https://sourceforge.net/projects/winscp/
7、linux注意事项
1.Linux 区分大小写 Windows不区分大小写
2.linux 不靠扩展名区分文件类型,而是靠权限位标识来确定文件类型的。
但是建议按照windows熟悉文件后缀编写。
建议特殊文件必须编写后缀
压缩文件:.gz .bz2 .zip .tar.gz .tar.bz2 .tgz
二进制软件包: CentOs中使用二进制安装包是RPM 使用 .rpm扩展名
程序文件:Shell脚本 .sh
8、目录结构
/bin :存在系统命令目录 普通用户和超级用户可以执行。是/usr/bin 目录的软链接(ls ll ping mkdir kill 等命令都存放于此)
/sbin :存在系统命令目录 只有超级用户可以执行。/usr/bin 目录的软链接。
/usr/bin :存在系统命令目录 普通用户和超级用户可以执行。
/boot :系统启动目录,保存与系统启动相关的文件。如 内核文件和启动引导程序。
/dev :设备文件保存存储
/etc :配置文件保存位置。 系统内所有采用默认安装方式(rpm安装)的服务配置文件全部保存在此目录中。
如 用户信息、服务启动脚本、常用服务的配置文件等。
/home :普通用户的家目录。在创建用户时,每个用户要有一个默认登陆和保护自己数据的位置,就是用户的
家目录。所有普通用户的宿主目录是在 /home/下建立一个和用户名相同的目录。如用户 user1的家目录
就是/home/user1/
/root :超级用户的家目录。
/lib :系统调用的函数库保存位置。 是/usr/lib的软链接
/lib64 :64位函数库保存位置。是/usr/lib64的软链接
/lost+found :当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。
/media :挂载目录。系统建议是用来挂载媒体设备的,如软盘和光盘。
/misc :挂载目录。系统建议用来挂载NFS服务的共享目录。
/opt :第三方软件安装的保存位置。 业界更习惯在 /usr/local/目录也可以用来安装软件。
/proc :虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、
进程、网络状态等。 如 /proc/cpuinfo是保存CPU信息的 /proc/devices 是保存设备驱动的列表
/proc/filesystems是保存文件系统列表。
/sys :虚拟文件系统。和/proc目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息。
/run :系统运行时产生的数据,如ssid 、pid等相关数据。 /var/run是此目录的软链接。
/srv :服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据。
/tmp :临时目录
/usr :系统软件资源目录。存在系统软件资源的目录。在系统中安装的软件大多数保存在这里。
/usr/lib :应用程序调用的函数库保存位置。
/usr/local :手工安装的软件保存位置。一般建议源码包软件安装在这个位置。
/usr/share :应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/kernels :内核源码保存位置
/var :动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件。
/var/lib :程序运行中需要调用或改变的数据保存位置。如 mysql的数据库保存在 /var/lib/mysql目录中
/var/log :系统日志保存位置
/var/run :一些服务和程序运行后 PID保存位置。 /run目录的软链接
9、重启服务器命令
shutdown -r now 命令重启
这条命令在重启时会正常保存和中止服务器中正在运行的程序,是安全重启命令。而且最好在重启前执行
几次 sync 命令,这条命令是数据同步命令,可以让暂时保存在内存中的数据同步到硬盘中。
10、SSH远程链接
SSH远程连接linux服务器
SSH连接默认端口 22
SSH 用户名@IP地址 -p 端口
ssh root@192.168.204.128 -p 22
SSH 用户名@IP地址 --省略
ssh root@192.168.204.128
注意:
查询SSH服务是否已经开启
rpm -qa | grep ssh
libssh2-1.4.2-1.el6.x86_64
openssh-clients-5.3p1-104.el6.x86_64
openssh-server-5.3p1-104.el6.x86_64
openssh-5.3p1-104.el6.x86_64
查看linux是32位还是64系统:getconf LONG_BIT
查看linux发行版本信息:cat /etc/issue 或者 cat /etc/redhat-release
查看linux系统主型号、CPU等信息: cat /proc/cpuinfo
查看linux系統内核信息:uname -a
11、Linux常用命令
[root@localhostCentos6 ~]#
root:显示当前登录的用户
~:表示当前所在的目录 此实列为/root 超级用户的家
#:命令提示符。超级用户是#,普通用户是$
--------------------------------------------------------------------->目录命令<---------------------------------------------------------------------
12、ls命令
ls命令作用:显示目录下的内容
ls [选项] [文件名或目录名]
-a 显示所有文件,包括隐藏文件
-d 显示目录信息,而不是目录下的文件
-h 人性化显示文件大小
-l 长格式显示
13、cd命令
cd 切换所在目录的命令
cd ~ 回到用户家目录
cd - 回到上次所在目录
绝对路劲:以根目录为参照物,从根目录开始,一级一级进入目录
相对路劲:以当前目录为参照物,进行目录查找
pwd 命令:查询当前所在目录命令
14、mkdir命令
mkdir 创建目录
mkdir -p 递归建立所有目录
15、rmdir命令
rmdir 删除空目录
注意:只能删除空目录 如果目录下面有文件或者子目录会报错
了解使用:extundelete
--------------------------------------------------------------------->文件命令<---------------------------------------------------------------------
16、touch命令
touch命令
创建文件。 文件不存在便创建,文件存在便修改文件时间
17、stat命令
stat命令
查看文件详细信息的命令。
18、cat命令
cat命令用来查看文件内容,全文展示。
适合查看较小的文件。
cat -A :相当于-vET选项的整合,用于列出所有隐藏符号。
cat -E :列出每行结尾的回车符.($ 表示回车符)。
cat -n :显示行号
cat -T :把Tab键用^I 显示出来
cat -v :列出特殊字符
19、more命令
more命令
more分屏显示文件命令。
空格键:向下翻页
b: 向上翻页
回车键: 向下滚动一行
/字符串:搜索指定的字符串
q: 退出
20、less命令
less命令
less分行显示命令,基本操作于more一样。
上下 切换行数。(more没有这个上下切换命令)
21、head命令
head命令
默认显示文件前10行记录
head -n 20 文件名. -n 设定显示行数
head -v 文件名 显示文件名
22、tail命令
tail命令。
默认显示文件结尾10行命令。
tail -n 20 文件名. 指定显示行数
tail -f 文件名. 监听文件新增内容
23、ln命令
ln命令
ln -s 源文件 目标文件 :不加 -s创建硬链接 加 -s创建软链接。
ln -f 源文件 目标文件 :如果目标文件已存在,则删除目标文件后再建立链接文件。
硬链接:
1.源文件和硬链接文件拥有相同的Inode和Block
2.修改任意一个文件,另外一个文件同步修改
3.删除任意一个文件,另外一个文件不影响使用
4.硬链接不能链接目录
软链接:
1.源文件和硬链接文件拥有不同的Inode和Block
2.修改任意一个文件,另外一个文件同步修改
3.删除软链接文件,源文件不受影响,删除源文件,软链接文件不可用
4.软链接没有实际数据,只保存源文件的Inode.源文件大小不影响软链接大小
5.软链接可以链接目录
24、rm命令
rm即可以删除文件,也可以删除目录。
rm [选项] 文件或者目录
-r 递归删除
-f 强制删除
-i 交互删除,在删除之前会询问用户
rm -rf 目录|文件 注意:删除
25、cp命令
cp复制命令
cp [选项] 源文件 目标文件
-a
-d: 如果源文件为软链接(对硬链接无效),则复制的目标文件也为软链接
-i: 如果目标文件已经存在,则会询问是否覆盖
-p: 复制的文件保留源文件的属性
-r: 递归复制
26、mv命令
mv是用来剪切命令。
mv [选项] 源文件 目标文件
-f :强制覆盖 如果目标文件已经存在,不询问直接覆盖
-i : 如果目标文件已经存在,则询问是否覆盖
-v :显示详细信息
27、基础权限
基础权限
ls -l 长格式显示目录文件信息,第一列就是文件的权限。
-(文件类型) ---(所有者权限) ---(所属组权限) ---(其他人权限)
文件类型:
- 普通文件
d 目录文件
i 软链接文件
b 块设备文件。特殊设备文件,存储设备都是这种文件。
c 字符设备文件。 特殊设备文件,输入设备一般都是这种文件, 如鼠标、键盘等。
p 管道符文件
s 套接字文件
权限类型:
r :read 读取权限
w :write 写权限
x :execute 执行权限
2~4位代表文件所有者权限. u代表
5~7位代表文件所属组权限. g代表
8~10位代表文件其他人权限. o代表
28、设置权限
chmod命令
chmod [选项] 权限 文件名
-R 递归设置权限,也就是给子目录中的所有文件设定权限
用户身份:
u :所有者
g :所属者
o :其他人
a :全部身份
+ - 赋值法
+ :加入权限
- :减去权限
= :设置权限
权限:
r :读取权限
w :写入权限
x :执行权限
数字权限:
4 :代表r权限 读
2 :代表w权限 写
1 :代表x权限 执行
常用权限:
644
755
777 :最高权限
注意:数字相加最大为7
29、设置文件所有者和所属组命令
普通用户只能修改【所有者】是自己的【文件或者目录】的权限(读 写 执行)。
普通用户不能修改【文件或者目录】的【所有者或者所属组】,哪怕文件或者目录的所有者和所属组是自己也不行,只能root用户操作。
chown命令
chown修改文件和目录所有者和所属组的命令。
chown [选项] 所有者 : 所属组 文件或者目录
-R :递归设置
chgrp命令
修改文件或目录的所属组。(上面讲的chown也可以修改所属组,但是chgrp只能用来设置所属组)
-R :递归设置
30、权限针对目录或文件作用
注意:不能用root用户操作,超级管理忽略一切权限禁锢。
1.权限对文件作用
读(r):可以对文件执行cat、more、less、head、tail等查看命令。
写(w):可以对文件执行vim、echo等修改文件内容的命令。
执行(x):可以执行运行脚本文件。
注意:
注意:
注意:
想要删除文件,必须要拥有上级目录的写(w)权限。
权限对目录的作用
读(r):可以对目录执行ls命令,查看目录下的内容
写(w):可以在目录执行touch rm cp mv 命令,并且可以删除子文件。
执行(x):可以对目录执行cd目录。
31、umask查看系统默认权限命令
umask 查看系统默认权限设置
注意:不建议修改系统默认权限设置
文件:新建文件的最大权限是666。
目录:新建目录的最大权限是777。
[root@localhostCentos6 ~]# umask
0022
[root@localhostCentos6 ~]#
--0022 暂时忽略第一个0,下文会讲到这个权限。022
666-022=644 644也就是创建文件的默认权限。
777-022=755 755也就是创建目录的默认权限。
32、man命令
man是最常用的帮助命令,也是Linux最主要的帮助命令。
man [选项] 命令
-f :查看命令拥有哪个级别的帮助。
-k :查看和命令相关的所有帮助。
man 命令 可以查看命令的详细信息
举例:man ls
33、info
info 以书本目录形式显示更详细命令介绍
34、help命令
help命令只能获取Shell内置命令。
shell内置命令,就是Linux自带的命令。
type命令 可区分命令是shell内置命令还是外部命令。
shell是Linux的命令解释器。
35、whereis命令
whereis命令
whereis搜索系统命令的命令。
注意:只能搜索系统命令,不能搜索文件。
36、which命令
which命令。
which也是搜索系统命令的命令。
与whereis命令区别:
which查询命令,如果命令存在别名,将显示别名详情。
37、locate命令
locate命令可以根据文件名搜索普通文件。
优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置 /var/lib/mlocate/mlocate.db
注意:只能根据文件名搜索,不能执行复杂的搜索。
注意:可以使用updatedb命令强制更新数据库。
38、find按照文件搜索
find 搜索路劲 [参数] 文件名
-name:根据文件名搜索,区分大小写
-iname:根据文件名搜索,不区分大小写
-inum:根据inode号搜索
39、find根据文件大小搜索
find 搜索路劲 [选项] 文件名
-size [+ | -]
+:搜索比执行文件还大的文件
-:搜索比指定文件还小的文件
find 搜索文件大小单位
d:默认单位,按照512 byte搜索。
c:按照字节搜索
w:按照双字节(中文)搜索
k:按照KB单位搜索。 必须是小写k
M:按照MB单位搜索。必须是大写M
G:按照GB单位搜索。必须是大写G
40、find按照修改时间搜索
find 搜索路径 [选项] 搜索内容
-atime [+|-]时间 : 按照文件访问时间搜索
-mtime [+|-]时间 : 按照文件数据修改时间搜索
-ctime [+|-]时间 : 按照文件状态修改时间搜索
举例:
-5 :代表5天内修改的文件
5 :代表前5~6天那一天修改的文件
+5 :代表6天前修改的文件
41、find按照文件类型搜索
find 搜索 [选项] 搜索内容
-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件
42、按照权限搜索
find 搜索路径 [选项] 搜索内容
-perm 权限模式:查找文件权限刚好等于"查找权限模式"的文件
-perm -权限模式:查找文件权限全部包含"查找权限模式"的文件
-perm +权限模式:查找文件权限包含"查找权限模式"的任意一个权限文件
43、find按照所有者、所属组和文件类型搜索
find 搜索路径 [选项] 搜索内容
-user: 按照用户名查询所有者指定用户的文件
-group: 按照组名查找所属组文件
-nouser: 查找没有所有者的文件
注意:-nouser常用,主要用户查找垃圾文件
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接
44、find逻辑运算符
find 搜索路径 [选项] 搜索内容
-a :逻辑与 and
-o : 逻辑或 or
-not :逻辑非 not
45、find其他命令
-exec选项
find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;
-exec作用将find命令查询出来的结果集,交给由"-exec"调用命令2来处理。 {}代表find查询出来的结果。
-ok 作用和 -exec相同。区别是:-ok会询问是否指定 -exec直接处理。
46、find命令结合通配符
find 结合通配符使用
?: 配置任意一个字符
* : 匹配0个或任意多个任意字符
[] : 匹配括号中任意一个字符 [abc] 可以匹配a 匹配b 或者匹配c
[-] :匹配括号中任意一个字符。 - 表示范围 [a-z]代表匹配一个小写字符
[^] :逻辑非 表示匹配不是括号中的一个字符。 [^0-9]表示匹配不是数字的字符。
47、grep命令
grep 在文件中搜索相应的字符串
grep [选项] "搜索内容" 文件名
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto :搜索出关键字用颜色显示
grep命令在文件中搜索使用正则表达式进行匹配。
? : 匹配前一个字符串0次或者1次。 (?是扩展正则,需要使用egrep命令)
* : 匹配前一个字符串0次或者多次。
[] : 匹配括号中任意一个字符。 [abc] 匹配a 匹配b 或者匹配c
[-] : 匹配括号中任意一个字符。 - 表示范围 [a-z]代表匹配一个小写字符
[^] : 逻辑非 表示匹配不是括号中的一个字符。 [^0-9]表示匹配不是数字的字符。
^ : 匹配行首
$ : 匹配行尾
48、| 管道符号
命令1 | 命令2 | 命令3 ......
将前面命令返回结果,交给后面命令执行。
注意:
1.管道符返回的都是文本字符串
2.find不能使用管道符 有替代命令 -exec -ok
49、netstat命令
netstat命令(CentOs 7中,需要安装net-snmp.x86_64,net-tools.x86_64两个包才有此命令)
netstat [选项]
-a : 列出所有网络状态
-c : 秒数 指定每隔几秒刷新一次网络状态
-n : 使用ip地址和port端口号显示
-p : 显示PID和程序名
-t : 显示使用TCP协议端口的连接状况
-u : 显示使用UDP协议端口的连接状况
-l : 仅显示监听状态的连接
-r : 显示路由表
netstat -an | grep "ESTABLISHED" | wc -l
使用wc命令统计行数,即可统计具体网络连接数量
50、alias命令
alias 别名
查看全部别名;alias
设置定义的别名: alias 别名 = '命令'
注意:这种修改是临时修改,重启服务器将会失效。
永久生效:
修改用户家目录 .bashrc文件
51、linux常用命令
Ctrl+A :把光标移动到命令行开头
Ctrl+E :把光标移动到命令行结尾
Ctrl+L :清屏 相当于clear命令
Ctrl+U: 删除或剪切光标之前的命令
Ctrl+K: 删除或剪切光标之后的命令
Ctrl+Y: 粘贴Ctrl+U或Ctrl+K剪切的命令
52、zip压缩和解压
linux不靠后缀名区分文件类型,而是靠权限位标识来确定文件类型的。
zip是Windows中最常用的压缩格式,Linux也可以正常识别".zip"格式。
压缩:
zip [选项] 生成压缩包文件 源文件或者源目录
-r :压缩目录
解压:
unzip [选项] 压缩包
-d 指定压缩文件
53、gz、bz2压缩解压
.gz .bz2是linux常用压缩包文件。
.bz2压缩算法比较新,压缩后的文件比较小,但压缩过程消失资源多。
注意:gzip压缩时会直接删除源文件,可以使用-c 命令保存源文件
压缩:
gzip [选项] 源文件或者目录
-c : 用于保留源文件
-d : 解压缩
-r : 压缩目录
解压:
gunzip 压缩包
gzip -d 压缩包
----------------------------------------------------------------------------------------
.bz2是Linux另外一种压缩格式。
注意:.bz2不能压缩目录
压缩:
bzip2 [选项] 源文件
-d : 解压缩
-k : 压缩时,保留源文件
-v : 显示压缩的详细信息
解压:
bunzip2 压缩包
bzip2 -d 压缩包
54、tar.gz 和 tar.bz2格式
使用tar [选项] 压缩包 源文件或目录
-z : 压缩和解压缩 "tar.gz"格式
-j : 压缩和解压缩 "tar.bz2"格式
压缩:
tar -zcvf 生成压缩包名称 源文件
解压:
tar -zxvf 压缩包名
tar -ztvf 压缩包 :查看压缩包里面的内容
tar -zxvf 压缩包名 -c 目录 : 解压到指定目录
tar -zxvf 压缩包名 -c 目录 文件名 : 解压部分文件到指定目录
----------------------------------------------------------------------------------
压缩:
tar -jcvf 生成压缩包名称 源文件
解压:
tar -jxvf 压缩包名
tar -jtvf 压缩包 :查看压缩包里面的内容
tar -jxvf 压缩包名 -c 目录 : 解压到指定目录
tar -jxvf 压缩包名 -c 目录 文件名 : 解压部分文件到指定目录
55、关机和重启命令
sync数据同步
在执行关机或者重启命令前,指定sync命令,将缓存区中的数据写入到硬盘中,避免数据丢失。
shutdown命令 属于安全重启命令
shutdown [选项] 时间
-c :取消已经执行的shutdown命令
-h :关机
-r :重启
常用命令
shutdown -r now 立马重启
----------------------------------------------------------------------------------------
reboot重启命令,也属于安全重启命令。
reboot 重启
----------------------------------------------------------------------------------------
halt 关机命令,不会完整关闭和保存系统中的服务,不建议使用
----------------------------------------------------------------------------------------
poweroff 关机命令,不会完整关闭和保存系统中的服务,不建议使用
56、配置IP
配置IP地址两种方式:
1.setup工具 -上面案例
2.手工修改配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
重启网络
service network restart
有时候重启网络会失败:
1.ip冲突
2.UUID(唯一识别符)冲突 (在你制作镜像会 会导致UUID重复 需要重新配置UUID)
解决方案共三步:
1.删除MAC地址行
vi /etc/sysconfig/network-scripts/ifcfg-eth0
2.删除Mac地址和UUID绑定文件
rm -rf /etc/udev/rules.d/70-persistent-net.rules
3.重启linux
shutdown -r now
57、ifconfig
58、ping
ping [选项] ip
-b :用于对整个网段探测
案例:
ping -b 192.168.6.255
192.168.6.103
192.168.6.104
192.168.6.105
...
-c 次数: 用于指定ping的次数
-s 字节: 探测包的大小
59、痕迹命令
系统中存在一些痕迹日志文件,文件内容是二进制乱码,需要通过指定命令查看。
/var/log/wtmp /var/run/utmp /var/log/btmp /var/log/lastlog等日志。
w命令显示系统中正在登录的用户信息,查看的是/var/run/utmp
user:当前登录的用户
TTY:登录终端 tty1-6:本地字符终端 tty7:本地图形终端 pts/0-255:远程终端
FROM:登录IP地址
LOGIN@:登录时间
IDLE:用户闲置时间
WHAT:用户正在进行的操作
who命令和w命令类型,用户查看正在登录的用户,但是显示的内容更加简单,也是查看/var/run/utmp命令。
last命令查看系统所有登陆过的用户信息,包括正在登陆的用户和之前登陆的用户。这个命令查看的是
/var/log/wtmp痕迹日志文件。
lastlog命令查看系统中所有用户最后一次登陆时间的命令。查看的是 /var/log/lastlog文件
lastb命令查看错误登陆的信息的,查看的是/var/log/btmp痕迹日志.
60、挂载U盘
注意:windows 服务列表中 VMware USB Arbitration Service 必须是开启状态
1.先插入U盘让虚拟机识别
2.fdisk -l 查看U盘名称
3.mount -t vfat -o iocharset=utf8 U盘识别名称 要挂载的空目录 :挂载U盘并指定字符集
4.umount 挂载的空目录 :卸载U盘
61、vim编辑器
vim是一个全屏幕纯文本编辑器。
vim 文件 将进入命令模式。
输入模式 (ESC返回到命令模式):
a : 在光标所在字符后插入
A : 在光标所在行尾插入
i : 在光标所在字符前插入
I : 在光标所在行行首插入
o : 在光标下插入新行
O : 在光标上插入新行
编辑模式:
:w 保存不退出
:w 新文件名 把文件另存为新文件
:q 不保存退出
:wq 保存退出
:q! 强制不保存退出
:wq! 强制保存退出
62、vim命令模式操作
命令模式下:
移动光标
上下左右方向键
h 左移 l 右移 j 下移 k 上移
gg : 移动到文件头
G: 移动到文件尾 (或者shit + g)
^ : 移动到行首
$ : 移动到行尾
:n :移动到指定行(n 是数字)
删除字符
x : 删除单个字符
nx : 删除n个字符
删除单行或者多行,删除的内容在剪切板中 可以使用p 粘贴
dd : 删除单行
ndd : 删除n行
:n1,n2d : 删除指定范围的行
dG : 删除整篇文档
粘贴
p : 粘贴到光标后
P(大) : 粘贴到光标前
复制
yy 复制单行
nyy 复制多行
复制后,使用p或者P(大)粘贴
撤销
u :撤销
ctrl + r :反撤销
替换
r : 替换光标所在处字符
R : 从光标所在处开始替换字符 按ESC结束。
63、vim配置文件
:set nu 显示行号
:set nonu 取消行号
:syntax on 显示文本颜色
:syntax off 取消文本颜色
:set hlsearch 高亮显示搜索内容
:set nohlsearch 取消高亮显示搜索内容
:set list 显示隐藏符号
:set nolist 不显示隐藏符号
永久生效:
在家目录创建 .vimrc文件 将命令写入配置文件中
64、vim使用技巧
/ 查找内容 从光标所在行向下查找
? 查找内容 从光标所在行向上查找
n 下一个
N 上一个
替换(案例)
:1,10s/old/new/g 替换1到10行的所有old字符串为new g全部替换
:%s/old/new/g 替换整个文件的old字符串为new g全部替换
:1,10s/^/#/g 注释1到10行
:1,10s/^#//g 取消1到10行注释
:1,10s/^/\/\//g 1到10行 行首加入 // \属于linux转义符
:1,10s/^\/\///g 取消1到10行的 //
导入其他文件内容
:r 文件名 把文件内容导入光标位置
多文件打开
vim -o 文件1 文件2
vim -O 文件1 文件2
-o :小写o会上下分屏打开两个文件
-O :大写O会左右分屏打开两个文件
切换两个文件 先按ctrl+w 然后松开 再按 上下或者左右箭头跳转
65、软件包分类
1.软件包分类
源码包
二进制包
2.二进制包分类:
DPKG包:是由Debian Linux所开发出来的包管理机制。主要应用在Debian和unbuntu中。
RPM包: 是由Red Hat公司所开发的包管理系统。目前很多Linux都在使用RPM包管理方式。
3.rpm包名规则
httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd:软件包名
2.2.15:软件版本
15:软件发布的次数
e16:软件发行商
i686:适合的硬件平台 i686奔腾II以上计算机都可以安装,x86_64(64为CPU可以安装) noarch (无硬件限制)
rpm:rpm包扩展名
4.rpm默认安装位置
/etc/ : 配置文件安装目录
/usr/bin/ : 可执行的命令安装目录
/usr/lib/ : 程序所使用的函数库保存位置
/usr/share/doc/ : 基本的软件使用手册保存位置
/usr/share/man/ : 帮助文件保存位置
5.RPM包安装
rpm -ivh 包全名
-i : install 安装
-v : 显示更详细的信息
-h : 打印 显示安装进度
--nodeps : 不检查依赖性安装。
--replacefiles : 替换文件安装。覆盖某些文件存在,继续安装。
--replacepkgs : 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍
--force : 强制安装 不管是否已经安装,都重新安装
6.服务启动(两种都可以)
systemctl start|stop|restart|status 服务名
service 服务名 start|stop|restart|status
start:启动服务
stop:停止服务
restart:重启服务
status:查看服务状态
7.卸载
rpm -e 包名
--nodeps 不检查依赖性
-e 卸载
8.查询
1.查询软件包是否安装
rpm -q 包名
-q : 查询
2.查询系统中的所有安装软件包
rpm -qa
-a 所有(all)
3.查询软件包的详细信息
rpm -qi 包名
-i 查询软件信息
4.查询没有安装的软件包信息
rpm -qip 包全名
-p :查询没有安装的软件包信息
5.查询系统文件属于哪个RPM包
rpm -qf 系统文件名
-f 查询系统文件属于哪个软件包
6.查询软件包所依赖的软件包
rpm -qR 包名
-R 查询软件包的依赖性
66、yum源文件解析
yum源配置文件保存在/etc/yum.repos.d/目录中,文件扩展名一定是.repo。
[base]:容器名称,一定要放在[]中
name:容器说明,可以自己随便写
mirrorlist:镜像站点。
baseurl:CentOS官方的yum源服务器地址。 注意:mirrorlist与baseurl需注释其中一个。
enabled:如果不写或者写成enabled=1 表示此容器生效,写成enabled=0则表示此容器不生效。
gpgcheck:如果为1表示RPM数字证书生效。如果为0则表示RPM数字证书不生效。
gpgkey:数字证书的公钥文件保存位置。不用修改。
67、yum命令
1. 查询yum源服务器上所有可以安装的软件包列表
yum list
2.查询yum源服务器上某个可以安装的软件包
yum list 包名
3.搜索yum源服务器上所有和关键字相关的软件包
yum search 关键字
1.安装命令
yum -y install 包名
-y : 自动回复yes,如果不加-y 那么每个安装的软件都需要手工回答yes
2.升级命令
yum -y update 包名
yum -y update 不加包名,升级本机所有软件包
3.卸载命令
yum remove 包名
68、用户信息文件
/etc/passwd 文件保存了用户所有信息文件
举例:
root:x:0:0:root:/root:/bin/bash
第一列:用户名
第二列:密码标记 代表此用户存在登录密码(密码存在此文件: /etc/shadow)
第三列:用户ID 0表示超级用户 1~499 系统用户 500 ~ 60000 普通用户
第四列:组ID 添加用户时,如果不指定用户所属的初始组,那么会创建和用户名相同的组.(组信息文件 /etc/group)
第五列:用户说明
第六列:用户家目录
第七列:登录shell
/bin/bash 该用户可以执行自己的全部权限
/sbin/nologin 该用户不可以登录
注意:
把普通用户变成超级用户,只需要把用户ID 修改成0即可。 登录修改后的普通用户,系统会认为当前登录的时超级用户
69、用户密码文件解析
ldd:$6$mItp.gFi$5QgucbTekR.VxNkEdo1UWhVljzgMM0.5Fg7d4BELz2NEfUr5.KnBHUHYwRBd3AYLmZW7uIbZ4Oq
eJVr2f6rc//:18471:0:99999:7:::
第一列:用户名
第二列:加密后的密码。 可以在加密后的密码前面加上!或者* 或者任意字符,让密码暂时失效用户无法登录。
第三列:密码最近更改时间 1970-01-01作为标准时间
第四列:密码修改的间隔时间。 第三列+第四列后得到一个时间戳,超过这个时间戳后才可以修改密码
第五列:密码有效期 单位为天。 每次重新修改密码后,会从密码更改时间重新计算密码有效期。(也就是
说密码快到有效期 可以重新修改密码,来重新计算密码的有效期)
第六列:密码到有效期前几天警告信息,每次登录时都会提醒密码快要到有效期了。
第七列:密码过期后的宽限天数 在宽限天数内还可以继续登录 默认为空是-1 表示永久宽限天数,到期后也可以登录。
第八列:密码失效时间。写时间戳,如果超过了失效时间,就算密码没有过期,用户也无法使用
第九列:保留
70、用户组信息文件解析
root:x:0:
第一列:组名
第二列: 组密码标记(存在这个文件下 /etc/gshadow。 将一个用户放到某个组下只能root用户操作,但可以
为组设置一个密码,将这个密码交给某个普通用户,那么这个普通用户便可以添加或者移除组中的用户)
第三列:组ID
第四列:附加组用户
初始组:每个用户初始组只能有一个,初始组只能有一个,一般都是和用户名相同的组作为初始组。
附加组:每个用户可以属于多个附加组,要把用户加入组,都是加入附加组。
71、用户管理命令
useradd 选项 用户名
不建议使用选项 直接使用系统默认
-u 550 :指定UID 列如指定550
-g 组名 :指定初始组 不建议手工指定
-G 组名 :指定附加组
-c 说明 :添加说明
-d 目录 :手工指定家目录 目录不需要事先建立
-s shell :
useradd添加用户默认值文件有两个:
/etc/default/useradd
/etc/login.defs
/etc/default/useradd
/etc/login.defs
MAIL_DIR /var/spool/mail 新建用户的邮箱目录
PASS_MAX_DAYS 99999 密码有效天数
PASS_MIN_DAYS 0 密码修改间隔时间
PASS_MIN_LEN 5 密码最小长度
PASS_WARN_AGE 7 密码到期前警告天数
UID_MIN 500 创建用户UID 范围
UID_MAX 60000
GID_MIN 500 创建用户组GID 范围
GID_MAX 60000
CREATE_HOME yes 是否自动创建用户的家目录
UMASK 077 用户家目录权限 777-077=700
USERGROUPS_ENAB yes 删除用户时,是否删除用户的初始组
ENCRYPT_METHOD SHA512 密码加密方式
72、设定密码
1.超级管理员可以设置其他用户的密码
passwd [选项] 用户名
-l : 暂时锁定用户
-u : 解锁密码
--stdin : 可以将通过管道符输出的数据作为用户的密码,主要是在shell脚本时用到。
2.普通用户直接修改自己的密码:
passwd
3.强制用户登录修改密码(root用户操作):
把密码修改日期归零,这样用户登陆就要修改密码
chage -d 0 用户名
73、用户信息修改
usermod 命令修改已经添加的用户信息。
usermod [选项] 用户名
-g 组名:修改用户的初始组 不建议修改
-G 组名:修改用户的附加组
-L:临时锁定用户
-U:解锁用户
74、删除用户
userdel -r 用户名
-r : 删除用户的同时删除用户的家目录
75、切换用户身份
su [选项] 用户名
- : 表示连用户的环境变量一起切换
76、添加用户组
添加用户组
groupadd 组名
77、删除用户组
删除用户组
groupdel 组名
删除的组不能是其他用户的初始组,可以是附加组。
78、把用户添加进组或者从组中删除
gpasswd [选项] 组名
-a 用户名 : 把用户加入组
-d 用户名 : 把用户从组中删除
79、ACL权限
1.通过上文了解了Linux文件基本的权限。
一个文件或目录权限 = 所属者:所属组:其他用户
注意:一个文件或目录只能有一个所属者,一个所属组(组里面可以有多个用户),和多个其他用户。
2.ACL权限
ACL是用于解决基本权限设定无法满足某种权限要求的问题。
比如 现在有一个文件
所属者是:root 权限是 7
所属组是:sz 权限是7
其他用户:权限是 0
现在有一个用户ldd,我想让ldd对文件有5的权限,那么这种情况就无法满足。
第一:不能将文件的所属者改成ldd,硬性要求
第二:不能将ldd加入到sz组,因为sz的权限是7,也不能将sz组的权限改成5后加入ldd,这样会影响到sz
组中其他用户的权限。
第三:不能将其他用户的权限改成5,这样修改ldd用户满足了要求,但是其他任意一个用户也对该文件有了
5的权限,所以不能修改。
以上Linux基本权限无法满足要求,那么就只能使用ACL权限,来满足要求了。
--查询是否开启了ACL权限 (默认都是开启)
dumpe2fs -h /dev/sda1
dumpe2fs 命令是查询指定分区详细文件系统信息的命令
setfacl -m u:用户名:权限 文件|目录
setfacl -m g:组名:权限 文件|目录
权限:可以写 rwx 或者 数据(4=r 2=w 1=x)
getfacl 文件|目录 查看文件|目录的ACL权限
setfacl -m u:用户名:权限 -R 目录
setfacl -m g:组名:权限 -R 目录
-R 递归设置目录下所有文件|目录的acl权限
注意:
1. -R 后面跟着目录 如果是文件-R将没有任何意义
2. -R 只能对已存在的文件生效 比如 -R A目录 A目录下已经存在的文件|目录会被递归设置acl权限,
如果-R 已经指定了 然后再在A目录下创建文件是不生效acl权限的。
setfacl -m d:u:用户名:权限 -R 目录
setfacl -m d:g:组名:权限 -R 目录
d: -R 目录递归设置完毕后,在目录下创建新文件|目录 同样会生成acl权限,相当于d:设置了一个默认的递归的acl模板。
最大有效权限mask
设置用户或者用户组对某个文件|目录的acl权限时,是根据mask权限取反得出的。
设置最大mask(一般不需要设置)
setfacl -m m:权限 文件|目录
删除acl权限
setfacl -x u:用户 文件|目录
setfacl -x d:用户组 文件|目录
删除文件|目录所有acl权限
setfacl -b 文件|目录
80、sudo授权
sudo 给普通用户赋予部分管理员命令权限
/sbin/ 此目录下的命令只有超级用户才能使用
赋值:
visudo 赋予普通用户权限命令,命令执行后和vim一样使用
visudo里面默认指定了root用户sudo命令
(1) (2) (3) (4)
root ALL = (ALL) ALL
(1)root:用户名
(2)ALL:被管理主机的地址
(3)(ALL):可使用身份,就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份,这个字段可以省略。
(4)ALL: 授权命令,代表root把什么命令授权给普通用户。默认是ALL,代表任何命令,这个当然不行。如果
需要给哪个命令授权,写入绝对路径命令。
给用户组设定sudo命令 前面加上%即可
(1) (2) (3) (4)
%wheel ALL = (ALL) ALL
普通用户无法通过shutdown关闭服务器
给acl1普通用户添加root权限的shutdown -r now 命令.
visudo
acl1 ALL=(root) /sbin/shutdown -r now
切换到root管理员授权给acl1普通用户。
81、sudo授权添加用户权限
1.先查询useradd passwd命令位置
[root@localhostCentos6 ~]# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
[root@localhostCentos6 ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhostCentos6 ~]#
2.visudo为acl1用户授权useradd passwd权限
acl1 ALL=(root) /usr/sbin/useradd
acl1 ALL=(root) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
[A-Za-z]* : 可以修改任何用户的密码
!/usr/bin/passwd "", !/usr/bin/passwd root : 不能修改root用户密码 否则会出现大问题
82、SetUID
SetUID
SetUID在某个用户执行某个文件的时候,将用户的身份转变成文件的所有者。只在文件执行的过程中有效。
下面截图表示:
83、Sticky BIT
SBIT 只能针对目录有效,并且该目录的其他用户权限为7 RWX权限。
SBIT权限 限制普通用户只能操作(删除 执行 访问等等。。。)自己创建的文件,无法操作其他用户的文
件。Root用户不限制。
84、chattr权限
命令格式
chattr [+-=][选项] 文件或目录
+:增加权限
-:删除权限
=:等于权限
选项:
i:如果对于文件设置i属性,那么不能对文件删除、改名、添加、修改数据等。包括root超级管理员。
如果对目录设置i属性,那么只能修改目录下文件的数据,不能删除和新建文件,并且不能删除该目录。
a:如果对文件设置a属性,那么只能在文件中添加数据,不能删除和修改数据。如果对目录设置a属性,那么只
允许在目录中新建和修改文件,但是不允许删除文件。
lsattr [选项] 文件名
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
85.常用硬盘管理名--df命令
df -hT
-a:显示硬盘全部分区情况,不建议使用-a。 因为-a会查询系统特殊文件系统,会造成干扰项。
-h:人性化显示硬盘分区大小
-T:文件分区类型
86.常用硬盘管理名--du命令
统计文件或者目录的大小
du [选项] [文件或目录]
-a : 显示每个子文件的磁盘占有量
-h : 人性化展示大小
-s : 统计总占有量,而不列出子目录和子文件的占有量
注意:ls -h 只能用来查询文件的大小,展示目录的大小是不准确的。所以需要使用du查询目录的大小。
87.常用硬盘管理名--dumpe2fs命令
--查询磁盘状态
dumpe2fs 磁盘分区
88.常用硬盘管理名--stat命令
-- 查看文件的详细时间
stat 文件名
89.判断文件类型
--查询文件类型
file 文件|目录
--查询命令类型
type 命令
90.fdisk命令
--查看系统所有硬盘及分区
fdisk -l
----------------------------------------------------------------------------------------------------------------------------------------------
91.shell概述
1.什么是Shell?
shell是命令解释器,将应用命令解释成内核可以识别的二进制。
Shell分类 | 可移植性 | 编辑性 | 快捷性 |
Bourne Shell (sh) | 好 | 较差 | 较差 |
Korn Shell (ksh) | 较好 | 好 | 较好 |
Bourne Again (Bash) | 较好 | 好 | 好 |
POSIX Shell (Psh) | 好 | 好 | 较好 |
C Shell (csh) | 差 | 较好 | 较好 |
TC Shell (tcsh) | 差 | 好 | 好 |
Bourne Again (Bash) 是Linux默认Shell
C Shell (csh) 是Unix 默认Shell
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要有sh、ksh、Bash、psh
、zsh;C家族主要包括:csh、tcsh。
--查看Linux服务支持的shell类型
cat /etc/shells
92.echo命令
echo [选项] [输出内容]
-e : 支持转移字符
-n : 取消输出后行末换行符号(就是内容输出后不换行)
转移字符 | 作用 |
\\ | 输出\ |
\c | 取消输出行末的换行符和“-n”选项一样 |
\f | 换页符 |
\n | 换行符 |
\t | 制表符 |
\v | 垂直制表符 |
\xhh | 按照十六进制ASCII码输出 |
echo命令还可以输出带颜色文本
31m:红色
30m:黑色
32m:绿色
33m:黄色
34m:蓝色
35m:洋红
36m:青色
37m:白色
93.shell脚本执行
#!/bin/bash #shell脚本固定开头 并不是注释 而是表示下文是shell脚本
94.history历史命令
history [选项][历史命令保存文件]
选项:
-c : 清空历史命令 会清空内存中的和家目录下隐藏文件.bash_history
-w : 把缓存中的历史命令写入历史命令保存文件。如果不手工指定历史命令保存文件,则放入默认历史命令
保存文件家目录下隐藏文件.bash_history中
注意:历史命令默认保存1000行,可以修改/etc/profile文件中,HISTSIZE=1000属性。
历史命令的调用
1.使用上、下箭头调用以前的历史命令
2.使用“!n”重复执行第n条历史命令
3.使用"!!"重复执行上一条命令
4.使用"!字符串"重复执行最后一条以该字符串开头的命令
5.使用"!$"重复上一条命令的最后一个参数
95.输出重定向
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出到指定的文件或者设备 |
标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的正确输出到指定的文件或者设备 |
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出到指定的文件或者设备 |
标准错误输出重定向 | 错误命令 2>> 文件 | 以追加的方式,把命令的错误输出到指定的文件或者设备 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 &> 文件 | 同命令 > 文件 2>&1作用一样 |
正确输出和错误输出同时保存 | 命令 &>> 文件 | 同命令 >> 文件 2>&1作用一样 |
正确输出和错误输出同时保存 | 命令 >> 文件1 2>> 文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
96.多命令执行顺序
命令执行符 | 格式 | 作用 |
; | 命令1 ;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系。其中某个命令报错不影响其它顺序命令 |
&& | 命令1 && 命令2 | 当命令1正确,则命令2才执行。否则命令2不执行 |
|| | 命令1 || 命令2 | 当命令1不正确,则命令2才执行。否则命令2不执行 |
97.bash中其它特殊符号
98.shell变量
1.变量名称可以由字母、数字、下划线组成,但是不能以数字开头。
2.变量默认类型是字符串类型,如果要进行数值运算,则需要指定变量类型为数值型。
3.变量用等号连接值,等号左右两侧不能有空格。
4.变量追加值,可以使用"$变量名"或用${变量名}。
99.变量分类
1.用户自定义变量:由用户自由定义变量名和值。
2.环境变量:这种变量主要保存了系统操作环境相关的数据。
3.预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量
变量删除:unset 变量名
变量查看:
set [选项]
-u:调用未声明变量时会报错
-x:在命令执行之前,会把命令先输出一次
set不加选项会查询所有的变量
环境变量
使用export声明的变量即是环境变量。
export LDD_NAME="耐得住寂寞";
删除
unset 变量名
查询变量
set命令可以查看所有变量,而env命令只能查看环境变量。
100.系统环境变量--PATH变量
PATH环境变量路径就是系统查询命令的路劲。
101.系统环境变量--LANG语系变量
LANG变量定义了Linux系统的主语系环境
--查询Linux中到底支持多少语系
locale -a
--查询当前系统支持多少语系
locale
还可以通过/etc/sysconfig/i18n文件查看当前系统主语系。
永久生效语系就需要修改/etc/sysconfig/i18n文件
102.位置参数变量
位置参数变量 | 作用 |
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,只不过每次都会把参数赋值给$@ |
$# | 这个变量代表命令行中所有参数的个数 |
$n案例
$*$@$#案例
103.预定义变量
预定义变量 | 作用 |
$? | 返回最后一次执行命令的状态。如果返回的状态为0,证明上一个命令正确执行。如果这个变量的值非0,则证明上一个命令执行错误了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
104.接收键盘输入
read [选项][变量名]
-p "提示信息" :在等待read输入时显示提示信息
-t 秒数 :秒数 等待用户输入秒数
-n 字符数:限制输入字符数
-s : 隐藏输入的数据 类似于登录Linux输入密码
105.declare声明变量类型
declare声明变量类型
变量默认为字符串型,可以使用declare命令声明变量类型。
declare [+/-][选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-a:将变量声明为数组型
-i:将变量声明为整数型(integer)
-r:将变量声明为只读类型。一旦什么为只读类型,便不能修改变量的值。
-x:将变量声明为环境变量 export实质就是使用declare -x
106.数值运算
方式1
declare -i
方式2
expr运算命令
方式3
let运算符
方式4
$((运算符))
方式5
$[运算符]
107.Shell常用运算符
数值越大优先级高
108.变量的测试与内容置换
109.环境变量配置文件
重新加载环境变量配置文件
source 配置文件
或者
. 配置文件
Linux系统主要有以下几个环境变量文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
~/.bash_profile
~/.bashrc
110.shell编程之基础正则
* 匹配前一个字符0次或者任意多次。
. 匹配除了换行符外任意一个字符。
^ 匹配以什么字符开头
$匹配以某个字符结尾
[] 匹配中括号中指定的任意一个字符
[^]匹配除中括号内以外的字符
^$表示匹配空白行
\{n\} 表示匹配前面字符n次