Linux
Linux系统简介
UNIX发展历史和发行版本
UNIX与Linux发展史:
- 1965年,美国麻省理工学院(MIT)、通用电气公司(GE)及AT&T的贝尔实验室联合开发Multics工程计划,其目标是开发一种交互式的具有多道程序处理能力的分时操作系统,但因Multics追求的目标过于庞大复杂,项目进度远远落后于计划,最后贝尔实验室宣布退出
- 1969年,美国贝尔实验室的肯·汤普森在DEC PDP-7机器上开发出了UNIX系统
- 1971年,肯·汤普森的同事丹尼斯·里奇发明了C语言;1973年,UNIX系统的绝大部分源代码用C语言重写,这位提高UNIX系统的可移植性打下基础
UNIX主要发行版本:
操作系统 | 公司 | 硬件平台 |
---|---|---|
AIX | IBM | PowerPC |
HP-UX | HP | PA-RISC |
Solaris | Sun | SPARC |
Linux | Red HatLinux、UbuntuLinux… | IA(Intel、AMD、Cyrix、RISE…) |
Linux发展史:
Linux系统诞生于1991年,由芬兰大学李纳斯(Linus Torvalds)和后来陆续加入的众多爱好者共同开发完成
Linux是开源软件,源代码开放的UNIX
Linux内核版本:
Linux内核官网:www.kernel.org
内核版本说明:2.6.18
目前最新的内核版本:5.16.1(2022.1.17)
Linux主要的发行版本:
redhat、CentOS、SuSE、fedora、gentoo linux、Mandriva、红旗Linux、turbolinux
debian、ubuntu、KNOPPIX
开源软件简介
阿帕奇、NGINX、MySQL、php、samba、mongoDB、python、Ruby、Sphinx
- 使用的自由:绝大多数开源软件免费
- 研究的自由:可以获得软件源代码
- 散步及改良的自由:可以自由传播、改良甚至销售
支撑互联网的开源技术LAMP:
- Linux:操作系统
- Apache:Web服务器
- MySQL:数据库
- PHP:编程语言
Linux应用领域
基于Linux的企业服务器:
信息统计网站:www.netcraft.com
嵌入式应用:
手机、平板电脑;智能家电;智能卡系统;航空系统;银行系统等
Linux在电影娱乐业:
CAD/CAM处理图形界面
Linux学习方法
为什么选择命令行:命令行可以减少Linux犯错几率,在服务器机房中也无需展示图形化界面
解决问题:帮助、文档、示例、查找
英文提示:最常用的报错:Command not fount(命令错误)、No Such file or directory(文件名错误)
忘记Windows思维方式
Linux系统安装
系统分区
磁盘分区:
磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区(Partition),不同类的目录与文件可以存储进不同的分区
分区分类:
主分区:最多只能有4个
扩展分区:最多只能有1个;主分区加扩展分区最多有4个;不能写入数据,只能包含逻辑分区
逻辑分区
格式化:
格式化(高级格式化)又称逻辑格式化,它是指根据用户选定的文件系统(如FAT16、FAT32、NTFS、EXT2、EXT3、EXT4等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间
硬件设备文件名:
硬件 | 设备文件名 |
---|---|
IDE硬盘 | /dev/hd[a-d] |
SCSI/SATA/USB硬盘 | /dev/sd[a-p] |
光驱 | /dev/cdrom或/dev/sr0 |
软盘 | /dev/fd[0-1] |
打印机(25针) | /dev/lp[0-2] |
打印机(USB) | /dev/usb/lp[0-15] |
鼠标 | /dev/mouse |
分区设备文件名:
- /dev/hda1(IDE硬盘接口)
- /dev/sda1(SCSI硬盘接口、SATA硬盘接口)
注意:主分区占用1-4号数字,逻辑分区只有从5号开始
挂载:
必须分区
- /(根分区)
- swap分区(交换分区,内存2倍,不超过2GB)
推荐分区
- /boot(启动分区,200MB)
分区:将大硬盘分为小的逻辑分区
格式化:写入文件系统
分区设备文件名:给每个分区定义设备文件名
挂载:给每个分区分配挂载点
系统安装
首先进入BIOS界面(F2),将硬盘启动改为光盘启动,在系统安装完成之后,将光盘启动改为硬盘启动
安装欢迎界面:
“Install or upgrade an existing system”:安装或升级现有系统
“Install system with basic video driver”:安装过程采用基本的显卡驱动
“Rescure install system”:进入系统修复模式
“Boot from local drive”:退出安装从硬盘启动
“Memory test”:存储介质检测
密码原则:
复杂性
- 八位字符以上、大小写字母、数字、符号(包含三种)
- 不能是英文单词
- 不能是和用户相关的内容
易记忆性
时效性
软件包选择:
- Desktop(桌面)
- Minimal Desktop(最小化桌面)
- Minimal(最小化)
- Basic Server(基本服务器)
- Database Server(数据库服务器)
- Web Server(网页服务器)
- Virtual Host(虚拟主机)
- software development workstation(软件开发工作站)
安装日志:
- /root/install.log:存储了安装在系统中的软件包及其版本信息
- /root/install.log.syslog:存储了安装过程中留下的事件记录
- /root/anaconda-ks.cfg:以Kickstart配置文件的格式记录安装过程中设置的选项信息
远程登录管理工具
设置Linux的IP地址:
[root@localhost ~]# ifconfig eth0 192.168.xxx.xxx
SecureCRT远程连接管理工具
Winscp文件拷贝工具
学习Linux的注意事项
Linux严格区分大小写
Linux中所有内容以文件形式保存,包括硬件
硬盘文件是/dev/sd[a-p]
光盘文件是/dev/sr0等
Linux不靠扩展名区分文件类型
压缩包:” *.gz “、” *.bz2 “、” *.tar.bz2 “、” *.tgz “等
二进制软件包:” .rpm “
网页文件:” *.html “、” *.php “
脚本文件:” *.sh “
配置文件:” *.conf “
Linux所有的存储设备都必须挂载之后用户才能使用,包括硬盘、U盘和光盘
Windows下的程序不能直接在Linux中安装和运行
服务器的管理和维护
Linux各目录的作用:
目录名 | 目录作用 |
---|---|
/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行。不过放在/bin下的命令在单用户模式下也可以执行 |
/sbin/ | 保存与系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看 |
/usr/bin/ | 存放系统命令目录,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
/usr/sbin/ | 存放根文件系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到Linux的系统,在所有“sbin”目录中保存的命令只有超级用户可以使用,“bin”目录中保存的命令所有用户都可以使用 |
/boot/ | 系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设置文件保存位置。我们已经说过Linux中所有的内容以文件形式保存,包括硬件。那么这个目录就是用来保存所有硬件设备文件的 |
/etc/ | 配置文件保存位置。系统中所有采用默认安装方式(rpm安装)的服务的配置文件全部都保存在这个目录当中,如用户账户和密码,服务的启动脚本,常用服务的配置文件等 |
/home/ | 普通用户的家目录,建立每个用户时,每个用户要有一个默认登录位置,这个位置就是这个用户的家目录,所有普通用户的家目录就是在/home下建立一个和用户名相同的目录,如用户user1的家目录就是/home/user1 |
/lib/ | 系统调用的函数库保存位置 |
/lost+found/ | 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录 |
/media/ | 挂载目录。系统建议是用挂载媒体设备的,例如软盘和光盘 |
/mnt/ | 挂载目录,早期Linux中只有一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载NFS服务的共享目录。只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然准备了三个默认挂载目录/media、/mnt、/misc但是到底在哪个目录中挂载什么设备都可以由管理员自己决定 |
/opt/ | 第三方安装的软件保存位置。这个目录就是放置和安装其他软件的位置,我们手工安装的源码包软件都可以安装在这个目录当中。也可以存放在**/usr/local/**目录当中 |
/proc/ | 虚拟文件系统,该目录中的数据并不保存到硬盘当中,而是保存到内存当中。主要保存系统的内核,进程,外部设备状态和网络状态灯 |
/sys/ | 虚拟文件系统。和/proc目录相似,都是保存在内存当中的,主要是保存与内核相关信息 |
/root/ | 超级用户的家目录 |
/srv/ | 服务数据目录。一些系统启动之后可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,该目录下所有用户都可访问和写入 |
/usr/ | 系统软件资源目录。注意usr不是user缩写,而是“Unix Softwre Resource”的缩写,所以不是存放用户数据,而是存放系统软件资源的目录 |
/var/ | 动态数据保存位置。主要保存缓存、日志记忆软件运行所产生的文件 |
服务器注意事项:
- 远程服务器不允许关机,只能重启
- 重启时应该关闭服务
- 不要在服务器访问高峰运行高负载命令
- 远端配置防火墙时不要把自己踢出服务器
- 指定合理的密码规范并定期更新
- 合理分配权限
- 定期备份重要数据和日志
Linux常用命令
文件处理命令
命令格式:命令 [-选项] [参数]
例如:ls -la /etc
说明:
个别命令不遵循此格式
当有多个选项时,可以写在一起
简化选项与完整选项
如:-a = –all
目录处理命令:ls
命令名称:ls
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
语法:ls 选项[选项] [文件或目录]
-a
显示所有文件,包括隐藏文件
-l
详细信息显示
-d
查看目录属性
-h
将文件内容大小以GB、KB等易读方式显示
-i
文件的文件号
功能描述:显示目录文件
目录处理命令:mkdir
命令名称:mkdir
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p [目录名]
-p
递归创建
功能描述:创建新目录
目录处理命令:cd
命令名称:cd
命令英文原意:change directory
命令所在路径:shell内置命令
执行权限:所有用户
语法: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
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:创建空文件
文件处理命令:cat
命令名称:cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
-n
显示行号
功能描述:显示文件内容
文件处理命令:more
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
语法:more [文件名]
(空格)或f
向下翻页
(Enter)
向下一行
q或Q
退出
功能描述:分页显示文件内容
文件处理命令:less
命令名称:less
命令所在路径:/bin/less
执行权限:所有用户
语法:less [文件名]
(空格)或f
向下翻页
(Enter)
向下一行
q或Q
退出
PageUp
向上翻页
上箭头
向上一行
/关键词
搜索关键词、n
下一个关键词所在位置
功能描述:分页显示文件内容(可向上翻页)
文件处理命令:head
命令名称:head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]
-n 行号
指定行数
功能描述:显示文件前面几行(默认前10行)
文件处理命令:tail
命令名称:tail
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
-n 行号
指定行数
-f
动态显示文件末尾内容(一般用于监控日志末尾信息)
功能描述:显示文件最后几行(默认前10行)
链接命令:ln
命令名称:ln
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [文件名]
-s
创建软链接
功能描述:生成链接文件
软链接:类似Windows中的快捷方式,lrwxrwxrwx
硬链接:拷贝cp -p + 同步更新;源文件丢失,硬链接也可以访问
- 通过i节 点识别(硬链接的文件与源文件使用相同的i节点编号)
- 不能跨分区
- 不能针对目录使用
权限管理命令
权限管理命令:chmod
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
只有所有者和管理员root可以更改文件权限
语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录]
u所有人,g所属组,o其他人,a所有用户
r—4,w—2,x—1
rwxrw-r–
7 6 4
[mode=421] [文件或目录]
-R
递归修改
功能描述:改变文件或目录权限
代表字符 | 权限 | 对文件的含义 | 对目录的含义 |
---|---|---|---|
r | 读权限 | 可以查看文件内容 | 可以列出目录中的内容 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、删除文件 |
x | 执行权限 | 可以执行文件 | 可以进入目录 |
rw-r–r–的详细介绍:
- rw- r-- r--
9 876 543 210
九号位:-文件类型
- p表示命名管道文件
- d表示目录文件
- l表示符号连接文件
- -表示二进制普通文件
- s表示socket文件
- c表示字符设备文件
- b表示块设备文件
零到八号位:rw- r– r–
u g o
u所有者、g所属组、o其他人
r读、w写、x执行
权限管理命令:chown
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
只有管理员root可以对文件的所有者进行改变,文件当前所有者不能改变
语法:chown [用户] [文件或目录]
功能描述:改变文件或目录的所有者
权限管理命令:chgrp
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户] [文件或目录]
功能描述:改变文件或目录的所属组
权限管理命令:umask
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
-S
以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限
文件搜索命令
文件搜索命令:find
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件]
find .
在当前文件下查找
-name
通过文件名搜索
-iname
通过文件名搜索不区分大小写
*文件名*
模糊搜索,匹配任意字符(只要包含该文件名的都进行搜索)文件名???
模糊搜索,匹配单个字符(以文件名开头后跟三个字母)
-size
通过文件大小查找
+n
大于n-n
小于n=n
等于(不常使用 )
-user
通过所有者查找
-group
通过所属组查找
-amin
查找在时间内被浏览过的文件
-cmin
查找在时间内被修改过文件属性的文件
-mmin
查找在时间内被修改过内容的文件
-a
两个条件同时满足
-o
两个条件满足任意一个即可
-type
根据文件类型查找:f文件 d目录 l软链接文件
-inum
根据i节点查找
-exec/-ok 命令 {} \;
对搜索结果执行操作
功能描述:文件搜索
文件搜索命令:locate
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
updatedb
更新升级资料库(tmp临时文件资料库是无法查找的)
-i
在搜索是不区分大小写
功能描述:在文件资料库中查找文件,一般用于搜索系统文件
需要在Linux系统中装locate(yum install mlocate)
文件搜索命令:which
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述:搜索命令所在目录及别名信息
文件搜索命令:whereis
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径
文件搜索命令:grep
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep [选项] [指定字串] [文件]
-i
不区分大小写
-v
排除指定字串(^#不显示以#开头的行)
功能描述:搜索命令所在目录及帮助文档路径
帮助命令
帮助命令:man
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
(不需要用man + 绝对路径)
1:命令的帮助;5:配置文件的帮助
功能描述:获得帮助信息
语法:
whatis [命令或配置文件]
功能描述:获取文件name部分信息
语法:
apropos [命令或配置文件]
功能描述:显示配置文件的信息
语法:
[命令] --help
功能描述:显示命令功能
帮助命令:help
命令名称:help
命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息
用户管理命令
用户管理命令:usseradd
命令名称:useradd
命令所在路径: /usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户
用户管理命令:who
命令名称:who
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息(tty:本地终端;pts:远程终端)
用户管理命令:w
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息(tty:本地终端;pts:远程终端)
文件压缩解压命令
文件压缩命令:gzip
命令名称:gzip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件
压缩后文件格式:.gz
gzip只可以压缩文件,不可以压缩目录;且不保存源文件
文件解压命令:gunzip
命令名称:gunzip
命令英文原意:GNUunzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压.gz的压缩文件
文件打包并压缩命令:tar
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar [选项] [-zcf] [压缩后文件名] [目录]
-c
打包
-v
显示详细信息
-f
指定文件名
-z
打包同时压缩
功能描述:打包目录
打包并压缩后文件格式:.tar.gz
文件解包并解压命令:tar
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar 选项[-zxf] [解压文件名]
-x
解包
-v
显示详细信息
-f
指定解压文件
-z
解压缩
功能描述:.tar.gz文件解压并解包
tar的其他用法:
tar -cjf [压缩后文件名] [目录]
生成.tar.bz2文件,可保留原文件
tar -xjf [解压文件名]
解压.tar.bz2文件
文件压缩命令:zip
命令名称:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:zip 选项[-r] [压缩后文件名] [文件或目录]
-r
压缩目录
功能描述:压缩文件或目录
压缩后文件格式:.zip
文件解压命令:unzip
命令名称:unzip
命令所在路径:/usr/bin/unzip
执行权限:所有用户
语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
文件压缩命令:bzip2
命令名称:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
语法:bzip2 选项 [-k] [文件]
-k
产生压缩文件后保留原文件
功能描述:压缩文件(压缩比非常大,建议使用在较大文件上)
压缩后文件格式:.bz2
网络命令
网络命令:write
指令名称:write
指令所在路径:/usr/bin/write
执行权限:所有用户
语法:write <用户名>
功能描述:给用户发信息,以Ctrl+D保存结束
网络命令:wall
指令名称:wall
命令英文原意:write all
指令所在路径:/usr/bin/wall
执行权限:所有用户
语法:wall [message]
功能描述:发广播信息
网络命令:ping
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping 选项[-c] IP地址
-c
指定发送次数
功能描述:测试网络连通性
网络命令:ifconfig
命令名称:ifconfig
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
网络命令:mail
命令名称:mail
命令所在路径:/bin/mail
执行权限:所有用户
语法:mail [用户名]
功能描述:查看发送电子邮件
网络命令:last
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
语法:lastlog 选项[-u] 用户的uid
-u
查看该用户的登录信息功能描述:显示最后一次登录信息
网络命令:traceroute
命令名称:traceroute
命令所在路径:/bin/traceroute
执行权限:所有用户
语法:traceroute
功能描述:显示数据包到主机间的路径
网路命令:netstat
命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
-t
TCP协议
-u
UDP协议
-l
监听
-r
路由
-n
显示IP地址和端口号
功能描述:显示网络相关信息
语法:
netstat -tlun
功能描述:查看本机所有的端口
语法:
netstat -an
功能描述:查看本机所有的网络连接
语法:
netstat -rn
功能描述:查看本机路由表
网络命令:setup
命令名称:setup
命令所在路径:/usr/bin/setup
执行权限:root
语法:setup
功能描述:配置网络
挂载命令
命令名称:mount
命令位置:/bin/mount
执行权限:所有用户
语法:mount [-t 文件系统] 设备文件名 挂载点
语法:
unmount 设备名称
功能描述:取消挂载设备
关机重启命令
关机重启命令:shutdown
命令名称:shutdown
执行权限:root
语法:shutdown [选项] 时间
-c
取消前一个关机命令
-h
关机
-r
重启
其他关机命令
halt
poweroff
init 0
其他重启命令
- reboot
- init 6
系统运行级别:
- 0关机
- 1单用户
- 不完全多用户,不含NFS服务
- 完全多用户
- 未分配
- 图形界面
- 重启
退出登录命令
- logout
文本编辑器
vim常用操作
Vim简介
Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件
Vim没有菜单,只有命令
Vim工作模式
命令模式:
- vim filename进入
- wq保存退出
插入模式:
- i a o从命令模式转入插入模式
- ESC从插入模式转入命令模式
编辑模式:
- 命令以回车结束运行,从编辑模式到命令模式
插入命令
- a在光标所在字符后插入
- A在光标所在行尾插入
- i在光标所在字符前插入
- I在光标所在行行首插入
- o在光标下插入新行
- O在光标上插入新行
定位命令
- :set nu设置行号
- :set nonu取消行号
- gg(G)到第一行(到最后一行)
- nG到第n行
- :n到第n行
- $移至行尾
- 0移至行首
删除命令
- x删除光标所在处字符
- nx删除光标所在处后n个字符
- dd删除光标所在行,ndd删除n行
- dG删除光标所在行到文件末尾内容
- D删除光标所在处到行尾内容
- :n1,n2d删除指定范围的行
复制和剪切命令
- yy复制当前行
- nyy复制当前行一下n行
- dd剪切当前行
- ndd剪切当前行一下n行
- p、P粘贴在当前光标所在行下或行上
替换和取消命令
- r取代光标所在处字符
- R从光标所在处开始替换字符,按ESC结束
- u取消上一步操作
搜索和搜索替换命令
- /string搜索指定字符串,搜索时忽略大小写:set ic
- n搜索指定字符串的下一个出现位置
- :%s/oldstring/newstring/g全文替换指定字符串
- :n1,n2s/oldstring/newstring/g在一定范围内替换指定字符串
保存退出命令
- :w保存修改
- :w new_filename另存为指定文件
- :wq保存修改并退出
- ZZ快捷键,保存修改并退出
- :q!不保存修改退出
- :wq!保存修改并退出(文件所有者及root可使用)
Vim使用技巧
:r 文件命令
将文件导入当前光标位置
:!which 命令
在不退出vim前提下执行相应的系统命令
map 快捷键 触发命令
可以定义常用快捷键
:ab [被替换信息] [替换信息]
自定义快捷替换信息
自定义命令需要存放在用户家目录下.vimrc文件中,常用的编辑命令均可以进行设置
软件包管理
软件包管理简介
软件包分类
源码包:脚本安装包
二进制包(RPM包、系统默认包)
源码包
源码包的优点是:
- 开源,如果有足够的能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
- 卸载方便
源码包的缺点是:
- 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
- 编译过程时间较长,安装比二进制安装时长
- 因为是编译安装,安装过程中一旦报错新手很难解决
RPM包
二进制包的优点:
- 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
- 安装速度比源码包安装快的多
二进制包缺点:
- 经过编译,不再可以看到源代码
- 功能选择不如源码包灵活
- 依赖性
RPM包管理—rpm命令管理
RPM包命名原则
httpd-2.2.15-15.el6.centos.l.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm包扩展名
RPM包依赖性
- 树形依赖:a->b->c
- 环形依赖:a->b->c->a
- 模块依赖:模块依赖查询网站:www.rpmfind.net
RPM的安装升级与卸载
包全名:操作的包是没有安装的软件包时,使用包全名。而且注意路径
包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库
RPM安装
rpm [-ivh] 包全名
-i
install 安装
-v
verbose 显示详细信息
-h
hash 显示进度
--nodeps
不检测依赖性
RPM包升级
rpm [-Uvh] 包全名
-U
upgrade 升级
卸载
rpm [-r] 包名
-e
erase 卸载
--nodeps
不检测依赖性
RPM包查询方式
查询是否安装
rpm [-qa] 包名
-q
query 查询
-a
all 所有
查询软件包详细信息
rpm [-qi] 包名
-i
information 查询软件信息
-p
package 查询未安装包信息
查询软件包文件安装位置
rpm [-ql] 包名
-l
list 列表
-p
package 查询未安装包信息
查询系统文件属于哪个RPM包
rpm [-qf] 系统文件名
-f
file 查询系统文件属于哪个软件包
查询软件包的依赖性
rpm [选项] 包名
-R
requires 查询软件包依赖性
-p
package 查询未安装包信息
RPM包校验和提取
RPM包校验
rpm [选项] 已安装的包名
-V
verify 校验指定RPM包中的文件
验证内容中的8个信息的具体内容如下:
- S:文件大小是否改变
- M:文件的类型或文件的权限(rwx)是否被改变
- 5:文件MD5校验和是否改变(可以看成文件内容是否改变)
- D:设备的中,从代码是否改变
- L:文件路径是否改变
- U:文件的属主(所有者)是否改变
- G:文件的属主是否改变
- T:文件的修改时间是否改变
文件类型:
- c:config file 配置文件
- d:documentation 普通文件
- g:ghost file “鬼”文件,很少见,该文件不应该被这个RPM包包含
- l:license file 授权文件
- r:read me 描述文件
RPM包中文件提取
rpm2cpio 包全名(|\ )cpio -idv .文件结对路径
rpm2cpio
将rpm包转换为cpio格式命令
cpio
是一个标准工具,它用于创建软件档案文件和从档案中提取文件
cpio 选项[-idv]<[文件|设备]
-i
copy-in模式,还原
-d
还原时自动新建目录
-v
显示还原过程
RPM包管理—yum在线管理
IP地址配置和网络yum源
IP地址配置
使用setup工具
vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT = “yes”启动网卡
重启网络服务
网络yum源
vi /etc/yum.repos.d/CentOS-Base.repo
- [base] 容器名称,一定要放在[]中
- name 容器说明,可以自己随便写
- mirrorlist 镜像站点,这个可以注释掉
- baseurl 我们的vum源服务器的地址。默认是CentOS官方的vum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
- enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
- gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
- gpgkey 数字证书的公钥文件保存位置。不用修改
yum命令
常用yum命令
查询
yum list
查询所有可用软件包列表yum search 包名
搜索服务器上所有和关键字相关的包安装
yum -y install 包名
install 安装
-y
自动回答yes升级(慎用)
yum -y update 包名
update 升级
-y
自动回答yes卸载(慎用)
yum -y remove 包名
remove 卸载
-y
自动回答yes
yum软件组管理命令
- yum grouplist 列表所有可用的软件组列表
- yum groupinstall 安装指定软件组,组名可以由grouplist查询出来
- yum groupremove 卸载指定软件组
光盘yum源搭建
光盘yum源搭建步骤:
- 挂载光盘 mount /dev/sr0 /mnt/cdrom
- 让网络yum源文件失效
- 修改光盘yum源文件
源码包管理
源码包和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 start
service httpd start
源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
/usr/local/apache2/bin/apachectl start
源码包安装过程
安装准备
- 安装c语言编译器
- 下载源码包
安装注意事项
源代码保存位置:/usr/oca/src/
软件安装位置:/usr/local/
如何确定安装过程报错:
安装过程停止
并出现error、warning或no的提示
源码包安装过程
下载源码包
解压缩下载的源码包
进入解压缩目录
./configure 软件配置与检查
定义需要的功能选项
检测系统环境是否符合安装要求
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑
make 编译(make clean 清空编译文件)
make install 编译安装
源码包的卸载
- 不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件
脚本安装包
脚本安装包
- 脚本安装包并不是独立的软件包类型,常见安装的是源码包
- 是人为把安装过程写成了自动安装的脚本只要执行脚本,定义简单的参数,就可以完成安装
- 非常类似于Windows下软件的安装方式
Webmin的作用
Webmin 是一个基于Web的Linux 系统管理界面。您就可以通过图形化的方式设置用户帐号、Apache、DNS、文件共享等服务
Webmin安装过程
- 下载软件:http://sourceforge.net/projects/webadmin/files/webmin/
- 解压缩,并接入压缩目录
- 执行安装脚本
用户和用户组管理
用户管理简介:
- 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范
- 在Linux中主要是通过用户配置文件来查看和修改用户信息
用户配置文件
用户信息文件/etc/passwd
用于保存用户信息
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
- 0:超级用户root
- 1-499:系统用户(伪用户)
- 500-65535:普通用户
第4字段:GID(用户初始组ID)
- 初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组
- 附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
第5字段:用户说明
第6字段:家目录
- 普通用户:/home/用户名/
- 超级用户:/root/
第7字段:登录之后的Shell
- Shell是Linux的命令解释器
- 在/etc/passwd当中,除了标准的Shell是/bin/bash(所有普通用户都需要)之外,还可以写如/sbin/nologin
影子文件/etc/shadow
Linux系统在passwd中保存的是密码标志x,在shadow保存的是加密的密码串
第1字段:用户名
第2字段:加密密码
- 加密算法升级为SHA512散列加密算法
- 如果密码位时“!!”或“*”代表没有密码,不能登录
第3字段:密码最后一次修改时间
- 使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改时间间隔(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段相比)
- 0:代表密码过期后立即失效
- -1:代表密码永远不会失效
第8字段:账号失效时间,用时间戳表示
- 把时间戳换算为日期:
data -d "1970-01-01 时间戳 days"
- 把日期换算为时间戳:
echo $(($(date --date="年/月/日" +%s)/86400+1))
第9字段:保留
组信息文件/etc/group和组密码文件/etc/gshadow
/etc/group
保存组信息
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户
/etc/gshadow
保存组密码
第1字段:组名
第2字段:组密码(并不经常使用)
第3字段:组管理员用户名
第4字段:组中附加用户
用户管理相关文件
用户的家目录
- 普通用户:/home/用户名/,所有者和所属组的都是此用户,权限时700
- 超级用户:/root/,所有者和所属组都是root用户,权限是550
用户的邮箱
- /var/spool/mail/用户名/
用户模板目录
- /etc/skel/
在添加新用户时,会将/etc/skel/下的文件复制到用户家目录下
用户管理命令
用户添加命令:useradd
语法:useradd [选项] 用户名
-u UID
手工指定用户的UID号
-d 家目录
手工指定用户的家目录
-c 用户说明
手工指定用户的说明
-g 组名
手工指定用户的初始组
-G 组名
指定用户的附加组(添加到多个组时,不同组之间使用逗号’,’)
-s shell
手工指定用户的登录shell
用户默认值文件:
(/etc/default/useradd)
GROUP=100 用户默认组
HOME=/home 用户家目录
INACTIVE=-1 密码过期宽限天数(shadow文件7字段)
EXPIRE= 密码失效时间(8)
SHELL=/bin/bash 默认shell
SKEL=/etc/skel 模板目录
CREATE_MAIL_SPOOL=yes 是否建立邮箱
(/etc/login.defs)
PASS_MAX_DAYS 99999 密码有效期(5)
PASS_MIN_DAYS 0 密码修改时间间隔(4)
PASS_MIN_LEN 5 密码最小5位(PAM)
PASS_WARN_AGE 7 密码到期警告(6)
UID_MIN 500 最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 加密模式
修改用户密码:passwd
语法:passwd [选项] 用户名
-S
查询用户密码的密码状态,仅root用户可用
-l
暂时锁定用户,仅root用户可用
-u
解锁用户,仅root用户可用
--stdin
可以通过管道符输出的数据作为用户的密码
普通用户修改自己密码可以直接输入passwd即可,必须符合密码原则
修改用户信息:usermod
语法:usermod [选项] 用户名
-u UID
修改用户的UID号
-c 用户说明
修改用户的说明信息
-G 组名
修改用户的附加组
-L
临时锁定用户(Lock)
-U
解锁用户锁定(Unlock)
修改用户密码状态:chage
语法:chage [选项] 用户名
-l
列出用户的详细密码状态
-d 日期
修改密码最后一次更改日期(shadow3字段,常用)
-m 天数
两次密码修改间隔(4字段)
-M 天数
密码有效期(5字段)
-W 天数
密码过期前警告天数(6字段)
-I 天数
密码过后宽限天数(7字段)
-E 日期
账号失效时间(8字段)
删除用户:userdel
语法:userdel [-r] 用户名
-r
删除用户的同时删除用户家目录
查看用户:ID
语法:id 用户名
用户切换命令:su
语法:su [选项] 用户名
-
选项只使用“-”代表连带用户的环境变量一起切换(一般不能省略)
-c 命令
仅执行一次命令,而不切换用户身份
用户组管理命令
添加用户组:groupadd
语法:groupadd [选项] 组名
-g GID
指定组ID
修改用户组:groupmod
语法:groupmod [选项] 组名
-g GID
修改组ID
-n 新组名
修改组名
一般不经常使用
删除用户组:groupde
语法:groupdel 组名
如果组内有初始用户,该组不能删除,需要先删除初始用户
用户入组或用户删除:gpasswd
语法:gpasswd [选项] 组名
-a 用户名
把用户加入组
-d 用户名
把用户从组中删除
可以使用Vim进入组的管理文件进行修改也可以实现,作为附加用户加入
权限管理
ACL权限
ACL权限简介与开启
解决身份不足问题,新来成员既不能加入所有者所属组,也不能对其他人开放权限
查看分区ACL权限是否开启:dumpe2fs -h /dev/sda3
-h
进现实超级块中的信息,而不显示磁盘块组的详细信息、
临时开启分区ACL权限:mount -o remount, acl /
重新挂载根分区,并挂载加入acl权限
永久开启分区ACL权限:
- vi /etc/fstab将开机自动挂载文件中,在默认选项后添加acl(需要重启)
- mount -o remount /重新挂载文件系统或重启系统,使修改生效
查看与设定ACL权限
查看ACL命令:getfacle 文件名
设定ACL权限的命令:setfacl [选项] 文件名
-m
设定ACL权限
-x
删除指定的ACL权限
-b
删除所有的ACL权限
-d
设定默认ACL权限
-k
删除默认ACL权限
-R
递归设定ACL权限
最大有效权限与删除ACL权限
最大有效权限mask,mask是用来指定最大有效权限的。如果给用户赋予ACL权限,是需要和mask的权限“相与”才能的到用户的真正权限
修改最大有效权限:setfacl -m m:[rwx] 文件名
删除文件的所有ACL权限:setfacl -b [ug]:[用户名或组名] 文件名
默认ACL权限和递归ACL权限
递归ACL权限:
- 递归是父目录在设定ACL权限时,所有子文件和子目录也会拥有相同的ACL
- setfacl -m u:用户名:权限 -R 文件名
默认ACL权限:
- 默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
- setfacl -m d:u:用户名:权限 文件名
文件特殊权限
SetUID
SetUID的功能:
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设定SetUID的方法:
4代表SUID
- chmod 4755 文件名(
-rwsr-xr-x
) - chmod u+s 文件名
当文件没有执行权限时,添加SUID会出现问题(例如:大写S-rwSr--r--
)
危险的SetUID:
- 关键目录应严格控制写权限。例如”/“、”/usr”等
- 用户的密码设置要严格遵守密码三原则
- 对系统中默认应该具有SetUID权限的文件作一列表,定期检查有没有这之外的文件被设置了SetUID权限
SetGID
SetGID针对文件的作用:
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组
- SetGID权限同样只在该程序执行过程中有效也就是说组身份改变只在程序执行过程中有效
SetGID针对目录的作用:
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
设定SetGID:
2代表SUID
- chmod 2755 文件名(
-rwxr-sr-x
) - chmod g+s 文件名
取消SetGID:
- chmod 755 文件名(
-rwxr-xr-x
) - chmod g-s 文件名
Sticky BIT
SBIT粘着位作用:
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,但是不能删除其他用户建立的文件
设定粘着位:
- chmod 1755 目录名(
-rwxr-xr-t
) - chmod o+t 目录名
取消粘着位:
- chmod 755 目录名(
-rwxr-xr-x
) - chmod o-t 目录名
文件系统属性chattr权限
语法:chattr [+-=] [选项] 文件或目录名
+
增加权限
-
删除权限
=
等于某权限
选项:
i
如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
a
如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
系统命令sudo权限
- root把本来只能超级用户执行的命令赋予普通用户执行
- sudo的操作对象是系统命令
visudo
实际上修改/etc/sudoers文件
用户名 被管理主机的地址=(可用的身份) 授权命令(绝对路径)
root ALL=(ALL) ALL
%组名 被管理主机的地址=(可用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
授权sc用户可以重启服务器:
visudo
sc ALL=/sbin/shutdown -r now
普通用户执行sudo赋予的命令:
su -sc切换到sc用户
sudo -l查看可用的sudo命令
sudo /sbin/shutdown -r now
文件系统管理
回顾分区和文件系统
分区类型:
- 主分区:总共最多只能分四个
- 扩展分区:只能有一个,也算主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须在划分成逻辑分区才能使用
- 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果SCSI硬盘Linux最多支持11个逻辑分区
分区的设备文件名
主分区1:/dev/sda1
主分区2:/dev/sda2
主分区3:/dev/sda3
扩展分区:/dev/sda4
逻辑分区1:/dev/sda5
逻辑分区2:/dev/sda6
逻辑分区3:/dev/sda7
一般习惯用法:主分区1(/dev/sda1)、扩展分区(/dev/sda2)、逻辑分区1(/dev/sda5)、逻辑分区2(/dev/sda6)逻辑分区3(/dev/sda7)
文件系统:
- ext2:是ext文件系统的升级版本,RedHat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件(1TB=1024GB=1024*1024KB)
- ext3:ext3文件系统是ext2文件系统的升级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件
- ext4:它是ext3文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。EXT4的变化可以说是翻天覆地的,比如向下兼容EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等。是CentOS 6.3的默认文件系统(1EB=1024PB=1024*1024TB)
文件系统常用命令
df命令、du命令、fsck命令和dump2fs命令
文件系统查看命令df
语法:df [选项] [挂载点]
-a
显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h
使用习惯单位显示容量,如KB、MB或GB
-T
显示文件系统类型
-m
以MB为单位显示容量
-k
以KB为单位显示容量。默认就是以KB为单位
统计目录或文件大小命令du
语法:du [选项] [目录或文件名]
-a
显示每个子文件的磁盘占用量。默认只统计子目录的餐盘占用量
-h
使用习惯单位显示磁盘占用量,如KB、MB或GB等
-s
统计总占用量,而不列出子目录和子文件的占用量
du命令和df命令的区别:
- df命令是从文件系统考虑的,不光要考虑文件占用的空闻,还要统计被命令或程序占用的空间(最常见的就是文件已经删除但是程序并没有释放空间)
- du命令是面向文件的,只会计算文件或目录占用的空间
文件系统修复命令fsck
语法: fsck [选项] 分区设备文件名
-a
不用显示用户提示,自动修复文件系统
-y
自动修复。和-a作用一致,不过有些文件只支持-y
显示磁盘状态命令dump2fs:
语法:dump2fs 分区设备文件名
挂载命令
查询与自动挂载:
语法:mount [-l]
查询系统中已经挂载的设备,-l会显示卷标名称
语法:mount -a
依据配置文件/etc/fstab的内容,自动挂载
挂载命令格式:
语法:mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
-t
文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext34、iso9660等文件系统
-L
卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o
特殊选项:可以指定挂载的额外选项
挂载光盘与U盘
挂载光盘:
建立挂载点,语法:mkdir /mnt/cdrom
挂载光盘,语法:mount -t iso9660 /dev/cdrom /mnt/cdrom
卸载光盘:
语法:umount 设备文件名或挂载点
挂载U盘:
查看U盘设备文件名:fdisk -l
建立挂载点,语法:mkdir /mnt/usb
挂载U盘,语法:mount -t vfat /dev/sdb1 /mnt/usb/
注意:Linux默认不支持NTFS文件系统
支持NTFS文件系统
下载NTFS-3G插件:http://www.tuxera.com/community/ntfs-3g-download/
使用NTFS-3G:mount -t ntfs-3g 分区设备文件名 挂载点
fdisk分区
fdisk命令分区过程
添加新的硬盘
查看新的硬盘
使用fdisk命令分区:fdisk /dev/sdb
重新读取分区表信息:partprobe
分区自动挂载与fstab文件修复
/etc/fstab:
- 第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
- 第二字段:挂载点
- 第三字段:文件系统名称
- 第四字段:挂载参数
- 第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
- 第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级
/etcfstab文件修复:
mount -o remount,rw /
分派swap分区
free命令:
cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程
buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度在集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程
新建swap分区:
fdisk /dev/sdb
格式化:
mkswap /dev/sdb6
加入swap分区:swapon /dev/sdb6
取消swap分区:swapoff /dev/sdb6
swap分区开机自动挂载:
vi /etc/fstab
Shell基础
Shell概述
什么是Shell:Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序
Shell是一个功能强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令
Shell的分类:
- Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
- C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
- Shell的两种主要语法类型有Bourne和C,两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh
Linux支持的Shell:/etc/shells
Shell脚本的执行方式
echo输出命令:
语法:echo [选项] [输出内容]
-e
支持反斜线控制的字符转换
一般在写脚本时,通常使用命令vim xx.sh
xx为文件名
!bin/Bash |
脚本执行:
- 赋予脚本执行权限,直接运行
- chmod 755 xx.sh
- ./xx.sh
- 通过Bash调用执行脚本
- Bash xx.sh
Bash基本功能
历史命令与命令补全
历史命令:
语法:history [选项] [历史命令保存文件]
-c
清空历史命令
-w
把缓存中的历史命令写入历史命令保存文件~/.bash_history
vi .bash_history
查看历史运行的命令
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改。在命令超出最大限度时,会先删除第一条保存最后一条(先进先出)
历史命令的调用:
- 使用上、下箭头调用以前的历史命令
- 使用”!n”重复执行第n条历史命令
- 使用”!!”重复执行上一条命令
- 使用”!字串”重复执行最后一条以该字串开头的命令
命令与文件补全:
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab”键就会自动进行补全
命令别名与常用快捷键
别名:
语法:alias 别名='原命令'
直接输入alias可以查看系统内存在的别名
命令的执行顺序:
- 第一顺位执行用绝对路径或相对路径执行的命令
- 第二顺位执行别名
- 第三顺位执行Bash的内部命令
- 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
别名永久生效:vim /root/.bashrc
删除别名:unalias 别名
Bash的常用快捷键:
快捷键 | 作用 |
---|---|
ctrl+A | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用 |
ctrl+E | 把光标移动到命令行结尾 |
ctrl+C* | 强制终止当前的命令 |
ctrl+L* | 清屏,相当于clear |
ctrl+U* | 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便 |
ctrl+K | 删除或剪切光标之后的内容 |
ctrl+Y* | 粘贴ctrl+U或ctrl+K剪切的内容 |
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中 |
输出重定向:
语法:wc [选项] [文件名]
-c
统计字节数
-w
统计单词数
-l
统计行数
把文件作为命令的输入:命令 < 文件
多命令顺序执行与管道符
多命令顺序执行:
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑关系 |
&& | 命令1&&命令2 | 逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行 |
管道符:
语法:命令1 | 命令2
命令1的正确输出作为命令2的操作对象
通配符与其他特殊符号
通配符:
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容和 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符 |
Bash中其他特殊符号:
符号 | 作用 |
---|---|
‘’ | 单引号。在单引号中所有的特殊符号,如’$’和’`’(反引号)都没有特殊含义 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是”$”、”`”和” \ “是例外,拥有”调用变量的值”、”引用命令”和”转义符”的特殊含义 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错 |
$() | 和反引号作用一样,用来引用系统命令 |
# | 在Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\ $将会输出”$”符号,而不当做是变量引用 |
Bash变量
什么是变量:
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息
变量设置规则:
- 变量名称可以由字母、数字和下划线组成但是不能以数字开头。如果变量名是”2name”则是错误的
- 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型
- 变量用等号连接值,等号左右两侧不能有空格
- 变量的值如果有空格,需要使用单引号或双引号包括
- 在变量的值中,可以使用” \ “转义符
- 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含”$变量名”或用${变量名}包含
- 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
- 环境变量名建议大写,便于区分
变量分类:
- 用户自定义变量
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
用户自定义变量
变量定义:name="santidadday"
变量叠加:aa=123
、aa="$aa"456
(aa为123456)/aa=${aa}456
变量调用:echo $name
变量查看:set
变量删除:unset
环境变量
什么是环境变量:
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效
设置环境变量:
变量定义:export 变量名=变量值
查询变量:env
(专用查看环境变量的命令)
变量调用:echo $变量名
删除变量:unset
系统中常见环境变量:
- PATH:系统查找命令的路径
- PATH变量叠加:
PATH="$PATH":/root/sh
- PS1(实际上不是环境变量,env搜索不到):定义系统提示符的变量
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行 不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程和进程号(PID) |
接收键盘输入:
语法:read [选项] [变量名]
-p "提示信息" 变量名
在等待read输入时,输出提示信息
-t 秒数
read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数
read命令只接受指定的字符数,就会执行
-s
隐藏输入的数据,适用于机密信息的输入
Bash的运算符
数值运算与运算符
declare声明变量类型:
语法:declare [+/-] [选项] 变量名
-
给变量设定类型属性
+
取消变量的类型属性
-i
将变量声明为整型
-x
将变量声明为环境变量
-p
显示指定变量的被声明的类型
数值运算
- 方法1:将需要运算的变量声明为整型
- 方法2:使用expr或let数值运算工具
c=$(expr $a + $b)
加号左右两侧必须有空格 - 方法3:
$((运算式))
或$[运算式]
变量测试与内容替换
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y=新值} | x=新值,y=新值 | x为空,y值不变 | x=$y,y值不变 |
x=${y:=新值} | x=新值,y=新值 | x=新值,y=新值 | x=$y,y值不变 |
x=${y?新值} | 新值输出到标准错误输出(就是屏幕) | x为空 | x=$y |
x=${y:?新值} | 新值输出到标准错误输出(就是屏幕) | 新值输出到标准错误输出(就是屏幕) | x=$y |
环境变量配置文件
环境变量配置文件简介
source命令
语法:source 配置文件
或 .配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME默认环境变量
系统中的环境变量配置文件:
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
环境变量配置文件作用
/etc/profile的作用:USER变量、LOGNAME变量、MAIL变量、PATH变量、HOSTNAME变量、HISTSIZE变量、umask、调用/etc/profile.d/*.sh
~/.bash_profile的作用:调用 ~/.bashrc文件、在PATH变量后面加入了”:$HOME/bin”这个目录
/etc/bashrc的作用:PS1变量、umask、PATH变量、调用/etc/profile.d/*.sh
其他配置文件和登录信息
注销时生效的环境变量配置文件:~/.bash_logout
其他配置文件:~/bash_history
Shell登录信息:
- 本地终端欢迎信息:/etc/issue
- 远程终端欢迎信息:/etc/issue.net
- 转义字符在/etc/issue.net文件中不能使用
- 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入”Banner/etc/issue.net”行才能显示(记得重启SSH服务)
- 登录后欢迎信息:/etc/motd(不管是本地登录还是远程登录,都可以显示此欢迎信息)
Shell编程
基础正则表达式
正则表达式与通配符:
- 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
- 通配符(*、?、[])用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了
基础正则表达式:
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符外的任意一个字符 |
^ | 匹配行首。例如:^hello会匹配以hello开头的行 |
$ | 匹配行尾。例如:hello$会匹配以hello结尾的行 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[aoeiu] 匹配任意一个元音字母,[0-9] 匹配任意一位数字,[a-z][0-9]匹配小写字和一位数字构成的两位字符 |
[^] | 匹配除中括号的字符以外的任意一个字符。例如:[^ 0-9] 匹配任意一位非数字字符,[^a-z]表示任意一位非小写字母。 |
\ | 转义符。用于将特殊符号的含义取消 |
\{n\} | 表示其前面的字符恰好出现n次。例如:[^0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码。 |
\{n,\} | 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字 |
\{n,m\} | 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母 |
字符截取命令
cut字段提取命令
语法:cut [选项] 文件名
-f 列号
提取第几列
-d 分隔符
按照指定分隔符分割列
cut -f提取的文件中列时,不同的列用制表符分割
printf命令
语法:printf '输出类型输出格式' 输出内容
%ns
输出字符串。n是数字指代输出几个字符
%ni
输出正数。n是数字指代输出几个字符
%m.nf
输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f共输出8位数,其中2位小数,6位整数
输出格式:
- \a:输出警告声音
- \b:输出推个键,也就是Backspace键
- \f:清除屏幕
- \n:换行
- \r:回车,也就是Enter键
- \t:水平输出退格键,也就是Tab键
- \v:垂直输出退格键,也就是Tab键
在awk命令的输出中支持print和printf命令
- print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
- printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行符,需要手工加入
awk命令
语法:awk '条件1 {动作1} 条件2 {动作2}...' 文件名
条件(Pattern):一般使用关系表达式作为条件、BEGIN(在执行所有的动作之前执行)、END(在执行所有的动作之后执行)
动作(Action):格式化输出、流程控制语句、FS内置变量(指定分隔符)
awk中使用printf可以识别空格作为制表符的,原生printf不能识别空格为制表符
sed命令
sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要使用来将数据进行选取、替换、删除、新增的命令
语法:sed [选项] '[动作]' 文件名
-n
一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
-e
允许对输入数据应用多条sed命令编辑
-i
用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
a\
在当前行后添加一行或多行、c\
用c后面的字符串替换原数据行、i\
在当前行前插入一行或多行、d
删除指定行、p
输出指定行、s
字串替换
字符处理命令
排除命令sort
语法:sort [选项] 文件名
-f
忽略大小写
-n
以数值型进行排序,默认使用字符串型排序
-r
反向排序
-t
指定分隔符,默认的分隔符是制表符
-k n[,m]
按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
统计命令wc
语法:wc [选项] 文件名
-l
只统计行数
-w
只统计单词数
-m
只统计字符数
条件判断命令
按照文件类型进行判断:
测试选项 | 作用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) |
-d 文件 | 判断该文件是否存在,并且是否为目录文件(是目录文件为真) |
-e 文件 | 判断该文件是否存在(存在为真) |
-f 文件 | 判断该文件是否存在,并且是否为普通文件(是普通文件为真) |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真) |
-p 文件 | 判断该文件是否存在,并且是否为管道文件(是管道文件为真) |
-s 文件 | 判断该文件是否存在,并且是否为非空(非空为真) |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真) |
按照文件权限进行判断:
测试选项 | 作用 |
---|---|
-r 文件 | 判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真) |
-w 文件 | 判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真) |
-x 文件 | 判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真) |
-u 文件 | 判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真) |
-g 文件 | 判断该文件是否存在,并且是否该文件拥有SGID权限(有SGID权限为真) |
-k 文件 | 判断该文件是否存在,并且是否该文件拥有SBit权限(有SBit权限为真) |
两个文件之间进行比较:
测试选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新(如果新则为真) |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧(如果旧则为真) |
文件1 -ef 文件2 | 判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接的方法 |
两个整数之间进行比较:
测试选项 | 作用 |
---|---|
整数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 |
注意事项:
- if语句使用fi结尾,和一般语言使用大括号结尾不同
- [条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
- then后面跟符合条件之后执行的程序,可以放在[]之后,用”;”分割。也可以换行输入
双分支if-else条件语句:
if [条件判断式] |
多分支if条件语句:
if [条件判断式1] |
case语句
case语句和if…elif..else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系
case $变量名 in |
for循环
for 变量 in 值1 值2 值3... |
while循环与until循环
- while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了
while [ 条件判断式 ] |
- until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环
until [ 条件判断式 ] |
Linux服务管理
服务简介与分类
启动与自启动:
- 服务启动:就是在当前系统中让服务运行,并提供功能
- 服务自启动:自启动是指让服务在系统开机或重启之后,随着系统的启动而自动启动服务
查询已安装的服务:
- RPM包安装的服务
chkconfig --list
- 源码包安装的服务,一般是在/urs/local下
RPM安装服务和源码包安装服务的区别:安装位置的不同
- RPM安装服务和源码包安装服务的区别就是
RPM包安装服务的管理
独立服务的管理
/etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:既有xinetd服务的启动脚本
/var/lib/:服务产生的数据
/var/log/:日志
独立服务启动:
/etc/init.d/独立服务名 start|stop|status|restart
service 独立服务名 start|stop|status|restart
独立服务自启动:
chkconfig [--level 运行级别] [独立服务名] [on|off]
修改/etc/rc.d/rc.local文件
使用ntsysv命令管理自启动
基于xinetd服务的管理
安装xinetd:yum -y install xinetd
xinetd服务启动:vim /etc/xinetd.d/telnet
修改disable为no
重启xinetd服务:service xinetd restart
xinetd自启动:chkconfig telnet on
源码包安装服务的管理
源码包服务启动:使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法,例如:/usr/local/apache2/bin/apachetcl start|stop
源码包服务自启动:使用绝对路径启动
让源码包服务被服务管理命令识别:连接rpm包安装的服务到/etc/init.d/服务名
Linux系统管理
进程管理
进程查看
进程简介:进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源
进程管理的作用:判断服务器健康状态、查看系统中所有进程、杀死进程
查看系统中所有进程:ps aux
(BCD操作系统格式) ps -le
(Linux标准命令格式)
USER:该进程由那个用户产生
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSC:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的,tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-256代表虚拟终端
查看系统健康状态:top [选项]
-d 秒数
指定top命令每间隔几秒更新,默认是3s
在top命令的交互模式当中可以执行的命令:
?或h:显示交互模式的帮助
P:以CPU使用率排序
M:以内存的使用率排序
N:以PID排序
q:退出top
查看进程树:pstree [选项]
-p
显示进程的PID
-u
显示进程的所属用户
终止进程
kill命令:kill [信号]
-l
查看可用进程信号
1:重启
9:强制终止
15:正常终止
kill -数字 进程id
killall命令:killall [选项][信号] 进程名
-i
交互式,询问是否要杀死
-I
忽略进程名大小写
pkill命令:pkill [选项][信号] 进程名
-t
按照终端号踢出用户
工作管理
把进程放入后台:
后台运行:命令执行过程中回车
后台暂停:top命令执行过程中按下ctrl+z
查看后台的工作:jobs [选项]
-l
显示进程的PID
将后台暂停的工作恢复到前台执行:fg %工作号
%工作号
%可以省略,但是注意工作号与PID区别
将后台暂停的工作恢复到后台执行:dg %工作号
%工作号
%可以省略,但是注意工作号与PID区别
后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
系统资源查看
vmstat命令监控系统资源:vmastat [刷新延时 刷新次数]
dmesg开机时内核检测信息:dmesg
free命令查看内存使用状态:free [选项]
-b
以字节为单位显示
-k
以KB为单位显示,默认就是以KB为单位显示
-m
以MB为单位显示
-g
以GB为单位显示
缓存和缓冲的区别:简单来说缓存(cache)是用来加速数据从硬盘中”读取”的,而缓冲(buffer)是用来加速数据”写入”硬盘的
查看CPU信息:cat /proc/cpuinfo
uptime命令:显示系统的启动时间和平均负载,也就是top命令的第一行,w命令也可以看到这个数据
查看系统与内核相关信息:uname [选项]
-a
查看系统所有相关信息
-r
查看内核版本
-s
查看内核名称
判断当前系统的位数:file /bin/ls
查询当前Linux系统的发行版本:lsb_release -a
列出进程打开或使用的文件信息:lsof [选项]
-c 字符串
只列出以字符串开头的进程打开的文件
-u 用户名
只列出某个用户的进程打开的文件
-p pid
列出某个PID进程打开的文件
系统定时任务
crond服务管理与访问控制:
service crond restart
chkconfig crond on
cronteb -e
进入crontab编辑界面
日志管理
简介
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所有学习起来基本和syslogd服务一致
查看服务是否启动:ps aux|grep rsyslogd
查看服务是否自启动:chkconfig --list|grep rsyslog
常见日志的作用:
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/btmp | 记录了错误登录的日志。这个文件是一个二进制文件,不能直接vim查看,而要使用lastb命令进行查看 |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能使用vim查看,而要使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先检查的就应该是这个日志文件 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如系统的登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是二进制文件,不能使用功能vim查看,而要使用last命令查看 |
/var/run/utmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件也是二进制文件,不能使用功能vim查看,而要使用w,who,users等命令查看 |
除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各服务使用自己的日志管理文档来记录自身日志
日志文件 | 说明 |
---|---|
/var/log/httpd | RPM包安装的apache服务的默认日志目录 |
/var/log/mail | RPM包安装的邮件服务的额外日志目录 |
/var/log/samba | RPM包安装的samba服务的日志目录 |
/var/log/sssd | 守护进程安全服务目录 |
rsyslogd服务
rsyslogd的新特点:
- 基于TCP网络协议传输日志信息
- 更安全的网络传输方式
- 有日志消息的及时分析框架
- 后台数据库
- 配置文件中可以写简单的逻辑判断
- 与syslog配置文件相兼容
日志文件格式:
- 日志产生的时间
- 发生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
服务名称[连接符号]日志等级 日志记录位置
认证相关服务.多有日志等级记录在/var/log/secure日志中
连接符号
- ‘*’代表所有日志等级
- ‘.’代表只有比后面的等级高的(包含该等级)日志都会记录下来
- ‘.=’代表只记录所需等级的日志,其他等级的都不记录
- ‘.!’代表不等于,也就是除了该等级的日志外,其他等级等日志都记录
日志等级
等级名称 | 说明 |
---|---|
debug | 一般的调试信息说明 |
info | 基本的通知信息 |
notice | 普通信息,但是有一定重要性 |
warning | 警告信息,但是还不会影响到服务或系统的运行 |
err | 错误信息,一般达到err等级的信息已经可以影响到服务或系统的正常运行 |
crit | 临界状态信息,比err等级还要严重 |
alert | 警告状态信息,不crit还要严重。必须立即才去行动 |
emerg | 疼痛等级信息,系统已经无法使用 |
日志替换
日志文件的命令规则:
- 如果配置文件中拥有”dateext”参数,那么日志会用日期作为日志文件的后缀,例如”secure-20220101”。这样的话日志文件名不会重叠,所有就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可
- 如果配置文件中没有”dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的”secure”日志会自动改名为”secure.1”,然后新建”secure”日志,用来保存新的日志。当第二次进行日志轮替时,”secure.1”会自动改名为”secure.2”,当前的”secure”日志会自动改名为”secure.1”,然后也会新建”secure”日志,用来保存新的日志,以此类推。
logrotate配置文件:
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate | 保留的日志文件个数,0指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新的日志,同时指定新的日志的权限与所有者和所属组 |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize | 日志轮替的最小值。也就是日志达到这个最小值才会轮替,否则就算时间达到也不轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替 |
dateext | 使用日志作为日志轮替文件的后缀 |
把apache日志加入轮替:vim /etc/logrotate.conf
/usr/local/apache2/logs/access_log { |
logrotate命令:logrotate [选项] 配置文件名
-v
显示日志轮替过程
-f
强制进行日志轮替
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
启动管理
CentOS 6.x启动管理
系统运行级别
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以想象为windows的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式。不含NFS服务 |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
查看运行级别命令:runlevel
改变运行级别命令:init 运行级别
系统默认运行级别:vim /etc/initab
系统启动过程
initramfs内存文件系统:CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk。他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块,比如USB、SATA、SCSI硬盘的驱动和LVM、RAID文件系统的驱动
由/etc/rc.d/rc.sysinit初始化:
- 获得网络环境
- 挂载设备
- 开机启动画面Plymouth(取替了过往的RHGB)
- 判断是否启动SELinux
- 显示于开机过程中的欢迎画面
- 初始化硬件
- 用户自定义模块的加载
- 配置内核的参数
- 设置主机名
- 同步存储器
- 设备映射器及相关的初始化
- 初始化软件磁盘阵列(RAID)
- 初始化LVM的文件系统功能
- 检验磁盘文件系统(fsck)
- 设置磁盘配额(quota)
- 重新以可读写模式挂载系统磁盘
- 更新quote(非必要)
- 启动系统虚拟随机数生成器
- 配置机器(非必要)
- 清楚开机过程当中的临时文件
- 创建ICE目录
- 启动交换分区(swap)
- 将开机新信息写入/var/log/dmesg文件中
调用/etc/rc.d/rc文件:运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d/目录中的相应的程序
- /etc/rc3.d/k??开头的文件(??是数字),会按照数字顺序依次关闭
- /etc/rc.d/S??开头的文件(??是数字),按照数字顺序一次启动
启动引导程序grub
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/sda1 | hd(1,0) |
第二个主分区 | /dev/sda2 | hd(1,1) | |
扩展分区 | /dev/sda3 | hd(1,2) | |
第一个逻辑分区 | /dev/sda5 | hd(1,4) |
vim /boot/grub/grub.conf
- default=0 默认启动第一个系统
- timeout=5 等待时间,默认5秒
- splashimage=(hd0,0)/grub/splash.xpm/gz 指grub启动时的背景图像文件的保存位置
- hiddenmenu 隐藏菜单
- title CentOS(2.6.32-279.el6.i686)
- root(hd0,0) 启动程序的保存分区
- kernel /vmlinuz-2.6.32-279.el6.i686 ro 定义内核加载时的选项
- initrd /initramfs-2.6.32-279.el6.i686.img 指定了initramfs内存文件系统镜像文件的所在位置
Grub加密与字符界面分辨率调整
grub加密:生成加密密码串:grub-md5-crypt
纯字符界面分辨率调整:grep “CONFIG_FRAMEBUFFER_CONSOLE” /boot/config-2.6.32-279.el6.i686
系统修复模式
单用户模式:常见的错误修复:遗忘root密码、修改系统默认运行级别
光盘修复模式:重要系统文件丢失,导致系统无法启动
备份与恢复
备份概述
Linux系统需要备份的数据:
- /root/目录
- /home/目录
- /var/spool/mail/目录
- /etc/目录
- 其他目录
安装服务的数据:
- 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的分区的备份等级及备份时间
restore命令
语法:restore [模式选项] [选项]
模式选项:
-C
比较备份数据的实际数据的变化
-i
进入交互模式,手工选择需要恢复的文件
-t
查看模式,用于查看备份文件中拥有哪些数据
-r
还原模式,用于数据还原
选项:
-f
指定备份文件的文件名