Linux 介绍和命令超详细

linux两大分支
1.Redhat
Centos
2.Debian
Ubuntu
忘掉Windows思维方式

分区类型
主分区:最多只能有4个
扩展分区:
最多只能有1个
主分区加扩展分区最多4个,但是逻辑分区可以多个
不能写入数据,只能包含逻辑分区
逻辑分区:正常写入数据和格式化
格式化
1.高级格式化(又称逻辑格式化),他是根据用户选定的文件系统(FAT16,FAT32,NTFS,EXT2,EXT3,EXT4)
在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表,目录表等用户文件管理的磁盘空间
硬件设备文件名
1.IDE硬盘 /dev/hd[a-d]
2.SCSI/SATA/USB硬盘 /dev/sd[a-p]
3.光驱 /dev/cdrom或/dev/sr0
4.软盘 /dev/fd[0-1]
5.打印机(25z针) /dev/lp[0-2]
6.打印机(USB) /dev/usb/lp[0-15]
7.鼠标 /dev/mouse
分区设备文件名
1.设备文件名
/dev/hda1 hd->IDE硬盘 a->第一个硬盘号 1->第一个分区号
/dev/sda1 sd->SCSI,SATA,USB硬盘 a->第一个硬盘号 1->第一个分区号
PS: 1.主分区和拓展分区以及逻辑分区都会分配分区号
2.当主分区不足4个的时候,如果有逻辑分区,逻辑分区的分区号都是从5开始的
挂载(Windows称为分配盘符)
1.必须分区
/(根分区)
swap分区(交换分区,内存2倍,不超过2GB)
2.推荐分区
/boot(启动分区,200MB)
文件系统结构
举例说明/(根目录)下有几个分区
/ /boot
/ /etc
/ /home
每个分区可以指定硬盘分区
/boot ->/dev/sda1
/home ->/dev/sda2
/etc ->/dev/sda3
/ ->/dev/sda4(根分区也可以指定一个分区)
密码原则
1.复杂性
八位字符以上,大小写字母,数字,符号
不能是英文单词
不能是和用户相关的内容
2.易记忆性 flzx_3QC(飞流直下三千尺)
3.时效性
安装软件包选择
Desktop(桌面)
Minimal Desktop(最小化桌面)
Minimal(最小化)
Basic Server(基本服务器)
Database Server(数据库服务器)
WebServer(网页服务器)
Virtual Host(虚拟主机)
software development workstation(软件开发工作站)
安装日志
/root/install.log 存储了安装在系统中的软件包及其版本信息
/root/install.log.syslog 存储了安装过程中留下的事件记录
/root/anaconda-ks.cfg 以Kickstart配置文件格式记录安装过程中设置的选项信息
ps: linux超级管理员账号为root
其他新增用户在/home目录下的同名用户目录
远程登录
1.桥接模式(会占用主机同网段的一个IP)
2.NAT模式(与主机共享一个IP)
3.仅主机模式(与主机共享的专用网络)
网卡配置
1.lo网卡(本地网卡,回环网卡,本机通信和测试用的)

ifconfig命令(查看ip地址,配置ip,新增网卡)
配置一个新网卡
ifconfig eth0 192.168.1.2
ps:
eth0 网卡名称
192.168.1.2 网卡的IP地址
上面的ifconfig配置是临时的,重启后失效
ifconfig eth0:1 192.168.1.1
eth0:1 网卡多加一个IP,一个网卡可以有多个IP
df命令(分区情况查看)
初学者建议
1.Linux严格区分大小写
2.Linux中所有内容以文件形式保存,包括硬件
1.硬盘文件是/dev/sd[a-p]
2.光盘文件是/dev/sr0等
3.Linux不靠扩展名区分文件类型,但有习惯性文件约定俗成的文件格式
压缩包:*.gz,*.bz2,*.tar.bz2,*.tgz等等
二进制软件包:rpm
网页文件:*.html,*.php
配置文件:*.conf
4.Linux所有的存储设备都必须挂在之后才能使用,包括硬盘,U盘和光盘
5.Windows下的程序不能直接在Linux中安装和运行
服务器管理和维护建议
1.目录介绍
1./bin/ 存放系统命令的目录,普通用户和超级用户都可以执行,不过存在/bin下的命令在单用户模式下也可以执行
2./sbin/ 保存和系统环境设置相关的命令,只有超级用户可以使用命令进行系统环境,但是有些指令可以允许普通用户查看
3./usr/bin/ 存放系统命令的目录,普通用户超级用户都可以执行,这些命令和系统启动无关,在单用户模式下不能执行(单用户类似Windows的安全模式)
4./usr/sbin/ 存放根文件系统不必要的系统管理命令,例如多数服务器程序,只有超级用户可以使用
5./boot/ 系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
6./dev/ 设备文件保存位置,Linux中所有内容以文件形式保存,包括硬件,这个目录就是用来保存所有硬件设备文件的
7./etc/ 配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务的配置文件都保存在这个目录,如账号和密码,服务器启动脚本,常用服务配置文件
8./home/ 普通用户的家目录,建议每个用户时,每个用户要用一个默认登录位置,如用户user1的家目录就是/home/user1
9./lib/ 系统调用的函数库保存位置
10./lost+found/ 当系统以外崩溃或机器意外关机,而产生的一些文件碎片放在这里,当系统启动的过程中fsck工具会检测这里,并修复已经损坏的文件系统,
这个目录只在每个分区中出现
11./media/ 挂载目录,系统建议是用来挂载媒体设备的,例如软盘和光盘
12./mnt/ 挂载目录,早期Linux中只有这一个挂载目录,并没有细分,现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区
13./misc/ 挂载目录,系统建议用来挂载NFS服务的共享目录
14./apt/ 第三方安装的软件保存位置,这个目录就是放置和安装其他软件的位置和/usr/local目录差不多
15./proc/ 虚拟文件系统,该目录中数据不保存到硬盘当中,而是保存在内存当中,例如/proc/cpuinfo是保存CPU信息,/proc/devices是保存设备驱动的列表
/proc/filesystems是保存文件系统列表的,/proc/net是保存网络协议信息的
16./sys/ 虚拟文件系统,和/proc目录相似,都是保存在内存当中的,主要保存内核信息
17./root/ 超级管理员的家目录
18./srv/ 服务数据目录,一些系统服务启动之后,可以在这个目录中保存所需的数据
19./tmp/ 临时目录,存放系统临时文件的目录,该目录下所有用户都可以访问和写入,不建议存放重要数据,建议每次开机都清理一下
20./usr/ 系统软件资源目录,注意不是user缩写,而是Unix Software Resource的缩写,存放的不是用户数据,而是存放系统资源目录
21./var/ 动态数据保存位置,主要保存缓存,日志以及软件运行所产生的的文件
2.服务器注意事项
1.远程服务器不允许关机,只能重启
2.重启时应该关闭服务
3.不要在服务器访问高峰运行高负载命令
4.远程配置防火墙时不要把自己提出服务器
5.指定合理的密码规范并定期更新
6.合理分配权限
7.定期备份重要数据和日志
Linux常用命令
1.命令格式与文件目录处理命令
命令格式: 命令 [-选项][参数]
例如:ls -la /etc
说明:
1.个别命令使用不遵循此格式
2.当有多个选项时,可以写在一起
3.简化选项与完整选项
-a 等于 --all
目录处理命令:ls
命令名称:ls
命令英文原意:list
命令路劲:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls 选项[-ald][文件或目录]
-a 显示所有文件,包括隐藏文件
-l 详细信息显示
-d 查看目录属性
-rw-r--r--
-文件类型(-二进制文件 d目录 l软连接文件)
rw- r-- r--
u所有者 g所属组 o其他人
r读 w写 x执行
目录处理命令:mkdir
命令名称:mkdir
命令英文原意:make directories
命令路劲:/bin/mkdir
执行权限:所有用户
功能描述:创建新目录
语法:mkdir -p [目录名]
-p 递归创建
目录处理命令:cd
命令名称:cd
命令英文原意:change directory
命令路劲:shell内置命令
执行权限:所有用户
功能描述:切换目录
语法:cd [目录名]
cd .. 回到上一级目录
目录处理命令:pwd
命令名称:pwd
命令英文原意:print working directory
命令路劲:/bin/pwd
执行权限:所有用户
功能描述:显示当前目录
语法:pwd
目录处理命令:rmdir
命令名称:rmdir
命令英文原意:remove empty directories
命令路劲:/bin/rmdir
执行权限:所有用户
功能描述:删除空目录
语法:rmdir [目录名]
目录处理命令:cp
命令名称:cp
命令英文原意:copy
命令路劲:/bin/cp
执行权限:所有用户
功能描述:复制文件或目录
语法:cp -rp [原文件或者-可以是多个] [目标目录]
-r 复制目录
-p 保留文件属性
目录处理命令:mv
命令名称:mv
命令英文原意:move
命令路劲:/bin/mv
执行权限:所有用户
功能描述:剪切文件,改名
语法:mv [原文件或目录] [目标目录]
目录处理命令:rm
命令名称:rm
命令英文原意:remove
命令路劲:/bin/rm
执行权限:所有用户
功能描述:删除文件或目录
语法:rm -rf [文件或目录]
-r 删除目录
-f 强制执行
文件处理命令:touch
命令名称:touch
命令英文原意:touch
命令路劲:/bin/touch
执行权限:所有用户
功能描述:创建文件
语法:touch [文件名-可多个]
touch program files
创建program 和 files文件
touch "program files"
创建program files文件
文件处理命令:cat
命令名称:cat
命令英文原意:touch
命令路劲:/bin/cat
执行权限:所有用户
功能描述:显示文件内容
语法:cat -n [文件名]
-n 显示行号
文件处理命令:tac
命令名称:tac
命令英文原意:tac
命令路劲:/bin/tac
执行权限:所有用户
功能描述:显示文件内容(反向列示)
语法:tac [文件名]
文件处理命令:more
命令名称:more
命令英文原意:more
命令路劲:/bin/more
执行权限:所有用户
功能描述:分页显示文件内容(不可向上翻页)
语法:more [文件名]
空格或f 翻页
enter 换行
q或Q 退出
文件处理命令:less
命令名称:less
命令英文原意:less
命令路劲:/bin/less
执行权限:所有用户
功能描述:分页显示文件内容(可向上翻页)
语法:less [文件名]
空格或f 翻页
enter 换行
q或Q 退出
/关键词 搜索(按n匹配下一行)
文件处理命令:head
命令名称:head
命令英文原意:head
命令路劲:/bin/head
执行权限:所有用户
功能描述:显示文件前几行
语法:head -n 20 [文件名]
-n 指定行数(不加n只显示前10行)
文件处理命令:tail
命令名称:tail
命令英文原意:tail
命令路劲:/bin/tail
执行权限:所有用户
功能描述:显示文件最后几行
语法:tail -n 20 [文件名]
-n 指定行数(不加n只显示后10行)
-f 动态显示文件末尾的日志
链接命令:ln
命令名称:ln
命令英文原意:link
命令路劲:/bin/ln
执行权限:所有用户
功能描述:生成软连接文件
语法:ln -s [原文件] [目标文件]
-s 创建软连接(类似Windows快捷方式,不加-s就是硬链接,删除硬链接原文件也会被删除,内容也同步更新,i节点也一样)
硬链接特性:
1.具有copy -p的同时还是同步更新
2.通过i节点识别
3.不能跨分区
4.不能针对目录使用
2.权限管理命令
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令路劲:/bin/chmod
执行权限:所有用户
功能描述:改变文件或目录权限
语法:chmod [{ugoa}{+-=}{rwx}][文件或目录] u指的是所属者 g指的是所属组 o指的是其他人 a指的是所有人
[mode=421][文件或目录] 4指的是r 2指的是w 1指的是x 如果是0就是没有权限
-R 递归修改
举例:
chmod u+x anaconda-ks.cfg
chmod u-rx anaconda-ks.cfg
chmod u=wr anaconda-ks.cfg
chmod 777 anaconda-ks.cfg
chmod 755 anaconda-ks.cfg
chmod -R 755 anaconda-ks.cfg
PS:r读权限 对于文件就是可以查看文件的内容 对于文件夹就是可以列出目录中的内容
w写权限 对于文件就是可以修改文件的内容 对于文件夹就是可以在目录中创建,删除文件
x执行全选 对于文件就是可以执行文件 对于文件夹就是可以进入目录
只有root用户和文件的所有者才能改变文件的权限
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
功能描述:改变文件或目录的所有者
语法:chown [用户] [文件或目录]
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
功能描述:改变文件或目录的所属组
语法:chgrp [用户组] [文件或目录]
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:/bin/umask
执行权限:所有用户
功能描述:显示,设置文件的缺省权限
语法:umask [-S]
-S 以rwx形式显示新文件的缺省权限
PS:不加-S是显示结果 如:0022
0特殊权限
umask 022 --- -w- -w-
默认文件的缺省权限自动去掉x(为了系统安全)
计算方式:(一种逻辑与)
示例1
全码 777 rwx rwx rwx
umask 022 --- -w- -w-
实际 755 rwx r-x r-x(目录) rwx r-- r--(文件)
示例2
全码 777 rwx rwx rwx
实际 700 rwx --- ---(目录) rw- --- ---(文件)
umask 077 --- rwx rwx
3.文件搜索命令
命令名称:find
命令英文原意:find
命令所在路径:/bin/find
执行权限:所有用户
功能描述:文件搜索
语法:find [搜索范围] [匹配条件]
-name 区分大小名称搜索
-iname 不区分大小写名称搜索
-size +n -n n +n是大于多少数据块 -n是小于多少数据块 n是等于多少数据块
-user 根据所有者查找
-group 根据所属组查找
-min +n -n n 文件被访问时间(分钟)
-cmin +n -n n 文件属性被更改时间(分钟)(分钟)
-mmin +n -n n 文件内容被修改时间(分钟)
-a 两个条件同时满足
-o 两个条件满足其中一个即可
-type f d l f是文件 d是目录 l是链接
-exec/-ok 命令 {} ; 在查找的列表中执行其他命令
-inum 根据i节点查找
示例:
find /etc -name init 精准匹配/etc目录下名称是init
find /etc -name *init* 模糊匹配/etc目录下名称是init
find /etc -name *init 匹配/etc目录下名称是init结尾的
find /etc -name init* 匹配/etc目录下名称是init开头的
find /etc -name init??? 匹配/etc目录下名称是init开头后又出现三个字符的

