linux学习笔记

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

Ctrl + C:这个是用来终止当前命令的快捷键

Tab: 当你打一个命令打一半时,它会帮你补全的。

Ctrl + D: 退出当前终端,同样你也可以输入exit。

Ctrl + Z: 暂停当前进程,比如你正运行一个命令,突然觉得有点问题想暂停一下,就可以使用这个快捷键。暂停后,可以使用fg 恢复它。

Ctrl + L: 清屏,使光标移动到第一行。

man 用来看一个命令的帮助文档的。

/etc 这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。

如果你要关机,必须要保证当前系统中没有其他用户在线。可以下达 who 这个指令,而如果要看网络的联机状态,可以下达 netstat -a 这个指令,而要看背景执行的程序可以执行 ps -aux 这个指令。使用这些指令可以让你稍微了解主机目前的使用状态!

shutdown -h now
halt poweroff
init 0 关机命令

shutdown -r now
reboot
init 6 重启命令

绝对路径 /usr/local/mysql
相对路径 cd /home 再执行cd test

pwd 显示当前所在目录

cd 进入一个目录

cd ./ 当前目录

cd ../ 返回上一级目录

mkdir -p /tmp/test/123 创建绝对路径下的目录(递归创建目录) 只能创建目录

rmdir -p 删除递归目录(只有目录为空的时候才可以删除 并且删除所有显示目录)

rm 删除目录或者文件

-f 强制的意思,force

-r 当删除目录时,加该选项,如果不加这个选项会报错。rm是可以删除不为空的目录的。

rm -rf /tmp/test/123 删除目录123且不提示是否删除

echo $PATH 打印变量 (中间会有:分隔开)

ls 列出文件属性信息

-a 包含隐藏文件
-l 包括文件大小 创建日期 所属主 所属组等等(也可以直接写成ll)

mv /tmp/test/123 /root 把123目录移动到/root目录下 移动目录
mv dir1 new_dir 重命名 一个目录

-i 当目标文件存在时询问是否覆盖 mv = mv -i

-u 当目标文件存在时才会生效 否则不做任何动作

cp [选项] [ 来源文件 ] [目的文件] 复制文件或者目录

cp -r /root/123 /tmp/test 把123目录复制到test目录下

cp -d 拷贝软连接时需要添加 否则会拷贝快捷方式

cat 读一个文件,并把读出的内容打印到当前屏幕上

cat -n 读取时显示行号

cat -A 显示所有,包括特殊字符

tac 反向打印(真特么奇葩)

more 查看文件内容(当文件较多 cat无法看到前面的内容时)可以按回车或者空格慢慢看

less 查看文件内容(J 向下翻 K 向上翻 )

head install.log 显示文件前10行
head -n install.log 显示文件前n行

tail install.log 显示文件后十行
tail -n install.log 显示文件后n行

-f 动态显示文件的最后十行,如果文件是不断增加的,则用-f 选项。如:tail -f /var/log/messages

groupadd testgroup 创建test组

chgrp 目录 文件 更改文件所属组

useradd user1 添加用户主

chown [-R] 账户名 文件名 更改文件属账户
chowm [-R] 账户名:组名 文件名 更改当前目录,且更改目录中的目录或者文件

chown -R user1:testgroup test 更改test及test下的所有目录文件用户主为user1 所属组为testgroup,中间用:隔开

chmod 改变用户对文件的读写权限

r=4 w=2 x=1

chmod -R xyz xyz为数字 -R为级联更改

umask
umask语法: umask xxx (这里的xxx代表三个数字) 代表满权限减去所属权限的余数

eg:umask 002 即为rwxrwxr-x

chattr 修改文件 隐藏属性

chattr =-+[文件或者目录名]

+-= :分别为增加、减少、设定

A:增加该属性后,文件或目录的atime将不可被修改;

S:增加该属性后,会将数据同步写入磁盘中;

a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;

c:自动压缩该文件,读取时会自动解压;

i:增加后,使文件不能被删除、重命名、设定连接、建立文件、新增数据;

lsattr 列出文件/目录的特殊属性
lsattr -a test3 列出文件test3的特殊属性

where which locate find 查找文件

find 路径

find

-atime +n :访问或执行时间大于n天的文件

-ctime +n :写入、更改inode属性(例如更改所有者、权限或者连接)时间大于n天的文件

-mtime +n :写入时间大于n天的文件

find -name filename 通过文件名字查找文件所在位置 绝对查找
find -type fa

Linux文件系统在windows中是不能识别的,但是在linux系统中你可以挂载的windows的文件系统,linux目前支持MS-DOS,VFAT,FAT,BSD等格式。

