linux基础笔记

查询命令

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 在第二行下追加以逗号为间隔。ai是在向前面插入。

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             bz2gzip 比较常用 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 vglv

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  ab之间可以有任意长度的任意字符, 也可以一个也没有, aabcb, axyzb, a012b, ab

?

匹配任意一个字符

a?b  ab之间必须也只能有一个字符, 可以是任意字符, aab, abb, acb, a0b

[list] 

匹配 list 中的任意单一字符

a[xyz]b   ab之间必须也只能有一个字符, 但只能是 x y z, : axb, ayb, azb

[!list] 

匹配list 中的任意单一字符

a[!0-9]b  ab之间必须也只能有一个字符, 但不能是阿拉伯数字, axb, aab, a-b

[c1-c2]

匹配 c1-c2 中的任意单一字符如:[0-9] [a-z]

a[0-9]b  09之间必须也只能有一个字符a0b, a1b... a9b

{string1,string2,...}

匹配 sring1 string2 (或更多)其一字符串

a{abc,xyz,123}b    ab之间只能是abcxyz123这三个字符串之一。

 

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端口

你可能感兴趣的:(linux基础笔记)