find /etc -size +20480 查找/etc目录下大于204800数据块(100MB)的的文件 1数据块 = 512字节 =0.5K 100MB=102400KB=204800数据块
find /etc -min -5 查找/etc目录下五分钟内被访问的文件

find /etc -size +163840 -a -size -204800 查找/etc目录大于163840数据块(80MB)并且小于204800数据块(100MB)的文件

find /etc -name init -exec/-ok ls -l {} ; 查找类表后再执行其他命令,-ok是每个文件进行确认动作

find -inum 261968 -exec rm -rf {} ; 查找i节点是261968并执行删除,查找i节点用ls -i
命令名称:locate
命令英文原意:locate
命令所在路径:usr/bin/locate
执行权限:所有用户
功能描述:在文件资料库中查找文件
语法:locate [文件名]
-i不区分大小写
示例:
locate init
PS: 如果还没有收录到资料库可以执行updatedb实时手动收录
locate不会收录/temp临时目录
命令名称:which
命令英文原意:which
命令所在路径:usr/bin/which
执行权限:所有用户
功能描述:搜索命令所在目录及别名信息
语法:which 命令
示例:
which ls
命令名称:whereis
命令英文原意:whereis
命令所在路径:usr/bin/whereis
执行权限:所有用户
功能描述:搜索命令所在目录及帮助文档路径,检索出来的1是命令 5是配置文件
语法:whereis 命令
示例:
whereis ls
命令名称:grep
命令英文原意:grep
命令所在路径:bin/grep
执行权限:所有用户
功能描述:在文件中搜寻字符串匹配的进行并输出
语法:grep -iv [指定字符串] [文件]
-i 不区分大小写
-v 排除指定字符串
示例:
grep mysql /etc/config.json 查找/etc目录下的config.json文件中包含mysql的所有行
grep -i mysql /etc/config.json 查找/etc目录下的config.json文件中包含mysql的所有行不区分大小写
grep -v # /etc/config.json 查找/etc目录下的config.json文件中不包含#的行
grep -v ^# /etc/config.json 查找/etc目录下的config.json文件中不包含#开头的行
4.帮助命令
命令名称:man
命令英文原意:manual
命令所在路径:usr/bin/manual
执行权限:所有用户
功能描述:获取帮助信息,查看功能其实是配合more less功能来使用
语法:man [命令或配置文件]
示例:
man ls
man services
命令名称:whatis
命令英文原意:whatis
命令所在路径:usr/bin/whatis
执行权限:所有用户
功能描述:查看命令的简短信息
语法:whatis 命令
示例:
whatis ls
命令名称:apropos
命令英文原意:apropos
命令所在路径:usr/bin/apropos
执行权限:所有用户
功能描述:查看配置文件简短信息的简短信息
语法:apropos 配置文件
示例:
apropos inittab
PS:指令 --help 查看指令选项说明
info 和man差不多
help 命令 查看shell内置命令的帮助
5.用户管理命令
命令名称:userad
命令英文原意:userad
命令所在路径:usr/bin/userad
执行权限:root
功能描述:添加新用户
语法:userad 用户名
示例:
userad hudingwen
命令名称:passwd
命令英文原意:passwd
命令所在路径:usr/bin/passwd
执行权限:所有用户
功能描述:设置用户密码
语法:passwd 用户名
示例:
passwd hudingwen
命令名称:who
命令英文原意:who
命令所在路径:usr/bin/who
执行权限:所有用户
功能描述:查看登录用户信息
语法:who
PS:
第一列是登录名
第二列是登录终端:tty是本地终端 pts远程终端
第三列是登录时间(远程终端后面还会显示远程登录IP地址)
命令名称:w
命令英文原意:w
命令所在路径:usr/bin/w
执行权限:所有用户
功能描述:查看登录用户信息(详细版)和查看负载信息
语法:w
命令名称:uptime
命令英文原意:uptime
命令所在路径:usr/bin/uptime
执行权限:所有用户
功能描述:服务器运行时间明细
语法:uptime
6.文件解压缩命令
命令名称:gzip
命令英文原意:gzip
命令所在路径:/bin/gzip
执行权限:所有用户
功能描述:压缩文件(只能压缩文件,不保留原文件)
语法:gzip [文件]
PS:
压缩后的格式为.gz
命令名称:gunzip
命令英文原意:gunzip
命令所在路径:/bin/gunzip
执行权限:所有用户
功能描述:解压文件(只能压缩文件,不保留原文件)
语法:gunzip [文件] == gzip -d [文件]
命令名称:tar
命令英文原意:tar
命令所在路径:/bin/tar
执行权限:所有用户
功能描述:打包目录
语法:tar 选项[-zcvf -zcvf -ztvf] [压缩后的文件名] [目录]
-c打包 -x解包
-v显示详细信息
-f指定文件名
-z打包同时压缩
-t查看
PS:压缩后的文件格式:.tar.gz
命令名称:zip
命令英文原意:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
功能描述:压缩文件和目录(压缩后不会删原文件)
语法:zip 选项[-r] [压缩后的文件名] [文件或目录]
-r 压缩目录
PS:
压缩后的格式为.zip
命令名称:unzip
命令英文原意:unzip
命令所在路径:/usr/bin/unzip
执行权限:所有用户
功能描述:解压缩(压缩后不会删原文件)
语法:unzip [压缩文件]
命令名称:bzip2
命令英文原意:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
功能描述:压缩文件(压缩比例高 一般压缩大文件)
语法:bzip2 [选项-k] [文件]
-产生压缩文件后保留原文件
PS:
压缩后的格式为.bz2
命令名称:bunzip2
命令英文原意:bunzip2
命令所在路径:/usr/bin/bunzip2
执行权限:所有用户
功能描述:解压缩文件
语法:bunzip2 [选项-k] [压缩文件]
-产生压缩文件后保留原文件
7.网络命令
命令名称:write
命令英文原意:write
命令所在路径:/usr/bin/write
执行权限:所有用户
功能描述:给用户发信息
语法:write 用户名
PS:发完后,Ctrl+D保存结束才会发布成功,如果人不在线发布会不成功
命令名称:wall
命令英文原意:write all
命令所在路径:/usr/bin/wall
执行权限:所有用户
功能描述:给所有用户发消息
语法:wall [信息]
PS:发完后,Ctrl+D保存结束才会发布成功,如果人不在线发布会不成功
命令名称:ping
命令英文原意:ping
命令所在路径:/bin/ping
执行权限:所有用户
功能描述:测试网路连通性
语法:ping IP
-c n ping的次数
命令名称:ifconfig
命令英文原意:interface network
命令所在路径:/sbin/ifconfig
执行权限:所有用户
功能描述:查看和临时设置网卡信息
语法:ifconfig [网卡名] [IP地址]
命令名称:lastlog
命令英文原意:lastlog
命令所在路径:/sbin/lastlog
执行权限:所有用户
功能描述:查看用户最后登录信息
语法:lastlog
命令名称:traceroute
命令英文原意:traceroute
命令所在路径:/sbin/traceroute
执行权限:所有用户
功能描述:显示数据包到主机间的路劲
语法:traceroute [域名或IP]
命令名称:netstat
命令英文原意:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
功能描述:显示网络相关信息
语法:netstat [选项]
-t 查询TCP协议
-u 查询UDP协议
-l 监听
-r 路由
-n 显示IP地址和端口
-a 所有
命令名称:setup(Redhat专用)
命令英文原意:setup
命令所在路径:/sbin/setup
执行权限:所有用户
功能描述:设置网络
语法:setup
命令名称:mount
命令英文原意:mount
命令所在路径:/bin/mount
执行权限:所有用户
功能描述:挂载命令
语法:mount [-t 文件系统] 设备文件名 挂载点(挂载路径)
示例:mount -t iso9660 /dev/sr0 /mnt/cdrom
命令名称:umount
命令英文原意:umount
命令所在路径:/bin/umount
执行权限:所有用户
功能描述:卸载命令
语法:umount [设备文件名或者挂载点]
8.关机命令
命令名称:shutdown
命令英文原意:shutdown
命令所在路径:/bin/shutdown
执行权限:所有用户
功能描述:关机命令
语法:shutdown [选项] 时间
-c 取消前一个关机命令
-h 关机
-r 重启=reboot
示例:
shutdown -r now
PS: 其他关机命令:
halt
poweroff
init 0
reboot
init 6
0关机 1单用户 2不完全多用户,不含NFS服务 3完全多用户 4未分配 5图形界面 6重启
修改系统默认运行级别 cat /etc/inittab id:3:initdefault;
查询当前系统运行级别
退出登录用户:logout
9.文本编辑器
vim常用操作
语法:vim 文件名
操作指令
插入命令
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行首插入
o 在光标下插入新行
O 在光标上插入新行
编辑模式(:)
命令模式(没有:)
:set nu 设置行号
:set nonu 取消行号
:wq 保存退出
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移至行尾
0 移至行首
x 删除当前光标所在处字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定行,删除n1行到n2行的内容
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p 粘贴在当前光标所在行下
P 粘贴在当前光标所在行上
r 替换当前光标的字符
R 从光标所在处开始替换字符,按ESC结束
u 取消上一步操作
:/string 搜索指定字符串,按n搜索下一个匹配字符,搜索忽略大小写:set ic 恢复大小写:set ic no
:%s/old/new/g 全文替换指定字符串
:n1,n2s/old/new/g 在一定范围内替换指定字符串
:w 保存修改
:w 文件名 另存为指定文件
:wq 保存退出
ZZ 快捷键,保存修改并退出
:q! 不保存退出
:wq! 强制保存修改并退出(文件所有者及root可使用)
进阶:
:r 文件名 把文件内容导入到当前光标处
:! 命令 在编辑时可以执行其他命令
:r !命令 把当前执行命令的内容导入到当前光标处
:map ^P I#<ESC> 定义快捷键,意思是按住Ctrl+P
:n1,n2s/^/#/g 指定行的行首添加注释符号
:ab mymail hudingwen@qq.com 定义替换,当输入mymail回车后自动输入hudingwen@qq.com
10.软件包分类
源码包(安装时间长)
脚本安装包
优点:
开源,如果有足够能力,可以修改源代码
可以自由选择所需的功能
软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
卸载方便
缺点:
安装过程步骤较多,尤其安装较大的软件集合是(如LAMP环境搭建),容易出现拼写错误
编译过程时间较长,安装比二进制安装时间长
因为是编译安装,安装过程中一旦报错新手很难解决
二进制包(RPM包,系统默认包)(安装时间短)(不能看到源代码)
优点:
包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载
安装速度比源码包安装快的多
缺点:
经过编译,不再可以看到源代码
功能选择不如源码包灵活
依耐性
RPM包管理-rpm命令管理
rpm包命名原则
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Liunx平台
i686 适合的硬件平台
rpm rpm包扩展名
rpm包依赖
树形依赖: a->b->c
安装顺序 c b a
卸载顺序 a b c
环形依赖: a->b->c->a
用一条命令同时安装三个既可解决环形依赖
模块依赖:模块依赖查询网站:www.rpmfind.com
安装与卸载
包全名:
操作的包是没有安装的软件包时,使用包全名.而且要注意路径
包名:
操作已经安装的软件包是,使用包名.是搜索/var/lib/rpm/的数据库
RPM安装:
格式:
rpm -ivh 包全名
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖(做实验用)
示例:
rpm -ivh httpd-2.2.15-15.el6.centos.1.i686.rpm
RPM包升级
格式:
rpm -Uvh 包全名
-U(upgrade) 升级
RPM包卸载
格式:
rpm -e 包名
-e(erase) 卸载
RPM查询包是否安装
格式:
rpm -q 包名
-q(query) 查询
-a(all) 查询所有(不需要跟包名)
RPM查询详细信息
格式:
rpm -i 包名
-i(information) 查询软件信息
-p(package) 查询未安装包信息(包全名)
RPM包中文件安装位置
格式:
rpm -ql 包名
-l(list) 列表
RPM查询系统文件属于哪个RPM包
格式:
rpm -qf 系统文件名
-f(file) 查询的系统文件名
RPM查询软件包的依赖性
格式:
rpm -qR 包名
-R(requires) 查询软件包的依赖性
-p(package) 查询未安装包信息(跟包全名)
RPM包校验
格式:
rpm -V 包名
-V(verify) 校验指定RPM包中的文件
PS:返回提示
S 文件大小是否改变
M 文件的类型或文件的权限是否改变
文件类型:
c 配置文件 config file
d 普通文件 documentation
g "鬼"文件,很少见,不应该被RPM包含 ghost file
l 授权文件 license file
r 描述文件 read me
5 文件MD5检验是否改变,可查看内容是否改变
D 设备的中,从代码是否改变
L 文件路径是否改变
U 文件的所有者是否改变
G 文件的所属组是否改变
T 文件的修改时间是否改变
RPM包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径
cpio 选项<[文件|设备]
-i copy-in 还原
-d 还原时自动新建目录
-v 显示还原过程
复现问题:
1.误删除ls命令
mv /bin/ls /temp
2.查询ls命令属于哪个软件包
rpm -qf /bin/ls
3.提取原包中ls
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
4.还原ls
cp /root/bin/ls /bin/
RPM包管理-yum命令管理
1.使用setup(Redhat专用)
2.修改配置文件,IP地址配置
1.vi /etc/sysconfig/network-scripts/ifconfig-eth0
把ONBOOT="no"改为ONBOOT="yes"启动网卡
2.重启网络服务
service network restart
3.网络yum源
vi /etc/yum.repos.d/CentOS-Base.repo
[base] 容器名称,一定要放在[]中
name 容器说明,可以随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器地址.默认是Centos官方的yum原服务器.也可以改成自己喜欢的yum源地址
enable 次容器是否生效,默认是1生效,不生效就是0
gpgcheck 如果是1是只RPM的数字证书生效,如果0则不生效
gpgkey 数字证书的公钥文件保存地址,不用修改
4.常用yum命令
yum list
查询所有可用软件包列表
yum search 关键词
搜索服务器上所有和关键词相关的包
yum -y install 包名
安装所需软件包
选项:
install 安装
-y 自动回答yes
yum -y update 包名
升级所需软件包
选项:
update 升级(不加包名就是升级服务器所有软件,容易出现问题,无法开机等问题)
-y 自动回答yes
yum -y remove 包名
卸载所需软件包
选项:
remove 卸载(此命令不完全,卸载时会卸载依赖包,所以安装时最小安装即可,尽量不卸载)
-y 自动回答yes
yum grouplist
列出可用的软件包组
yum groupinstall 软件组名
安装指定软件包组
yum groupremove 软件组名
卸载指定软件包组
5.光盘yum源搭建
1.挂载光盘
mount /dev/sr0 /media/cdrom
2.让在线yum源失效(改后缀名就好了)
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak
3.修改光盘yum源文件
vim CentOS-Media.repo
修改内容:
1.改yum地址为本地磁盘
baseurl=file:///media/cdrom (光盘地址,前后不能有空格)
ps:其他挂载地址注释掉,不然一直报错,但不影响使用
2.启用光盘yum源
enable=1
源码包和RPM包的区别
安装之前的区别:概念上的区别
安装之后的区别:安装位置不同
RPM包安装位置
绝大多数数默认安装位置
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
源码包安装位置
/usr/local/软件包/
安装位置不同带来的影响
RPM包安装的服务可以用系统服务管理命令(service)来管理,例如RPM包安装的Apache的启动方法
绝对地址:
/etc/rc.d/init.d/httpd star
服务命令:
service http start(Redhat专用)
源码包安装的服务不能被服务管理命令管理,只能用绝对路径进行服务管理
/usr/local/apache2/bin/apachectl start
源码包安装
安装准备
安装C语言编译器
下载源码包
mirror.bit.edu.cn/apache/httpd/
安装注意事项
源代码保存位置:/usr/local/src/
软件包安装位置:/usr/local/
如何确定安装过程中报错
安装过程停止
并出现error,warning,no等提示
下载好安装软件压缩包
解压后并进入软件源码包
./configure 软件包配置和检测
定义所需要的的功能选项
检测系统环境是否符合安装要求
巴定壕的功能选项和检测系统环境的信息都写入Makefile文件,用于后续编辑
命令:
配置
./configure --prefix=/usr/local/apache2
编译:
make
清理:
make clean
安装
make install
卸载:
直接删除安装目录
脚本安装包:
脚本安装包并不是独立的软件包类型,常见安装的是源码包
是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装
非常类似Windows下软件的安装方式
Webmin的作用
Webmin是一个基于Web的Linux系统管理界面,你可以通过图形化的方式设置用户账号,Apache,DNS,文件共享等服务
安装方式:
下载软件
https://sourceforge.net/projects/webadmin/files/webmin/
11.用户和用户组管理
用户文件
/etc/passwd
第1字段:用户名称
第2字段:密码标志(如果没有,本地登录就可以直接登录)
第3字段:UID(用户ID)
0 超级用户
1-499 系统用户(伪用户)
500-65535 普通用户
第4字段:GID(用户初始组)
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名
超级用户:/root/
第7字段:登录之后的shell
初始组和附加组
初始组:就是指用户已登录就立刻拥有这个用户组的相关权限,每个用户初始组只能有一个,一般就是这个用户的用户名相同的组名组为这个用户的初始组
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
shell是什么?
shell就是linux的命令解释器
在/etc/passwd当中,除了标准的shell是/bin/bash之外,还可以写如:/sbin/nologin
影子文件
/etc/shadow
第1字段:用户名
第2字段:加密密码(SHA512)
如果是!!或者*代表没有密码
第3字段:密码最后一次修改日期,使用1970-1-1号作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天使(和第5字段相比)
第6字段:密码过期后的宽限天数(和第5字段相比)
0:代表密码过期后立即失效
-1:则代表密码永远不会失效
第7字段:账号失效时间
要用时间戳表示
第9字段:保留
时间戳换算:
把时间换算成日期
date -d "1970-01-01 16066 days"
把日期换算成时间戳
echo $(($(date --date="2020-11-04" +%s)/86400+1))
组信息文件
/etc/group
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户
组密码文件
/etc/gshadow
第1字段:组名
第2字段:组密码(一般不推荐,会降低系统安全性)
第3字段:组管理员用户名
第4字段:组中附加用户
用户家目录
普通用户:/home/用户名,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是500
用户的邮箱
/var/spool/mail/用户名/
用户模板目录(添加用户时默认从这里拷贝文件到用户的家目录)
/etc/skel/
用户添加
格式:
useradd [选项] 用户名
-u UID,手动指定用户的UID号
-d 家目录,手动指定用户的家目录
-c 用户说明,手动指定用户的说明
-g 组名,手动指定用户的初始组
-G 组名,手动指定用户的附加组
-shell 手动指定用户的登录shell,默认是/bin/bash
用户默认值文件
/etc/default/useradd
GROUP=100 用户默认组
HOME=/home 用户家目录
INACTIVE=-1 密码过期宽限天数
EXPIRE= 密码失效时间
SHELL=/bin/bash 默认shell
SKEL=/etc/skel 模板目录
CREATE_MAIL_SPOOL=yes 是否建立邮箱
/etc/login.defs
MAIL_DIR /var/spool/mail 邮件存放路劲
PASS_MAX_DAYS 99999 密码有效期
PASS_MIN_DAYS 0 密码修改间隔时间
PASS_MIN_LEN 5 密码最小位数
PASS_WARN_AGE 7 密码到期警告
UID_MIN 500 最小用户ID
UID_MAX 60000 最大用户ID
GID_MIN 500 最小用户组ID
GID_MAX 60000 最大用户组ID
CREATE_HOME yes 创建家目录
UMASK 077 目录权限
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512 加密模式
密码修改
格式:
passwd [选项] 用户名
-S 查询用户密码的密码状态,近root用户可用
-l 暂时锁定用户,仅root用户可用
-u 解锁用户,仅root用户可用
--stdin 可以通过管道符输出的数据作为用户的密码
echo "123" | passwd --stdin username
修改用户信息
格式:
usemod [选项] 用户名
-u UID,手动指定用户的UID号
-c 用户说明,手动指定用户的说明
-G 组名,手动指定用户的附加组
-L 临时锁定用户
-U 解锁用户
查询用户密码状态
格式:
chage [选项] 用户名
-l 列出用户的详细密码状态
-d 日期,修改密码最后一次更改日期
-m 天数,两次密码修改间隔
-M 天数,密码有效期
-W 天数,密码过期前警告天数
-I 密码过期后宽限天数
-E 账号失效时间
删除用户
格式:
userdel [-r] 用户名
-r 删除用户的同时删除用户的家目录
手工删除用户:
vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /etc/gshadow
rm -rf /var/spool/mail/用户名
rm -rf /home/用户名
查看用户ID
格式:
id 用户名
切换用户
格式:
su [选项] 用户名
- 选项只能使用"-"时,代表连带用户的环境变量一起切换
-c 仅执行一次命令,而不切换用户身份
查看用户环境变量
格式:
env
用户组管理
添加:
格式:
groupadd [选项] 组名
-g GID,手动指定ID
修改:
格式:
groupmod [选项] 组名
-g GID,修改组ID
-n 新组名,修改组名
删除:
格式:
groupdel 组名
把用户加入某组或从某组删除
格式:
gpasswd 选项 组名
-a 用户名 把用户加入组
-d 用户名 吧用户从组中删除
12.权限管理
ACL权限
简介
由于默认的系统权限不能满足时,需要特殊权限分配,和windows的权限分配类似
开启
临时生效:
mount -o remount,acl /
永久生效:
1.修改fstab文件(开启启动挂载配置)
vim /etc/fstab
挂载根分区的default改成default,acl
2.重新挂载文件系统或重启生效
mount -o remount /
查看ACL
格式:
getfacl 文件名
设定ACL
格式:
setfacl 选项 文件名
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认的ACL权限
-R 递归设定ACL权限
示例:
给人设定权限
setfacl -m u:用户名:权限rwx 文件路径
给组设定权限
setfacl -m g:组名:权限rwx 文件路径
设置最大有效权限mask
用来预防最大权限,可以防止在赋给用户权限时给与权限过大的情况发生
格式:
setfacl -m m:权限rwx 文件路径
删除ACL权限
删除整个ACL权限
setfacl -b 文件路径
删除指定用户或组的ACL权限
setfacl -x u:用户 文件路径
setfacl -x g:组名 文件路径
递归ACL权限(当前目录以及目录下的所有文件)
格式:
setfacl -m u:用户名:权限rwx -R 文件路径
-R 递归修改ACL权限
默认ACL权限(新建的文件或子目录都会继承这个目录的权限)
格式:
setfacl -m d:u:用户名:权限rwx 文件路径
文件特殊权限
SetUID
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只有在改程序执行过程中有效,也就是说身份改变只有在程序执行过程中有效
例如:passwd指令
ll /usr/bin/passwd
他的权限是 -rwsr-xr-x 其中所属主执行权限是s,组和其他有x执行权限,如果当前文件有问题rws会变成rwS大写的,提醒用户
设定SetUID的方法(危险)
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
ps: 关键目录应该严格控制写权限,比如"/" ,"usr" 等等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有的SetUID权限文件做一列表,定时检测有没有之外的文件被设置了SetUID权限
SetGID
设定SetGID的方法
2代表SGID
chmod 2755 文件名
chmod g+s 文件名
针对二进制文件
只有可以执行的二进制程序才能设定SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetUID权限同样只在该程序执行过程中有效,SetGID同样适用
例如:locate指令
ll /usr/bin/locate
他的权限是 -rwx--s-x 其中所属组执行权限是s,组和其他有x执行权限,如果当前文件有问题rws会变成rwS大写的,提醒用户
针对目录的作用
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
Sticky BIT
设定SBIT的方法
1代表SBIT
chmod 1755 文件名
chmod o+t 文件名
取消SBIT的方法
chmod 755 文件名
chmod o-t 文件名
SBIT粘着位作用
粘着位目前只对目录有效
普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件.
一旦赋予了粘着位,处了root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户对的文件
例如:
/temp/目录中的权限drwxrwxrwt. 中的t就是粘着位
文件系统属性权限
格式:
chattr [+-=] [选项] 文件或目录名
+ 增加权限
- 删除权限
= 等于某权限
选项:
i
对于文件
不允许对文件进行删除,改名,也不能添加任何数据,只能查看内容(root也不能操作)
对于目录
只能修改目录下的文件的数据,但不能建立或删除文件
a
对于文件
只能在文件中增加数据,但是不能修改也不能删除数据
对于目录
只能在目录建立和修改文件,但不允许删除
示例:
chattr +i 文件名
查看文件系统属性
格式:
lsattr 选项 文件名
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件
sudo权限
root把本来只能用超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
命令:
编辑权限命令:
visudo
实际修改的是/etc/sudoers文件