1.sh代表它是一个shell script ,2.tar.gz 代表它是一个压缩包,my.cnf 代表它是一个配置文件,test.zip 代表它是一个压缩文件

link 建立连接

ln [-s] [来源文件] [目的文件]

ln 常用的选项就一个-s ,如果不加就是建立硬连接,加上就建立软连接。

ln passwd passwd-hard 建立硬连接 不会改变所占空间大小 不能创建目录的硬连接。
du -sk 查看当前目录所占空间大小

ln -s passwd passwd-soft 建立软连接 会增加目录所占空间大小
[root@skt 456]# head -n1 passwd-soft
head: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录 删除原文件后无法打开软连接文件 目录可以实现软连接

cat /etc/passwd
cat /etc/shadow 这两个文件可以说是linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出问题,则你是无法正常登录linux系统的。

新增一个组 groupadd [-g GID] groupname 不加-g表示按照系统默认的gid建组 从500开始 加-g可以自定义gid

删除一个组 groupdel groupname uo

useradd -u 510 -g 500 -M -s /sbin/nologin test11 创建用户test11 uid为510 gid为 500 没有家目录 且shell自定义为/sbin/nologin

userdel [-r] username 删除用户 -r表示同时删除所在家目录

创建/修改一个用户的密码 “passwd [username]”

su username 切换用户登录 su - 直接切换到root 加”-“后会连同用户的环境变量一起切换过来。su test 后虽然切换到了test用户,但是当前目录还是切换前的/root目录,然后当用su - test时切换用户后则到了test的家目录/home/test

useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。
adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。

usermod root test15 给test15添加root权限

df 查看磁盘容量属性
df -i df -k df -m df -h

du 查看文件或者目录所占空间大小

du [-abckmsh] 文件或者目录名

-b 以bytes为单位输出,默认为kbytes
-c 汇总同文件的大小
-k 以kb为单位
-m 以mb为单位
-s 至列出总和
-h 自动调节单位

fdisk 用于磁盘分区格式化的命令

fdisk -l 列出所有磁盘设备以及分区列表,不加-l表示进入磁盘分区操作模式

eg:fdisk /dev/hda
m:打印帮助列表
p:打印当前磁盘的分区情况。
n:重新建立一个新的分区。
w:保存操作。
q:退出。
d:删除一个分区。

Command (m for help): 输入功能字母

mkfs.ext2/mkfs.ext3/mke2fs 格式化linux硬盘分区

-b 分区时设定区块空间大小,1024、2048、4096bytes
-i 设定inode大小
-N 设定iNode数量
-c 格式化之前检查磁盘
-L 预设分区标签label
-j 建立ext3格式的分区 使用mkfs.ext3时不需要
不加任何选项,直接格式化/dev/hdb1

e2label 用来查看或者修改分区的标签(label)
e2label /dev/sda3 标签名

fsck 检查磁盘有没有坏道
-A 自动检测所有分区
-a 自动修复检查到的坏分区
-r 提示是否修复

mount 挂载设备
/etc/fstab
async/sync :async表示和磁盘和内存不同步,系统每隔一段时间把内存数据写入磁盘中,而sync则会时时同步内存和磁盘中数据;

auto/noauto :开机自动挂载/不自动挂载;

default:按照大多数永久文件系统的缺省值设置挂载定义,它包含了rw, suid, dev, exec, auto, nouser,async ;

ro:按只读权限挂载 ;

rw:按可读可写权限挂载 ;

exec/noexec :允许/不允许可执行文件执行,但千万不要把根分区挂载为noexec,那就无法使用系统了,连mount命令都无法使用了,这时只有重新做系统了;

user/nouser :允许/不允许root外的其他用户挂载分区,为了安全考虑,请用nouser ;

suid/nosuid :允许/不允许分区有suid属性,一般设置nosuid ;

usrquota :启动使用者磁盘配额模式,磁盘配额相关内容在后续章节会做介绍;

grquota :启动群组磁盘配额模式;

mount -o remount,ro,sync,noauto /dev/sda1 /test1 把/dev/sda1挂载到/test1下 设置读写权限为只读,同步磁盘数据,开机不自动挂载

blkid 显示磁盘分区的UUID 通过UUID挂载磁盘可以确保唯一性

/etc/rc.d/rc.local 开机执行命令所在文件夹

echo 'mount UUID="a1273b79-cd0d-42d6-9e90-568b9203911b" /test2'>>/etc/rc,d/rc.local 将挂载写入该文件夹 开机启动执行

