时间php |
事件html |
1965年node |
美国麻省理工学院(MIT),通用电气公司(GE),贝尔实验室AT&T,协力开发mnltics系统,没有成功mysql |
1969年linux |
肯.汤普森在DEC PDP-7机器上开发出Unix系统ios |
1971年nginx |
肯.汤普森和其同时丹尼斯里奇发明C语言web |
1973年正则表达式 |
Unix绝大部分用C语言重写,提升了可移植性redis |
1987年 |
谭宁邦教授开发了minix系统,并开发源代码 |
1991年 |
李纳斯开发Linux系统 |
Unix发行版本
操做系统 |
公司 |
硬件平台 |
AIX |
IBM |
PowerPC |
HP-UX |
HP |
PA-RISC |
Solaris |
SUN |
SPARC |
Linux版本分类
内核版 www.bemel.org |
2.6.32版本 |
RHEL 6 |
|
3.10.x版本 |
RHEL 7 |
||
发行版 |
Redhat系列 |
我的版 |
fedoras桌面版 |
企业版 |
RHEL(Redhat Enterprise Linux)其中包括(turbo Linux,mandriva,centos,suse,fedora,gentoo Linux) |
||
Debian系列 |
Ubuntu(开发人员经常使用,软件多,图形界面好看)还有KNOPPIX |
开源软件
软件名 |
做用 |
Apache |
web服务器 |
Nginx |
web服务器 |
MySQL |
数据库 |
MongoDB |
NOSQL数据库(用于提高MySQL数据库性能还有redis) |
PHP |
脚本语言 |
Python |
脚本语言 |
Ruby |
脚本语言 |
Samba |
Linux和Windows之间内网文件服务器 |
Sphinx |
中文分词 |
# GPL:使用的软件是开源的,作出的软件也必须开源 |
分区 |
1."/"根分区(工做中通常分200G左右) |
2."swap"交换分区(也就是虚拟分区)真实内存小于4G,swap分区分2倍大小,真实内存大于4G,swap分区份内存同样大小 |
|
3."boot"启动分区,建议200M大小 |
|
格式化 |
写入文件系统 |
设备文件名 |
/dev/sda等 |
挂载点 |
/mnt /media /misc访问分区的路口,使用已创建的空目录做为挂载点 |
IP地址配置步骤
vim /etc/sysconfig/network-scripts/ifcfg-eth0 |
|
ONBOOT= |
开机启动网卡配置,默认no,须要改成yes |
BOOTPROTO= |
默认IP获取方式,默认dhcp,更改成none或static(静态) |
IPADDR= |
ip |
NETMASK= |
子网掩码 |
GATEWAY= |
网关 |
DNS1= |
DNS |
Root目录默认文件
文件名 |
做用 |
install.log |
安装了哪些软件包记录 |
install.log.syslog |
增长的用户和用户组 |
Anaconda-ks.cfg |
系统安装步骤(批量安装模板) |
1 |
Linux中严格区分大小写,没有大小命令,有大写选项 |
2 |
Linux下因此内容都是以文件形式保存 |
3 |
Linux不靠扩展名区分文件类型 |
4 |
全部存储设备必须挂着以后才能使用 |
5 |
Windows的程序不能直接在Linux下安装 |
6 |
修改配置文件,永久生效 |
服务器注意事项
1 |
远程服务不容许关机,只能重启(服务器大多在异地) |
2 |
服务器重启时应该关闭服务(保护硬盘) |
3 |
不要在服务器访问高峰运行高负载命令(最好在凌晨4-5点) |
4 |
远程配置防火墙时不要把本身踢出服务器(配置时,写定时任务,定时清除防火墙配置) |
5 |
指定合理的密码并定时更新 |
6 |
合理分配权限 |
7 |
按期备份重要数据和日志(异地屡次分布保存) |
连接命令注意事项
命令 |
ln 选项源文件链接文件名 |
硬连接 |
1.拥有相同的inode和block,能够看出相同文件 |
2.修改任何一个文件,另外一个文件也会改变 |
|
3.删除其中一个文件,另外一个文件还能使用 |
|
4.不能连接目录 |
|
5.不能跨分区连接 |
|
6.两个文件特征不明显,不推荐使用 |
|
软连接 |
1.有自减的iNode和block,但block中不记录实际数据,只写入源文件的文件名和inode号 |
2.修改任何一个文件,另外一个文件也会改变 |
|
3.删除源文件,软连接没法使用 |
|
4.不管源文件多大,软连接大小不变 |
|
5.软连接拥有最大权限,但访问受源文件权限限制 |
|
6.能跨分区连接 |
|
7.能连接目录 |
|
8.特征明显,推荐使用 |
/bin/ 存放系统命令,普通用户和超级用户均可以执行
/sbin/ 存放系统命令,只有超级用户能够执行
/usr/bin/ 存放系统命令,普通用户和超级用户能够执行
/usr/sbin 存放系统命令,只有超级用户能够执行
/boot/ 系统启动目录
/dev/ 设备文件保存位置
/etc/ 配置文件保存位置
/home/ 普通用户家目录
/lib/ 函数库保存位置
/lost+found/ 系统崩溃或意外关机,数据修复用。
/media/ 挂载目录
/mnt/ 挂载目录(习惯)
/misc/ 挂载目录
/opt/ 软件安装位置,习惯用/usr/local/目录
/proc/ 虚拟文件系统,该目录中的数据不是保存在硬盘中,而是保存在内存中
/sys/ 虚拟文件系统,该目录中的数据不是保存在硬盘中,而是保存在内存中
/root/ 超级用户保存位置
/srv/ 服务数据目录
/tmp/ 临时目录(若是安装mysql,则有两个文件在这个目录,重要)
/usr/ 系统软件资源目录
/usr/lib/ 函数库保存位置
/usr/x11R6 图形界面系统保存位置
/usr/local/ 软件安装位置(习惯)
/usr/local/src 源程序保存位置(下载的源代码包)
/usr/src/kernels 内核源码保存位置(学习或重编用的)
/usr/share/ 帮助,说明文档保存位置
/var/ 动态数据保存位置
/var/log/ 系统日志保存位置
/var/lib/mysql (rpm包安装) mysql数据库保存位置(用于数据库备份)
/var/www/html (rpm包安装) 网页保存位置
/var/spool/ 放置队列数据的目录
/var/spool/mail/ 用户名 放置用户的邮箱
/var/spool/cron/ 存放系统定时任务
/var/run/ 一些服务和程序运行后,他们的PID(进程ID)保存在这
- - - - - - - - - - .文件权限行
第一位表示文件类型
第二位到第四位一组表示U因此者权限
第五位到第七位一组表示G所属组权限
第八位到第十位一组表示O其余人权限
第11位表示seLinux保护文件
对文件的意义
r 读取文件内容
w 编辑,新增,修改文件内容,但不包括删除(只有上级目录有w权限,才能够删除目录下文件)
x 可执行
注:目录下的文件中,文件名和inode节点号是存储在当前目录中的
对目录的意义
r 能够查询目录下文件
w 具备修改目录结构的权限
x 访问
最大权限:最大权限具备安全风险,须要当心使用
文件:x权限最大
目录:w权限最大
目录可用权限
r---4 w---2 x---1
0:最小权限
5:标准权限
7:最大权限
(其余权限没有意义)
umask:文件和目录的默认权限
umask 022 临时生效
文件最大默认权限:666 (x权限是文件最大权限,不能默认)
/etc/profile环境变量配置文件,umask权限永久生效
配置文件决定
超级管理员:0022
普通用户:0002/0022
locate 文件名 (在文件名数据库中查找,快速)
Updatedb 强制更新数据库(使用locate时须要更新下数据库)
/var/lib/mlocate/mlocate.db文件名数据库位置
/etc/updatedb.conf 配置文件,用于定义locate命令查找位置
通配符(find)
* 任意内容
? 任意一个内容
[] 中括号内任意一个内容 [abc] [0-9] [A-Z] [A-Za-z]
正则表达式(grep)
* 前一个字符重复任意屡次
? 前一个字符重复0次或1次(要用egrep命令使用)
[] 中括号内任意一个内容
^ 行首符
$ 行尾符
find命令:在系统中,搜索符合条件的文件名,若是须要匹配,则彻底匹配
格式:find 目录路径 -name 文件名
grep命令:在系统中,搜索符合 条件的字符串,若是须要匹配,则使用包含匹配
格式:grep "字符串" 文件名
tty1-tty6:本地登入终端,共6个,alt+F1-F6(切换)
tty7:本地图形终端ctrl+atl+F7
pts/0:0-255,远程终端链接,支持256个
~/.vimrc配置文件
注:~/.vimrc配置文件不存在,需手工创建,用于配置vim
双文件打开方式
vim -o 文件名 文件名 同时打开上下窗口,ctrl+w 上下键切换
vim -O 文件名 文件名 同时打开左右窗口,ctrl+w 左右键切换
进入插入模式
a 追加 A 行尾
i 插入 I 行首
o 下行打开 O 上行打开
退出与保存
:q在没有修改时,退出
:q!强制不保存退出,全部用户均可以用,用于放弃修改
:wq!用于强制保存退出,只有root可使用,强行写入数据
删除
x:删除光标所在字符
nX:删除n个字符
dd:删除整行(具备粘贴功能)
:n,nd 删除指定范围行(具备粘贴功能)
dG:删除删除光标所在行到结尾(具备粘贴功能)
dd 删除行
字体颜色
:syntax on/off 开启或关闭vim颜色
查找
/ 查找字符 n:下一行 N:上一行
替换
r:替换光标所在处字符
R:从光标所在处开始替换,按esc结束
:1,10s/old/new/g 替换1到10行的old内容为new
:%s/old/new/g 替换全文本内容
:1,10s/^/#/g 添加1到10行行首注释
:1,10s/^#//g 取消注释
:1,10s/^/\/\//g 添加//注释,\转移符,取消特殊字符意义
:1,10s/^\/\///g 取消注释
粘贴
p:光标所在向下粘贴
大写P:光标所在向上复制
复制
yy:复制光标当前行
nyy:复制光标当前行如下n行
调用文件内容
:r 文件名 在vim中写入文件内容
调用命令结果
:r !命令 在vim中写入输入的命令内容
:r 命令 执行命令,以后继续编辑
编辑快捷命令
:map ^p I#<ESC>
:map ^b ^x
:map ^p I#<ESC> "^p"先按ctrl+v后按ctrl+p,按ctrl+p添加注释
:map ^B ^x 删除注释
:ab 源字符 替换为字符
:ab mymail shenchao@lampbrother.net #输入mymail时替换为shenchao@lampbrother.net
键盘符: h:左 j:下 k:上 l:右
命令模式快捷操做
gg:光标移动到行首
G:光标移动到行尾
^:行首符
$:行尾符
u:撤销
ctrl+r:反撤销
显示行号
:set nu 显示行号
:set nonu 关闭行号
1、源码包
2、二进制包(RPM包)
源码包:编译安装(C语言,Java语言)
优势:
1、开源,有能力能够本身修改
2、能够自由选择所须要功能
3、软件是编译安装,更适合,更高效,更稳定
4、卸载方便
缺点:
1、安装步骤较多,容易出错
2、编译时间太长
3、由于是编译,报错新手难以解决
二进制包
二进制包分类:直接安装(PHP,Python,shell)
1、deb包
2、RPM包
优势:
1、包管理简单,只经过几个命令就能够实现包的安装,升级,查询和卸载
2、安装速度比源码包安装快的多
缺点:
1、通过编译,不能再看到源代码
2、选择不如源码包灵活
3、依赖性,树状依赖,环形依赖,模块依赖
语言分类(根据安装方式)
编译语言:C语言,Java语言
脚本语言:shell,php,Python
软件包选择原则
1、若是软件是有大量客户端访问的,选择源码包安装,效率高,稳定
2、若是软件访问量少或本机使用,选择rpm包,安装简单
包名使用
1、若是操做系统已经安装的软件包,使用包名,由于包名存在RPM包数据库中,不须要路径查找,数据库位置\var\lib\rpm\
2、若是操做系统未安装的软件包,使用包全名,须要绝对路径
RPM -V 包名 #检验已安装包的信息 |
|
S |
安装包大小是否改变 |
M |
文件类型或权限是否改变 |
5 |
MD5是否改变 |
D |
设备中,从代码是否改变 |
L |
文件路径是否改变 |
U |
文件全部者是否改变 |
G |
文件所属组是否改变 |
T |
文件修改时间是否改变 |
c |
配置文件 |
d |
普通文档 |
g |
鬼文件,不该该存在的文件 |
l |
受权文件 |
r |
描述文件 |
对称加密:加密和解密密码同样
非对称加密:加密和解密不同,互相不用知道密码,加密度高
公钥:用于访问或接受加密文件用的
私钥:用于本身解密本身加密的文件
数字证书(重要,用于检测安装的rpm包是否改动)
包名:RPM-GPG-KEY-CentOS-6
原厂公钥文件位置与数字证书导入
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
rpm包文件提取(cpio备份恢复命令,不经常使用)
rpm2cpio 包全名 | cpio -idv .绝对路径(文件提取到当前目录)
补丁
只能使用在未安装的源程序上,已安装的程序是升级
定义:旧文件与新文件的不一样
生成补丁: diff -Naur 旧文件 新文件 > 补丁文件
补丁导入旧文件: patch -pn < 补丁名 (-n:数字 -p:取消路径等级)
网络yum源搭建
wget 网址 (网址:www.mirrors.163.com下载网络文件)
yum clean all (清空原来yum源缓存)
yum makecache (创建新的缓存,能够不用)
yum list (从新加载yum源,下载快速)
光盘yum源
一、装入光驱
二、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
三、vim /etc/yum.repos.d/CentOS-Media.repo
#修改:baseurl=file:///mnt/dvd/
#修改:enabled=1
#修改:gpgcheck=1
本地yum源
服务端:
yum -y install vsftpd
mount /dev/sr0 /var/ftp/
service vsftpd start
客户端:
yum -y install ftp
vim /etc/yum.repos.d/CentOS-Media.repo
baseurl=ftp://192.168.10.100
删除多余的条件
yum list
测试安装
yum注意事项
命令不区分包名,能够都使用包名
安装时装依赖包,卸载时卸被依赖的包,尽可能不要卸载
在RHEL6.3之前,update所有升级会包括内核,使系统没法开机
能够安装同一个服务的源码包与rpm包,但只能运行一个
yum -y install xorg*
yum -y groupinstall "X Window System"
yum -y groupinstall Desktop
yum -y groupinstall "Chinese Support"
startx #启动图形界面
init 5 #进入桌面
ctrl+alt+F1 #桌面终端
ctrl+alt+F2 #字符终端
安装源码包以前先用yum -y install gcc*
一、执行命令.configure --prefix=绝对路径(指定安装位置),检测系统环境是否适合安装需求,不进行实际安装,信息会写入makefile文件里,真正安装时会读取
二、执行命令make,若是以前安装过,先执行make clean清除编译过程当中的缓存和临时文件,也是不进行实际安装,信息会写入makefile文件里,真正安装时会读取
三、执行命令make install,编译安装,过程较长
四、绝对路径 start,启动服务(启动文件能够查看install文件)
五、卸载时直接删除安装的目录
函数库: so函数库对应软件程序
ko模块函数库对应硬件
防火墙关闭(对外部应用)
iptables -F (临时生效,清空防火墙配置)
service iptables stop(永久生效,中止防火墙服务)
chkconfig iptables off(永久生效,防火墙服务开机不启动)
selinux(行为控制工具,对内部应用)
注:由于seLinux是内核等级设置,须要重启系统才能生效
配置文件位置:/etc/selinux/config
setenforce 0 (临时关闭防御,0是半关闭,1是开启)
SELINUX=enforcing(开启防御)
SELINUX=disabled(关闭防御)
SELINUX=permissive(清空规则设置)
linux驱动介绍
一、经常使用驱动直接放入内核(必备硬件驱动)
二、把不太经常使用,绝大多数驱动以模块方式放入硬盘中(/lib/modules/内核版本/kernel/fs)
三、系统认为不经常使用,以模块方式放入硬盘中,默认没有安装,需从新编译内核,加载
四、Linux完全不识别的驱动,需手工安装(驱动厂家提供)
Linux是基于用户身份对系统资源进行管理的操做系统
用户分类UID:用户惟一标示符
超级用户:能够调用一切系统资源
系统用户:不能登陆系统,是给应用程序所需权限(限制权限)
普通用户:权限较小,只能管理本用户的相关信息
用户 ID范围RHEL6.* UID范围RHEL7.*
超级管理员 0 0
系统用户 1-499 1-999
普通用户 500-65535 1000-65535
其中有些特殊用户不遵照这个规则
例:nlsnoboby UID:65534 是系统用户
组分类GID:组惟一标示符
组自己没有分类,是根据该组所对应的用户进行管理确认
初始组:用户建立时所指定的组
附加组:除用户初始组之外加入的组
相关配置文件
/etc/passwd(用户信息文件,共七例)
一、用户名
二、密码站位符:"!!""*"标示密码失效,不能登陆
三、UID
四、GID
五、用户描述
六、家目录
七、登陆shell类型
/bin/bash:能够登陆
/sbin/nologin:不能登陆
/etc/shadow(用户密码文件配置,共九列)
一、用户名
二、加密密码符,"!!""*"标示密码失效,不能登陆
三、最近一次修改密码时间,显示为时间戳,1970.01.01开始 计算,是unix元年
四、能修改密码的时间间隔
五、密码最长有效期
六、密码到期前警告天数
七、密码到期后的宽限天数
八、密码失效时间,为时间戳
九、保留
时间戳转换命令
#时间戳转日期
date -d "1970-01-01 时间戳 days"
#日期转时间戳
计算器
/etc/group(组信息配置文件,共四列)
一、组名
二、密码站位符
三、GID
四、组成员列表,成员之间用","号隔开
/etc/gshadow(组密码文件,共四列)
一、组名
二、组密码
三、组管理员
四、组成员列表
注:密码配置文件在RHEL6.*以前,默认权限为400,在RHEL6.*以后默认权限为000
/etc/skel(用户模板文件,用于添加新建用户家目录下的默认文件)
/etc/default/useradd(是建立用户时调用的文件参数,大部分关于 用户文件的配置)
/etc/login.defs(是建立用户时调用的文件参数,大部分关于密码 文件的配置)
私有组机制
在建立用户时,先建立一个与用户同名的组,将该组做为初始组
公共组机制
先建立一个的组,以后建立的用户的初始组都是该组
加密类型:SHA512:散列模式加密
初始组:建立用户时所指定的第一个组
注:每个用户有且只有一个初始组,并非用户建立的文件属于哪一个组,哪一个组就是初始组
有效组:决定用户建立文件时,文件的所属组
注:newgrp 切换用户的有效组,用户的初始组就是默认的有效组
切换有效组的条件
1. 用户要先加入该组,才能将该组设置为有效组
2. 若事先未加入,则能够经过密码方式加入再设置(提早设置好组密码)
访问控制列表,为单一的用户或者组设置对文件或者目录的独立权限
开启ACL
一、确认文件系统(分区)是否支持ACL
dumpe2fs 分区 | grep acl
二、开启(激活)ACL权限
手动:mount -o remount,acl / #临时生效
自动:a、修改/etc/fstab,在default后天就acl
b、mount -o remount / #永久生效
三、查看ACL
getfacl 文件名(获取文件的ACL权限列表)
四、设置ACL
setfacl -m u:用户名:权限 文件名(增长ACL权限)
setfacl -x u:用户名 文件名(删除ACL权限)
setfacl -b 文件名(清空ACL权限,包括mask)
setfacl -m m:权限(防止acl权限过大)
setfacl -R -m u:用户名:权限 文件名(递归设置)
setfacl -d -m u:用户名:权限 目录名(目录权限继承)
普通用户使用sudo,/etc/passwd其余人权限必须有r权限
受权:将受权的信息记录到配置文件中
visudo:专门用于修改受权配置文件
/etc/sudoers:受权配置文件
配置文件内容:
ALL ALL=(ALL) ALL
被受权者 可管理主机=(受权者身份) 命令位置
例:zhangsan ALL=(root) /sbin/shutdown -r now
sudo验证受权
sudo shutdown -r now(受权命令前须要sudo)
须要普通用户密码
验证成功执行命令(借用root身份)
注: 1)受权时,不能赋予单一命令,须要命令+选项+参数
2)仅受权所须要权限
给组受权须要在受权用户前加%号
passwd命令受权
passwd命令会验证用户UID,若为0,则能够加任何参数
若非0,则不能加参数
受权别名
做用:简化受权记录
例:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping
zhangsan ALL=(root) NETWORKING
EUID:应用程序执行文件所持有的身份
SUID(SetUID)
定义:在命令的全部者位置有s权限
做用:一个普通用户在执行具备SUID权限的命令时,该命令的执行者会临时变动为命令的全部者
注:
1)普通用户须要对文件有执行权限
2)SUID只能设置在执行文件或脚本上
SGID(SetGID)
定义:在命令所属组位置有s权限
做用:
针对文件
一个普通用户在执行具备SGID权限的命令时,该用户会临时加入到命令的所属组内,以组成员的身份查看文件
针对目录
一个普通用户在一个具备SGID权限的目录下建立文件时,该用户的有效组临时变动为了该目录的所属组·
SBIT(STICKY BIT)
定义:在其余人位置具备权限
做用:黏着位:在具备SBIT权限的目录下,普通用户只能删除本身建立的文件(root除外)
设置特殊权限
chmod ugo +- s file
chmod 4755 file #suid(可执行文件)
chmod 2755 file #sgid(可执行文件&目录)
chmod 1755 file #sbit(目录)
umask 0022 0002
第一个位置的 0 表明该数值是一个八进制的数值
SUID : 4755
取消 : 00755
文件系统属性
格式:chattr [+-] [选项] 文件或目录
选项:
-i
对文件设置i属性,那么不容许对文件进行删除、更名,也不能添加和修改数据
对目录设置i属性,那么只能修改目录下文件的数据,但不容许创建和删除文件
-a
对文件设置a属性,那么只能在文件中增长数据,可是不能删除也不能修改数据
对目录设置a属性,那么只容许在目录中创建和修改文件,可是不容许删除
-e
Linux中绝大多数的文件都默认拥有e属性。表示该文件是使用ext文件系统进行存储的,并且不能使用"chattr -e"命令取消e属性
查看文件系统属性
格式:lsattr 选项 文件名
选项:
-a 显示全部文件和目录(显示隐藏文件)
-d 若目标是目录,仅列出目录自己属性
磁盘管理
1. 开机-加电自检
2. 主板上的CMOS芯片的BIOS程序-加载到内存中运行
3. 根据BIOS程序所记录的启动设备的顺序进行引导启动设备(U盘、硬盘、光盘)
4. 加载硬盘的第一个扇区(MBR)-加载到内存中运行
5. 经过引导记录引导操做系统
数据存储:
表示层:文件名
逻辑层:文件系统(data-block:4k) super-block
物理层:扇区(512byte) 分区表(MBR-64byte)
文件系统:
super block:超级块记录每一个分区的block的大小、数量;块位图(已使用和未使用的inode和block的数量);文件系统挂载时间,最后修改时间,最近检查时间
data block:数据块保存真实数据的位置,block的大小和数量在格式化成文件系统时已经固定,除非从新格式化,不然不能修改。单个文件占用小于一个block的大小时,单独占用一个block,剩余空间不会被利用
MBR(主引导记录)512byte
1. 主引导程序(Boot Loader):446byte
安装操做系统后,446字节内就写入了引导程序
2. 分区表:64byte
每一个分区的信息:16byte进行记录
最多能记录几个分区:4个分区(主+拓<=4)
拓展分区再划分的逻辑分区不记录在此位置,单独记录在一个扇区中
3. 有效标识符:2byte
55AAH表明着MBR分区表是有效的,GPT分区表(18EB)
GPT:全局惟一标示分区表,又叫giud
LBA:逻辑区块地址,寻址方式LBA0,LBA1,LBA2.....
LBA0:存储MBR分区表和GPT指针,由于兼容性
LBA1:存储硬盘总大小,以及GPT分区表信息,每一个GPT分区表信息占128字节
LBA2-LBA33:每一个分区信息存放位置共32个扇区,大小是32*512=16384,16384/128=128个分区
分区(MBR分区):
添加新硬盘不重启
ls /sys/class/scsi_host/ #查看主机总线号
依次扫描总线号
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
fdisk -l 磁盘名 #查看分区信息
fdisk 磁盘名 #进入分区交互模式
m 获取帮助:显示可执行的命令
p 查看分区状态,分区表
n 建立分区
主:n--p--1--起始点--结束点
拓:n--e--2--起始点--结束点
逻辑:n--l--起始点--结束点
d 删除分区
q 退出不保存
w 保存并退出
格式化(写入文件系统类型):
mkfs -t ext4 /dev/sdb1
mke2fs -t ext3 -b4096 -i16384 设备分区
mkfs.* 设备分区
挂载分区使用
mount /dev/sdb1 iso/
df -ahT #查看分区文件系统,只有挂载的才能查看
报错问题
分区表被占用
partprobe 从新加载分区表(强制-先解锁分区表)
解决文件系统配置问题
若/etc/fstab文件错误,没法开机,根据提示输入root密码
mount -o remount,rw / #从新挂载rw权限
修改错误内容
GPT分区步骤
parted 设备 #进入分区交互模式
p #查看分区状态,分区表
mkladel gpt/msdos #更改分区表类型
mkpart #建立分区
rm #删除分区
quit #退出,并执行mkfs格式化分区
注:
一、parted中执行都是当即生效
二、parted自带mkfs命令版本过低,没法写入ext2以上文件系统
三、GPT不支持fdisk查看,须要直接进分区模式查看
swap分区步骤
fdisk分出一个分区
fdisk中执行t命令更改分区类型,83普通,82swap
保存退出,执行mkswap格式化分区
swapon 启用swap分区(临时)
添加:/etc/fstab 永久更改,开机启动
/dev/sdb1 swap swap defaults 0 0
注:swap超过8G就没什么意义了
为何要学习shell脚本?
将较为复杂的实验操做流程和重复度很高的实验流程 变为脚本执行
提升执行效率、减小了错误的发生(遗漏、单词错误)
将本来人手动操做的流程,写成脚本,按照人执行的顺序自动执行
将数值、名称、命令的结果、文本内容、等传递到脚本内(变量)
shell的表现形式:
history
-c #清空历史命令(清空缓存;默认:1000条)
-w #将缓存中的历史命令保存到配置文件中
~/.bash_history #永久保存历史命令(默认:1000条)
! 数值 #调用指定条数的历史命令
↑↓ 光标键 #调用原来执行过的历史命令
!关键词 #调用最近一次以此关键词开头的历史命令
!! #执行上一次命令
命令别名
查看:alias
设置:alias 别名='真实命令 -选项'
永久保存:
单个用户:~/.bashrc
全部用户:/etc/bashrc
须要从新加载配置文件别名才能马上生效:
source ~/.bashrc
命令执行顺序:
1. /bin/ls
2. ls='ls --color=auto'
3. shell 内置命令
4. 根据环境变量查询命令所在位置(PATH) /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin
缓存:系统自动为已存在的命令设置了缓存,当目录发生变化时,缓存和实际位置不一致,致使找不到命令
标准输入(键盘): /dev/stdin [设备标识号:0] 经过键盘向服务器发送指令
标准正确输出: /dev/stdout [设备标识号:1] ls命令输出的结果
标准错误输出: /dev/stderr [设备标识号:2] lss命令输出的结果
模拟标准输入:echo "123456" | passwd --stdin username 非交互式修改密码
1. 输入重定向
① "<"
wc < 统计行数 (常规写法:wc abc)
cpio -idvcu < *.cpio
patch -pin < *patch
② " << "
# wc << abc
> aside 7y8 hbm,.dd k,2 '
> asked 'd 2 dazed '
> abc
2 10 44
wc "<<" abc 统计指定关键词范围内的信息标准输出(显示器)
2. 输出重定向
定义:将本来打印到显示器上的信息,写入指定的文本或设备中(打印机)
① > 覆盖式写入
② >> 追加式写入
ll > a.txt 会将结果写入文本
lll > b.txt 不会将报错写入文本
经常使用方式:
ifconfig eth0 192.168.88.110/24 &> /dev/null
#将正确和错误输出都传到/dev/null
ifconfig eth0 192.168.88.110/24 2> /dev/null
#将错误输出都传到/dev/null
实际应用:
ifconfig eth0 192.168.88.110/24 1> /dev/null
#将正确输出都传到/dev/null
ls >/dev/null 2>&1
#将正确和错误输出都传到/dev/null,效率更高
echo $?
ifconfig eth0 192.168.88.110/24
#若结果不为0,则再执行一次,打印在屏幕上
选项链接符:
-a :find /etc -name "init*" -a -type f
-o :find /etc -size -4K -o -size +10M 不取从4K到10M大小的文件
命令链接符:
-exec :find /etc -name "init*" -a -type f -exec ls -l {} \;
-ok :find /tmp -name "init*" -a -type f -ok rm -rf {} \;
| :ls -l /etc/ | more 分页显示/etc/目录下的全部文件的长格式信息
echo "--help" | cat
echo "--help" |xargs cat
#将echo --help 当作cat命令的选项执行
find /etc -name "init*" -a -type f |xargs ls -l
#将find所查询到的命令结果(任务流方式)使用|xargs传递给后面的命令
; :无逻辑关系链接符
&& :有逻辑关系,符号前的命令必须执行成功,才执行符号后的命令
|| :有逻辑关系,符号前的命令若执行成功,则不执行符号后的命令
符号前的命令若执行不成功,则执行符号后的命令
[ "$a" == "abc" ] && echo yes || echo no
当a=abc时,输出yes,不然,输出no
grep 提取包含关键词的行 (行提取命令)
grep "关键词" 文本文件或文本流
正则表达式
-An 在关键词行向下显示n行
-Bn 在关键词行向上显示n行
find 在指定范围(目录)内查询符合条件的文件名&路径
-name
-type
-user -group
-nouser 查询没有全部者的文件
-[acm]time -[acm]min
-size
-perm
-a -o
默认精确查询 -name abc.txt
模糊查询:通配符
-name "*abc.txt" 用到通配符的须要用双引号引用
echo [选项] [输出内容]
-e 支持反斜线控制的字符转换
-n 取消输出后行尾的换行符号
通配符
在进行字符匹配时,实现模糊匹配,find ls cp rm默认匹配的对象是具体的操做对象(精确匹配)
* 匹配任意多个任意字符
? 匹配 一个 任意字符
[] 在指定范围内匹配任意一个字符
[a-z] [A-Z] [0-9] 连续的范围
[aoe] 不连续的范围
[^] 取反,匹配除了括号内的全部字符
Bash特殊符号
1 |
'' |
其内的只是一个普通字符,原来的特殊含义失效 |
2 |
"" |
其内的几乎是全部字符为一个普通字符,原来的特殊含义失效 |
3 |
`` |
调用指定命令的结果 |
4 |
$() |
调用指定命令的结果 |
5 |
() |
其内执行的命令都在新开的子shell中执行 |
6 |
[] |
条件判断公式 |
7 |
{} |
其内执行的全部命令,与当前shell中无异,但格式更严谨 |
8 |
# |
注释 |
9 |
$ |
在bash shell中调用变量 |
10 |
\ |
针对命令的转意符 |
文字颜色 |
30黑 |
31红 |
32 绿 |
33黄 |
34蓝 |
35 紫 |
36青 |
37白 |
底纹颜色 |
40黑 |
41红 |
42 绿 |
43黄 |
44蓝 |
45 紫 |
46青 |
47白 |
特殊显示 |
0关闭 |
1高亮 |
4下划线 |
5闪烁 |
7 反显 |
8 消影 |
颜色设置:如 \e[1;41;33m \e[0m
'' 全部被单引号所引用的字符,都只是一个普通字符,原来的特殊含义失效
echo '$PATH' $在单引号中没有调用变量的功能了
"" 几乎是全部被双引号引用的字符,都只是普通字符,原来的特殊含义失效,除($ \ ``)
echo "$PATH" $在双引号中被调用时,是有效的
`` 和 $() 调用指定命令的结果
time=$(date)
abc=`ls *`
() 全部在小括号内执行的命令,都是在新开启的子shell中执行的,不会影响当前shell,当小括号内的命令执行完成时,新开启的子shell自动结束消失
{} 全部在大括号中执行的命令,都是在当前shell中执行的,与不加括号无异。大括号要严格遵循格式: { name=lisi;echo $name;}
a、大括号的左括号和第一条命令之间须要留一个空格
b、大括号内最后一条命令结尾须要使用;结束
# { name=lisi;echo $name;}
# (name=zhangsan;echo $name) 在子shell中执行
[] 条件判断公式
① [ "$abc" != "10" ] #在进行 == 和 != 进行判断时,必须遵循如下a、b两个原则
# == 和 != 是用来判断字符和字符串,不是用来判断数值的。
a、括号两侧必须留有一个空格
b、判断符号两侧必须留有空格
② [ -f /etc/bashrc ]
-f 判断指定对象是否存在,判断该文件是不是普通文件
[ -f /etc/bashrc ] && source /etc/bashrc
# 在shell中是注释的意思,在文本内不生效,做为备注和注解
拓展:并非全部的注释都是不生效的,有些注释表明默认就生效(/etc/ssh/sshd_config)
;
//
<!-- -->
/* */
$ 调用指定变量的值,在bash shell中是这样的,其余shell中不必定
echo "$PATH"
\ 将全部的特殊字符和字符串转义为普通字符和字符串(针对命令)
(1) 变量的定义规范:
1. 字母、数字、下划线(不能以数字开头、不能有空格、不能使用除下划线之外的符号)
2. 赋值符号:= (等号左侧不能有空格)
a、变量的名称不能带空格
b、变量的值能够有空格(带空格的必须使用双引号,引用做为一个总体)
3. 变量的值:无特殊要求(有空格使用双引号)
4. 变量的类型有多种,某些变量要求变量名必须是大写的!(环境变量)
(2) 变量的分类:
1. 用户自定义变量
声明:x=100
调用:echo $x
set #查看当前shell中全部生效了的变量
-u #设置后,再调用未声明变量时,会报错。
-x #设置后,执行命令时,每次都会先把命令打印一遍,而后再输出结果
2. 环境变量
根据登陆用户身份所设置的变量就叫环境变量(值随着用户身份变化)
使用 export 命令声明的变量就叫环境变量
如:export CON
PATH="$PATH:/usr/local/apache2/bin"
/etc/bashrc /etc/profile 针对全部用户
~/.bashrc ~/.bash_profile 针对单个用户
source file
LOGNAME= 当前用户名
PATH= 保存了命令所在位置的变量
PS1= 决定了命令提示符格式的变量
LANG= 决定了当前shell中的语系类型的变量
echo $LANG 当前shell中的语系变量
默认语系变量/etc/sysconfig/i18n #默认加载的语系变量
3. 位置参数变量(变量名不能够修改)
按照预设位置将指定位置的值传递到脚本内等待被处理
$n:n为数字,$0表明命令自己,$1-$9表明带一个到第九个参数,大于10要用大括号,如${10}
$*:表明命令行中全部的参数,但把全部的参数当作一个总体
$@:表明命令行中全部的参数,但把每一个参数区分对待
$#:表明命令行中全部参数的个数
按照预设位置将指定位置的值传递到脚本内等待被处理
#!/bin/bash
x=0 #定义一个变量初始值为0,并设置变量自增幅度为1
for a in "$*" #使用for循环将$*或$@的值赋给变量a,
do
let x+=1 #变量自增,幅度为1,实现指定第几个参数
echo "第$x个参数的值是$a"
done
echo "一共有$#个参数"
4. 预约义变量(变量名不能够修改)
echo $? #获取上一条命令的返回值(0:正常 非0:报错)
exit 定义命令执行后的返回值是多少,经过返回值判断故障点
[ -f /etc/ssh/sshd_config ] || exit 6
# -f :判断该文件是否存在且为普通文件
$$ 当前进程的进程号
$! 最后一个后台的进程号
(3) 变量声明
命令:declare [+/-] [选项] 变量
- : 给变量设定类型
+ : 取消变量的类型
-a : 将变量声明成数组型
-i : 将变量声明成整数型
-r : 将变量声明成只读(变量值不能修改,也不能删除,更不能取消只读选项)
-x : 将变量声明成环境变量
-p : 显示指定变量的类型及内容
read 获取键盘输入(变量赋值)
多个变量时,会依次取值,变量不够时,最后一个变量会取全部值。
read -p "显示的提示信息" 变量
$(($a+$b))
$[$a+$b]
let xx=$a+$b let数值运算
declare -i c=$a+$b 声明变量为整型,进行数值运算
expr: 数值运算,该公式会自动将数字识别为数值
expr $a + $b
#运算符两侧必须有空格
#注意变量自增的时间点(程序执行前自增 或 程序执行后自增)
正则表达式
(1) 正则表达式:
* |
前一个字符任意屡次(*前边必须有一个字符) |
基础正则表达式 |
. |
匹配任意一个字符 |
基础正则表达式 |
^ |
限制行首 |
基础正则表达式 |
$ |
限制行尾 |
基础正则表达式 |
[] |
其内任意一个字符,[A-Za-z][0-9][^0-9][abc][a-cdf] |
基础正则表达式 |
\{n\} |
前一个字符重复n次 |
基础正则表达式 |
\{,n\} |
前一个字符重复0到n次 |
基础正则表达式 |
\{n,\} |
前一个字符至少重复n次及以上 |
基础正则表达式 |
\{n,m\} |
前一个字符重复n次以上m次如下 |
基础正则表达式 |
+ |
前一个字符一次或屡次 |
egrep |
? |
前一个字符0次或一次 |
egrep |
| |
分支符号(或者) |
egrep |
() |
其内为一个总体匹配一个字符, |
egrep |
注:当用到egrep时"\{\}"中的反斜杠取消
(2) 基础正则表达式:
* 匹配前一个字符任意屡次(连续)
*前一个字符连续出现了多少次(*前边必须有一个字符)
. 匹配任意一个字符(除去换行符之外)
若某文本要过滤包含. 的行,则须要使用转义符将.的特殊含义取消
grep "\." /sh/passwd
^ 匹配行首
$ 匹配行尾
grep "\.$" /sh/passwd #过滤以.结尾的行
grep -v "^$" /sh/passwd #取消文本的空白行
[] 匹配括号内的任意一个字符
[0-9] [a-zA-Z] [^0-9] #尽可能不要使用[a-Z]
注:除了链接符 - 之外,不可使用其余符号
\{n\} # 过滤必须出现指定次数的行
\{n,\}
# grep "a\{0,\}" passwd | wc -l
# grep "a*" passwd | wc -l
\{,n\}
\{n,m\}
# grep "o\{2,3\}" /sh/passwd
(3) 扩展正则表达式:
指定匹配的前一个字符出现的次数(相似于*)
在使用egrep 或 grep -E 时,不须要使用转义符
+ 匹配前一个字符一次或任意屡次
? 匹配前一个字符0次或1次
| 分支符号(或者)
(4) 正则表达式过滤手机号码和ip
1. 中国手机号码:
以1开头,11位连续的数字
grep "1[0-9]\{10\}" sj.txt
每行中只有手机号的:
grep "^1[0-9]\{10\}$" sj.txt
中国联通:130、13一、13二、 14五、 15五、15六、 18五、186
拆分:
13[012][0-9]{8}
145[0-9]{8}
1[58][56][0-9]{8}
组装:
1(3[012]|45|[58][56])[0-9]{8}
2.IP范围0-255
拆分(怎么容易写正则匹配怎么拆分):
0-9 [0-9]
10-99 [1-9][0-9]
100-199 1[0-9][0-9]
200-249 2[0-4][0-9]
250-255 25[0-5]
组装:egrep "[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]" b
过滤IP
^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
cut 列提取命令(行操做命令:逐行提取指定列)
默认的分隔符是:tab ;还能够手动指定分割符:(空格、冒号、百分号、@)
-f #指定提取的列号
-d 分隔符 #指定分割符
-c #坐标提取,字符范围:不依赖分割符来分割,而是经过字符范围进行字段提取("-m"表示从第一个字符提取到第m个,"n-m"表示从第n提取到第m个字符,"n-"表示从第n个字符开始提取到结尾。
提取2到10列中的字符,当使用-c时,则不能用-d
cut -c "2-10" /etc/passwd
提取以":"做为分隔符的第一列
cut -d ":" -f 1 /etc/passwd
awk #行提取,并处理
awk为列提取&行提取 (逐行操做)
awk '条件{动做}' 参数
命令 | awk '条件{动做}'
动做:
print 标准输出 (自动套用原格式)
printf 标准格式化输出 (取消全部的格式输出;能够人为指定输出格式)
\t #tab
\n #换行
awk 处理下列文本时的处理流程:
ID NAME AGE SEX
1 lanc 18 man
2 sans 19 man
3 sc 38 oman
a) 读取该文本的第一行(逐行)
根据第一行中 列的数量 设置位置参数变量
读完第一行后,$0-$4都有了本身的值
$0 当前的整行
$1 第一个列的值
$n 第n个列的值
b) 当第一行处理完成后,去查看'条件{动做}'
使用printf 输出符合条件的$n,而且不显示"%"
do -h | grip "\/$" | awk '{printf $5"\n"}' | cut -d "%" -f 1
指定的分隔符号
awk默认识别的分隔符:tab 和 空格
打印/etc/passwd文件中第一列和第七列:
awk -F ":" '{printf $1"\t"$7"\n"}' /etc/passwd
awk 'BEGIN{FS=":"}{printf $1"\t"$7"\n"}' /etc/passwd
BEGIN 在未读取文本以前 就先执行的条件和动做,指定该文件中的分隔符为";"。
条件设置
awk的条件
BEGIN和END 条件只执行一次!
awk保留字 |
BEGIN |
在未读取文本以前就先执行的条件和动做 |
END |
在处理文本完成后,再执行的命令 |
|
关 系 运 算 符 |
> |
大于 |
< |
小于 |
|
>= |
大于等于 |
|
<= |
小于等于 |
|
== |
等于,判断相等 |
|
!= |
不等于 |
|
A~B |
A包含B |
|
A!~B |
A不包含B |
|
正则 |
/正则/ |
在"//"中支持正则表达式 |
打印文件中以":"分隔的第一列和第七列
# awk 'BEGIN{FS=":"}{printf $1"\t"$7"\n"}' /etc/passwd
打印文件中第一列,并在最后打印"OK"字符
# awk 'END{printf "ok\n" }{printf $1"\n"}' /etc./passwd
打印文件中以":"分隔的第一列和第七列,并在最后打印"OK"字符
# awk 'BEGIN{FS=":"}END{printf "ok\n" }{printf $1"\t"$7"\n"}' /etc./passwd
打印file文件中第二列中包含"chao"且第三列大于"35"的值
# awk '$2~chao{动做1} $3>35{动做2}' file
两个条件动做之间用空格做为分隔符
# awk '$2>30{动做1;动做2;动做3}' file
一个条件多个动做时,使用";"分隔
变量:
awk内置变量 |
做用 |
$0 |
表明awk读入的一整行数据 |
$n |
表明awk读入的当前行的第n列数据 |
NR |
表明当前awk正在处理的行的行号 |
NF |
表明当前awk读取数据总字段数(列) |
FS |
用来声明awk的分隔符,如BEGIN{FS=":"} |
从第二行开始提取
# awk 'NR>1{printf $3"\n"}'
awk NF 变量的特殊使用方式:
# head -3 /etc./passwd|awk -F ":" '{printf $(NF=5)"\n"}'
# head -3 /etc./passwd|awk -F ":" '{printf $(NF-2)"\n"}'
awk编程
在awk编程中,由于命令语句很是长,输入格式时须要注意如下内容:
多个条件{动做}能够用空格分割,也能够用回车分割。
在一个动做中,若是须要执行多个命令,须要用";"分割,或用回车分割。
在awk中,变量的赋值与调用都不须要加入"$"符。
条件中判断两个值是否相同,使用"==",以便和变量赋值进行区分。
Sed #文本修改
非交互式文本修改工具(提取、替换、删除、新增)
选项:
-n sed命令会把全部数据都输出到屏幕,-n会把通过sed命令处理的行打印。
sed -n '2p'文件名 #显示第二行的信息
-e :容许对输入数据应用多条sed命令编辑。
-f : 脚本文件名:从sed脚本中读入sed操做。和awk命令的-f很是相似。
-r :在sed中支持扩展正则表达式。
-i :用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
# sed -i '2c No such person' 文件名
动做:
p :打印,输出指定的行。
打印的二行数据
# sed '2p' file
a :在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾须要用"\"表明数据未完结。
# sed '2a new' file
i :在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾须要用"\"表明数据未完结。
# sed '2i new' file
c :替换
整行替换,c后面的字符替换原行,替换多行时,除最后一行外,每行末尾需用"\"。
# sed '2c No such person' file
替换含有IPADDR=的行为IPADDR=10.10.10.100
# sed -i "s/IPADDR=.*/IPADDR=10.10.10.100/g" file
d :删除指定的行。
删除2到4行数据
# sed '2,4d' file
删除行首含有'#'号的行
# sed '/^#/d' file
e :用一个字符串替换另一个字符串。格式为"行范围s/ 旧字串/新字串/g"
替换第n行的old为new
# sed 'ns/old/new/g' file n表明第几行
其中"g"是将整行全部的都替换,若不加,只替换第一个old
sed 要进行多行操做时,只能经过-e 写多条操做语句,用";"或回车分隔。
如:删除文件中空行和注释
# sed -i -e '/^$/d;/^#/d' config_file
Sort 排序命令
sort [] 文件名
-f 忽略大小写
-b 忽略每行前的空白部分
-n 以数值型进行排序,默认使用字符串类型排序
-r 反向排序
-u 删除重复行(=下面的uniq)
-t 指定分隔符,默认分割符是制表符
-k n[,m] 按照指定字段范围排序,从n字段开始到m字段结束。
sort 命令默认使用每行开头第一个字符进行排序
以":"为分隔符。对第三列进行数值排序
sort -n -t ":" -k 3 /etc/passwd
假如 要进行反向排序则须要加-r 选项按照指定的排序字段进行排序,使用-t 指定分割符 , 而且使用-k 指定段号,加上-n 以后成为了数值排序。指定范围时咱们能够写 –k 3,5 也能够写3,3 == 3
取消重复行uniq
uniq用来取消重复行,与sort –u 是同样的,格式:
uniq [] 文件名
-i 忽略大小写
-c 在行首显示出现的次数
-d 仅显示显示重复行
-u 仅显示不重复的行
须要注意的是,当重复行不连续时,uniq是不生效的,须要先排序,再执行
提取文件中的IP,排序并打印访问量最高的前10行
awk -F " " '{print $1}' /root/sh/logfile.log | sort | uniq -c | sort -nr | head
按照文件类型进行判断
-b |
判断文件是否存在,且是否为块设备文件 |
-c |
判断文件是否存在,且是否为字符设备块文件 |
-d |
判断文件是否存在,且是否为目录文件 |
-e |
判断文件是否存在,存在为真 |
-f |
判断文件是否存在,且是否为普通文件 |
-L |
判断文件是否存在,且是否为软链接文件 |
-p |
判断文件是否存在,且是否为管道文件 |
-s |
判断文件是否存在,且是否为非空 |
-S |
判断文件是否存在,且是否为套接字文件 |
按照文件权限进行判断
-r |
判断文件是否存在,且有r权限 |
-w |
判断文件是否存在,且有w权限 |
-x |
判断文件是否存在,且有x权限 |
-u |
判断文件是否存在,且有SUID权限 |
-g |
判断文件是否存在,且有SGID权限 |
-k |
判断文件是否存在,且有SBIT权限 |
两个文件之间进行比较
a -nt b |
判断a文件的修改是否比b文件新 |
a -ot b |
判断a文件的修改是否比b文件旧 |
a -ef b |
判断a文件和b文件的Inode号是否同样 |
字符串的判断
-z |
判断字符串是否为空(变量) |
-n |
判断字符串是否为非空(变量) |
a == b |
判断字符串a和b是否相等 |
a !== b |
判断字符串a和b是否不相等相等 |
两个整数之间进行比较
[ a -eq b ] |
a=b |
[ a -ne b ] |
a!=b |
[ a -gt b ] |
a>b |
[ a -lt b ] |
a<b |
[ a -ge b ] |
a>=b |
[ a -le b ] |
a<=b |
多重条件判断
判断1 -a 判断2 |
逻辑与,判断1和判断2,都成立为真 |
判断1 -o 判断2 |
逻辑或,判断1和判断2,有一个成立为真 |
!判断 |
逻辑非,取反原判断式, [ ! 2 -eq 3 ] |
if [];then
语句
fi
if [];then
语句
else
语句
fi
if [];then
语句
elif
语句
elif
语句
....
else
语句
fi
for i in 资源池
do
语句
done
for ((;;))
do
语句
done
while [](成立循环)
do
语句
done
nutil [] (不成立循环)
do
语句
done
while true(无限循环)
do
语句
done
while : (无限循环)
do
....
done
exit 退出脚本
break 退出循环
contnue 结束当次循环
shell计算:
echo $(seq 1 10) 取1-10范围内的整数(可直接应用于for的循环结构中)
浮点运算
c=$(echo "5.01-4*2.0"|bc)
echo $c
-2.99
c=$(awk 'BEGIN{print 7.01*5-4.01 }')
echo $c
31.04
数组
数组声明:
declare -a abc
abc[0]=1,abc[1]=2
unset abc
unset abc[1]
数组赋值:
a、
abc=(1 2 3) a[0]=1;a[1]=2;a[2]=3
b、
a="1 2 3"
abc=($a)
调用数组全部值:
echo ${abc[*]}
echo ${abc[@]}
数组长度获取:
数组长度(元素数=值的个数):
${#abc[@]}
元素长度:
echo ${abc[1]} | wc -L
echo -n ${abc[1]} | wc -L
#去掉换行符再统计
数组遍历:
abc=(1 2 3)
a=0
for i in ${abc[@]}
do
echo "下标为$a的元素的值为:$(i)"
let a++
done
数组元素修改:
abc=(1 2 3)
abc[3]=10
abc=(1 2 3)
bcd=(${abc[*]} 4)
echo $(bcd[*])
数组切片:
abc=(1 2 3 4 5 6 7)
${abc[@]}
${abc[@]:1}
#从下标为1的位置开启取值,取全部
${abc[@]::3}
#从下标为0的位置连续取3个值
${abc[@]:2:3}
#从下标为2的位置连续取3个值
${abc[@]:(-2):2}
#从倒数第二个下标位连续取2个值
bcd=(${abc[@]:(-2):2})
#将以前的处理结果赋值给新的数组变量
元素切片:
abc=(zhangsan lisi laowang laosong)
${abc[0]}
##取第一个元素的全部字符
${abc[0]:1}
#从第一个元素的下标为1位置开始,取剩余全部字符
${abc[0]::3}
#从第一个元素的下标为0位置开始,连续取三个字符串
${abc[0]:2:3}
#从第一个元素的下标为2位置开始,连续取三个字符串
数组替换:
abc=(one two three four)
${abc[@]/e/E}
#每一个被匹配元素只替换一次
${abc[@]//e/E}
#每一个被匹配元素替换屡次
${abc[@]/e/}
#每一个被匹配元素只删除一个字符
${abc[@]//e/}
#每一个被匹配元素删除多个字符
abc=(zhangsan lisi laowang laosong)
${abc[0]/#z/Z}
#将数组内第一个元素的首字符z替换成Z
${abc[0]/%n/N}
#将数组内第一个元素的尾字符n替换成N
#若想实现每个都智能替换,要使用很复杂的循环,暂不建议如今编写
将1个字符串拆分为多个字符串(sed替换时,有空格)
a=`echo 2018-04-28_12:15:30_ABC.log |awk -F "." '{printf $1}'| sed -r 's/[-_:]/ /g' | tr -d "[a-zA-Z]"`
abc=(${a})
for i in ${abc[@]}
do
echo $i
done
利用数组求最大值
a=(34 78 3 95 62 59 100)
max=${a[0]}
len=${#a[@]}
for ((i=1;i<$len;i++))
do
if [[ ${a[i]} -gt ${max} ]]
then
max=${a[i]}
fi
done
echo "数组中最大值为:$max"
字符串反转输出:
(a=$(seq 1 9);echo $a|rev)
定义:限制用户和组在指定分区上的使用空间和文件数目(inode号数量)
实验规划
1. 建立足够大的分区
根据用户额度的需求建立分区(10G)
分区、格式化、挂载(/movie)
2. 建立用户和组
用户要指定thot做为初始组
[root@localhost ~]# groupadd thot
[root@localhost ~]# useradd -g thot cj
[root@localhost ~]# useradd -g thot bd
[root@localhost ~]# useradd -g thot xz
3. 配额的规划
thot 软:400M 硬:500M 软:8 硬:15
cj 软:40M 硬:50M 软:6 硬:10
bd 软:200M 硬:250M 软:4 硬:8
xz 软:200M 硬:250M 软:4 硬:8
实验流程
1. 检查操做系统是否支持磁盘配额
grep "CONFIG_QUOTA" /boot/config-*****
CONFIG_QUOTA=Y #若查询结果中为y证实支持配额
2. 查看配额相关设置工具是否安装
rpm -q quota #验证quota是否安装
3. 分区的建立:
建立足够大小的分区
建立用户和组:
建立用户时指定thot做为初始组
4. 开启磁盘配额
vim /etc/fstab #自动挂载
/dev/sdb1 /movie ext4 default,usrquota,grpquota,acl 0 0
mount -a #从新加载/etc/fstab文件,使新增的挂载生效
#若以前已经手动挂载了/dev/sdb1,则在执行mount -a 以前先卸载掉以前的挂载
验证是否挂载成功:mount
/dev/sdb1 on /movie type ext4 (rw,usrquota,grpquota,acl)
5. 生成磁盘配额配置文件 #必须先关闭SELinux!!!!!!!!
quotacheck -avug
-a 自动扫描/etc/mtab,根据挂载属性,为全部开启了磁盘配额的分区建立配额文件
-v 显示过程
-u 建立用户配置文件
-g 建立组配置文件
-c 清除原配置文件,生成新的配置文件
验证是否生成配置文件的方式:
在指定分区的挂载点下:是否生成下列的两个文件
aquota.group
aquota.user
#必须先关闭SELinux!!!!!!!
6. 编辑配置文件,写入限制(默认单位是K,可使用K,M,G,T)
edquota
-u 用户名 #给指定用户设置配额
-g 组名 #给指定组设置配额
-t #设置宽限天数
-p #将已设置的额度复制给指定用户
edquota -p bd -u xz
7. 启用设置好的配额
quotaon
-avug #启用配额
quotaoff
-avug #关闭配额
8. 查看设置的磁盘配额的额度(查看)
quota
-uvs 用户名 #查看指定用户的配额(全部磁盘对此用户的限制)
-gvs 组名 #查看指定组的配额
repquota
-ugvs 分区名 #查看指定分区上,限制了哪些用户和组,以及额度
9. 验证额度是否生效
使用普通用户执行验证命令
dd if=/dev/zero of=/movie/* bs=1M count=40
dd if=数据来源地址
of=数据目标地址
bs=每次写入指定目标时,所写入的块的大小(最好用4096-保证和block大小一致)
count=所写入的块的个数
/dev/zero :拥有无限个0的设备
/dev/null :黑洞,能够接收任何数据(不限大小)回收站
/dev/urandom :随机设备文件,输出随机字符
1. 数据销毁:
dd if=/dev/zero of=/dev/sdb
2. 测试磁盘的读写效率
dd if=/dev/zero of=/movie/aaa bs=4096 count=512 #测试写入效率
dd if=/movie/aaa of=/dev/null bs=4096 #测试读取速度
make >> /dev/null
echo $?
将命令的执行过程重定向到/dev/null中,简化执行过程当中的显示
磁盘阵列分类:一是外接式磁盘阵列柜、二是内接式磁盘阵列卡,三是利用软件来仿真
Raid(磁盘阵列)
Raid 0 带区卷
Raid 1 镜像卷
Raid 5 在每块硬盘中分出一个区,写入奇偶校验值
Raid 10 先作镜像卷,再作带区卷
Raid 01 先作带区卷,再作镜像卷
硬件Raid才有实际用途,软Raid没有实际用途(可否开机问题)
卷名 磁盘数量 硬盘容量 动态扩容 磁盘容错 速度
简单卷 只能1块 / 用于 不支持 /
跨区卷 至少2块 能够不一致 用于 不支持 /
带区卷 至少2块 必须一致 / 不支持 最快
镜像卷 只能2块 必须一致 利用率50% 支持 最慢
Raid 5 至少3块 必须一致 利用率N-1 支持 较快
raid 10
基础:/dev/sdb /dev/sdc /dev/sdd /dev/sde
热备:/dev/sdf /dev/sdg
mdadm -Cv 逻辑磁盘名称(md*) -l10 -n 基础磁盘(4个) -x 热备(2)
mdadm -S /dev/md127 #中止运行raid
mdadm --zero-superblock /dev/sdb #清空raid数据
mdadm -sD 设备名 #查看raid信息
mdadm -D 设备名 #查看更详细信息
mdadm /dev/md127 -f 设备名 #标记某块磁盘损坏
热备磁盘
全局热备:对阵本服务器上的全部raid阵列进行热备
局部热备:针对指定的raid阵列进行热备
定义:融合成一个或几个大的虚拟磁盘存储池,按照咱们的需求去存储池划分空间来使用
物理卷(PV,Physical Volume):由磁盘或分区转化而成
卷组(VG,Volume Group):将多个物理卷组合在一块儿组成了卷组
格式:vgcreate 选项 卷组名 物理卷名(能够写多个,空格分开)
-s 大小:指定VG的PE大小
格式:vgextend 卷组名 物理卷名
格式:vgreduce 卷组名 物理卷名
vgreduce –a 卷组
#删除指定卷组内全部空的物理卷
逻辑卷(LV,Logical Volume):把卷组理解为硬盘的话,那么咱们的逻辑卷则是硬盘上的分区,逻辑卷能够进行格式化,存储数据
格式:lvcreate 选项 -n 逻辑卷名 卷组名
-L 容量:指定建立的逻辑卷大小,单位:MB,GB,TB等
-l(小) 个数:按照PE个数来指定逻辑卷大小
-n 逻辑卷名:指定逻辑卷叫什么名
注:由于逻辑卷至关因而分区,因此须要进行格式化和挂载才能使用,及自启动
注:修改lv及文件系统的大小,必须先将lv及文件系统卸载(umount)
lvextend -L +10G /dev/testvg/testlv #先增长lv的大小
resize2fs -f /dev/testvg/testlv 30G #再修改文件系统的大小
注:减小lv空间的操做是有风险的,操做以前必定要作好备份,以避免数据丢失。
e2fsck -f /dev/vg/lv #检查文件系统
resize2fs /dev/vg/lv newsize #减小后文件系统大小
lvreduce -L newsize /dev/vg/lv #减小后lv大小
物理扩展(PE,Physical Extend):PE卷组的最小存储单元,PE所在的位置是VG卷组,即硬盘上,那么咱们能够把PE理解为硬盘上的扇区,默认是4MB,可自由配置
lvextend -L 15G /dev/clustervg/clusterlv #从10G增长到15G
服务的分类(CentOS 6.*):
RPM安装的服务:独立式服务:在/etc/init.d/有独立脚本的叫独立服务
手动启动:
1. service 服务名 start|stop|restart.....
2. /etc/init.d/服务名 start|stop|restart....
开机自启动:
1. chkconfig --level 2345 服务名 on|off
2. /etc/rc.d/rc.local #借助自启动脚本执行服务的启动命令
集中管理式服务:经过一个大的服务(xinetd)管理一些小的服务的模式
1.、安装xinetd大服务yum -y install xinetd
二、安装telnet-server小服务yum -y install telnet-server
3.、/etc/xinetd.d/*有全部的小服务的配置文件
修改小服务的配置文件(开关:disabled=yes 修改成no)
四、重启xinetd服务service xinetd start
五、经过windows使用telnet链接Linux
telnet 192.168.10.100 23(使用非root用户登陆)
源码包安装的服务:(默认:没法使用service和chkconfig管理)
手动:
1. 绝对路径:/usr/local/apache2/bin/apachectl start|stop|restart....
二、别名:alias str='/usr/local/apache2/bin/apachectl start'
三、连接:ln -s /usr/local/apache2/bin/* /usr/local/bin
四、写个管理脚本:./http start|stop|restart
自动:
1. /etc/rc.d/rc.local #写入源码包启动管理命令(case语句)
2. 实现使用chkconfig管理:
a、在实现了service的基础上,修改脚本,添加两句话便可:
# chkconfig: 2345 55 25
#第一串数字表明以什么等级启动,第二第三串数字表明软链接时以什么方式命名
# description: SSH is a protocol for secure remote shell access.
b、chkconfig --add 脚本名
#偶然会出现报错:由于两个数值超过了99
c、检查是否添加成功
chkconfig --list 脚本名
基本上runlevel分为0-6 ,7个等级:
0:关机,shutdown
1:单用户模式(sigle user),root用户,无须认证;维护模式
2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
3:多用户模式(multi user),彻底功能模式;文本界面
4:预留级别:目前无特别使用目的,但习惯同3级别使用
5:多用户模式(multi user),彻底功能模式,图形界面
6:重启模式
启动流程
加电BIOS自检
一、主要检测主机硬件设备如:CPU、内存、硬盘、显卡等是否正常
二、BIOS中设置的系统启动顺序来搜索可启动的磁盘设备(光盘、硬盘、U盘)
三、搜到第一个可启动的设备后就读取该设备的第一个扇区的内容并执行
系统引导
以MBR为例:
一、Boot Loader(446b)查找内核位置
GRUB经过hd0,0找到了存放grub.conf的位置
经过grub.conf所声明的根(root (hd0,0)获取了内核和内核扩展文件的位置
二、识别分区表(64b)
查看全部分区的大小和结构
GRUB功能
一、选择要启动的内核或系统
二、提供交互式接口(e编辑模式)
三、提供密码保护
kenrel启动
一、加载vmlinuz:压缩的kenrel程序,即内核,
二、一部分驱动程序会被直接编译进内核文件中
三、另外一部分驱动程序会以模块的形式放在initrd中
四、initrd包含根文件系统所在设备驱动和相关程序,是kenrel可以识别并加载根的桥梁
六、内核被加载到内存中当即初始化系统中的设备,包括CPU、I/O、存储等
七、内核会以只读的方式挂载根文件系统,而且运行第一个程序/sbin/init
init启动(系统守护进程)
/sbin/init进程是系统第一个启动的程序,它是其余全部进程的父进程。首先会去读取/etc/inittab文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等,在niittab中有一个很重要的设置选项runlevel。根据runlevel的不一样启动不一样的服务,让Linux的使用环境不一样
一、执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式 挂载 根文件系统及其它文件系统,到此系统算是基本运行起来了,后面须要进行运行级别的肯定及相应服务的启动
/etc/rc.d/rc.sysinit功能:
设置主机名
打印文本欢迎信息
激活selinux和udev
激活swap
挂载/etc/fstab中定义的本地文件系统
检测根文件系统并以读写方式从新挂载
设置系统时钟
装载键盘映射
根据/etc/sysctl.conf设置内核参数
激活软RAID和VM设备
清理操做
二、执行/etc/rc.d/rc脚本,该文件定义了服务启动的顺序是先K后S,而具体的每一个运行级别的服务状态是放在/etc/rc.d/rc*.d(*=0~6)目录下,全部的文件均是指向/etc/init.d下相应文件的符号连接。rc.sysinit经过分析/etc/inittab文件来肯定系统的启动级别,而后才去执行/etc/rc.d/rc*.d下的文件
三、执行用户自定义引导程序/etc/rc.d/rc.local完成了系统全部的启动任务后,linux会启动终端或X-Window来等待用户登陆
四、最后一步输入用户名及密码就能够登入系统了
grub.conf是grub的主配置文件,经过这个配置文件,grub才能找到kernel
default:定义默认启动的操做系统
timeout:定义选择操做系统菜单的等待时间
splashimage:指定咱们选择kernel或操做系统菜单后面那张图片
hiddenmenu:表示隐藏选择k操做系统的菜单,只有出现等待界面后按下enter键才会出现。若是没有这个字段,则每次系统启动都会出现这个选择菜单。
title identify:指定一个操做系统,linux中能够有多个title;identify是这个操做系统的识别符,能够随意写。
root:用于指定grub所能识别的根,而不是根文件系统。
kernel:用于指定系统的内核文件的位置
initrd:帮助kernel完成系统的启动,例如加载根文件系统所在分区的驱动等。若是kernel自己有相应强大的功能,则不须要initrd
password:设定密码。放在title外表示进入操做系统等待菜单的编辑模式须要密码,而放在title内表示启动对应的操做系统须要密码,密码能够是明文或是用MD5进行加密过的。能够防止其余人进入编辑kernel菜单进入单用户模式启动咱们的系统
背景图片的位置:splashimage=(hd0,0)/grub/splash.xpm.gz
grub是以hd来识别磁盘的,第一磁盘为hd0,第二个磁盘为hd1...,而hd0,0表示第一个磁盘的第一个分区,hd0,1表示第一个磁盘的第二个分区...,而且grub是直接读分区来找到对应的文件;而个人系统上只有一块硬盘,而且/boot是一个单独的分区,而且为系统的第一个分区,grub等文件在这个分区上。(若是你的系统上/是一个独立分区,而且boot,grub和其中的文件都在/这个分区中,则这段应该是: splashimage=(hd0,0)/boot/grub/splash.xpm.gz)因此它的意思是:grub在第一个分区中找到grub这个目录,再找到这个图片文件做为背景.
图片的特色为:
1,必须是xpm的格式
2,必须用gzip压缩
3,最多使用14位的颜色位数
4,分辨率640*480
修改背景图片:
yum -y install ImageMagick
convert -resize 640x480 -colors 14 153067412492.jpg splash.xpm
gzip splash.xpm
将生成的文件导入到/boot/grub/下(导入前先将源文件备份)
vim /boot/grub/grub.conf
添加:
password=123456
a. 密码添加在title前面
将密码放在这个位置时,在选择grub菜单时就须要输入密码了。
b. 密码添加在title后面
密码在这个位置时,选择完操做系统后,在进入系统引导时才须要输入密码。
设置MD5加密密码
grub-md5-crypt #生成MD5密码串
vim /boot/grub/grub.conf
添加:
password --md5 MD5密码串
grub密码破解
使用光盘启动
进入修复模式
chroot /mnt/sysimage #将/mnt/sysimage 从新挂载为可读写的/
vim /boot/grub/grub.conf
删除:
password=****
exit #只能使用exit退出
reboot
a. 重启系统后出现GRUB界面在引导装载程序菜单上,用上下方向键选择你忘记密码的那个系统键入"e" 来进入编辑模式
b. 接下来你能够看到以下图所示的画面,而后你再用 上下键选择最新的内核(这里是第二行,kernel..),而后继续按"e"键。
而后在编辑界面rhgb quiet后面加"空格",而后键入"single",或者直接输入数字的"1"并回车肯定。
回车后,按"b"键启动进入单用户模式,在这里修改root的密码。
通常在grub被覆盖的状况下咱们须要进行手动的安装grub到咱们的MBR中,那如今的问题是grub已经损坏了,咱们没有一个能够交互写命令的地方了,应该怎么设置呢?so…咱们要借助光盘上的拯救模式。
根据提示加载光盘上的虚拟系统后,咱们须要手动安装下grub
a. chroot /mnt/sysimage
因为是光盘启动的救援模式,so….它的根目录是虚拟的,咱们须要用chroot命令将真根目录挂载回来
b. 执行grub 进入交互界面
root (hd0,0) #设置grub的主目录
setup (hd0) #直接将grub安装到MBR中,不须要指定分区(硬盘开头)
quit
c. 重启
模块位置:
/lib/modules/2.6******/kernel/
模块名保存文件:
/lib/modules/2.6******/modules.dep
depmod #模块同步到modules.dep中
-a #扫描全部,并写入*.dep
-A #扫描新模块,并写入*.dep
-n #显示到屏幕,不写入*.dep
查看内核模块
lsmod #查询全部模块的信息
modinfo #查询某模块的简单信息
添加删除内核模块
modprobe [选项] 模块
a. 下载到相应的模块
b. 复制到指定位置,通常/ib/modules/2.6******/kernel/
c. 用depmod进行扫描,将新模块写入modules.dep文件中
d.用modprobe进行安装
日志管理:/var/log/
服务: rsyslogd(必须开机自启)
做用:分析日志是由哪一个服务产生的,根据rsyslogd配置文件,决定哪些服务的日志保存位置
包含的服务
日志文件 |
说明 |
/var/log/cron |
记录了系统定时任务相关的日志 |
/var/log/cups |
记录打印信息的日志 |
/var/log/dmesg |
记录了系统开机时内核自检的信息,也可使用dmesg命令 |
/var/log/btmp |
记录错误登入日志,只能用lastb命令查看 |
/var/log/wtmp |
永久记录全部用户的登入,注销信息,和系统启动,重启关键事件,last查看 |
/var/log/utmp |
记录用户当前登入信息,用w,who,users等命令查看 |
/var/log/lastlog |
记录系统全部用户最后一次登入时间的日志,只能用lastlog查看 |
/var/log/maillog |
记录邮件信息,启动时间,版本,配置文件位置,开机自启动, |
/var/log/message |
记录系统重要的日志,系统出错,先查这个日志 |
/var/log/secure |
记录验证和受权信息,只要涉及帐号和密码的程序都会记录 |
rsyslog所管理的一些服务
服务名称 |
说明 |
auth |
安全和认证相关信息,不推荐使用 |
authpriv |
安全和认证相关信息,私有 |
cron |
系统定时任务cront和at产生的日志 |
daemon |
和各守护进程相关日志 |
ftp |
ftp守护进程产生的日志 |
kern |
内核产生的日志,不是永恒进程产生的 |
local0-7 |
为本地使用预留服务 |
lpr |
打印产生的日志 |
|
邮件收发信息 |
news |
与新闻服务器相关日志 |
syslog |
syslogd服务产生的日志信息, |
user |
用户等级类别的日志信息 |
uucp |
uucp子系统的日志信息,早期指数据传递协议,现经常使用在新闻组服务中 |
/etc/rsyslog.conf
日志等级
注:none等级,不记录任何信息
设置方式
收信服务器:
vim /etc/rsyslog.conf
取消注释:
$ModLoad imtcp #开启tcp链接,也能够选择开启UDP
$InputTCPServerRun 514 #指定链接端口
tail -f /var/log/secrue
发信服务器:
vim /etc/rsyslog.conf
添加:
authpriv.* @@192.168.10.101:514 #添加服务
useradd huang #测试
做用:事先为日志设定规则,经过大小,时间进行轮替
原理:logrotate主要是针对rsyslog服务所管理的日志,也包含如下RPM包服务日志
/etc/logrotate.conf #主配置文件中的设置进行轮替规则
/etc/logrotate.d/* #一些rpm包的日志管理文件轮替规则
/etc/cron.daily/* #天天运行,查看轮替规则,达到标准,进行轮替,在/etc/cron.*还有其余时间目录也是同样功能
vim /etc/logrotate.conf
添加:
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
logrotate /etc/logrotate.conf #手动执行,达到标准的日志轮替,能够测试是否成功
logrotate -vf /etc/logrotate.conf #强制执行日志轮替,不管是否达到条件
注:{}中规则没有填写的根据/logrotate.conf 的规则执行,若是没有设置dateext命名规则,则文件根据file.1,file.2以此类推设置
做用:过后发现日志过大,经过脚本进行日志切割
方法
split -l 100 install.log -d -a 3 文件名
-d 切割后文件的前缀
-a 切割后文件后缀,以数字表示 3 diabetes三位数
-l 指定切割行数
须要备份哪些数据
日志、用户配置文件、服务配置文件
备份策略
同端备份:在同一个主机的不一样目录下备份(安全等级较低,恢复快速)
多端备份:将数据存放在不一样的设备上备份(安全等会较高)
异地备份:灾备(异地容灾备份)在不一样的地域进行数据备份(安全等级较高,备份和恢复难度较大)
云端备份:安全等级特别高,数据安全性不是很高,对象存储:AWS: s3 ali:OSS腾讯:COS
备份类型
原则:在不影响正常的业务的运行状况下进行备份
冷备:在数据中止写入后,进行数据备份
温备:中止某一部分的数据的写入,进行备份
热备:数据在持续读写过程当中进行备份
备份方式
完整备份:将全部数据都复制一份
增量备份:
备份等级0-9,每次备份前一次数据增长量,备份压力很小,恢复过程复杂(按照指定顺序)
差别备份:
备份等级0-1,每次备份前一次备份数据和增长的数据,备份压力逐渐增大,可是安全等级较高
差别备份+轮询机制:
实现指定0等级备份的时间范围,从新开始差别备份
yum -y install dump
增量:level 0-1-2-3-4-5-6-..
差别:level 0-1-1-1-1-1-1-..
dump -0uj -f /root/boot.dump.bz2 /boot
-level #0-9十个备份级别
-f #指定文件名
-u #备份分区是把备份时间记录在/etc/dumpdates
-v #显示详细信息
-j #备份后压缩
增量备份与恢复:
备份:只能备份0-9个级别
dump -0uj -f /root/boot.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
dump -2uj -f /root/boot2.dump.bz2 /boot
..........
恢复:恢复顺序与备份顺序一致
restore -r -f /root/boot.dump.bz2
restore -r -f /root/boot1.dump.bz2
restore -r -f /root/boot2.dump.bz2
..........
差别备份:
备份:只备份0-1等级
dump -0uj -f /root/boot.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
...........
恢复:只要恢复两次
restore -r -f /root/boot.dump.bz2
restore -r -f /root/boot1.dump.bz2
查看命令
dump -W #查看dump备份记录,只要挂载分区是才有记录
cat /etc/dumpdates #查看dump备份记录,只要挂载分区是才有记录
restore -C -f 备份文件 #必定要在须要恢复的路径下执行
-C #比较备份数据和实际数据的变化。若是实际数据中的现有数据发生了变化,这个选项可以检测这个变化。可是若是实际数据新增了数据,这个选项是不能检测到变化
-r #还原数据
-i #交互模式,通常进行恢复时文件选择
-t #查看模式,查看备份文档中的内容
-f #指定备份文件的名称
restore -i -f 备份文件 #交互模式下,有选择性的恢复数据
ls #列出该备份包中的全部文件
cd #切换到指定目录中
add #将须要恢复的数据进行标记
delete #将标记的文件取消标记
extract #将标记了的文件恢复到当前目录下
输入:
1(数字) #确认进行文件恢复
n #不从新设置要恢复数据的权限和归属
quit 退出交互模式
程序:永久存在的!
进程:程序运行的过程
线程:程序具体用来处理每个任务的过程
程序(配置文件) --> 进程(主进程) --> 进程(子进程) --> 线程(处理任务)
ps #查看进程的静态信息
top #查看进程的动态信息
进程优先级:数值越小,优先级越高
PRI(最终值)=PRI(初始值)+NI
静态查看系统中的进程,查询的是命令执行一瞬间的进程的状态。
aux 以BSD操做系统的格式输出
-le 以Linux标准格式输出
选项详解:
a #显示一个终端的全部进程
u #显示进程的归属用户及内存的使用状况
x #显示没有控制终端的进程
l #长格式显示,更加详细的信息
e #显示全部进程 与a的做用一致
结果分析:
USER #该进程的运行用户,或者理解为产生进程的用户
PID #进程的PID号
%CPU #进程占用的cpu的百分比
%MEM #进程占用物理内存的百分比
VSZ #占用的虚拟内存的大小(KB)
RSS #占用物理内存的大小(KB)
tty #登陆终端(Alt+F1-F6)
STAT #进程状态
D #没法中断的休眠状态(一般 IO 的进程)
R #正在运行的进程
S #处于休眠状态
T #中止或被追踪
W #进入内存交换(从内核2.6开始无效)
X #死掉的进程(基本不多见 )
Z #僵尸进程,没运行但存在
< #优先级高的进程
N #优先级较低的进程
L #被锁进内存的进程
s #进程的领导者(在它之下有子进程)
l #多进程的
+ #位于后台的进程组
START #进程启动时间
TIME #进程运行的时间(总时间),非系统时间
COMMAND #产生此进程的命令
ps -le 结果分析
F #进程标志,说明进程有那些权限
1 #进程能够复制
4 #进程使用超级用户权限
S #进程状态
PPID #进程的父进程ID号
C #cpu占比 %
PRI #进程优先级,数字越小优先级越高,越快被调用执行
NI #进程优先级,数字越小越先被调用
ADDR #进程存在内存的位置
SZ #进程占用的内存大小
WCHAN #进程是否运行(-表明正在运行)
top [选项] [参数]
-d 秒数 #指定刷新频率
-b #使用批处理模式,和-n结合将top的结果重定向到文本
-n 次数 #指定top 次数,和-b结合
-p #指定查看某的PID的进程
-s #使top在安全模式下运行,避免在交互模式下出现错误
-u 用户名 #只查看(监听)某一个用户的进程
在交互模式下使用的命令:
?或h #帮助信息
P #按照CPU使用率排序
M #按照内存使用率排序
N #按照PID号排序
T #按照cpu运算时间排序
k #按照PID号给予某一个进程信发送指令,可用于杀死进程
r #按照PID给某个进程重设优先级(Nice)值
q #退出交互模式
top 结果分析
第一行信息:top - 23:49:08 up 1:21, 1 user, load average: 0.00, 0.01, 0.05
top系统时间 up系统运行时间 user在线用户 load average CPU负载
第二行信息:Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
total全部进程 running正在运行进程数 睡眠进程数 中止进程数 僵尸进程数
第三行信息:Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 98.7%id, 0.7%wa, 0.0%hi, 0.1%si
CUP使用 us已使用 sy未使用
第四行信息:Mem: 493952k total, 301832k used, 192120k free, 18568k buffers
内存使用 total内存总大小 buffers缓存大小
第五行信息:Swap: 2047996k total, 0k used, 2047996k free, 188072k cached
swap内存
#剩下的选项基本和咱们的PS是相同的。
拓展:pstree 进程树
-p #显示PID
-u #显示运行用户
kill 进程号
kill -l #查看kill 所支持的信号
经常使用的信号:
HUP(1) #复位,从新加载配置,至关于reload
#kill -hup 2244
#kill -1 2244
INT (2) #中断(同 Ctrl + C)
TERM(15) #终止(正常退出)
KILL(9) #强制终止,产生交换文件(vim)
CONT(18) #继续(与STOP相反)
STOP(19) #暂停(同 Ctrl + Z)
killall 进程名
killall -i #交互式,询问是否杀死
killall -I(大) #忽略大小写
pkill 终端号
pkill -9 -t 终端号 #强制杀死某登陆终端
一、只有root用户能够减少优先级值,可调整范围(-20)-19,普通用户只能增长(0-19)范围
二、修改PRI只是临时生效,须要永久生效写脚本
ps –le 能够查看到进程的优先级
#PRI(最终值)=PRI(初始值)+NI
#PRI(初始值)大小固定不变的,要想修改进程的优先级,能够经过修改NI来改变
#如何修改NI值?可调整范围(-20)-19
#值容许root用户将进程的优先级调高(数值调小)
1. TOP的交互模式下,r调整指定PID号的进程的优先级(+-数值)
2. nice
nice -n 数值(+/-) service 服务名 start|restart
#只能借助启动或重启的过程来实现NI值的修改
#PRI(最终值)的数值越小,优先级越高,优先级越高越优先获取资源
3. renice
renice 数值(+/-) PID号
#改启动状态进程的NI值,经过指定PID号实现优先级的修改
PID(进程号):
#全部的程序在同一个操做系统中运行时,所分配到的一个惟一的身份标识(不区分终端)
工做号:
#在同一个终端上,位于后台的进程,会被单独分配一个工做号,方便快速的调用后台进程
#不一样终端的后台任务,互相不可见
#工做号能够理解为是一种特殊的进程号
#进程里包含了全部的工做号
#在将某进程放入后台时(无论执行仍是暂停),会顺序显示该进程的工做号和进程号
相关命令
bg 工做号 #将位于后台的暂停的任务,恢复到后台接着执行
fg 工做号 #将位于后台的暂停的任务,恢复到前台接着执行
jobs #查看全部后台任务
-l #显示工做进程PID
命令 & #将工做到到后台,并持续执行
ctrl + z #将工做放到后台,并暂停执行
让后台的工做脱离终端进行运行
一、/etc/rc.local 文件
二、定时计划任务(下边)
三、nohup 命令 选项 操做对象 &
#查看到exit 表示命令没有执行成功,会生成nohup.job文件能够查错
查看CPU数量
cat /proc/cpuinfo | grep "processor" | wc -l
#逻辑CPU个数,即为全部物理CPU上的core的个数
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
#物理CPU个数
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}'
#每一个物理CPU中Core的个数
cat /proc/cpuinfo | grep "core id" | uniq | wc -l
#查看core id的数量,即为全部物理CPU上的core的个数
查询进程或命令调用的资源
ldd 命令路径 #查看该命令运行时所须要调用的函数文件
lsof 进程 #查看进程在运行过程当中,所调用的全部资源
-p PID #根据PID号查询
-u 用户名 #根据用户名查询
vmstat #监控系统资源
Procs(进程):
r: 正在运行进程
b: 阻塞的进程
Memory(内存):
swpd: 虚拟内存已使用的大小
free: 空闲的物理内存的大小
buff: 用做缓冲的内存大小(系统)
cache: 用做缓存的内存大小(被调用资源)
Swap:
si: 每秒从磁盘读入虚拟内存的大小
so: 每秒虚拟内存写入磁盘的大小
注:若是这个值大于0,表示物理内存不够用
IO: (如今的Linux版本块的大小为1024bytes)
bi: 从系统写入硬盘的块数
bo: 从硬盘读入系统的块数
system:
in: 每秒CPU中断数,包括时钟中断。
cs: 每秒上下文切换数(资源调用的次数,如:函数)。
CPU(以百分比表示):
us: 用户进程执行消耗cpu时间(user time)
sy: 系统进程消耗cpu时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间
st: 虚拟机偷取时间(不为0则表明cpu被其余虚拟机所调用)
dmesg #查看开始是内核的检测信息(/var/log/dmesg)
free #查看内存使用状况
-b 以字节为单位显示
-k 以KB为单位(默认)
-m 以MB为单位
-g 以GB为单位
显示信息解释:
第一行:
total: 总计物理内存的大小
used: 已使用内存大小
free: 空闲内存大小
shared: 共享内存,通常系统不会用到
Buffers/cached: 未使用的缓存大小
第二行:(-/+ buffers/cached)
(-buffers/cache)used内存数:第一部分Mem行中的 used – buffers – cached
(+buffers/cache)free内存数:第一部分Mem行中的 free + buffers + cached
注:可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是空闲的内存总数
uptime #系统启动时间和平均负载(通常用top)
uname #查看系统与内核相关信息
-a 查看全部相关信息
-r 查看内核版本
-s 查看内核名称
lsb_release -a #查看当前发行版
单次计划任务:只执行一次的定时任务
命令:at
服务:atd(必须开机自启)
格式:at [-选项] 时间
格式一:
at 12:00 2018-07-18 #在指定的精确的时间点执行任务
>shutdown -h now #要执行的命令
>ctrl+d #保存并退出
格式二:
at now+10(minutes, hours, days, weeks) #在通过指定的时间后执行任务(倒计时)
>shutdown -h now #要执行的命令
>ctrl+d #保存并退出
at -m #让指定的计划任务在执行完成后,给任务的执行者发送邮件通知
atq #查看计划任务的列表(只显示未执行的),显示每个任务的任务号
atrm 任务号 #删除指定任务号的计划任务
at -c 任务号 #查看指定任务号的详细信息(要执行的内容)
at 的黑白名单
at.allow(默认不存在)
at.deny(默认存在)
#当白名单不存在,黑名单为空时:全部用户均可以使用at设置定时任务
#当前状况下:若黑名单中有用户,则只有该用户没法执行定时任务
#白名单的优先级高于黑名单(有了白名单文件,黑名单文件失效)
#当黑白名单都存在,但都为空时:只有root用户能指定定时任务
#当黑白名单都存在,白名单为空,黑名单有用户:只有root用户能指定定时任务
#当白名单存在时,因为白名单优先级高于黑名单,只有在白名单中写入用户时,才是放行某用户,不然全部的普通用户都没法执行定时任务
循环计划任务:
按照给定的时间规则,在指定的时间循环内执行任务
命令:crontab
服务:crond(必须开机自启)
crontab -e #编辑定时计划任务
crontab -l #查看设定好的任务
crontab -r #删除全部的计划任务(慎重执行,全部的任务都写在了同一个文件中)
编辑配置文件时的格式:
分 时 日 月 周 #日期和星期通常不一样时设置(取其一)
* * * * * #要执行的任务(命令、脚本)
分:0-59
时:0-23
日:1-31
月:1-12
周:0-7 #0和7都是周天
* #表示该范围内的任意时间
, #表示间隔的多个不连续时间点
- #表示一个连续的时间范围
/ #指定间隔的时间频率
例子:
0 17 * * 1-5 #周一到周五天天17:00
30 8 * * 1,3,5 #每周1、3、五的8点30分
0 8-18/2 * * * #8点到18点之间每隔2小时
0 * */3 * * #每隔3天
频率:
在指定的时间内,每隔多久执行一次任务
0 12 */3 * * /bin/bash /sh/a.bash
默认是最小到分钟,能够经过sleep命令实现秒级定时循环
* * * * * bash a.bash
* * * * * sleep 30 && bash a.bash
#每隔30s执行一次任务
/etc/cron.daily #放入到该目录下的脚本会天天指定一次
cron黑白名单
cron.allow(默认不存在)
cron.deny
#使用限制和at服务的限制是同样的!
linux配置
临时配置:
使用命令调整网络参数简单、快速,可直接修改运行中的网络参数通常只适合在调试网络的过程当中使用,系统重启之后所作的修改将会失效
永久配置:配置文件修改,重载服务或者重启之后才会生效
协议分类
网络层协议:IP协议、ICMP、ARP等
传输层协议:TCP、UDP等 TCP/IP 协议簇
应用层协议:DHCP、DNS、FTP、HTTP、SSH等
常见端口
20 21 ftp服务 #文件共享
22 ssh服务 #安全远程网络管理
23 telnet服务 #明文远程链接
25 smtp: #简单邮件传输协议(发信)
465 smtp(ssl) #发信
110 pop3: #邮局协议(收信)
143 Imap4 #收信
993 imap4(ssl) #收信
80 www #网页服务(http://)
443 https://
3306 mysql端口
53 DNS端口
IP地址配置
临时:ifconfig 网卡 IP地址 子网掩码
例:
ifconfig eth0 192.168.12.250 netmask 255.255.255.0
ifconfig eth0 192.168.12.250/24
ifconfig eth0:0 192.168.12.254/24 #添加子端口
永久:修改/etc/sysconfig/network-scripts/ifcfg-eth0
重启网络服务:service network restart #针对全部网络服务
启动关闭网卡:ifdown eth0;ifup eth0 #针对单个网卡
主机名配置
查看主机名:hostname
linux能够重复主机名,windows不能缘由:
linux:不须要考虑wins
windows:须要考虑wins
wins服务:IP与主机转换功能,使用netbios协议底层协议
centos6中修改主机名
临时设置主机名:hostname 主机名
永久设置:修改/etc/sysconfig/network文件
centos7中修改主机名
hsotnamectl set-hsotname xx.xx.xx(FQDN)
注:区别 /etc/rc.d/rc.sysinit 和 /etc/sysconfig/network
1./etc/hosts 域名解析文件
2.优先级比dns服务高
3.主机名有可能被hosts更改,规则在/etc/rc.d/rc.sysinit
4.若是主机名未修改,而且hosts文件中有一条针对本机IP的解析记录,则结果做为该解析的结果,若是主机名已经修改过,则不会变化
网关配置
网关:应用在末梢网络中,默认路由,用于特殊环境
路由:应用于任何环境,跟精确匹配
route -n 查看系统中的路由表信息
临时:
默认网关:
添加:route add default gw ip
删除:route del default gw ip
指定路由:
添加:route add -net 网段 gw ip
删除:route del -net 网段 #实际配置路由条目
永久:
网关:
/etc/sysconfig/network-scripts/ifcfg-eth0
路由:
/etc/rc.local
DNS配置
注:配置DNS时,理论上不须要重启服务,过段时间会自动刷新。
域名解析测试命令:nslookup
1./etc/sysconfig/network-scripts/ifcfg-eth0 #针对eth0的网卡配置dns
DNS1=IP
2./etc/resolv.conf #全局的dns配置
主机映射文件:/etc/hosts #优先级比dns服务高
用于保存主机名和IP地址的映射记录,但这种映射只是本地机的映射,也就是说每台机器都是独立的
主机映射文件和DNS服务器的比较:
默认状况下,系统首先从hosts文件查找解析记录
hosts文件只对当前的主机有效
hosts文件可减小DNS查询过程,从而加快访问速度
netstat 查看系统的网络链接状态、路由信息、接口等
例:
netstat -antp
netstat -tlun
-a:显示全部活动链接
-n:以数字形式显示
-t:查看TCP协议相关信息
-u:查看UDP协议相关信息
-p:显示PID和进程名
-l: 监听
traceroute测试命令
原理:TTL网络生存周期,逐渐增长TTL跳数,直到到达目标端口
做用:测试从当前主机到目的主机之间通过的网络节点,用于追踪数据包在网络上的传输时的所有路径,它默认发送的数据包大小是40字节,默认使用UDP协议进行传输,返回值为ICMP
显示:从第一个路由到其余路由的时间
例:traceroute 网址或IP #linux用
tracert 网址或IP #windows用
-I (大) #使用ICMP协议进行测试,Linux中默认使用UDP。
-p 3 #指定测试时发送的数据包个数(即测试次数)
-n #以IP的方式进行链接测试,避开DNS的解析,减小延时
注意:1当返回值中间出现*号时,通常状况是中间节点防火墙封掉了ICMP的返回值。
2当返回值从中间到结束都是*号时,通常状况为目标服务器拒绝接收UDP数据包或禁止了ICMP的返回包
ping测试网络连通性
使用ICMP协议
-i #指定间隔时间
-c #指定ping的次数
-s #指定数据包的大小
arp 地址解析协议
例:arp -a
-a 查看全部
-d ip地址 #删除某条ARP记录
-s ip地址、MAC地址 #绑定ip地址
nmap网络探测扫描命令
做用:查询网络中有哪些主机,尝试跟端口进行链接
处理僵尸进程:根据http状态码,查询
-sP #探测某网段内有哪些主机是存活的
-sT IP #探测某主机上开启了哪些TCP端口
-sS IP #同上,可是是安全扫描,被扫描主机将记录不多的日志
-O IP #扫描对方的操做系统类型
远程管理
Windows à Linux : VNC
1 yum –y install tigervnc tigervnc-server
2 vncpasswd--windows
3 vncserver--linux
Linux à Windwos : rdesktop
1 yum –y install rdesktop
2 rdesktop –f –u 用户名 –p 密码 –a 16 IP
#linux须要时桌面模式
远程传输工具
scp 进行文件的上传和下载
例:
scp ./install.log root@192.168.88.20:/root/ #以本地做为源
scp root@192.168.88.20:/root/install.log ./ #以其余机子做为本地
上传:scp 本机文件 用户名@IP地址:目录
下载:scp 用户名@IP地址:文件 本地位置
指定端口:-P (大) #不是默认端口须要指定端口
sftp 安全的ftp传输
登陆: sftp 用户名@ip地址
指定端口: -oPort=端口
经常使用命令:远程主机ls cd pwd put get
本地 lls lpwd
telnet远程链接
服务端安装:telnet-server
客户端安装:telnet
客户端链接:telnet 服务端IP 23
SSH远程链接
使用的软件:openssh
ssh 远程登陆命令
登陆:ssh 用户@ip地址
指定端口:-p(小)
ls 显示目录文件
选项:-d 显示当前目录
-i 显示inode号
-h 常见单位显示
-a 显示全部文件包括隐藏文件
cd 切换目录(shell内置命令)
cd - 进入上一次目录
cd ~ 进入家目录
cd .. 进入上级目录
pwd 显示当前路径
mkdir 创建目录
例:mkdir -p /huang/xiao/qi 递归创建
rm 删除文件
选项:-r递归,删除目录
-f强制
例:rm -rf 文件和目录
tree 显示目录下全部目录树(要安装的命令)
touch 建立新文件或修改文件时间
cat 查看文件内容
选项:-n显示行号
例:cat -n 文件名
more 分页显示文件内容
空格键:下翻 n键:上翻 q键:退出
less 分行显示文件内容
空格键或pgdn:下翻 pgup键:上翻 q键:退出
head 显示文件头,默认10行
选项:-n 指定显示文件头几行
tail 显示文件后几行,默认10行
选项:-n 指定显示文件头几行
-f 监听文件尾部
cp 复制文件(若是复制连接文件,则复制原文件)
选项:-r 复制目录(包括目录内文件数据)
-p 连带文件属性复制
-d 若源文件是连接文件,则复制连接属性
-a 至关于-rpd
例:cp -pdr 源文件位置 目的位置
mv 剪切或更名
例:mv 源文件 目的文件位置
type 区分命令类型
例:type 命令
ln 生成连接文件(硬连接)
选项:-s 生成软连接
例:ln -s 源文件 目的文件
chmod 修改权限
例:chmod 775 文件或目录
选项:-R 递归设置,将设置到该目录上的权限递归设置到该目录下的全部子文件上
chown 修改全部者
例:chown 用户:用户组 文件或目录名 (同时修改全部者和所属组)
选项:-R 递归设置,将设置到该目录上的全部者递归设置到该目录下的全部子文件上
chgrp 修改所属组
例:chgrp 所属组 文件名或目录
umask 查看文件和目录默认权限
man 查看命令帮助
例: man -f 命令
选项:-f 查看命令等级
0-9 命令等级
help 查看内部命令帮助
例:help 内部命令
--help 查看经常使用命令选项帮助
例:命令 --help
命令 --version 查看命令做者
info查看帮助页
例:info 命令
选项:n进入下一小节
p进入上一小节
q退出
enter确认
which查找存储命令路径与alias别名
例:which 命令
whereis查找存储命令路径与man帮助存储位置
例:whereis 命令
whatis 查询命令帮助等级
例:whereis 命令
locate按文件名查找系统中的文件(包含匹配,在系统数据库中查找)
例:locate 文件名
配置文件:/etc/updatedb.conf
配合命令:updatedb强制更新数据库/var/lib/mlocate/mlocatedb位置
find 查询符合条件的文件名(彻底匹配,可用通配符)
例:find 查找位置 选项 文件名
选项:-name 按文件名查找
-iname 不区分大小写
-size 按文件大小查找
-type 按文件类型查找(f:文件d:目录l:连接)
-ctime 按权限修改时间查找,如+4,-4,4天
-mtime按数据修改时间查找
-atime 按访问时间查找
-nouser按没有属主的文件查找
-user 按用户名查找
-group 按用户组查找
-uid 按用户ID查找
-gid 按属组组ID查找
-inum 按i节点查找
-perm 按权限查找,如775
-exec {} \;管道符做用
grep 查找符合条件的字符串,文件中查找数据,包含匹配
例:grep "字符串" 文件名
选项:-i 不区分大小写
-v 反向
-c 统计符合条件的行数
-A 数字 #列出符合条件的行,并连续列出后面n行
-B 数字 #列出符合条件的行,并连续列出前面n行
--colour=auto 查找字符显示红色
"|" 管道符,命令1的结果做为命令2的条件
例:ls -l | grep "^-"
netstat 查看系统网络状态
例:netstat -tuln
选项:-t 显示tcp
-u 显示udp
-l 监听
-n 显示IP和端口
tar 打包压缩命令
例:tar -zcvf 压缩文件名 源文件
选项:-z:gz格式 -j:bz2格式
-c:解压 -x:压缩
-t:显示压缩文件不解压
-C:解压到指定位置
tar -zxvf 123.tar.gz 123/aaa -C /root/ 解压其中一个文件
w 查看当前在线用户(显示用户登入时间,在线持续时间,1,5,15分钟前的cpu负载,来源IP)
who查看当前在线用户(在线持续时间,来源IP)
last 列出登入相关信息(显示用户开始登入时间,退出登入时间,在线时间,系统重启时间)
文件位置:/var/run/wtmp
lastlog显示帐户最后一次登入时间
文件位置:/var/run/utmp
write 给在线用户写信息
wall对全部在线用户说话
mail邮件命令
例:mail 用户名 (写信ctrl+d:保存退出)
选项:1 2 查看对于邮件 h列出邮件标题 q退出
邮件保存位置:/var/spool/mail/root
ping网络探测
选项:-c 指定次数
-s 指定数据包大小
ifconfig查看网卡配置
例:ifconfig etho0 配置临时生效网卡
netstat查看网络状态
例:netstat -tuln
选项:-t tcp
-u udp
-l listen
-n 显示IP和端口
配置文件:/etc/services
telnet 测试端口连通性
例:telnet IP 端口
sync数据同步,强制把内存数据保存到硬盘
shutdown关机重启命令
例:shutdown -r now重启(能够指定时间,建议使用)
shutdown -h now关机
mount挂载命令(直接执行能够查看已经挂载的挂载点)
例:mount [-t iso9660] /dev/sr0 挂载点
选项:-t 文件系统 光盘iso9660 U盘fat:16或vfat:32
-L 卷标名 挂载指定卷标的分区
-o 特殊选项 能够指定挂载的额外选项
经常使用挂载
挂载光盘
例:mount 【-t iso9660】 /dev/sr0 /mnt/cdrom
卸载挂载
例:umount /mnt/cdrom
指定字符编码挂载
例:mount -o iocharset=utf8 /dev/sr0 /mnt/cdrom/
挂载特殊指定项
mount -o remount,exec 挂载点(remount针对已挂载)
挂载本地镜像
mount -o loop 镜像文件 挂载点
查看分硬盘区
例:fdisk -l
显示当前系统字符编码
例:echo $LANG
修改字符编码
例: $LANG=zh_CN.UTF-8
$LANG=en_US.UTF-8
强制把内存数据保存到硬盘中(建议重启前使用)
例:sync
重启命令(建议使用)
例:shutdown -r now 或指定时间 05:30
umount 卸载挂载点
例:umount 挂载点或设备文件名
rpm二进制包安装命令
例:rpm -ivh 包全名
选项:-i:安装
-v:显示更详细信息
-h:显示安装进度
-q:查询包是否安装
-a:查询全部安装包
-qi:查询安装包的信息
-qip:查询未安装包的信息
-ql:查询包中,文件的安装位置
-qf:查询系统文件属于哪一个安装包
-qR:查询软件包所依赖的软件包
-qRp:查询没有安装的软件包的依赖包
-e:卸载
-V:检验安装包有没有修改过
-U:升级安装包,若是没有安装,就安装
-F:升级安装包,若是没有安装,就不安装
--force:强制安装,用于文件丢失
--import:用于导入数字证书,安装包在
date修改时间命令
例:date -s 20180613或15:12:11
选项:-s:指定时间
lrzsz安装包,用于xshell上传或下载文件的
例:先安装lrzsz安装包,
选项:rz:下载
sz:上传
dos2unix和Unix2dos安装包,须要安装,用于Windows和Linux系统之间的文件转换
例:dos2unix 文件名 或 unix2dos 文件名
yum在线安装
例:yum -y install 包名
选项:install安装
remove卸载
update升级(若是不指定包名,就所有软件升级,当心使用)
list查看yum源全部能够安装的rpm包,能够指定包名
search查看yum源中全部与关键字相关的包
info查看包的信息
grouplist查看全部软件组
groupinstall安装指定组包
groupinfo查看组包中的软件
groupremove卸载组包
LANG查看系统当前语言
例:LANG=zh_CN.UTF-8
选项:echo $LANG 查看当前使用语言
uname -r 查看系统内核版本
du 统计目录大小(统计文件大小是准确的)
例:du -sh 目录
选项:-h 人性化显示
-s 和
-a 显示每一个子文件磁盘占用量
df 查看分区大小(查看硬盘剩余空间是准确的)
例:df -h
选项:-h 人性化显示
-a 显示全部文件系统
-T 显示挂着的文件系统类型
diff 生成补丁
例:diff -Naur 旧文件 新文件 > 补丁文件
patch导入补丁命令
例:patch -pn < 补丁名 (-n:数字 -p:取消路径等级)
防火墙关闭
例:iptables -F (临时生效,清空防火墙配置)
service iptables stop(永久生效,中止防火墙服务)
chkconfig iptables off(永久生效,防火墙服务开机不启动)
useradd添加用户
例:useradd 选项 参数 用户名
选项: -u:UID
-g:指定初始组
-d:指定家目录,目录不须要事先建立
-s:指定登陆shell
-G:指定附加组
-r:建立系统用户,默认密码失效,没有家目录,与-s一块儿使用,指定shell为/sbin/nologin
passwd修改密码
例:passwd 选项 用户
选项: -l:锁定用户密码
-u:解锁用户密码
-U:查看密码状态
usermod用户信息修改
例:usermod 选项 用户名
usermod -m -d /home/已更更名 用户名
选项: -u:修改UID
-g:修改初始组
-d:修改家目录与-m一块儿使用
-L:锁定密码
-U:解锁密码
-G:修改附加组
-l 新用户名 旧用户名 修改用户名
-s:修改登陆的shell
userdel删除用户
例:userdel 选项 用户名
选项:-r:连家目录一块儿删除
groupadd增长组
例:groupadd 组名
groupdel删除组
例:groupdel 组名(尽可能空组)
gpasswd向组内添加成员
例:gpasswd 选项 用户名 组名
选项:-a:指定一个用户添加到组
-d:删除组内成员
-M:批量添加组成员
echo $?(上次命令是否执行成功,0表示成功,非0表示错误)
id显示用户的UID,初始组,附加组
例:id 用户名
su切换用户
例:su 用户名
例:su - 用户名 连带环境变量一块儿切换
newgrp切换有效组
例:newgrp 组
dumpe2fs查看ACL权限
例:dumpe2fs 分区 | grep acl
setfacl设置ACL权限
例:setfacl -m u:用户名:权限 文件名(添加ACL权限rwx)
setfacl -x u:用户 文件名(删除ACL权限)
setfacl -b 文件名(清空ACL权限,包括mask)
setfacl -m u:权限(设置mask权限)
setfacl -R -m u:用户名:权限 文件名(递归设置)
setfacl -d -m u:用户名:权限 文件名(默认权限设置)
getfacl查看文件权限
例:getfacl 文件名或目录
chattr 文件属性设置
例:chattr +i 文件或目录
选项:i:对文件,不容许任何操做修改
对目录,那么只能修改目录下文件的数据
a:对文件,那么只能在文件中增长数据
对目录,那么只容许在目录中创建和修改文件
e:表示该文件是使用ext文件系统进行存储的,并且不能使用"chattr -e"命令取消e属性
lsattr 查看文件属性
例:lsattr -a 文件名
选项:-a 显示全部
-d 若是目标是目录,仅显示目录自己
77.fsck文件系统修复命令
例:fsck -y 分区名
dumpe2fs 显示磁盘状态
例:dumpe2fs -h 分区名
#卷标,挂载点,UUID,挂载参数,文件系统状态,inode总量/空闲,block总量/空闲,单个block大小
stat显示文件详细信息
例:stat 文件名
#文件名,文件大小,占用的block的大小,所在设备编号,硬连接数,属组,属主,权限,访问时间,数据修改时间,状态时间
file判断文件类型
例:file 文件名
type判断命令是不是内部或外部命令
例:tpye 命令
fdisk分区命令MBR
例:fdisk -l 查看磁盘分区
选项:fdisk 进入分区交互模式
-m 操做菜单
-n 新建分区
-p 查看分区
-d 删除分区
-q 退出不保存
-w 退出保持
-t 修改分区属性(能够更改swap分区用)
-L 查看分区属性
82. partprobe强制读取全部分区
例:若分区报错,可以使用此命令,若没安装,parted-2*安装包
mkfs格式化分区
例:mkfs -t ext4 分区名
mkfs -t ext4 -b4096 -i4096 分区
mkfs.ext4 分区
84. parted分区命令GPT
例:parted 分区 #进入交互模式
选项:p 打印分区表
mklabel 更改分区表类型gpt/msdos
mkpart 建立分区
rm 删除分区
q 退出(修改实时生效)
85. swap分区命令
例:1.fdisk分区
2.更改分区属性为swap
3.mkswap 格式化分区
4.swapon 开启swap分区
5.free查看swap分区状态
86. quota磁盘配额相关命令
选项:quotacheck -avgu 生产磁盘配额文件
-a #扫描全部磁盘
-v #显示扫描过程
-c #清楚原有文件从新生成行动文件
-g #生成组文件
-u #生成用户文件
edquota -u 用户名 #指定用户限制设置
-g 组名 #指定组限制设置
-t #用户宽限天数设置
-T #组宽限天数设置
-p #复制设置
quota -uvs #查看此用户在全部磁盘的配额
quota -hvs #查看此组在全部磁盘的配额
repquota -ugvs 分区 #查看该分区的全部配额设置
quotaon -guav 分区 #开启指定分区磁盘配额设置
quotaoff -guav 分区 #关闭指定分区磁盘配额设置
87. dd用指定大小的块拷贝一个文件
if=指定源文件
of=指定目的文件
bs=bytes:同时设置读入/输出的块大小为bytes个字节
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节
dd应用实例
1.将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
a.备份磁盘开始的512个字节大小的MBR信息到指定文件:
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
b.恢复:
dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.拷贝内存内容到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
8.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
dd if=/dev/cdrom(sr0) of=/root/cd.iso
9.增长swap分区文件大小
第一步:建立一个大小为256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
mkswap /swapfile
第三步:启用这个swap文件:
swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile swap swap default 0 0
10.销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合能够用来销毁数据。
11.测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
12.肯定硬盘的最佳块大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
88. LVM逻辑卷管理命令
选项: pvcreate 磁盘设备名 #建立物理卷
pvscan或pvdisplay #查看物理卷
pvremove #删除物理卷
vgcreate -s PE大小 卷组名 物理卷名 #建立卷组
vgscan或vgdisplay #查看卷组
vgremove 卷组名 #删除卷组
vgextend 卷组名 物理卷名 #增长物理卷
vgreduce 卷组名 物理卷名 #删除物理卷
lvcreate -L 大小 -n lv名 卷组名 #创逻辑卷
lvscan或lvdisplay #查看逻辑卷
lvremove 逻辑卷名 #删除逻辑卷
lvextend -L +大小 分区名 #增长逻辑卷容量,只修改MBR表
resize -f 分区名 分区实际大小 #修改superblock大小 e2fsck -f 分区名 #检查文件系统
resize -f 分区名 减小到大小 #与增长大小反着来
lvreduce -L 实际大小 分区名
89. RAID设置命令
例:mdadm -Cv md* -l10 -n4 磁盘 -x2 热备 #建立RAID10
mdadm -D 查看RAID10状态
mdadm -f cip #指定磁盘损坏
mdadm 设备名md* --remove 磁盘 #移除磁盘
mdadm 设备名md* --add 磁盘 #添加磁盘
mdadm -S 设备名md* #中止RAID
mdadm --zero-superblock 设备名md* #删除RAID
90. set查询当前全部生效的变量
例:set -u #设置后,被调用的无效变量报错
set -x #设置后,每次执行命令,打印一次命令
unset 变量名 #取消变量
91. env只查询环境变量
92. echo 输出到屏幕
例:echo -e "字符或格式"
选项:-e 支持反斜线控制的字符转换
-n 取消输出后行尾的换行符
93. history历史命令
例:history -c #清空历史命令
-w #把缓存的历史命令保存到配置文件中
dd命令详解
做用
dd:用指定大小的块拷贝一个文件
格式
dd if=/dev/zero of=/指定目录 bs=1M count=1000
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
dd应用实例
将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip > /root/image.gz
将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd of=/dev/hdb
6. 备份与恢复MBR
a.备份磁盘开始的512个字节大小的MBR信息到指定文件:
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
b.恢复:
dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
拷贝内存内容到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
拷贝光盘内容到指定文件夹,并保存为cd.iso文件
dd if=/dev/cdrom(sr0) of=/root/cd.iso
增长swap分区文件大小
第一步:建立一个大小为256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
mkswap /swapfile
第三步:启用这个swap文件:
swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile swap swap default 0 0
销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合能够用来销毁数据。
11. 测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
经过以上两个命令输出的命令执行时间,能够计算出硬盘的读、写速度。
/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可使用任何你须要的数目——设备提供的要多的多。他能够用于向设备或文件写入字符串0。
/dev/null——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。若是不想让消息以标准输出显示或写入文件,那么能够将消息重定向到位桶。外号叫无底洞,你能够向它输出任何数据,它通吃,而且不会撑着!
12. 肯定硬盘的最佳块大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
经过比较以上命令输出中所显示的命令执行时间,便可肯定系统最佳的块大小。