添加权限示例:
限制某用户可以执行重启命令
格式:(路径是写绝对路径)
用户名 ALL=/sbin/shutdown -r now
使用方法
格式:
sudo /sbin/shutdown -r now
ps:不要给普通用户赋予vi此类命令的权限
14.文件系统管理
分区和文件系统
分区类型:
主分区:总共最多只能分四个
扩展分析:只能有一个,也算主分区的一种,也就是说主分区加扩展分区最多有四个.但是扩展分区不能存储数据和格式化,必须在划分成逻辑分区才能使用
逻辑分区:逻辑分区是在扩展分区划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区
分区表示方法:
方法1:
主分区1 sda1
主分区2 sda2
主分区3 sda3
扩展分区 sda4
逻辑分区1 sda5
逻辑分区2 sda6
逻辑分区3 sda7

方法2:(逻辑分区是从sda5开始)
主分区1 sda1
扩展分区 sda2
逻辑分区1 sda5
逻辑分区2 sda6
逻辑分区3 sda7
文件系统
ext2:
是ext文件系统的升级版本,Red Hat linux7.2版本以前的系统默认都是ext2文件系统,1993年发布,最大支持16TB的分区和最大2TB的文件
ext3:
是ext3文件系统是ext2文件系统的升级版本,最大区别就是带日志功能,在系统突然停止时提高文件系统的可靠性,其他不变
ext4:
它是ext3文件系统的升级版,ext4在性能,伸缩性和可能性方面进行了大量改进,并向下兼容,
支持最大1EB文件系统和16TB文件,无线数量子目录,Extent连续数据块概念,多块分配,延迟分配,持久预分配,快速FSCK,
日志校验,无日志模式,在线碎片整理,inode增强,默认启用barrier等
文件系统常用命令:
文件系统查看命令
df [选项] [挂载点]
-h 人性化显示
-a 显示所有的文件系统信息,包括特殊的文件系统,如/proc,/sysfs
-T 显示文件系统类型
-m 以MB单位显示容量
-k 以KB单位显示容量,默认为KB
统计目录或文件大小
du [选项] [目录或文件名]
-a 显示每个子文件的磁盘占用量,默认只统计目录的磁盘占用量
-h 人性化显示
-s 只统计占用量,而不列出子目录和子文件的占用量
示例:
一般用于查询目录占用磁盘空间
du -sh [文件或目录]
du和df的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的文件已经删除了,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录的占用空间
ps:linux定时重启让系统恢复到最佳状态
文件系统修复命令
fsck [选项] 分区设备文件名
-a 不显示用户提示,自动修复文件系统
-y 自动修复,和-a作用一样,不过有些文件系统只支持-y
显示磁盘状态命令
dumpe2fs 分区设备文件名
查询命令
查询系统中已挂载的设备
mount [-l]
-l 会显示卷标名
根据配置文件/etc/fstab的内容,自动挂载
mount -a
挂载命令格式
mount [-t 文件系统] [-L 卷标名] [-o 特殊选线] 设备文件名 挂载点
-t 文件系统 加入文件系统类型来指定挂载的类型,可以是ext3,ext4 等文件系统
-L 卷标名 挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项 可以指定挂载的额外选型
挂载光盘
建立挂载点
mkdir /media/cdrom
挂载光盘
mount /dev/cdrom /media/cdrom(是sr0的硬链接)
mount /dev/sr0 /media/cdrom
卸载命令
umount 设备文件名或挂载点
挂载U盘
查看U盘设备文件名
fdisk -l
找到U盘设备名,挂载U盘
mount -t vfat /dev/sdb1 /media/usb/
ps:
linux默认是不支持NTFS文件系统
linux中识别U盘的fat16格式为fat,fat32识别vfat
支持Windows的NTFS文件系统
方法1:内核编译(用得太少,工作量太大)
方法2:第三方插件
下载NTFS-3G插件
mount -t ntfs-3g 分区设备文件名 挂载点
fdisk分区
fdisk分区命令过程
查看新硬盘
fdisk -l
新建一个分区
fdisk /dev/sdb
进入指令后可输入的参数
a 设置可引导标记
b 编辑bsd磁盘标签
c 设置DOS操作系统兼容标记
d 删除一个分区
l 显示已知的文件系统类型
m 帮助菜单
n 建立分区(常用)
o 建立空白DOS分区
p 显示分区列表(常用)
q 不保存退出
s 新建空白SUN磁盘标签
t 改变一个分区的系统ID
u 改变显示记录单位
v 验证分区表
w 保存退出
x 附加功能(仅专家)
重新读取分区表信息
partprobe
格式化分区
mkfs -t ext4 /dev/sdb1
创建分区
mkdir /disk1
mount /dev/sdb1 /disk1
分区自动挂载与fstab文件修复
/etc/fstab文件
第一字段:分区设备文件名或UUID(硬盘通用唯一识别码-dumpe2fs -h 分区设备名)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区时分被dump备份,0代表不备份,1代表每天备份,2代表不定期备份(在每个分区的lost+found)
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测优先级,那么当然1的优先级比2高
修改后,先挂载尝试,防止重启系统重启失败
mount -a
当重启挂载失败提示后,依然可以登录root,但是此时系统是只读,我们需要重新挂载读写权限(仅限于根分区没有挂载失败的情况下)
mount -o remount,rw /
15.shell
shell基础
什么是shell?
shell是一个命令解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序.
shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强.shell是解释执行语言,在shell中可以直接调用linux命令
类别
shell分为两种主要语法类型
Bourne家族:sh,ksh,Bash,psh,zsh
C家族:csh,tcsh
两种类型不兼容,一般我们都是B家族shell的Bash
Bash:
Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本shell
Linux中到底支持哪些shell?
/etc/shells
shell执行方式
echo输出命令
格式:
echo [选项] [输出内容]
-e 支持反斜线控制的字符转换
\ 输出本身
a 输出警告音
 退格键(向左删除一个字符)