mount -t 文件类型 软盘(vfat) 光盘(iso9660) 通常自动识别文件类型

umount 卸载设备
umount /test2 卸载/test2设备
umount -l /test2 强制卸载设备

建立swap文件

dd if=/dev/zero of=/tmp/newdisk bs=4k count=102400 创建一个swap文件 输入端/dev/zero 输出端/tmp/newdisk bs为块大小为4k count定义有102400个块

mkswap /tmp/newdisk 格式化swap分区

free [-m] 显示虚拟内存使用情况 -m表示以mb的形式查看
swapon 启用swap文件
swapoff 关闭swap文件

quota 用于给用户分配磁盘空间

quota -g 显示某个组的限额
quota -u 显示某个用户的限额
quota -v 显示的意思
quota -s 选择inode或硬盘空间来显示

quotacheck 扫描一个磁盘的quota空间

quotacheck -a 扫描所有已经mount的具有quota支持的磁盘
quotacheck -u 扫描某个使用者的文件及目录
quotacheck -g 扫描某个组的文件及目录
quotacheck -v 显示扫描过程
quotacheck -m 强制扫描

eduquota 用来编辑某个用户或者组的quota值
deuquota -u编辑某个用户的quota
eduquota -g编辑某个组的quota
eduquota -t编辑宽限时间
eduquota -p拷贝某个用户或者组的quota带另一个用户或者组eduquota -p user -u user

blocks:当前用户在当前的磁盘分区中所占的磁盘容量 单位为kb
soft/hard :当前用户在该Filesystem内的quota值,soft指的是最低限额,可以超过这个值,但必须要在宽限时间内将磁盘容量降低到这个值以下。hard指的是最高限额,即不能超过这个值。当用户的磁盘使用量高于soft值时,系统会警告用户,提示其要在宽限时间内把使用空间降低到soft值之下。

inodes :目前使用掉的inode的状态,不用修改。

quotaon 启动quta,在编辑好quota后,需要启动才能是quota生效
quotaon -a启动全部设定的quota
quotaon -u启动用户quota
quotaon -g启动组的quota
quotaon -s显示相关信息

quotaoff 关闭quota quotaoff -a 关闭全部

echo "quotaon -a" >>/etc/rc.d/rc.local 将生命写入到开机中

VIM 文本编辑器
三种模式
1、一般模式
上下移动光标;删除某个字符;删除某行;复制、粘贴一行或者多行

2、 编辑模式:一般模式下,是不可以修改某一个字符的,只能到编辑模式了。从一般模式进入编辑模式,只需你按一个键即可(i,I,a,A,o,O,r,R)。当进入编辑模式时,会在屏幕的最下一行出现“INSERT或REPLACE”的字样。从编辑模式回到一般模式只需要按一下键盘左上方的ESC键即可。

3、命令模式:在一般模式下,输入”:”或者”/”即可进入命令模式。在该模式下,你可以搜索某个字符或者字符串,也可以保存、替换、退出、显示行号等等。

.zip .gz .bz2
tar.gz tar.bz2

1、zip 压缩文件名 原文件名
zip -r 压缩文件名 原目录
unzip 文件名

2、gzip 源文件 (直接压缩成后面加.gz的格式,源文件消失)
gzip -c 源文件 > 压缩文件 (源文件保留)
gzip -r 目录 (压缩目录下的所有子文件,不能压缩目录)
gzip -d 压缩文件 解压缩
gunzip 压缩文件 解压缩

3、bzip2 源文件 压缩为.bz2格式,不保留源文件
bzip2 -k 源文件 压缩后保留源文件
bzip2 -d 压缩文件 解压缩
bunzip2 压缩文件 解压缩

4、tar -zcvf 压缩包名.tar.gz 源文件 压缩文件
tar -zxvf 压缩包名.tar.gz 解压缩

5、tar -jcvf 压缩包名.tar.bz2 源文件 压缩文件
tar -jxvf 压缩包名.tar.bz2 解压缩

rpm 安装rpm包

rpm -i 安装的意思
rpm -v 可视化
rpm -h 显示安装进度
-- force 强制安装
--nodeps 取消依赖,直接安装

a2ps-4.13b-57.2.el5.i386.rpm 这个包来解释一下,a2ps 为包名;4.13b则为版本信息;57.2.el5为发布版本号;i386为运行平台

rpm -Uvh filename -U 升级一个rpm包

rpm -e filename
卸载一个rpm包

