查询命令
ls处理小数据与du:
ls 查看文件
ls -l (ll)文件可以从大到小排序查看
ls -a 查看隐藏文件
ls -i 查看inode号,可以直接通过inode号删除文件
t=时间(默认从小到大 加r则大到小) h=显示大小
s=安文件大小排序
star 文件 可以查看某个文件详细信息(安装包安装)
du -sh查看某个目录大小
du -h看某个目录下的目录大小
df -h快速查看磁盘空间
cat的使用:
cat 直接显示文件完全内容
cat /etc/passwd > 1.txt会覆盖1.txt文件
cat /etc/passwd >> 1.txt不覆盖直接追加到后面
处理大数据时用sort:
sort -r 查询文件以大小排序 (默认以从小到大)
零零散散:
1.、 | (管道)可以加多个命令。
&& 第一个正常了就继续执行后面的,第一错误则不继续执行。
| | 第一个错误的就执行后面的,第一正确则不继续执行
; 分开执行命令,不管对错。
2.、 wget 网站 将此下载进当前目录
wget –o /etc/ 网站 将此下载进etc目录下
3.、 make –j 4 把源码编译成二进制,并且使用4个线程同时编译
4.、 echo aa >> mlj 追加aa进mlj文件 。 一个>是覆盖
5.、 把启动命令拷贝进/usr/sbin/(环境变量)下可以直接把命令tab出来(如nginx安装目录下的启动命令/usr/local/nginx/sbin/nginx、拷贝到/usr/sbin下就直接可以调用)
6.、 追加启动命令到/etc/rc.local 可随机启动
7.、 systemctl set-default runlevelx.target
8.、 ab -n 300 -c 300 http://github.com/index.html阿帕奇自带网页压力测试
9.、 visudo 在100行添加用户获得root权限
10.、 cat /etc/redhat-release 查版本
11.、 软连接:可以跨分区 和目录:ln -s 地址(绝对路径) 名字
硬链接: 不可以跨: ln 地址 名字
ls /use/lib/systemd/system/*.target查看系统启动级别
查看当前默认的运行级别
systemctl get-default
设置默认的运行
systemctl set-default
systemctl set-default runlevel5.target修改开机启动级别主要改后面那项
12.、 alias 设置一个快捷令
(alias 自定义值=“命令”)
必须进入root 数据输入才长期有效:vi /root/.bashrc (仅仅root有效) source /root/.bashrc:重新加载某文件
13.、 rm –rf 可以删除文件/目录
14.、 crtl+r:查关键词历史命令 按左右光标输出
15.、 which 某文件:查看某个命令的路径
16.、 !$:使用上个命令的最后参数。如:cat /etc/xxx
则 vi !$ 会执行了vi /etc/xxx
vim 编辑模式
在vim配置中:i在光标前输入
a在光标后
o另外起一行
r 替换
x 删除光标选中
两个使用效果相反 |
u 恢复已删除的
ctrl+r 恢复撤销
ctrl+v 进入可视块
(也可配合r+某某 进行多行替换……)
0跳到行首
gg跳到文档首行 g跳到文档末行
3gg直接跳第三行。31gg直接跳31行
yy复制 , 3yy复制光标及其以下3行
dd删除(剪切),3dd删除(剪切)光标及其以下3行
d$ 删除光标之后的
d+home
d+end
dG 从当前删除到行尾
dg 从当前删除到首
p为粘贴
vim 命令行模式
:q退出 :w保存 :wq保存并退出 :set nu显示行号 加nonu不显示行号
:!+命令可以在vim状态下去执行系统命令
:r !+命令可以将命令的输出结果直接导入当前本中
:1,3 s/bin/xx 替换第1到3行中出现的第一个bin进行替换为xx
:1,3 s/bin/xx/g 替换第1到3行中查找到所有的bin进行替换为xx
:3 s/xue/aaaaa 只把第3行中内容替换了
:% s/do/xx/g 将文本中所有的do替换成xx
:% s/do/xx/gi 将文本中所有的do替换成xx, 并且忽略do的大小写
:% s@a@b@g 将文本中所有的a替换成b
vim -o 文件地址 文件地址
可以同时编辑两个文件 ctrl+ww进行切换
:qa退出所有
vimdiff 文件地址 文件地址
可以进行文件明显的对比
复制
cp 复制文件
cp -r 强行复制一个目录或者文件
cp -a 保持同样修改时间等一样
时间
date 查时间
-s “时间” 修改时间
date “+%y%m%d”显示年月日(%h %m)
文件的处理
touch创建文件vim也可以
touch {1,2,3}.txt可以创建1.txt 2.txt 3.txt
mkdir 创建目录
-p可以逐级创建目录
mv移动文件
mv 绝对路径目标 空格 移动位置绝对路径
xfsdump –f 备份存放位置 备份文件位置
dd的使用:
if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
of代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
bs代表字节为单位的块大小。
count 代表被复制的块数。
dd if=/dev/zero of=b.txt bs=1M count=50(给b.txt指定大小bs文件=1m count=出入50次。文件则大小为50m)注:/dev/zero中zero为一个特殊文件能提供无限0
过滤命令
df –h | tee 1.txt记录日志
> 1.txt 可以清空1.txt文件
&> xxx 是正确和错误的信息都重定向到xxx里面
cat < 1.txt >> aaa 编辑1.txt可以以aaa结束(多用于写脚本)
显示:
less 显示完全内容,可以翻页
tail -某数字 从最后开始显示某数字的参数
tail -f 方便监控日志
head -某数字 从前面开始显示某数字的参数
grep过滤文件:
grep -v 取反
grep ^$ 只显示空行
grep ^# 只显示以#开头的
grep ^加什么就只显示以什么开头的东西
grep “^#\|^$” 两个同时调用(注意需要转译符)
find的使用: {}:find 出来的值 \;:结束符
find ./ -mtime -1在当前目录内查找更改时间在一天内的文件
find /root/ /home/ -name “*.txt” 查看root、home目录中以.txt结尾的文件
find ./ -name “*.txt” -exec ls -l {} \;查询当前目录下已.txt结尾的以ls -l 方式显示
find ./ -name “*.txt” -exec mv {} \;则移动
find ./ -perm -777指定当然目录下,权限为777以下的文件。不加-则为仅仅查询777文件
sed“流编辑器”:
sed 's/root/ppp/g ' /etc/passwd 将文件中所有root替换成ppp,去掉g将只替换第一行第一个。
sed 's#/bin/bash#/ppp/aaa/# ' /etc/passwd 将文件中所有/bin/bash替换成/ppp/aaa
sed ’2s/bin/ppp将第二行第一个bin替换成ppp,若要替换多行需要用逗号表示中间间隔2,5s(替换2-5)
sed ‘2d’ /etc/passwd 删除第二行,用逗号可以删除间隔的行,’2,5d’(删除2-5行)
sed ‘/bash/d’ /etc/passwd 删除所以bash
sed ‘2a/ppp/asdasd/’ /etc/passwd 在第二行下追加以逗号为间隔。a改成i是在向前面插入。
sed 加-i 可以修改源文件
cut:
cut -f1 -d “:” /etc/password 第一列,并以冒号为分隔符全部列出,f可以配合逗号和-分隔。
cut -c2-3 /etc/password/ 列出前2-3个字符 在最后一个数字后面加-则列出后面的所有如 -c3-
awk(里面最好用双引号,外面用的单引号):
$0=整行 在‘ ’内后面加/^xxx/表示只找xxx开头的^表示以某某开头 xx$表示以xx结尾
!xx表示不匹配xx开头 的
{ }内加nr=行号 nf=最后一列 !~=不匹配
awk -f“xx” ‘{print $1} ’以xx为分隔符,打印出第一行
awk -f “xx” ‘{print $(nf-1)}’ 打印以xx为分隔符的倒数第二列(nf=最后一列 小括号内可以进行加减乘除)
[root@mlj ~]# awk -f: '$3<10{print $1 "<======>" $nf}' /etc/passwd #awk格式化输出uid小于10 的登陆shell(可以在{ }外赋值给nf==xxx只打印符合要求)
root<======>/bin/bash
bin<======>/sbin/nologin
daemon<======>/sbin/nologin
用户和用户组的创建以及修改权限
用户建立:
id用户名 可以查看此用户名的一些信息
vim /etc/group/ 组信息在里面的最后一行
useradd创建默认用户组自动分配id
useradd -d选择创建用户组的家
如:useradd -d /etc/33 55
(创建一个用户在etc目录的33目录下并命名为55)
-g:指定所属组 -g:指定扩展组 -u:指定uid
-s:指定登录的终端(/sbin/nologin)
-e:到期时间(格式:xxxx-mm-kk)
userdel -r删除用户组包括组、家园
修改密码:
passwd 用户名 修改此用户名的密码
echo 123 |passwd --stdin ppp 修改ppp的密码为123
groupadd 创建用户组
usermod 改变用户属性
-g:改变所属组 -g:改变扩展组 -u:修改uid
-s:改变登录的终端(/sbin/nologin)
-l -u:分别是锁定、解锁用户登录
三层交换机上改变一个熟悉的字样
(密码)存放在/etc/shadow/下
用户uid修改:
root : x: 0: 0 : root: /root:/ bin/bash
用户名:密码占位符:uid:gid:用户描述:用户主目录:登录后使用的shell
(linux中用户只分uid,uid为0则是最高管理员。可以在password进行修改uid)
chown root(用户):kk(用户组) /etc/11.txt
将etc下11.txt的用户修改为root 用户组修改为kk(用ls-l可以进行查询)
文件类型、权限
文件类型:
l代表连接文件 - 普通文件 b块设备
d目录 p管道文件 c字符设备
一般权限:
chmod 赋予文件写、读、执行权限
例:chmod u-w 取消拥有者的写入权限
chmod a+x 允许所有人执行权限
chmod 644表示rw—r—r--
r=4 w=2 x=1 0=无权限
a=所有用户 u=用户 g=所属组 o=另外的
w=写 r=读 x=执行
赋予特殊权限:
suid=u+s sgid=g+s sbit=o+t
rws rws 粘滞位:rwt
数字表示: 首位s=4 第二位s=2 第三位t=1
小s具有x权限 小t具有x权限
大写则没有
隐藏权限:
赋予权限→chattr +i=不可以删除 +a=不可以追加-----想取消 则-i或者-a。
查看文件隐藏权限lsattr
扩展权限:
setfacl 以下是参数
-m -r=给目录下的所有人(一定要家在m前)
u=用户 d=目录 u:用户名:权限(rwx)
设置了之后ls-l会发现 所以人那儿会出现一个+号
安装包
rpm安装:
rpm -ivh 本地安装包的绝对路径 安装一个包
(包一般在packages/下)
rpm -qpi 绝对路径 查询一个这个包的详细信息
rpm -q 包名 查询一个包是否安装
rpm –e 包名 卸载一个包
rpm –ql 包名 查看安装路径(掌握)
yum安装:
yum clean all 清楚原有软件包数据
yum makecache 将原有软件包存入本地(提高搜索软件速度)
yum install 软件名 安装软件
yum info软件包名 查询软件包的详细信息
都为list命令的使用 |
yum list 软件名 查询一个软件包是否可安装
yum list gcc*可列出以gcc开头的已或未安装包
yum list available列出当前软件源中可用安装包
yum update 软件名 更新软件包
yum remove 软件名 卸载软件包
yum第三方软件源:
[centos7] #yum源名称,在本服务器上唯一的,用来区分不同的yum源
name= centos7 #对yum源描述信息
baseurl=file:///mnt #yum源的路径,提供方式包括ftp(ftp://...)、http(http://...)、本地(file:///... 光盘挂载目录所在的位置)
enabled=1 #为1,表示启用yum源;0为禁用
gpgcheck=0 #为1,使用公钥检验rpm包的正确性;0为不校验
阿里云yum源wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-7.repo
epel源:
yum -y install epel-release.noarch
一键yum源配置:
yum-config-manager --add file:///cdrom(此处是你的yum源http:// ftp:// file:// )
vim 进去加一条 gpgcheck=0
解压缩文件
tar -cvf 自定义名字 路径 把路径内的东西打包
(可以不加路径直接加文件名)
tar -xvf 压缩包名 解压一个压缩包
在xvf前加 z=gzip j=bz2 bz2跟gzip 比较常用 bz2第二小 J=xz 其中:xz解压比例最高,解压出来占内存小,时间最长。 |
tar -tvf 压缩包名 查看一个压缩包
文件名后加 -c 大写c指定路径
进程、负载、任务管理器
进程:
ps –aux | less 查看进程
user |
pid |
%cpu |
%mem |
vsz |
rss |
tty |
stat |
start |
time |
command |
启动这些程序的用户 |
进程的id |
进程占用cpu的百分比 |
占用内存的百分比 |
进程占用的虚拟内存大小(单位:kb) |
进程占用的物理内存大小(单位:kb) |
?表示非终端。通常为内核的进程 |
该进程的状态 |
被启动的时间 |
实际使用upc的运作时间 |
具体路径 【】:为内核进程 //:为在终端的路径 |
stat有5种基本状态:
r:该程序目前正在运作,或者可被运作;
s:该程序正在睡眠(idle),但是可以被唤醒(signal);
t:该程序正在侦测或者停止了;
z:该程序应该已经终止,但是父程序无法终止他(僵尸程序);
d:不可中断状态;
基本状态后还可以加一些字母:
<: 表示进程运行在高优先级上 n: 进程运行在低优先级上 l: 进程有页面锁定在内存中 s: 表示进程是控制进程 l: 表示进程是多线程的 +: 表示当前进程运行在前台
负载:
uptime 查看cpu的负载工具
[root@localhost ~]# uptime
13:22:30 up 20days, 2 users, load average: 0.06, 0.60, 0.48
13:22:30 |
当前时间 |
up 20days |
系统运行时间 ,说明此服务器连续运行20天了 |
2 user |
当前登录用户数(图形界面本身算一个) |
load average: 0.06, 0.60, 0.48 |
系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
1核心的超过3就是负载。4核心超过12就是负载。
核心数 乘 3=最大负载数----超过最大负载数就是服务器负载了
sar命令 很强大。百度查使用
任务管理器:
top 启动任务管理器
(二三行内容)
tasks: 481 total |
进程总数 |
1 running |
正在运行的进程数 |
480 sleeping |
睡眠的进程数 |
0 stopped |
停止的进程数 |
0 zombie |
僵尸进程数 |
第二行 |
|
cpu(s): 0.0% us |
系统用户进程使用cpu百分比。 |
0.0% sy |
内核中的进程占用cpu百分比 |
0.0% ni |
用户进程空间内改变过优先级的进程占用cpu百分比 |
98.7% id |
空闲cpu百分比 |
0.0% wa |
cpu等待i/0完成的时间总量。 测试: 终端1:执行:top 终端2:dd if=/dev/zero of=/a.txt count=10 bs=100m 终端3:dd if=/dev/zero of=/a.txt count=10 bs=100m 如下:
|
0.0% hi(了解) 硬中断消耗时间
|
硬中断,占的cpu百分比。1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的irq(中断请求)。基于irq,cpu可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。# hi -> hardware irq: the amount of time the cpu has been servicing hardware interrupts. |
0.0% si(了解) 软中断消耗时间 |
软中断,占的cpu百分比。1. 通常,软中断是一些对i/o的请求。这些请求会调用内核中可以调度i/o发生的程序。对于某些设备,i/o请求需要被立即处理,而磁盘i/o请求通常可以排队并且可以稍后处理。根据i/o模型的不同,进程或许会被挂起直到i/o完成,此时内核调度器就会选择另一个进程去运行。i/o可以在进程之间产生并且调度过程通常和磁盘i/o的方式是相同。# si -> software interrupts.: the amount of time the cpu has been servicingsoftware interrupts. |
0.0 st (steal 偷) |
st:虚拟机偷取物理的时间。比如:物理机已经运行了kvm,xen虚拟机。kvm虚拟机占用物理机的cpu时间 |
top快捷键:
默认3s刷新一次,按s修改刷新时间
按空格 :立即刷新。
q退出
P:按cpu排序
M:按内存排序
T按时间排序
p: 进程ip,查看某个进程状态
数字键1:显示每个内核的cpu使用率
u/u:指定显示的用户
h:帮助
lsof的使用:
lsof -p 43641一般用于查看木马进程,在读哪些文件
lsof -i :22用于查看端口,或查看黑客开启的后门端口是哪个进程在使用
pstree -p树形现显示进程
磁盘管理
分盘成功没有发现有盘的话就打命令partprobe
partprobe 实在不行 reboot、 reboot 不行就是操作问题
free -m 查内存
fdisk -l 查看硬盘分区表
fdisk 磁盘(sdb*)加路径 进行磁盘的分区
d delete a partition 删除分区
l list known partition types 显示分区类型
m print this menu 打印帮助菜单
n add a new partition 添加新的分区
p print the partition table 显示分区表
q quit without saving changes 不保存,退出
t change a partition's system id 改变分区类型
w write table to disk and exit 写分区表信息到硬盘,保存操作并退出
n → p(主分区)e(拓展分区)l(逻辑分区,有拓展分区才有逻辑分区)→w
拓展分区多大逻辑分区就只能多大
gdisk磁盘分区工具(跟fdisk相似,支持大于2t分区)
reboot 分区完后用他来重启新分区
mkfs.xfs /dev/sd* 创建完了之后则需要进行格式化(不行在xfs后加-f)然后在挂载
mkswap /dev/sd*(逻辑分区) 格式化swap分区
swapon /dev/sd* 同上的分区 扩容swap分区
一定记得挂载到fstab下
/dev/sd* swap swap defaults 0 0
挂载:
/dev/sdb1 |
/sdb1 |
xfs |
defaults |
0 |
0 |
要挂载的分区设备 |
挂载点 |
文件系统类型 |
挂载选项 |
是否备份 |
是否检测 |
可以直接echo 追加来挂载
mount 是临时挂载
umount 删除挂载
mount -a再启动(df -h)查看是否挂载上,若有说明挂载没问题,在重启查看
blkid 可以查看磁盘的唯一标识uuid。在要挂载的分区中尽量填uuid。以免以后拔出磁盘在插会引起的混乱
raid10:
mdadm -cv /dev/md0 –n 4(代表4个盘)-l 10(级别,10是raid10) -x 1(1代表有一个备份盘,可不加)/dev/sd[b-e] #将这几个盘变成raid10盘
mdadm -d /dev/md0 #查看一个盘
mdadm -d /dev/md0 查看
lvm卷轴:
pvs vgs
pv →vg→lv
pvcreate /dev/sdb1 把sdb化成物理卷
vgcreate 卷组名字 /dev/sdb1 /dev/sdc把两个物理盘组合成卷组
lvcreate -n 逻辑卷名字 –L 300m(文件大小) 卷组名字
格式化(ext4格式)→挂载→df -h→完成
lvm缩小:lvreduce -l -800M 逻辑卷的路径
lvm扩容:lvextend -l +30M 逻辑卷的路径
+30m=扩展30m 30m=扩展到30m
-800m=减小800m xfs不支持动态缩小
resize2fs 逻辑卷名 扩容文件系统
XFS_gr***
建议使用一下方法扩容:
lvextend -L 80M -r /dev/vg01/lv01 #直接扩容到80m空间,一步到位,不用再扩文件系统了。(支持多种文件系统→ext*、xfs)
vg扩容:
场景:vg卷组不够用时候 vg卷组
vgextend vg卷组名 物理卷的路径
计划日志
at定时(只支持一次):
systemctl start atd启动at
systemctl is-enable atd 查询at是否处于开机启动状态
systemctl enable atd 同理上
at 加时间也可以加日期 设一个定时任务(ctrl+d保存)
at -l 查询任务编号
at -c 加编号 详细查询任务看最后(/var/spool/at 下也有)
atrm 加编号 删除一个任务
crontab定时(有周期性):*=每 */2=每间隔两(天、月、小时、分钟)-----执行的命令必须的绝对路径
比如重启reboot 用which reboot 查在
/usr/sbin/reboot 下。则填查到的路径
systemctl start crond开启crontab
crontab -e 编辑
crontab -l 查询
crontab -r 删除
crontab -u 查询某个用户的服务
日志存储:
vim /var/log/secure 中可以查看登陆失败的记录,最后面看
grep failed /var/log/secure | awk ‘{print $11}’| uniq -c打印登陆失败第十一行的ip出来并去掉重复的行和次数
lastb 查看登陆失败的用户(具体在/var/log/btmp中)文件大于1m可能被暴力破解,可以利用防火墙隔离ip,可以利用> btmp来清空日志
last 目前为此成功登陆系统的记录
日志的类型 在 vim /etc/rsyslog.cof下可以查看分别存储在哪个位置.none的.前面不记录 |
||
编码 |
优先级 |
严重性 |
7 |
debug |
信息对开发人员调试应用程序有用,在操作过程中无用 |
6 |
info |
正常的操作信息,可以收集报告,测量吞吐量等 |
5 |
notice |
注意,正常但重要的事件, |
4 |
warning |
警告,提示如果不采取行动。将会发生错误。比如文件系统使用90% |
3 |
err |
错误,阻止某个模块或程序的功能不能正常使用 |
2 |
crit |
关键的错误,已经影响了整个系统或软件不能正常工作的信息 |
1 |
alert |
警报,需要立刻修改的信息 |
0 |
emerg |
紧急,内核崩溃等严重信息 |
网卡配置
cd /etc/sysconfig/netword_scripts进入网卡文件处
当添加一个网卡时,需要进行重启,然后在复制一份原有网卡的文件并且改名,进入其进行编辑,删除掉uuid,更改其设备名以及name,修改一下ip地址等,在重启一下网卡。
一网卡配置多个ip:
直接复制原网卡配置文件,如ifcfg-ens33
复制成ifcfg-ens33:1 并且修改里面的ip跟名字就OK了
service network restart 重启网卡
netstat –anutp 显示端口监听
route –n查看路由条目
watch –d –n 1 ‘ifconfig ens33’ 隔一秒查看数据变化
ipv6添加:
nmcli connection modify "网卡" ipv6.addresses "地址" ipv6.method manual connection.autoconnect yes #添加网卡
nmcli connection up "网卡" #开启
链路聚合:
nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}' #添加team0
nmcli connection add con-name team0-port1 ifname eth1 type team-slave master team0 #将team0加到eth1 考试需要分别添加到 eth1、2
nmcli connection modify team0 ipv4.addresses 192.168.0.101/24 ipv4.method man #team0添加ip
防火墙
在firewalld中,加--permanent则是永久生效,加完之后输入 firewall-cmd --reload 重新加载方可及时生效
也可以在配置文件/etc/firewalld/zone/你使用的空间名/查看是否永久生效。
取消拒绝状态:# firewall-cmd --panic-off #断网
查看是否拒绝:$ firewall-cmd --query-panic #恢复
firewall-cmd --set-default-zone=public #设置默认的区域
firewall-cmd --permanent --zone=public --change-interface=eno16777736 #将ens33网卡添加到public区域里面
端口:
[root@localhost 桌面]# firewall-cmd --permanent --zone=public --add-port=888/tcp #添加一条永久有效,允许在public区域里的888号端口
[root@localhost 桌面]# firewall-cmd --permanent --remove-port=888/tcp #永久删除一条允许888端口。
服务:
[root@localhost 桌面]# firewall-cmd --permanent --zone=public --add-service=ftp #永久添加一个ftp服务
[root@localhost 桌面]# firewall-cmd --permanent --remove-service=ftp #删除ftp服务
富规则:
mandb
man -k firewalld
man firewalld.richlanguage 看说明。。。。
firewall-cmd --permanent --add-rich-rule固定格式
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.20.0/24" service name="ssh" reject'
shell脚本
局部变量和一些简单的使用方法:
局部变量不支持文本有效
需要export qwe=33 则可以在文本使用,仅仅临时有效
则永久有效vim /etc/profile定位在后面输上export qwe=33
设置变量数字不能在首位,=的两边也不能加空格。
例:qwe=33 则 echo $qwe 输出结果为33
echo `date` 跟 echo $(date)是一样的结果(用来调用命令)
echo $qwe.log 则输出为33.log
echo ${qwe}log 则输出为33log
嵌套使用pop=$(tar –zcvf kk.tar.gz $(find ./ -name *.txt))
则 echo $pop时,将会调用以上两个命令,上面命令嵌套的将find的输出结果打包成kk.tar,gz,以外面的括号为主要
“”双引号里面可以加命令来使用 如:
kk=“mm ii $qwe” echo输出kk时会变成 mm ii 33
‘’单引号里面是直接输出 如:
kk=‘mm ii $qwe’ echo 输出kk时会变成 mm ii $qwe
unset qwe 删除变量qwe
((b=1+2*9)) echo $b输出为19
全局变量:
env 查询全局变量(系统本身自带的变量)
环境变量:
在全局变量(env)下path是从某个目录中搜寻此执行文件
path=某某文件的路径:$path已冒号为分隔符(临时生效)
特殊变量:
$*:表示程序的参数
($0:脚本名字 $1:第二个参数 $2:第二个参数)
参数:加在脚本执行脚本后面,如:执行./p.sh 2 2有两个参数,执行./p.sh 2有一个参数,每过一个空格算一个参数。
$#:表示参数的总数
$$:表示进程id
$?:上一个程序执行返回结果
$!*执行上一个后台指令的pid
read:
read a b --- aa a输出echo $a ---aa 输出echo $b –a
read –r66 kk---- aa a输出echo $kk –aa a
read –p“12”–s kk--9输出echo $kk--129 (-s为隐藏出入)
read –t 2 kk 只能输入两秒
read –n 2 kk 只接受两个字符
echo –n “12”表示输出不换行可以加分号来read kk
参数 |
说明 |
示例 |
-eq |
等于则为真 |
[ “$a” -eq “$b” ] |
-ne |
不等于则为真 |
[ “$a” -ne “$b” ] |
-gt |
大于则为真 |
[ “$a” -gt “$b” ] |
-ge |
大于等于则为真 |
[ “$a” -ge “$b” ] |
-lt |
小于则为真 |
[ “$a” -lt “$b” ] |
-le |
小于等于则为真 |
[ “$a” -le “$b” ] |
参数. |
说明 |
示例 |
== |
等于则为真 |
[ “$a” == “$b” ] |
!= |
不相等则为真 |
[ “$a” != “$b” ] |
-z 字符串. |
字符串的长度为零则为真 |
[ -z “$a” ] |
-n 字符串 |
字符串的长度不为空则为真 |
[ -n “$a” ] |
str1 > str2 |
str1大于str2为真 |
[ str1 \> str2 ] |
str1 < str2 |
str1小于str2为真 |
[ str1 \< str2 ] |
参数 |
.说明 |
示例 |
-e 文件名. |
如果文件或目录存在则为真 |
[ -e file ] |
-r 文件名. |
如果文件存在且可读则为真 |
[ -r file ] |
-w 文件名. |
如果文件存在且可写则为真 |
[ -w file ] |
-x 文件名. |
如果文件存在且可执行则为真 |
[ -x file ] |
-s 文件名 |
如果文件存在且至少有一个字符则为真 |
[ -s file ] |
-d 文件名. |
如果文件存在且为目录则为真 |
[ -d file ] |
-f 文件名. |
如果文件存在且为普通文件则为真 |
[ -f file ] |
-c 文件名. |
如果文件存在且为字符型文件则为真 |
[ -c file ] |
-b 文件名.. |
如果文件存在且为块特殊文件则为真 |
[ -b file ] |
file1 -nt fle2 |
检查file1是否比file2新 |
[ file1 -nt file2 ] |
file1 -ot file2 |
检查file1是否比file2旧 |
[ file1 -ot file2 ] |
字符 |
含义 |
实例 |
* |
匹配 0 或多个字符 |
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。 |
? |
匹配任意一个字符 |
a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。 |
[list] |
匹配 list 中的任意单一字符 |
a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
[!list] |
匹配除list 中的任意单一字符 |
a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符如:[0-9] [a-z] |
a[0-9]b 0与9之间必须也只能有一个字符如a0b, a1b... a9b。 |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
if语句:都可以配合read 进行赋值
if 条件 ;then
ehco “输出啥啥” (或者加一些命令)
elif 条件2(elif可以添加多个) ;then
ehco “输出啥啥”(或者加一些命令)
else 最后
ehco “输出啥啥”(或者加一些命令)
if结束
if 变量 in ` xxxx`
test( 脚本中可以用[ ]来表示 ):
[[ ]]:两个大括号内可以不用转义\
[ ]:需要加\ (\> = >)
test命令加在 可以if语句
$?返回结果为0则是真,反之为假
真则直接输出,假则进行下一步条件。
case语句:
$1 为第一个参数 $2为第二个参数 以此类推。可以加入case 变量 in中
case 变量 in
变量1)
…….加一些命令
;;
变量2)
…….加一些命令
;;
可以多个变量
*)
…….加一些命令
*是输出以上没有的命令。会echo提示xxxx
esac
依次以变量匹配
循环语句for:
for ((...)) 也可for 变量 in 命令
do
echo …
done
循环语句while:
while 条件
do
命令……….
done
exit:
在命令下加入exit则直接停止脚本的继续,用于多个语句,当执行不满足条件则用。
bash:
bash -v 加执行的脚本 可以判断脚本是否有误(会真正执行)
bash –x 加执行的脚本 可以看脚本执行流程(会真正执行)
echo -e “\e[34m ppp \e[0m” 以颜色的形式输出ppp(具体的颜色号一般30多都是颜色 40多是背景数网上查看)
0m:关闭所有属性 1m:加粗 高亮 5m:闪烁
服务
systemctl start xx 启动某服务
systemctl restart xx 重启某服务
systemctl enable xx 开机自动启用某服务
chkconfig xx on 开机自动启用某服务,跟上面那个一样。
chkconfig --add 某安装程序设置开机自启动
grep chkconfig 想要查找启动级别文件的目录下* -r --color 查找启动级别文件找程序的启动文件时很有用
配置文件中#号后面带空格的表示注释,没有空格表示默认值
默认值去掉#号是可以修改的!!!
/etc/hosts.allow 白名单
/etc/hosts.deny 黑名单
selinux
selinux域:
setsebool -a |grep 服务
setsebool -P 服务=on(off) #-p为永久生效
selinux上下文:
ls –ldz查询目录的上下文关系
semanage fcontext -a -t 上下文关系 目录 #改目录的上下文关
restorecon -rv 目录 #效设置的上下文关系
添加selinux监听端口(拿http举例):
semanage port -l |grep http 查看
semanage port -a -t http_port_t -p(端口类型) tcp 999 添加一个999端口