c 取消输出行末的换行符,和"-n"选项一致
e ESCAPE键
f 换页符
换行符
回车符
制表符(也就是tab键)
v 垂直制表符
nnn 按照八进制ASCII码表输出字符,其中0是数字零,nnn是三位八进制数
xhh 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数
颜色输出:
echo -e "e[1;31m abcd e[0m"
30m 黑色
31m 红色
32m 绿色
33m 黄色
34m 蓝色
35m 洋色
36m 青色
37m 白色
第一个脚本
vi hello.sh
#!/bin/bash
#我的第一个脚本
#作者:胡丁文
echo -e "我是输出内容"
执行
赋予权限直接执行:
chmod 755 hello.sh
./hello.sh
通过调用bash执行脚本(不需要有执行权限)
bash hello.sh
转换window编写的命令
dos2unix 文件名
历史命令
格式:
history [选项] [历史命令保存文件]
-c 清空历史命令
-w 把缓存中历史命令写入历史命令文件~/.bash_history
默认保存1000条记录
/etc/profile
HISTSIZE=1000
执行历史命令
1.上下箭头调用以前的命令
2."1n"重复执行第n条历史命令
3."!!"重复执行上一条命令
4."!字符串"重复执行最后一条一该字符串开头命令
命令不全:
在bash中,命令与文件不全是非常方便的,按住tab键会自动进行不全,如果不出现可能有多个匹配,此时需要再按住一下tab
命令别名
格式:
alias 别名="原命令"
查询有哪些别名:
alias
命令执行顺序:
1.第一顺位执行用绝对路径或相对路径执行的命令
2.第二顺位执行别名
3.第三顺位执行bash的内部命令
4.第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
获取环境变量路劲:
echo $PATH
别名永久生效:
vi /root/.bashrc
删除别名:
unalias 别名
bash常用快捷键
ctrl+A 把光标移动到命令开头
ctrl+E 把光标移动到命令结尾
ctrl+C 终止当前命令
ctrl+L 清屏
ctrl+U 删除或剪切光标之前的字符
ctrl+K 删除或剪切光标之后的内容
ctrl+Y 粘贴之前剪切的内容
ctrl+R 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容就会从历史命令中搜索
ctrl+D 退出当前终端
ctrl+Z 暂停,并放入后台,这个快捷键牵扯工作管理的内容,后面了解
ctrl+S 暂停屏幕输出
ctrl+Q 恢复屏幕输出
输出重定向
标准输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出
输出重定向
类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式输出到文件中
标准输出重定向 命令 >> 文件 以追加的方式输出到文件中
标准错误输出重定向 命令 2> 文件 以覆盖的方式输出到文件中
标准错误输出重定向 命令 2>> 文件 以追加的方式输出到文件中
正确输出和错误输出同时保存
命令 > 文件 2>&1 以覆盖的方式输出到文件中
命令 >> 文件 2>&1 以追加的方式输出到文件中
命令 &> 文件 以覆盖的方式输出到文件中
命令 &>> 文件 以追加的方式输出到文件中
命令 >> 文件1 2>>文件2 正确追加到文件1,错误追加到文件2
输出内容丢到垃圾箱
ls &>/dev/null
输入重定向(不常用,了解)
wc [选项] [文件名]
-c 统计字节数
-w 统计单次数
-l 统计行数
示例:
wc < test
多命令顺序执行
多命令执行符号 格式 作用
; 命令1;命令2 多个命令顺序执行,命令之间没有任何联系
&& 命令1&&命令2 逻辑与,当命令1正确执行,命令2才会执行;当命令1不正确执行,名2不执行
|| 命令1||命令2 逻辑或,当命令1不正确执行,命令2才会执行;当命令1正确执行,命令2才不会执行
示例:
date;dd if=原文件 of=目标文件 bs=字节数 count=个数;date
date;dd if=/dev/zero of=/root/test bs=1k count=100000;date
管道符:|
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
示例:
ll /etc | less
netstat -an | grep "ESTABLISHED""
搜索内容命令:
grep [选项] "搜索的内容"
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 搜索出的关键词用颜色显示
通配符与其他特殊符号
通配符
? 匹配任意一个字符
* 匹配0个或任意多个任意字符,也就是匹配任何内容
[] 匹配中括号中任意一个字符.例如[abc]代表一定匹配一个字符a或b或c
[-] 匹配中括号中任意一个字符,-代表一个范围.例如[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符.例如:[^0-9]代表匹配一个不是数字的字符
示例:
rm -rf *
ls ?abc
ls [0-9]*
ls [^0-9]*
base其他常用特殊符号
'' 单引号,单引号中所有特殊符号都没有含义
"" 双引号,在双引号中特殊符号都没有特殊含义,但是$,\,`(反引号)例外,拥有调用变量的值,引用命令和转义的特殊含义
`` 反引号,反引号括起来的内容是系统命令,在bash中会先执行他,和$()作用一样,不过推荐使用$(),因为反引号非常容易看错
$() 反引号作用一样,用来引用系统命令
# 代表注释
$ 用于调用变量的值,如果调用变量name的值时,需要用到$name的方式得到变量的值
转义符,跟在之后的特殊符号将失去特殊符号的意义
什么是shell变量?
变量是计算机内容的单元,其中存放的值可以改变.当shell脚本需要保存一些信息时,
如果一个文件名或是一个数字,就把它存放在一个变量中.每个变量有一个名字,所以很容易引用它.
使用变量可以保存有用信息,使系统获取用户相关设置,变量也可以用户保存暂时信息
变量设置规则:
变量名称可以由字母,数字和下划线组成,但不能以数字开头
在base中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型
变量用登号连接值,登号左右两侧不能有空格,如果有空格必须用单引号或双引号包括
在变量的值中,可以使用""转义符
如果需要增加变量的值,那么可以进行变量值得叠加,不过变量需要用双引号包含"$变量名"或$(变量名)包含
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
name=$(date)
echo name
环境变量名建议大写,便于区分
变量分类
用户自定义变量
自定义的变量名
name="123"
echo $name
变量叠加
aa=123
aa="$aa"456
aa=${aa}789
echo $aa
环境变量
这种变量中主要保存的是和操作系统环境相关的数据
相对于用户自定义变量只在当前shell生效,而环境变量会在当前shell和这个shell的所有子shell当中生效.
如果环境变量写入相应配置文件,那么这个环境变量就会在所有shell中生效
定义环境变量:
export 变量名=变量值
查询系统变量
env
系统查找命令的路径
echo $PATH
PATH变量叠加
PAHT="$PATH":/root/sh
定义系统提示符的变量(控制台)
PS1
d 显示日期,格式为"星期 月 日"
h 显示简写的主机名,如默认主机名"localhost"
显示24小时制时间,格式为"HH:MM:SS"
T 显示12小时制时间,格式为"HH:MM:SS"
A 显示24小时制时间,格式为"HH:MM"
u 显示当前用户
w 显示当前用户所在目录的完整路径
W 显示当前用户所在目录的最后一个目录
# 执行的第几个命令
$ 提示符,如果是root用户会显示提示符为"#",如果是普通用户会显示提示符为"$"
示例:
PS1='[u@ W]$ '
位置参数变量(也是预定义变量的一种)
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
示例:
#!/bin/bash
echo $0
echo $1
echo $2
echo ${10}
示例:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1 + $num2))
echo $sum
如果要数值计算,要在$(())中计算
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
示例:
for i in "$*"
do
echo "parameters is:$i"
done
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待(和@*相比较,$@可以理解成一个数组,而@*是所有参数拼接成的一个字符串)
示例:

for i in "$@"
do
echo "parmeters is:$i"
done

$# 这个变量代表命令行中所有的参数的个数
接收键盘输入
read [选项] [变量名]
-p "提示信息" 在等待read输入时,输出提示信息
-t 秒数 read指令会在一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 read命令只能接收指定的字符数,就会执行
-s 隐藏输入的数据,适用于机密信息输入
示例:
read -t 30 -p "请输入你的姓名:" name
read -t 30 -s -p "请输入你的年龄:" age
read -t 30 -n 1 -p "请随意输入:" txt

预定义变量
在bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
$? 最后一次执行的命令返回装填,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量非0,则上一个命令执行不正确,具体是哪个数,由系统自己来决定.
示例:
echo $?
$$ 当前进程的进程号PID
$! 后台运行的最后一个进程的进程号PID
查看系统所有变量
set
删除变量
unset 变量名
bash数值运算和运算符
declare声明变量类型
declare [+/-][选项] 变量名
- 给变量设定类型属性
+ 取消变量的类型属性
-i 将变量声明为整数型(integer)
-x 将变量声明为环境变量(功能和 "export 变量" 一样)
-p 显示指定变量的被声明的类型
数值运算
方法1:
declare -i cc=$变量名1+$变量名2
方法2:(expr或let)
变量名=$(expr $变量名1 + $变量名2)
方法3:(推荐使用)
格式:$((运算式))或$[运算式]
ps:$(命令)单括号是执行命令,双括号是运算式
变量名=$(($变量名1 + $变量名2))
运算符:+-*/等等...
主要考虑优先级的计算
环境变配置文件
source命令:主要是配置的环境变量立即生效
格式1:
source 配置文件
格式2
. 配置文件
主要配置文件:(~指的是家目录,~只对当前用户生效,定义到越后面的变量优先级越高)读取的先后顺序从上往下
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
其他配置文件和登录信息
注销时生效的系统环境变量配置文件
~/.bash_logout
其他配置文件
历史命令
~/bash_history
shell登录信息
本地终端欢迎信息(登录前)
/etc/issue
转义符 作用
d 显示当前系统日期
s 显示操作系统名称
l 显示登录的终端号,这个比较常用
m 显示硬件体系结构,如i386,i686等
显示主机名
o 显示域名
显示内核版本
显示当前系统时间
u 显示当前登录用户的序列号
远程终端欢迎信息(登录前)
/etc/issue.net
转义符在/etc/issue.net文件中不能使用
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入"Banner /etc/issue.net"行才能显示(记得重启SSH服务:service sshd restart)
登陆后欢迎信(登录后)
不管是本地还是远程,都可以显示此欢迎信息
正则表达式
正则表达式与通配符区别
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep,awk,sen等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配. ls,find,cp这些命令不支持正则表达式.所以只能使用shell自己的通配符来进行匹配
基础正则表达式
元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首,例如^hello会匹配以hello开头的行
$ 匹配行尾,丽日hello$会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,只匹配一个字符
[^] 匹配中括号中以外的任意一个字符,只匹配一个字符
转义符,用于取消特殊符号的含义取消
{n} 表示前面的字符恰好出现n次,例如 [0-9]{4} 匹配一个四位数
{n,} 表示前面的字符不小于n次,例如 [0-9]{2,}匹配至少两位的数
{n,m} 表示前面的字符恰至少出现n次,最多出现m次,例如[a-z]{6,9}匹配6到9位数的小写字母
字符截取命令
cut字段提取命令(列提取,grep是行提取,一般cut也是配饰grep使用的)
格式:
cut [选项] 文件名
-f 列号 提取第几列
-d 分隔符 按照指定分隔符分割列(默认是制表符,tab键)
示例:获取linux的可登录用户(除了root用户外)
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
printf命令(经常用于awk截取命令中使用,能直接跟文件名也不能跟管道符使用)
格式:
printf '输出类型和输出格式' 输出内容
输出类型:
%ns 输出字符串,n是数字指代输出几个字符
%ni 输出证书,n是数字指代输出几个数字
%m.nf 输出浮点数,m和n是数字,指代输出的整数位数和小数位数.如%8.2f代表输出8位数,其中2位是小数,6位是整数
输出格式:
a 发出警告音
 退格键
f 清除屏幕
换行
回车,也就是Enter键
水平输出退格键,也就是tab键
v 垂直输出退格键,也就是tab键
示例:
printf %s 1 2 3 4 5 6
printf %s %s %s 1 2 3 4 5 6 #如果%s没有用''括起就会输出第二和第三个%s
printf '%s %s %s' 1 2 3 4 5 6
printf '%s %s %s ' 1 2 3 4 5 6
printf %s $(cat test)
awk命令:
格式:
awk '条件1{动作1}条件2{动作2}...' 文件名
条件(Pattern):
一般使用关系表达式作为条件
x > 10 判断变量x是否大于10
x >= 10 大于等于
x <= 10 小于等于
动作(Action):
格式化输出
流程控制语句
示例:检测磁盘占用大于百分之80
df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1
BEGIN(要读取第一行)
awk 'BEGIN{print "test"} {print $1}' /etc/passwd
awk 'BEGIN{FS=":"} {print $1 " " $3}' /etc/passwd
END
awk 'BEGIN{FS=":"} {print $1 " " $3}END{print "ok"}' /etc/passwd
FS内置变量(标志分割符号)
关系运算符(取passwd中UID大0的)
awk 'BEGIN{FS=":"}$3>0{print $1 " " $3}' /etc/passwd
sed命令:
sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器
sed主要是用来将数据进行提取,替换,删除,新增的命令
相对于vi 是可以通过管道接收数据对数据进行操作
格式:
sed [选项] '[动作]' 文件名
选项:
-n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则会把经过sed命令处的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件而不是由屏幕输出
动作:
a 追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用"" 代表数据未完结
c 行替换,用c后面的字符串替换原数据行,替换对行时,除最后一行外,每行末尾需要用"" 代表数据未完结
i 插入,在当期行前插入一行或多行,插入多行时,出最后一行外,每行末尾需要用"" 代表数据未完结
d 删除,删除指定的行
p 打印,输出指定行
s 字符替换,用一个字符串替换另一个字符串.格式为"行范围s/旧字符串/新字符串/g"
示例:
获取指定行
sed -n '2p' test
删除指定行
sed '2,40d' test
在指定行追加
sed '2a hello' test
在指定行插入
sed '2i hello' test
sed '2i hello world' test
替换指定行
sed '2c nodata' test
字符串替换(加上-i会修改至文件)
sed 's/旧字符串/新字符串/g' 文件名
sed '1s/x/b/g' test
字符处理命令
排序命令
sort [选项] 文件名
-f 忽略大小写
-n 以数值型进行排序,默认使用字符串排序
-r 反向排序
-t 指定分隔符,默认是分隔符是制表符
-k n[,m] 按照指定的字段范围排序,从第n字段开始,字段结束(默认是到行尾)
示例:
sort /etc/passwd -n -t ":" -k 3,3 #通过用户的UID进行顺序排序
统计命令
wc [选项] [文件名]
-l 只统计行数
-w 只统计单词书
-m 只统计字符数
条件判断
文件存在判断
方法1:
test -e /etc/passwd
方法2:
[ -e /etc/passwd ] #两边要有空格
-d 判断目录
-e 判断文件或目录
-f 判断文件
-r 读权限
-w 写权限
-z 执行权限
结果?
通过echo $?
如果是0说明存在,如果非0,则不存在.
通过另一种方式判断:
test -e /etc/passwd && echo "yes" || echo "no"
[ -e /etc/passwd ] && echo "yes" || echo "no"
两个文件之间的比较[]
[文件1 -nt 文件2] 判断文件1是否比文件2新
[文件1 -ot 文件2] 判断文件1是否比文件2旧
[文件1 -ef 文件2] 判断文件1和文件2Inode节点是否一致
两个整数之间比较[]
[整数1 -eq 整数2] 整数1是否等于整数2
[整数1 -ne 整数2] 整数1是否不等于整数2
[整数1 -gt 整数2] 整数1是否大于整数2
[整数1 -lt 整数2] 整数1是否小于整数2
[整数1 -ge 整数2] 整数1是否大于等于整数2
[整数1 -le 整数2] 整数1是否小于等于整数2
字符串的判断[]
[-z 字符串] 判断字符串是否为空?
[-n 字符串] 判断字符串是否为非空?
[字符串1 == 字符串2] 判断字符串1是否和字符串2相等?
[字符串1 != 字符串2] 判断字符串1和字符串2是否不相等?
多重判断
判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终结果才是为真
判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,最后结果就为真
! 判断 逻辑非,是原始判断取反
流程判断
if语句:
单分支if条件语句
if [ 条件判断式 ];then
程序
fi

if [ 条件判断式 ]
then
程序
fi
示例:
判断服务磁盘利用率是否低于百分白纸
#!/bin/bash
#检测磁盘利用率是否大于百分之80?
rate=$(df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1)
echo $rate
if [ $rate -le 80 ]
then
echo "sd5 is not full!"
fi
echo "ok"
双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
示例:
备份mysql
#!/bin/bash
#备份mysql数据库
#同步系统时间
ntpdate asia.pool.ntp.org &>/dev/null
#把当前系统时间以ymd的形式赋给变量curdate
curDate=$(date +%y%m%d)
mysqlSize=$(du -sh /etc)
if [ ! -d /tmp/dbbak ]
then
mkdir /tmp/dbbak
fi
cd /tmp/dbbak
echo "Date : $curDate" > /tmp/dbbak/dbinfo.txt
echo "DAta size : $mysqlSize" >> /tmp/dbbak/dbinfo.txt
tar zcf mysql-lib-$curDate.tar.gz /etc dbinfo.txt &>/dev/null
rm -rf dbinfo.txt
示例2:
判断Apache服务器是否启动?
#!/bin/bash
#判断Apache是否启动成功?

echo "star checking httpd" >> /tmp/auto.log
port=$(nmap -sT 127.0.0.1 | grep tcp | grep http | awk '{print $2}')
echo "get http State : $port" >> /tmp/auto.log
if [ "$port" == "open" ]
then
echo "$(date) httpd is ok" >> /tmp/auto.log
else
service httpd start &>/dev/null
echo "$(date) restart httpd!!" >> /tmp/auto.log
fi
多分支if条件语句
if [ 条件判断式 ]
then
当前条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
else
当所有条件都不成立时,最后执行此程序
fi
case语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不不等于以上值,则执行此程序
;;
for循环
for 变量 in 值1 值2 值3 ...
do
程序
done
示例:

#!/bin/bash
#批量解压缩
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf ls.log
语法2:
for((初始值;循环控制条件;变量变化))
do
程序
done
示例:(一般用于数值)
#!/bin/bash
#从1加到100
s=0
for((i=1;i<=100;i=i+1))
do
s=$(($s+$i))
done
echo "1-100: $s"
while循环
while循环是不定循环,也称为条件循环.只要条件条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.
while [ 条件判断式 ]
do
程序
done
示例:
#!/bin/bash
#值小于100
i=1
s=0
while [ "$i" -le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo "this sum is : $s"
until循环
与while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序.一旦循环条件成立,则终止循环.
16.Linux服务管理
Linux服务
两种服务
RPM包默认安装的服务
独立的服务
基于xinetd服务
源码包安装的服务
启动与自启动
服务启动:就是在当前系统中让服务运行,并提供功能
服务自启动:自启动是让服务在系统开机或重启之后,随着时间的启动而自动启动服务.
查询已安装的服务
RPM包安装的服务
查看服务自启动状态,可以看到所有RPM包安装的服务
chkconfig --list
查看正在运行的程序:
ps -aux
源码包安装的服务
查看服务安装位置,一般是/usr/local/下
区别:
源码包安装至指定位置,一般是/usr/local
RPM包安装在默认位置中
服务脚本(一般通用):
/etc/init.d/ 启动脚本位置
/etc/sysconfig/ 初始化环境配置文件
/etc/ 配置文件位置
/etc/xinetd.conf xinetd配置文件
/etc/xinetd.d/ 基于xinetd服务的启动脚本
/var/lib/ 服务产生的数据放在这里
/var/log/ 日志
独立服务的启动
/etc/init.d/独立服务名 start|stop|restart|status
service 独立服务名 start|stop|restart|status (RedHat专用)
独立服务的自启动
方法1:
chkconfig [--level 运行级别] [独立服务名] [on|off]
方法2:
修改/etc/rc.d/rc.local文件
方法3:
使用ntsysv命令管理自启动(RedHat专用)
基于xinetd服务管理(了解)
源码包安装服务的启动
使用绝对路径调用启动脚本来启动,不同的源码包的启动脚本不用.可以查看源码包的安装说明,查看启动脚本的方法
源码包的自启动:
修改/etc/rc.d/rc.local文件
如果要通过service启动源码包,把源码包启动文件链接到 /etc/init.d/独立服务名
源码包加入chkconfig
源码包启动文件添加内容:
#chkconfig: 35 86 76
#description: my project
添加自启识别:
chkconfig --add 独立服务名
删除:
chkconfig --del 独立服务名
17.进程管理
进程简介
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都是自己的地址空间,并占用一定的系统资源
进程管理的作用
判断服务器健康状态
top [选项]
-d 秒数 刷新时间,系统默认3秒
?或h 显示交互模式的帮助
P 以CPU使用率排序,默认就是此选项
M 以内存的使用率排序
N 以PID排序
q 退出top
字段说明:
第一行:任务队列信息
12:26:45 系统当前时间
up 1 day,13:32 系统运行时间,本机运行1天13小时32分
2 users 当前登录两个用户
load average 0.00 0.00 0.00 系统在之前1分钟,5分钟,15分钟,的平均负载,一般认识小于1时,负载较小.如果大于1,系统已经超出负荷
第二行:进程信息
Tasks: 95total 系统中进程总数
1 running 系统正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程,如果不是0,需要手工检测僵尸进程
第三行:CPU信息
Cpu(s) 0.1%us 用户模式占用的CPU百分比
0.1%sy 系统模式占用的CPU百分比
0.0%ni 改变过优先级的用户进程占用CPU百分比
99.7id 空闲CPU的CPU百分比
0.1%wa 等待输入/输出的进程的占用CPU百分比
0.0%hi 硬中断请求服务占用的CPU百分比
0.1%si 软终端请求服务占用的CPU百分比
0.0%st st(steal time)虚拟时间百分比,就是当有虚拟机是,虚拟CPU等待时间CPU的时间百分比
第四行:物理内存信息
Men: 625344k total 物理内存的总量,单位KB
571504k used 已使用的物理内存数量
53840k free 空闲的物理内存数量
65800k buffers 作为缓冲的内存数量
第五行:交换分区(swap)信息
同上四行
查看系统中所有进程
ps aux 查看系统中所有进程,使用BSD操作系统格式
ps -le 查看系统中所有进程,使用Linux标准命令格式
字段说明:
USER 该进程是由哪个用户山上的
PID 进程的ID号
%CPU 该进程占用CPU资源的百分比,占用越高,进程约消耗资源
%MEM 该进程占用物理内容的百分之,占用越高,进程约消耗资源
VSZ 该进程占用虚拟内容的大小,单位KB
RSS 该进程占用示例物理内存的大小,单位KB
TTY 该进程是在哪个终端中运行的.其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端.pts/0-255代表虚拟终端
STAT 进程状态,常见状态有:R:运行,S:睡眠,T:停止状态,s:包含子进程,+:位于后台
START 进程的启动时间
TIME 该进程占用CPU的运算时间,注意不是系统时间
COMMAND 产生该进程的命令名
杀死进程(进程终止)
查看可用的进程信号
kill -l
kill 命令
重启进程
kill -1 进程号
强制杀死进程
kill -9 进程号
killall命令
killall [选项][信号] 进程名
-i 交互式,询问是否杀死某个进程
-I 忽略大小写
pkill命令(和killall功能相似,杀进程还可以踢用户)
pkill [选项][信号] 进程名
-t 按照终端号踢出用户
查看进程树
pstree [选项]
-p 显示进程的PID
-u 显示进程的所属用户
工作管理
把进程放入后台,末尾加&即可放入后台(无界面)
tar -zcf ect.tar.gz /etc & 我们也可以按下ctrl+z把当前的压缩任务放入后台
把进程放入后台,末尾加&即可放入后台(有界面)
top 在有界面的交互的情况下放入后台就没意义了
在top执行过程中,按下ctrl+z快捷键
查看后台额工作
jobs [-l]
-l 显示工作的PID
ps: "+"号代表最近一个放入后台的工作,也是恢复时默认恢复的工作.
"-"号代表倒数第二个放入后台的工作
将后台暂停的工作台恢复到前台执行
fg %工作号
%工作号 %号可以省略,但是注意工作号和PID的区别
bg %工作号
ps: 后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到前台
系统资源查看
监控系统资源,类似与top和ps
vmstat [刷新延时 刷新次数]
开机时内核检测信息
dmesg
dmesg | grep CPU
查看内存使用状态
free [-b|-k|-m|-g]
-b/k/m/g 单位
缓存和缓冲的区别
简单来说缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的
查看CPU信息
cat /proc/cpuinfo
查看系统运行时间和平均负载,top和w也可以看到
uptime
查看系统和内核相关信息
uname [选项]
-a 查看系统所有相关信息
-r 查看内核版本
-s 查看内核名称
判断当前系统的位数
file /bin/ls
查看当前Linux发行版本
lsb_release -a
列出进程打开或使用的文件信息
lsof [选项]
-c 字符串 只列出以字符串开头的进程打开的文件
-u 用户名 只列出某个用户的进程打开的文件
-p pid 列出某个PID进程打开的文件
系统定时任务
crond服务管理与访问控制
手动启动:
service crond restart
chkconfig crond on
crontab命令:
crontab [选项]
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
编辑crontab命令
crontab -e
格式: * * * * * 执行的任务(最小识别到分钟,不精确秒,他不一定是每分钟的第一秒执行的,只要在这分钟就可能触发)
第一个 * 几分
第二个 * 几时
第三个 * 几号
第四个 * 几月
第五个 * 星期几
特殊符号:
* 代表任何时间
, 代表不连续时间
- 代表连续的时间范围
*/n 代表每隔多久执行一次
ps:crontab中的%有含义,如果要用到%请加转义转义符
18.日志管理
日志管理简介
在Centos 6.x中日志服务已经由rsysylog取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的.
rsyslogd的特点
基于TCP网络协议传输日志信息
更安全的网络传输协议
有日志消息的及时分析框架
后台数据库
配置文件可以写简单的逻辑判断
与syslogd配置文件相兼容
常用日志的组作用
/var/log/cron 记录系统定时任务相关的日志
/var/log/cups 记录打印信息的日志
/var/log/dmesg 记录系统在开机时内核自检的信息,dmesg命令直接查看内核自检信息
/var/log/btmp 记录错误登录的日志,这个文件是二进制文件,不能直接vi查看,而是使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志.这个文件也是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/mailog 邮件日志
/var/log/message 系统重要消息日志,系统出问题后首先检查的就是这个日志文件
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会被记录.
/var/log/wtmp 永久记录所有用户登录,注销信息,同时记录系统的启动,重启,关机事件.(也是二进制文件,需要用last命令查看)
/var/run/utmp 记录当前已经登录的用户信息,这个文件会随用户的登录和注销而不断变化,只记录当前用户信息.同时这个文件不能直接vi,而要使用w,who,users等命令来查询
处理系统默认日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中
var/log/httpd RPM包安装的Apache服务的默认日志目录
var/log/mail RMP包安装的邮件服务的额外日志目录
rsyslogd日志服务
基本日志格式包含以下四列
事件产生的时间
发生事件的服务器的主机名
产生事件服务名或程序名
事件的具体信息
配置文件/etc/rsyslog.conf
authpri.* /var/log/secure
连接符号
"*" 代表所有日志,所有的日志等级都记录
"." 代表只有后面的的等级高的(包含该等级)日志都记录下来
".=" 代表只记录所需等级,其他等级都不记录
".!" 代表不等于,也就是除了该等级的日志外,其他日志都记录
日志等级
debug 调试日志
info 基本通知信息
notice 普通信息,但有一定的重要性
warning 警告信息,但是还不会影响到服务或系统的运行
err 错误信息,一般达到err级别的信息,就会影响系统或服务的运行了
crit 临界状况信息,比err等级还要严重
alert 警告状态信息,比crit还要严重,必须立即采取行动
emerg 疼痛等级信息,系统已经无法使用了
日志记录位置
日志文件的绝对路径 如/var/log/secure
系统设备文件 如/dev/lp0
转发给远程主机 如@192.168.1.111:80
用户名 如root
忽略或丢弃 如~
日志轮替
日志分割
日志命名
logrotate配置文件
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
......
logrotate命令
logrotate [选项] 配置文件名
如果此命名没有选项,则会按照配置文件中的条件进行日志轮替
日志轮替
-v 显示日志轮替的过程
-f 强制进行日志轮替,不管日志的轮替条件是否已经符合,强制配置文件中所有的日志进行轮替
Apache 日志加入轮替
vi /etc/logrotate.conf
/user/local/apache2/logs/access_log{
daily
create
rotate 30
}
19.启动管理
系统运行级别:
0 关机
1 单用户模式,想象成windows的安全模式,主要用户系统修复
2 不完全的命令模式,不含NFS服务
3 完全的命令模式,就是标准字符串界面
4 系统保留
5 图形界面
6 重启
查看系统运行级别命令:
runlevel
改变运行级别命令:
init 运行级别
系统默认运行级别
vim /etc/inittab
系统启动流程:
BIOS->MBR->MBR启动引导程序
->单系统直接启动->加载内核
->多系统->调用其他分区启动扇区中的引导程序->加载内核
->内核解压缩并自检->找到initramfs->建立仿真根目录->加载驱动->挂载真正系统根目录->/sbin/init
.....
grub中分区表示
硬盘 分区 Linux中设备文件名 Grub中设备文件名
第一快SCSI硬盘 第一个主分区 /dev/sda1 hd(0,0)
第二个主分区 /dev/sda2 hd(0,1)
扩展分区 /dev/sda3 hd(0,2)
第一个逻辑分区 /dev/sda5 hd(0,4)
第二快SCSI硬盘 第一个主分区 /dev/sdb1 hd(1,0)
第二个主分区 /dev/sda2 hd(1,1)
扩展分区 /dev/sdb3 hd(1,2)
第一个逻辑分区 /dev/sdb5 hd(1,4)
grub配置文件
/etc/grub.conf
default=0 默认启动第一个系统
timeout=5 等待时间,默认是5秒
splashimage=(0,0)/grub/splash.xpm.gz
这里是指定grub启动时背景图像文件的保存位置的
hiddenmenu 隐藏菜单
title Centos(2.6)
title就是标题的意思
root(0,0)
是指启动程序的保存分区
kernel /.....
定义内核加载时的选项
initrd /initramfs-...img
指定了initramfs内存文件系统镜像文件的所在文职
20.备份与恢复
linux系统需要备份的数据
/root/目录
/home/目录
/var/spool/mail/目录
/var/目录
其他目录(日志文件)
安装服务的数据
Apache需要备份的数据
配置文件
网页主目录
日志文件
mysql需要备份的数据
源码包安装的mysql: /usr/local/mysql/data
RPM包安装的mysql: /var/lib/mysql/
备份策略
完全备份(恢复方便)
完全备份就是指把所有需要的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录
增量备份(恢复麻烦)
每次备份都备份今天新增的数据
差异备份
每次备份都跟第一次完全备份相比新增的数据
dump和restore命令
dump命令:
dump [选项] 备份之后的文件名 原文件或目录
-level 就是我们说的0-9个备份级别
-f 文件名 指定备份之后的文件名
-u 备份成功之后,把备份时间记录在/etc/dumpdates文件
-v 显示备份过程中更多的输出信息
-j 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
-W 显示允许被dump的分区的备份等级和备份时间
示例:
备份分区
备份完整的boot分区
dump -0uj -f /root/boot.bak.bz2 /boot/
查看备份时间
cat /etc/dumpdates
复制日志文件到/boot分区
cp intall.log /boot/
增量备份
dump -1uj -f /root/boot.bak1.bz2 /boot/
查看备份时间和备份等级
dump -W
ps:
备份文件只能完整备份,目录才能增量备份
restore命令:
restore [模式选项] [选项]
模式选项:
-C 比较备份数据和实际数据的变化
-i 进入交互模式,手工选择需要恢复的文件
-t 查看模式,用户查看备份文件中拥有哪些数据
-r 还原模式,用户数据还原
选项:
-f 指定备份文件的文件名
示例:
比较当前目录下的文件和备份文件的差异
restore -C -f 备份文件
恢复
restore -r -f 备份文件1
restore -r -f 备份文件2

原文地址:https://www.cnblogs.com/Lxxv5/p/14209712.html