rpm -q rpm包名 查询一个包是否安装(不要加平台信息和后缀名)
rpm -qa |head 查询所有安装包 前十行
rpm -qi 包名 显示一个包的相关信息(不要加平台信息和后缀名)
rpm -ql 包名 显示一个rpm包安装的文件
rpm -qf 文件的绝对路径 显示一个文件属于哪个包
rpm -qf 'which vim' 显示vim所属包

yum list 显示所有可用的包
yum search vim 搜索一个包(yum list |grep vim)

yum install -y [rpm包名] yum安装一个rpm包 -y表示省略掉和用户交互的步骤
yum uninstall -y [包名] yum卸载一个rpm包
yum update -y [包名] yum升级一个rpm包
yum remove -y [包名] yum卸载一个rpm包

利用yum下载一个rpm

yum install -y yum -downloadonly.noarch 安装yum-downloadonly插件

yum install test.rpm -y --downloadonly // 下载不安装

yum install test.rpm -y --downloadonly --downloaddir=/usr/local/scr 指定到目录

源码包安装

  1. ./config 在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过”./config --help ”命令来查看。在这一步会自动检测你的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后才会生成一个Makefile文件。
  2. make 使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。
  3. make install 安装步骤,生成相关的软件存放目录和配置文件的过程。

./comfigure --prefix=/usr/local/ngnix 指定安装目录
ls -l Makefile 或者 echo &? 显示为0 都可以查看./config是否完成

shell
1、记录历史命令
!! 执行上一条命令
!n 执行第n条命令
!字符串 执行历史中最近一次以此字符串为开头的命令

2、指令和文件名补全
tab

3、别名
alias 给一个指令起别名
unlias 解除别名功能
alias cp='cp -i' 直接敲alias会看到目前系统预设别名

4、通配符

  • 匹配零个或者多个字符
    ? 匹配一个字符

5、输入输出重定向
< 输入重定向

覆盖输出重定向

2> 错误重定向

追加输出错误重定向

6、管道符
| 把前面的命令运行结果丢给后面命令

7、作业控制
ctrl + z 暂停进程
fg 恢复
bg 使他到后台运行
ctrl + c 终止进程

变量(大写)

env 列出全部系统预设环境变量
HOME 当前用户主目录
HISTSIZE 历史记录数量
LOGNAME 当前用户登录名
HOSTNAME 主机名称
SHELL 前用户shell类型
LANG 语言环境变量
MAIL 当前用户的邮件存放目录
PWD 当前目录
set 列出系统预设的所有变量

自定义变量
1、所有用户登陆后都可以使用该变量
打开/etc/profile 在文末加上export + myname=Aming(自定义的变量)
运行source /etc/profile

2、只想当前用户使用该变量
在用户主目录下的.bashrc文件最后一行加上export + myname=Aming(自定义的变量)
运行source .bashrc

自定义变量规则

  1. 设定变量的格式为”a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格;
  2. 变量名只能由英、数字以及下划线组成,而且不能以数字开头;
  3. 当变量内容带有特殊字符(如空格)时,需要加上单引号;变量内容中本身带有单引号,就需要用到双引号。
  4. 如果变量内容中需要用到其他命令运行结果则可以使用反引号;
  5. 变量内容可以累加其他变量的内容,需要加双引号;

pstree 打印所有进程的进程树
export 声明变量 export abc 后就可以看到abc=123 不加变量名表示声明所有变量

unset abc 取消设定的abc变量

【系统环境变量与个人环境变量的配置文件】

/etc/profile 放置变量的文件路径,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等
/etc/bashrc 主要预设umask以及PS1
[root@localhost ~]echo $ps1 输出[u@h w]&dollar; 用户 主机名 当前目录 #

【linux shell中的特殊符号】

1、* :代表零个或多个字符或数字。
2、? :只代表一个任意的字符
3、# :这个符号在linux中表示注释说明的意思,即”#”后面的内容linux忽略掉
4、 :脱意字符,将后面的特殊符号(例如”*” )还原为普通字符。
5、$ :除了用于变量前面的标识符外,还有一个妙用,就是和’!’结合起来使用,表示上条命中中最后一个变量
6、grep :过滤一个或多个字符
7、 cut :截取某一个字段
-d :后面跟分隔字符,分隔字符要用双引号括起来

-c :后面接的是第几个字符

-f :后面接的是第几个区块

8、sort :用做排序
-t 分隔符 :作用跟cut的-d一个意思

-n :使用纯数字排序

-r :反向排序

-u :去重复

-kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

9、wc :统计文档的行数、字符数、词数,常用的选项为:

-l :统计行数

-m :统计字符数

-w :统计词数

10、 uniq :去重复的行 uniq -c 统计重复的行,并把行数写在前面,在进行uniq之前,需要先用sort排序然后才能uniq

11、tee 相当于> 但可以显示内容

12、tr 替换
-d :删除某个字符,-d 后面跟要删除的字符

-s :把重复的字符去掉

13、split -b 依据大小切割文档
split -b 500 /etc/passwd passwd 后面的passwd为分割后文件名的前缀,分割后的文件名为passwdaa, passwdab, passwdac …

split -l 依据行数切割文档

split - l 10 /etc/passwd passwd

14、; 运行两个或两个以上的命令如何呢?则需要在命令之间加一个”;”使用”;”时,不管command1是否执行成功都会执行command2;

15、& 将一条命令放到后台执行
sleep 100 & 休眠100秒
jobs 查看后台执行的任务 fg可以将任务调整到前台执行

16、[] 中间为字符组合 代表中间字符中的任意一个
ls test[12a] 输出testa

17、&& 与 || 与和或 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。

grep
语法: grep [-cinvABC] ‘word’ filename

-c :打印符合要求的行数

-i :忽略大小写

-n :在输出符合要求的行的同时连同行号一起输出

-v :打印不符合要求的行

-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

^ 表示行的开头 ^r 表示已r开头 1在[]里面表示取反

$ 表示行的结尾 r$ 表示结尾是r 空行则表示”^$”

.表示任意一个字符

ooo* 表示oo,ooo,oooo 或者更多

.* 表示0个或者多个任意字符

o{2} {}表示前面的字符o要出现的次数,两边要加 也可以表示一个范围{n1,n2} 其中n1

egrep grep升级版

o+ 筛选一个或者一个以上的o

o? 筛选零个或者一个o

111|aaa 筛选包含字符串1或者a

(oo) 表示一个oo整体

sed

sed -n 'n' p filename 打印文件的第n行记录 'n'表示第几行
sed -n '2' p test.txt 打印第二行
sed -n '2,4'p test.txt 打印第2到4行
sed -n '/qwe/p test.txt 打印包含qwe的行
sed -e '1'p -e '/312/'p -n test.txt 打印第一行和包含312的行 -e
sed '1'd test.txt 打印删除第一行的其他记录
sed '3,$'d test.txt 打印删除第三行到结尾的其他记录
sed '3,4s/sd/op/g' test.txt 打印将34行的sd替换成op的记录 加g为整行替换
sed 's/[0-9]//g' test.txt 打印删除所有数字

awk
awk -F 截取某段 -F的作用是指定分隔符 不加则以空格或者tab为分隔符
head -n2 test.txt |awk -F ':' '{print $1}' 截取test.txt前两行中冒号截取的第一个字段 $1为第一段以此类推 $0表示整行 输出root和bin

awk '/root/' test.txt 查找包含root的记录
awk -F ':' '$1~/root/' test.txt 匹配第一行中包含root的行记录 ~匹配的意思
awk -F ':' '$3=="0"' test.txt 查找以冒号截段的行且第三段为0的行记录
cat test.txt |awk -F ':' '$3>="500"' test.txt ==表示精确匹配 500并不是一个数字,所以得不到大于500的效果,输出会有6或者7,8。后面也可以加上”&&” 和 “||”表示“并且”和“或者”的意思。

awk的内置变量
NF: 表示分隔之后共有多少段
NR:表示行数

head -n5 test.txt |awk -F ':' '{print NF}' 打印:总共分隔了多少段 $NF表示最后一段

awk -F ':' 'NR>=20 && $1~/ssh/' test.txt 打印出冒号分隔的行数大于等于20且匹配包含ssh的行记录

head -n2 test.txt |awk -F ':' '{$7=$4+$3; print $3,$4,$7}' 计算总和

awk -F ':' '$1=="root"' test.txt |sed 's/root/toor/' 用’:’作为分隔符,查找第一段为’root’的行,并把该段的’root’换成’toor’(可以连同sed一起使用)
awk -F':' '{print $1"@"$NF}' test.txt 用’:’作为分隔符,打印第一段以及最后一段,并且中间用’@’连接

awk -F':' '{(sum+=$4)}; END {print sum}' test.txt 用’:’作为分隔符,把整个文档的第四段相加,求和;

shell脚本
vim test.sh

! /bin/bash

内容

sh test.sh 调用脚本
chmod +x test.sh 增加执行权限
./ test.sh 增加权限后执行脚本

date %Y%m%d %H:%M:%S %w 日期 年月日 时分秒 星期
date -d "-1 day" -d表示前n天或者后n天的日期

变量
d=date +%H:%M:%S 反引号可以将命令的值赋给变量
在脚本中引用变量时需要加上$
求和ab
a=1
b=2
sum=$[$a+$b]
echo "sum is $sum"
数学计算要用[]括起来并且外面要加$

echo "please input a number:"
read x
echo "please input another number:"
read y
sum=$[$x+$y]
echo "The sum of two numbers is $sum."
read表示可以输入获得变量的值 read x表示可以输入变量值x
read也可以写成这样:
read -p "please input a number:" x -p表示类似于echo的作用

shell中的逻辑判断

if 判断语句;then

command

fi

fi表示退出if语句
read -p "please input your score:" a
if ((a<60)); then

echo"You didn't pass the exam"

fi
((a<60)) shell特有格式

带有else
if 判断语句; then

command

else

command

fi

read -p "please input your score:" a
if ((a<60)); then

echo"You didn't pass the exam"

else

echo"You  pass the exam"

fi

带有elif
read -p "please input your score:" a
if ((a<60)); then

echo"You didn't pass the exam"

elif ((a>60)) && ((a<85)); then

echo"You  pass the exam"

else

echo"Good!You  pass the exam"

fi

&&表示并且的意思||表示或者的意思 和上文一样

case 变量 in
value1)
command
;;
value2)
command
;;
*)
command
;;
esac
value个数不限制 *代表剩余的值
判断奇偶

read -p "please input a nnumber:" n
a=$[$n%2]
case $a in
1)

echo "the number is odd"
;;

0)

echo "the number is even"
;;

esac
$n%2 表示变量问n除以2的余数

循环
for循环
for 变量名 in 循环的条件;do

command

done

for i in seq 1 5;do

echo $i

done

while循环
while 条件;do
command
done

a=10
while [$a -ge 1};do

echo "$a"
a=$[$a-1]

done
在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。

函数function
function 函数名(){

command

}

function sum(){

sum=$[$1+$2]
echo $sum

}
sum $1 $2

第十五章 linux系统日常管理

监控系统状态
1、w查看当前系统(w|cat)
load average:’后面的三个数值,第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。
09:59:46 up 5 min, 2 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 09:55 4:35 0.06s 0.06s -bash
root pts/0 192.168.1.41 09:56 0.00s 0.12s 0.06s w

cat /proc/cpuinfo 查看服务器有几个cpu 或者grep -c 'processor' /proc/cpuinfo

2、vmstat 监控系统的状态
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 781976 34144 61544 0 0 51 3 37 24 0 1 99 1 0

procs显示进程相关信息
r表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,说明cpu不够用了
b表示等待资源的进程数,如果长时间大于1,则需要关注一下

menory内存相关信息
swpd 表示切换到交换分区的内存数量
free 当前空闲的内存大小
buff 缓冲大小(即将写入磁盘的)
cache 缓存大小(从磁盘中读取的)

swap 内存交换情况
si 由内存进入磁盘交换区的数量
so 由交换区进入内存的数量

io 磁盘使用情况
bi 从块设备读取数据的量(读磁盘)
bo 从块设备写入数据的量(写磁盘)

system显示采集间隔内发生的中断次数
in 表示某一时间间隔中观测到的每秒设备中断数
cs 表示每秒产生的上下文切换次数

cpu显示cpu的使用状态
us 显示用户花费cpu时间百分比
sy 显示系统花费cpu时间百分比
id 表示cpu处于空闲状态的时间百分比
wa 表示io等待占cpu时间百分比
st 表示被盗走的cpu时间百分比(一般为0)

注意:r列,b列,和wa列 bi以及bo si, so

vmstat 1 5 表示每隔一分钟打印一次系统状态 连续打印5次

3、显示进程所占系统资源
top
top - 10:55:04 up 1:00, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1012456k total, 231140k used, 781316k free, 34232k buffers
Swap: 2047996k total, 0k used, 2047996k free, 61840k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12 root 20 0 0 0 0 S 0.3 0.0 0:02.70 events/1
2399 root 20 0 15032 1204 928 S 0.3 0.1 0:00.17 top

1 root      20   0 19356 1536 1228 S  0.0  0.2   0:01.49 init                  
2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd              
3 root      RT   0     0    0    0 S  0.0  0.0   0:00.28 migration/0           
4 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0

%cpu %men cpu,内存使用情况

4、sar 监控系统状态
sar -n DEV 查看历史网络流量
Linux 2.6.32-573.el6.x86_64 (skt) 2018年04月13日 x86_64 (2 CPU)

09时54分40秒 LINUX RESTART

10时00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10时10分01秒 eth0 12.77 0.08 0.82 0.01 0.00 0.00 0.00
10时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10时20分01秒 eth0 12.78 0.13 0.82 0.01 0.00 0.00 0.00
10时30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10时30分01秒 eth0 12.61 0.03 0.81 0.00 0.00 0.00 0.00

IFACE 设备名称 rxpck/s表示每秒进入收取的包的数量 txpck/s表示每秒发送出去的包的数量 rxkb/s表示每秒收取包的大小(单位Byte) txkb/s表示每秒发出包的大小 如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被攻击了

sar -n DEV 1 5 打印一秒前的流量情况 打印5次

sar -n DEV -f /var/log/sa/sa13 查看某一天的网卡流量历史 13为离现在最近的日期

sar -q 查看历史负载

5、free 查看内存使用情况
free 可以加-m 或者-g 更换显示单位

        total       used       free     shared    buffers     cached

Mem: 1012456 185136 827320 228 13368 56680
-/+ buffers/cache: 115088 897368
Swap: 2047996 0 2047996

查看内存使用多少,剩余多少请看第二行的数据

6、ps 查看系统进程
ps aux 查看系统进程
PID 表示进程id kill PID 终止进程 kill -9 PID 强行终止进程
STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D 不能中断的进程(通常为IO)

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说sleep 10,如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

L 在内存中被锁了内存分页

s 主进程

l 多线程进程

  • 代表在前台运行的进程

ps aux |grep -c mingetty 可以同管道符一起使用 查看mingetty进程的数量

7、netstat 查看网络状况
netstat -lnp (打印当前系统启动哪些端口)

netstat -an (打印网络连接状况)
netstat -an |grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 52 192.168.1.188:22 192.168.1.41:54981 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
unix 3 [ ] STREAM CONNECTED 14922

22为端口号

8、抓包工具tcpdump
先安装yum -y install tcpdump
tcpdump -nn -i eth0 表示抓取设备eth0网卡的包 -nn表示让第三列和第四列显示成ip+端口号的形式 不加-nn则显示主机名和服务名称
16:51:59.403841 IP 192.168.1.188.22 > 192.168.1.41.54981: Flags [P.], seq 47204468:47204744, ack 7781, win 304, length 276
16:51:59.404071 IP 192.168.1.188.22 > 192.168.1.41.54981: Flags [P.], seq 47204744:47204908, ack 7781, win 304, length 164
16:51:59.404228 IP 192.168.1.41.54981 > 192.168.1.188.22: Flags [.], ack 47204908, win 251, length 0

linux网络相关
1、ifconfig查看网卡ip
ifconfig eth0 打印出eth0的ip信息

修改eth0的ip
修改配置文件: etc/sysconfig/network-scripts/ifcfg-eth0
修改IPADDR , NETMASK以及GATEWAY

重启网络服务 service network restart

2、给一个网卡设定多个IP
ifcfg-eth0复制成ifcfg-eth0:1 然后编辑ifcfg-eth0:1修改DEVICE以及IPADDR保存后重启网卡
cp ifcfg-eth0 ifcfg-eth0:1
vim ifcfg-eth0:1
service network restart

  1. 查看网卡连接状态
    mii-tool

4、更改主机名
hostname + 新名字
配置文件
vim /etc/sysconfig/network

5、设置DNS
配置文件/etc/resolv.conf

【linux的防火墙】
1、selinux 没卵用 需要关闭
vim /etc/selinux/config
把SELINUX=enforcing改成SELINUX=disabled 然后重启机器
临时关闭命令:
getenforcing 显示状态
setenforcing 0 更改状态为Permissive 关闭selinux 后面跟1表示状态改为Enforcing
重启之后会恢复

2、iptables

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

三个表
filter 主要用于过滤包 内建三个链INPUT、OUTPUT以及FORWARD INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

nat 主要用处是网络地址转换 PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址

mangle 主要是用于给数据包打标记,然后根据标记去操作哪些包

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清除规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

动作包括:

accept:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。

剩余的内容太过复杂 有的虚拟机无法实现 暂时不作操作

linux系统的任务计划

crontab [u user] file
crontab [u user] [-e] [-l] [-r]
u表示为指定用户 不加则表示当前用户
-e 指定计划任务
-l 列出计划任务
-r 删除计划任务

crontab -e
01 10 26 05 4 echo "ok" >/root/cron.log 指定一个计划任务 从左到右依次是分,时,日,月,周+内容>指定到位置

  1. 20 1 * echo “”>/var/log/slow.log
  2. 0 30 0 /bin/sh /usr/local/sbin/backup.sh
  3. 10 04 14 /bin/sh /usr/local/sbin/backup_month.sh
  4. 0 /8 ntpdate time.windows.com
  5. 0 1,12,18 /bin/sh /usr/local/sbin/test.sh
  6. 0 9-18 * /bin/sh /usr/local/sbin/test2.sh
    每隔8小时,就是用全部小时(0-23)去除以8,你仔细想一下结果,其实算出来应该是0,8,16三个数。当遇到多个数(分钟、小时、月、周)例如第5题,则需要用逗号隔开。而时间段是可以用’-‘的方式表示的

linux的系统服务管理
1、ntsysv 配置服务开启或者关闭
建议除’crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl’ 外其他服务全部停掉

chkconfig查看所有预设的服务情况
ls /etc/init.d/ = chkconfig --list
chkconfig可以详细到级别 0123456就是inittab里面的启动级别

chkconfig --level 3 crond 关闭级别为3的crond服务
chkconfig --list |grep crond 列出此项服务
chkconfig crond on 不指定级别 默认对2345级别操作 打开2345级别的crond服务
chkconfig --del crond 删除服务
chkconfig --add crond 添加服务到系统服务中

linux中的数据备份

1、rsync -arv 123 /tmp/123 将当前目录下的123文件备份带tmp下 命名为123
rsync -arv 123 10.0.2.34:/root/ 远程备份到根目录下

2、rsync常用选项 rsync [OPTION]... SRC DST
-a 保持所有属性 相当于-rlptgoD 后面可以加上--no-option 表示关闭其中一个选项
-r 对子目录以递归模式处理 主要针对目录 单独的文件则不需要
-v 打印信息 例如速率 文件数量等
-l 保留软连接
-L 向对待常规文件一样处理软连接 如果SRC中有软连接文件 加上则会将软连接指向的文件备份到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
--delete 删除DST中SRC没有的文件
--exclude=PATTERN 指定排除不需要的文件 =后面接文件名
-u 表示把DST中比SRC还新的文件排除掉 不覆盖

3、rsync 应用实例

linux系统日志
/etc/logrotate.conf 配置日志文件 一般不做修改
/var/log/message是由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/message
Syslogd服务的配置文件为/etc/syslog.conf这个文件定义了日志的级别

dmesg这个命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的。

建议:以后在你日常的管理工总中要养成多看日志的习惯,尤其是一些应用软件的日志,比如apache, mysql, php等常用的软件,看它们的日志(错误日志)可以帮助你排查问题以及监控它们的运行状况是否良好。

xargs
ls 123.txt |xargs cat 查看123.txt内容
经常与find一起用
find ./ -mtime +10 |xargs rm 删除大于10天前的文件

ls *.txt|xargs -n1 -i{} mv {} {}_bak 查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak -n1意思是一个一个对象的去处理,-i{} 把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak

2、-exec
find ./ -mtime +10 -exec rm -rf {} ; 查找当前目录创建时间大于10天的文件并删除。

linux下同步时间命令
ntpdate timeserver

00 /6 /usr/sbin/ntpdate 210.72.145.44 >/dev/null 每隔6小时同步一次


  1. a-zA-Z
相关文章
|
3月前
|
缓存 网络协议 Linux
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
54 0
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
56 0
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
39 0
|
2月前
|
缓存 Unix Linux
Linux学习笔记
Linux学习笔记
254 0
|
3月前
|
缓存 监控 Linux
Linux 学习笔记十九:常见监控工具
Linux 学习笔记十九:常见监控工具
Linux 学习笔记十九:常见监控工具
|
3月前
|
安全 Linux 数据安全/隐私保护
Linux 学习笔记十八:SELinux 相关概念
Linux 学习笔记十八:SELinux 相关概念
|
3月前
|
Linux 开发工具 索引
Linux 学习笔记索引
Linux 学习笔记索引
|
3月前
|
小程序 Linux 数据安全/隐私保护
Linux学习笔记十六:日志管理
Linux学习笔记十六:日志管理
|
3月前
|
存储 Linux 数据库
Linux学习笔记十三: 数据备份与恢复
Linux学习笔记十三: 数据备份与恢复
|
3月前
|
监控 Linux
Linux学习笔记十二:Linux 工作管理
Linux学习笔记十二:Linux 工作管理
Linux学习笔记十二:Linux 工作管理