文章目录

  • ​​一、系统组成​​
  • ​​二、常用快捷键​​
  • ​​三、常用命令​​
  • ​​查看当前系统语言包​​
  • ​​查看当前系统有的语言包​​
  • ​​查看版本号​​
  • ​​查看linux内核​​
  • ​​关机(ctrl + alt + F6)​​
  • ​​重启​​
  • ​​查看centos系统位数​​
  • ​​切换为root用户​​
  • ​​root用户切换为指定普通用户​​
  • ​​检查网络连通性​​
  • ​​清屏`Ctrl Shift L`​​
  • ​​查看主机ip​​
  • ​​查看目录​​
  • ​​目录切换​​
  • ​​显示当先路径​​
  • ​​创建文件​​
  • ​​查看文件​​
  • ​​删除文件或者目录​​
  • ​​永久更改vim下tab为四个空格​​
  • ​​从100行开始显示​​
  • ​​创建文件​​
  • ​​创建文件夹​​
  • ​​改名或者移动文件夹```mv [options] 源文件或者目录 目标文件或者目录```​​
  • ​​cat(由第一行开始显示内容,并将所有内容输出)​​
  • ​​tar​​
  • ​​zip `zip [选项] 压缩包名 源文件或源目录列表`​​
  • ​​vim(强大的文本编辑器) 使用​​
  • ​​curl​​
  • ​​查看centos版本`rpm -q centos-release`​​
  • ​​查看某个端口被哪一个进程使用​​
  • ​​wget下载(存放目录 cd ~ 根目录)​​
  • ​​ps(Process Status)使用​​
  • ​​检查系统是否安装了yum​​
  • ​​yum安装​​
  • ​​查找目录或者文件​​
  • ​​前后台运行jar​​
  • ​​`tail`命令 tail [参数] [文件]​​
  • ​​参数详解​​
  • ​​`kill` kill -Signal pid​​
  • ​​`lsof`​​
  • ​​永久固定IP​​
  • ​​`tac`从最后一行显示内容,并将所有内容输出。​​
  • ​​`head0`显示头几行​​
  • ​​`more`根据窗口大小,一页一页的显示文件内容(只能向后翻页)​​
  • ​​'less'根据窗口代销,一页一页的显示文件内容,可以往前翻页,也可以搜索字符​​
  • ​​`find`按照指定条件查找文件​​
  • ​​在文件末尾追加内容​​
  • ​​四、目录结构​​
  • ​​五、系统分区(分区-> 格式化->挂载)​​
  • ​​1.分区​​
  • ​​2.格式化​​
  • ​​3.硬件设备文件名​​
  • ​​4.挂载​​
  • ​​5.文件系统结构示意图​​
  • ​​6.分区类型​​
  • ​​6.`ext4`​​
  • ​​六、安装选择​​
  • ​​七、密码原则​​
  • ​​1.复杂性​​
  • ​​2.易记忆性​​
  • ​​3.时效性​​
  • ​​八、软件包选择​​
  • ​​九、安装日志​​
  • ​​十、注意事项​​
  • ​​十一、`webmin`​​
  • ​​十二、`用户和用户组管理`​​
  • ​​十三、ACL权限​​
  • ​​十四、`SetUID`权限​​
  • ​​1.要求,缺一不可​​
  • ​​2.案例`passwd`​​
  • ​​3.危险的SetUID​​
  • ​​十五、`SetGID`权限​​
  • ​​1.对文件的作用​​
  • ​​2.对目录的作用​​
  • ​​十六、`Sticky BIT`​​
  • ​​1.SBIT黏着位作用​​
  • ​​十七、`sudo权限`​​
  • ​​十八、让Linux支持`NTFS`文件系统​​
  • ​​十九、fdisk命令分区过程​​
  • ​​1.fdisk 参数详解​​
  • ​​2.分区自动挂载与fstab文件修复​​
  • ​​3.分配swap分区​​
  • ​​二十、`Shell`​​
  • ​​1.查看Linux支持的Shell​​
  • ​​2.`echo`​​
  • ​​3.hello world​​
  • ​​4.脚本执行​​
  • ​​5.常用快捷键​​
  • ​​6.输入重定向​​
  • ​​7.输出重定向​​
  • ​​(1)标准输出重定向​​
  • ​​(2)标准错误输出重定向​​
  • ​​8.输出重定向​​
  • ​​8.多命令顺序执行​​
  • ​​案例:计算创建100MB的文件所需要的时间​​
  • ​​9.管道符​​
  • ​​10.通配符​​
  • ​​11.其他特殊符号​​
  • ​​11.变量​​
  • ​​12.环境变量​​
  • ​​13.位置参数变量​​
  • ​​14、预定义变量​​
  • ​​15、变量测试与内容替换​​
  • ​​16、环境变量配置文件​​
  • ​​17.正则表达式​​
  • ​​18.条件判断​​
  • ​​19.`if`​​
  • ​​20.`case`​​
  • ​​21.`for`​​
  • ​​22.`while`​​
  • ​​23.`until`​​
  • ​​二十一、服务管理​​
  • ​​二十二、进程管理​​
  • ​​1.查看系统中所有进程​​
  • ​​2.查看系统的健康状态​​
  • ​​2.查看进程树​​
  • ​​3.杀死kill​​
  • ​​二十三、系统定时任务​​
  • ​​1.crond服务管理与访问控制​​
  • ​​2.用户的crontab设置​​
  • ​​3. 定时任务编辑语法​​
  • ​​(1) 基本结构​​
  • ​​(2) 特殊符号​​
  • ​​(3) 案例​​
  • ​​二十四、日志管理​​
  • ​​1.日志服务​​
  • ​​2.rsyslogd的新特点​​
  • ​​3.确定服务启动​​
  • ​​4.注意​​
  • ​​5.常见日志的作用​​
  • ​​6.日志文件格式​​
  • ​​7.rsyslogd 日志服务​​
  • ​​8.日志轮替​​
  • ​​(1)日志文件的命名规则​​
  • ​​(2) logrotate 配置文件​​
  • ​​二十五、运行级别​​
  • ​​二十六、启动管理​​
  • ​​1.启动流程图​​
  • ​​2.initramfs内存文件系统​​
  • ​​3.调用/etc/init/rcS.conf配置文件​​
  • ​​4.由/etc/rc.d/rc.sysinit初始化​​
  • ​​5.调用/etc/rc.d/rc文件​​
  • ​​6.启动引导程序grub​​
  • ​​(1)grub中分区表示​​
  • ​​(2)grub配置文件​​
  • ​​(3) Grub加密与字符界面分辨率调整​​
  • ​​7.系统修复模式​​
  • ​​(1) 单用户模式​​
  • ​​(2)光盘修复模式​​
  • ​​(3)重要系统文件丢失,导致系统无法启动​​
  • ​​(4)Linux的安全性​​
  • ​​二十七、备份与恢复​​
  • ​​1.Linux系统需要备份的数据​​
  • ​​2.备份策略​​
  • ​​(1)完全备份​​
  • ​​(2) 增量备份​​
  • ​​(3) 差异备份​​
  • ​​二十八、常见问题​​
  • ​​1.`centOS7切换系统语言`​​
  • ​​2.Xshell6 中文乱码(修改编码)​​
  • ​​3.`CentOS7`无法输入中文​​
  • ​​4.`make: *** No targets specified and no makefile found. Stop.`​​
  • ​​5.Centos出现“FirewallD is not running”​​
  • ​​6.Linux yum提示Loaded plugins错误的解决方法​​
  • ​​7.bash: ls: command not found的解决办法​​

一、系统组成

  • 内核
  • Shell:用户界面
  • 文件系统
  • 应用程序

二、常用快捷键

  • 打开终端 ​​Ctrl​​​ + ​​Alt​​​ + ​​t​
  • 进入虚拟机聚焦 ​​Ctrl​​​ + ​​g​
  • 进入windows聚焦 ​​Ctrl​​​ + ​​Alt​

三、常用命令

查看当前系统语言包

locale

查看当前系统有的语言包

locale -a

查看版本号

cat /etc/centos-release

查看linux内核

uname -r

关机(ctrl + alt + F6)

shutdown -h now //立即关机
shutdown -h 10 //十分钟以后关机
poweroff

重启

shutdown -r now //立即重启
shutdown -r 10 //十分钟后重启
reboot

查看centos系统位数

getconf LONG_BIT

切换为root用户

su
//后输入密码

root用户切换为指定普通用户

su 用户名
//不需要输入密码

检查网络连通性

ping www.baidu.com

清屏Ctrl Shift L

clear

查看主机ip

ip addr
# 或者
ifconfig

查看目录

ls
ls -a 显示所有文件 包括隐藏文件
ls -l 显示详细信息
ls -lrt 安装时间反向排序

目录切换

cd /home       切换到home目录
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd - 返回上次的目录
cd ~ 返回/root目录

显示当先路径

pwd

创建文件

touch dingwen.txt

查看文件

vi dingwen.txt

vim dingwen.txt

删除文件或者目录

rm [options] name

-d或--directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。
 -f或--force  强制删除文件或目录。
 -i或--interactive  删除既有文件或目录之前先询问用户。
 -r或-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或--verbose  显示指令执行过程。
 --help  在线帮助。
 --version  显示版本信息
 
 rm -i *.c //删除所有C语言程式档;删除前逐一询问确认
 
 //删除所有以test开头的文件夹
 rm -rf test*

永久更改vim下tab为四个空格

vim /etc/vimrc

set tabstop = 4//第一一行加上

从100行开始显示

vim +100 /etc/init.d/network

创建文件

touch dingwen.txt

创建文件夹

mkdir 文件夹名称 -p 允许创建目录及子目录 -m 创建指定权限的目录

//创建多个文件夹
mkdir test1 test2 test3

//创建多级目录
mkdir -p test4/test5/test6

//在多个文件夹里的每个文件夹里面需要创建一个tool文件夹
mkdir {test1,test2,test3}/dw -p

改名或者移动文件夹mv [options] 源文件或者目录 目标文件或者目录

  • -d 先备份在覆盖文件
  • -f force(强制),目标文件已经存在,不询问直接覆盖
  • -t 目标文件已经存在时,先询问是否覆盖
  • -u 目标文件已经存在,且source比较新,才会更新update
  • -t -target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
    文件重命名 ​​​mv test.txt test1.txt​

移动文件 ​​mv home/n1/test.txt /home/n2​

将文件log1.txt,log2.txt,log3.txt移动到目录test3

mv -t /test3 log1.txt log2.txt log3.txt
mv log1.txt log2.txt log3.txt test3

将文件file1改名为file2,如果file2已经存在,则询问是否覆盖​​mv -i log1.txt log2.txt​

将文件file1改名为file2,即使file2存在,也是直接覆盖掉​​:mv -f log3.txt log2.txt​

目录的移动​​mv dir1 dir2​​ 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中

移动当前文件夹下的所有文件到上一级目录
​​​mv * ../​

把当前目录的一个子目录里的文件移动到另一个子目录里​​mv test3/*.txt test5​

文件被覆盖前做简单备份,前面加参数-b ​​mv log1.txt -b log2.txt​

说明:
-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。
–backup该选项指定如果目标文件存在时的动作,共有四种备份策略:
1.CONTROL=none或off : 不备份。
2.CONTROL=numbered或t:数字编号的备份
3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1…n:
执行mv操作前已存在以数字编号的文件log2.txt.~1~,那么再次执行将产生log2.txt~2~,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。
4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。

cat(由第一行开始显示内容,并将所有内容输出)

cat命令的用途是连接文件或标准输入并打印,简单来说cat命令是用来查看纯文本文件(通常为内容较少的文件),与重定向符号配合使用,可以实现创建文件与合并文件

  • 使用cat命令查看文件 ​​cat dingwen.txt​
  • 查看文件并且显示行号​​cat -n dingwen.txt​
  • 使用cat创建文件,并且输出内容 ​​cat > cat.txt​​继续输入内容 ctrl + C 结束
  • 文件内容合并​​cat dingwen.txt cat.txt > file.txt​​合并后生成新的文件原来的文件依然存在

tar

以下五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个

  • -c 建立压缩档案
  • -t 查看内容
  • -r 向压缩归档文件末尾追加文件
  • -u 更新原压缩包中的文件

根据需要在压缩或解压档案时可选的参数

  • -Z 有gzip属性的
  • -j 有bz2属性的
  • -Z 有compress属性的
  • -v 显示所有过程
  • -O 将文件解开到标准输出

-f 是必须参数

  • 使用档案名字,注意只能使用档案名称

​tar -cf txt.tar *.txt​​将所有txt文件打成txt.tar包, -c表示新产生的包 -f指定包的文件名

​tar -rf txt.tar *.java​​将所有的java文件增加到txt.tar里面去。 -r表示新增 -f表示执行包的文件名称

​tar -uf txt.tar Person.java​​更新txt.tar包中的文件。 -u表示更新的意思 -f 指定包的文件名

​tar -tf txt.tar​​列出包内的文件(在不解压的情况下查看压缩包内容)

​tar -xf txt.tar​​解压出包内的所有文件

压缩

不同压缩方式对比:在压缩比率上: tar.bz2>tgz>tar
占用空间与压缩比率成反比: tar.bz2<tgz<tar
耗费时间(打包,解压)
打包:tar.bz2>tgz>tar
解压: tar.bz2>tar>tgz
从效率角度来说,当然是耗费时间越短越好
因此,Linux下对于占用空间与耗费时间的折衷多选用tgz格式,不仅压缩率较高,而且打包、解压的时间都较为快速,是较为理想的选择。

tar -cvf jpg.tar *.jpg //将目录里面所有的jpg文件打包成jpg.tar

//适用于快速压缩和快速解压
tar -czf jpg.tar.gz *.jpg //将目录里面所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,,命名为jpg.tar.gz


tar -cjf jpg.tar.bz2 *.jpg //将目录里面所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2

tar -cZf jpg.tar.Z *.jpg //将目录里面所有的jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z

解压

//解压tar包
tar -xvf txt.tar

//解压tar.gz包
tar -xzvf txt.tar.gz

//解压tar.bz2
tar -xjvf txt.tar.bz2

//解压tar.Z
tar -xZvf txt.tar.Z

//解压*.gz
gzip -d / gunzip

//解压*.bz2
bizp2 -d 包名称/ bunzip2

//解压*.Z
uncompress //解压之后就不在了

zip zip [选项] 压缩包名 源文件或源目录列表

-r 递归压缩目录
-m 将文件压缩后,删除原始文件,相当于把文件移到压缩文件中
-v 显示详细的压缩过程信息
-q 在压缩的时候不显示命令执行过程
-压缩级别 1~9 1表示压缩速度快 9表示压缩效率高
-u 更新压缩文件,及往压缩文件中添加新文件

zip -rv9 f.zip files/ //压缩files这个目录文件
unzip f.zip //解压

vim(强大的文本编辑器) 使用

命令模式(ESC):

  • 1.:q 保存修改
  • 2.:wq 保存修改并退出
  • 3.:q! 强制退出不保存
  • 4.:wq! 强制保存退出
  • 5.:string 指定搜索字符
  • 6.:set nu 设置行号
  • 7.:set nonu 隐藏行号
  • 8.:w! 强制保存
  • 9.:x 保存退出
  • 10.:10d 删除第十行
  • 11.:10,20d 删除第十到二十行
  • 12.:nohl 不在高亮
  • 13.:20 跳转到20行
  • 14.:1,12/d/D/g 替换1到12行的d为D,整行替换。没有g的话只会替换一行的第一个单词
  • 15.:1,$s/D/1/g 从行首到行尾将D替换为1
  • 16.:set tabstop=4 或者set ts = 4临时设置vim为四个空格
  • 17.:set ff 查看当前文件格式
  • 18.:set ff=unix 设置当前文件格式

编辑模式(常用o:当前行下一行新起一行A:当前行行尾)

  • 1.i 在当前字符前插入
  • 2.I 在光标所在行行首插入
  • 3.a 在当前字符后插入
  • 4.A 在光标所在行行尾插入
  • 5.o 在当前行下一行插入新的一行
  • 6.O 在当前行上一行插入新的一行

一般模式(打开默认为一般模式)

  • 1.$ 光标移动到行尾
  • 2.^ 光标移动到非空字符行首
  • 3.G 光标移动到末行
  • 4.v 可视模式可以按上下键选中
  • 5.V 可视模式选中当前行
  • 6.x 从光标往后删
  • 7.X 从光标往前面删
  • 8.dd 删除剪切当前行
  • 9.5dd 往下删除剪切5行
  • 10.yy 复制当前行
  • 11.5yy往下复制5行
  • 12.p 向下粘贴复制内容
  • 13.5p 向下粘贴五遍已复制内容
  • 14.P 向上粘贴已复制内容
  • 15.u 撤销,最多撤销50次
  • 16.ctrl r 反撤销
  • 17.ZZ 保存退出

curl

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思

  • 查看版本​​curl --version​
  • 基本测试​​curl -v www.baidu.com​​ -v 表示打开verbose模式
  • 不带参数curl发出get请求 ​​curl www.ip.cn​
  • -A 指定客户端的用户代理标头​​User-Agent​​ curl 的默认用户代理字符串是curl/[version]
//将User-Agent改成chrome浏览器
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://www.baidu.com


//移除User-Agent
curl -A '' https://www.baidu.com
  • -H 指定User-Agent ​​curl -H 'User-Agent: php/1.0' https://www.baidu.com​
  • -b 用来向服务器发送cookie
//生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。
curl -b 'foo=bar' https://google.com

//发送两个 Cookie
curl -b 'fool=bar;foo2=bar2' https://www.baidu.com

//读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器
curl -b cookies.txt https://www.baidu.com
  • -c将服务器设置的Cookie写入一个文件​​curl -c cookies.txt https://www.baidu.com​
  • -d用于发送Post请求的数据体
curl -d 'login=name&password=pwd' -X POST https://www.baidu.com/login
# 或者
curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login
//使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST


//-d参数可以读取本地文本文件的数据,向服务器发送

curl -d '@data.txt' https://google.com/login
  • –data-urlencode 参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码
//发送的数据hello world之间有一个空格,需要进行 URL 编码
curl --data-urlencode 'comment=hello world' https://google.com/login
  • -e 用来设置HTTP的标头​​Referer​​表示请求的来源
curl -e 'https://google.com?q=example' https://www.example.com
#或者
curl -H 'Referer: https://google.com?q=example' https://www.example.com
  • -F 用来向服务器上传二进制文件
//给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上
curl -F 'file=@photo.png' https://google.com/profile

//-F参数可以指定 MIME 类型
//指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream
$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile

//-F参数也可以指定文件名
原始文件名为photo.png,但是服务器接收到的文件名为me.png
curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
  • -G 参数用来构造 URL 的查询字符串
//发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求

curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

//需要URL编码
curl -G --data-urlencode 'comment=hello world' https://www.example.co
  • -H HTTP请求标头
//添加 HTTP 标头Accept-Language: en-US
curl -H 'Accept-Language: en-US' https://google.com

//多个
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
  • -i 参数打印出服务器回应的 HTTP 标头
//先输出服务器回应的标头,然后空一行,再输出网页的源码
curl -i https://www.example.com
  • -I 参数向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来
curl -I https://www.example.com
//--head参数等同于-I
  • -k 参数指定跳过 SSL 检测
//不会检查服务器的 SSL 证书是否正确
curl -k https://www.example.com
  • -L 参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向
curl -L -d 'tweet=hi' https://api.twitter.com/tweet
  • –limit-rate 用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境
//将带宽限制在每秒 200K 字节
curl --limit-rate 200k https://google.com
  • -o 参数将服务器的回应保存成文件,等同于wget命令
//将www.example.com保存成example.html
curl -o example.html https://www.example.com
  • -O 参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名
//将服务器回应保存成文件,文件名为bar.html
curl -O https://www.example.com/foo/bar.htm
  • -s 参数将不输出错误和进度信息
//一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果
curl -s https://www.example.com

//如果想让 curl 不产生任何输出,可以使用下面的命令
curl -s -o /dev/null https://google.com
  • -S 参数指定只输出错误信息
  • -u 参数用来设置服务器认证的用户名和密码
//设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1
curl -u 'bob:12345' https://google.com/login
  • -v 参数输出通信的整个过程,用于调试
  • -x 参数指定 HTTP 请求的代理。
//指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出
curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
  • -X参数指定 HTTP 请求的方法
curl -X POST https://www.example.com

查看centos版本rpm -q centos-release

查看某个端口被哪一个进程使用

//1.安装net-tools工具
yum install net-tools
//2.查询
netstart -lnp | grep 9001

wget下载(存放目录 cd ~ 根目录)

wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz

ps(Process Status)使用

用于查看系统进程状态,ps命令输出值非常多,通常结合管道符使用。

  • PID: 运行着的命令(CMD)的进程编号
  • TTY: 命令所运行的位置(终端)
  • TIME: 运行着的该命令所占用的CPU处理时间
  • CMD: 该进程所运行的命令
1. ps -ax 使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程.
ps -ax |less
ps-ax |more

2.查看特定用户的进程
ps -u dw

3. 通过cpu和内存使用来过滤进程
ps -aux --sort -pcpu | less
ps -aux --sort -pmem | less

4.通过管道符配合head命令显示制定行数的信息
ps -aux --sort -pmem |head -n 10

5.使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为md的进程的信息
ps -f -C md

6.树形显示进程
pstree

检查系统是否安装了yum

rpm -qa |grep yum

//检查yum版本
yum --version

yum安装

//1.下载最新的yum-3.2.28.tar.gz并解压
wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz
tar xvf yum-3.2.28.tar.gz

//2.进入目录进行安装
cd yum-3.2.28
yummain.py install yum

如果结果提示错误: CRITICAL:yum.cli:Config Error: Error accessing file for config file:///etc/
可能是原来是缺少配置文件。在etc目录下面新建yum.conf文件,然后再次运行 yummain.py install yum,顺利完成安装

//3.更新
yum check-update

yum update

yum clean all

// 4.配置源

//备份,将 CentOS-Base.repo 为CentOS-Base.repo.backup
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup


//下载新的 http://mirrors.aliyun.com/repo/Centos-7.repo,并命名为CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


//清除缓存
yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存

//5.epel源 安装和配置

//查看可用的epel源
yum list | grep epel-release
//安装 epel
yum install -y epel-release

//配置阿里镜像提供的epel源

wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

//清除缓存
yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存

查找目录或者文件

sudo find / -name *tomcat*

前后台运行jar

//前台运行,当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
java -jar xxx.jar

//& 代表在后台运行,当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行
java -jar xxx.jar &

//nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
//当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件
nohup java -jar xxx.jar &

//和方式三差不多,只不过所有控制台输出内容保存到 log.txt 文件
nohup java -jar xxx.jar & > log.txt

//启动jar包指定端口
java -jar xxx.jar --server.port=80

tail命令 tail [参数] [文件]

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要
filename 更新就可以看到最新的文件内容

参数详解
  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容
  • –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, --quiet, --silent 从不输出给出文件名的首部
  • -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
//要跟踪名为 notes.log 的文件的增长情况
tail -f notes.log

//显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -n +20 notes.log

//显示文件 notes.log 的最后 10 个字符
tail -c 10 notes.log

//显示最后100行数据
tail -n 200 notes.log

//除了前99行不显示外,显示第100行到末尾行
tail -n -100 notes.log

kill kill -Signal pid

CentOs7基础_服务器

默认参数下,kill 发送SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出.TERM(或数字9)表示“无条件终止”kill - 9 表示强制杀死该进程

lsof

//安装
yum install lsof

//基本使用,查看端口的进程信息
lsof -i:port
字段解释

CentOs7基础_文件名_02

查看单个端口占用情况
lsof -i :23326
lsof -i tcp:23326
lsof -i udp:23326

查看多个端口占用情况
lsof -i tcp:23325,23326,23327

所有的网络连接
lsof -i

永久固定IP

ip addr

vim /etc/sysconfig/network-scripts/ifcfg-网卡名称


//修改ifcfg-网卡名称文件,先cp备份
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# 使用静态IP地址,默认为dhcp
# BOOTPROTO="dhcp"
BOOTPROTO="static"
# 配置的静态IP地址
IPADDR="192.168.0.140"
# 子网掩码
NETMARK="255.255.255.0"
DNS1="223.5.5.5"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="fbadb2bb-1760-407e-ae9c-d9b089908006"
DEVICE="ens33"
ONBOOT="yes"

//重启network服务生效
systemctl restart network.service

tac从最后一行显示内容,并将所有内容输出。

tac 文件名称

head0显示头几行

//显示前两行数据
head -n 2 xx.txt

more根据窗口大小,一页一页的显示文件内容(只能向后翻页)

//语法 more  文件名

Enter 向下n行,默认为1行,可以自己设定

Ctrl f 向下滚动一屏

空格键 向下滚动一屏

Ctrl b 返回上一屏

= 输出当前的行号

:f 输出文件名和当前的行号

v 调用vi编辑器

! 调用shell执行命令

q 退出more

'less’根据窗口代销,一页一页的显示文件内容,可以往前翻页,也可以搜索字符

less [参数] 文件

//参数
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页

//全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏

//单行导航
j - 向前移动一行
k - 向后移动一行

G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令

//标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处

v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件

find按照指定条件查找文件

//参数
-name 匹配名称
-perm 匹配权限mode为完全匹配( –mode包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime –n +n 匹配修改内容时间(-n n天以内 +n n天之前)
-atime –n +n 匹配访问内容时间(-n n天以内 +n n天之前)
-ctime –n +n 匹配修改文件权限时间(-n n天以内 +n n天之前)
-nouser 匹配无所有者文件
-nogroup 匹配无所有组文件
-newer file1 !file2 匹配比file1新 比file2旧的文件
--type b/d/c/p/l/f 匹配文件类型(参数依次块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+为超过设定值大小的文件,-为小于设定值大小的文件)
-prune 忽略某个目录
-exec…………{}\; 面可跟用于进一步处理搜索结果的命令
  • 实例
//搜索 /etc 目录下 ,文件名以pass开头的文件有哪些
find /etc -name 'pass*'

//搜索 /home 目录下所有的一般文本文件
find /home -type f

//要搜索 /home 目录下 修改时间是1天内的文件
find /homw -mtime -1

//查找当前目录小于5K的文件,并列出文件详细信息

find -size -5k -exec ls -l {}\;

在文件末尾追加内容

echo 'this is a test' >> /dw/test

四、目录结构

  • / 根目录
  • /boot linux内核、引导系统程序所需文件
  • /dev 主要存放于设备有关的文件
  • /home 个人用户数据目录
  • /lib 系统动态链接共享库,几乎所有的应用程序都会使用到这个共享库
  • /mnt 存放挂载存储设备的挂载目录
  • /bin 存放标准linux的工具
  • /tmp 临时目录,linux会定期清理
  • /etc 系统配置文件
  • /var 存储经常修改的文件(日志、数据文件、邮箱等)
  • /root 系统管理员目录
  • /usr 不适合放在/bin或/etc目录下的额外的工具
  • /opt 可选的程序
  • /usr/local 手动安装的软件
  • /medial 挂载媒体设备
  • /sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令

CentOs7基础_vim_03


CentOs7基础_文件名_04


CentOs7基础_服务器_05

五、系统分区(分区-> 格式化->挂载)

1.分区

主分区加拓展分区最多只能有4个,拓展分区只能包含逻辑分区,拓展分区不能写入数据, 逻辑分区可以写入数据。

2.格式化

高级格式化,又称逻辑格式化。本质就是在硬盘中写入文件系统。

3.硬件设备文件名

CentOs7基础_文件名_06

4.挂载

必须分区 /(根分区)

swap(交换分区,内存的两倍不超过2G。内存不够时的临时内存)

/boot (启动分区,200MB)

5.文件系统结构示意图

CentOs7基础_centos_07

6.分区类型

主分区:总共最多只能分四个。 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区。

CentOs7基础_文件名_08

6.ext4

ext4:它是ext3文件系统的升级版。ext4 在性能
、伸缩性和可靠性方面进行了大量改进。EXT4
的变化可以说是翻天覆地的,比如向下兼容
EXT3、最大1EB文件系统和16TB文件、无限数
量子目录、Extents连续数据块概念、多块分配
、延迟分配、持久预分配、快速FSCK、日志校
验、无日志模式、在线碎片整理、inode增强、
默认启用barrier等。是CentOS 6.3的默认文件系

(1EB=1024PB=1024*1024TB)

六、安装选择

//安装或者升级现有系统
Install or upgrade an existing system

//安装过程采用基本的显卡驱动
Install system with basic video driver

//进入系统修复模式
Rescue installed system

//退出安装从硬盘启动
Boot from local drive

//存储介质检测
Memory test

七、密码原则

1.复杂性

  • 八位字符以上、大小写字母、数字、符号
  • 不能是英文单词
  • 不能是和用户相关的内容

2.易记忆性

3.时效性

八、软件包选择

  • 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严格区分大小写
  • Linux中所有内容都以文件形式保存,​​/dev/sd[a-p]​​​硬盘,​​/dev/sr0​​等,光盘
  • Linux不靠扩展名区分文件类型
//压缩包
*.gz *.bz2 *.tar*bz2 *.tgz 等

//二进制软件包
*.rpm

//网页文件
*.html *.jsp

//脚本文件
*.sh

//配置文件
*.conf
  • Linux 所有存储设备必须挂载后才能使用,包括硬盘、光盘、U盘
  • 远程服务器不允许关机,只能重启
  • 重启的时候应该关闭服务
  • 不要在服务器访问高峰的时候运行高负载命令
  • 远程配置防火墙的时候不要把自己踢出服务器
  • 密码必须遵循规范,并且定期更新
  • 合理分配权限,原则是够用就好
  • 定义备份重要数据和日志

十一、webmin

Webmin 是一个基于 Web 的 Linux 系统管
理界面。您就可以通过图形化的方式设置
用户帐号、Apache、DNS、文件共享等服
务​​​下载地址​

十二、用户和用户组管理

用户信息文件:​​/etc/passwd​

CentOs7基础_服务器_09

初始组和附加组:每个用户都以一个初始组只能有一个,用户也可以加入其它的组,作为该用户的附加组。

用户影子文件​​/etc/shadow​

CentOs7基础_文件名_10

组信息文件​​/etc/group​

CentOs7基础_服务器_11

组密码文件 ​​/etc/gshadow​

CentOs7基础_服务器_12

时间戳换算

# 时间戳 --> 日期
date -d "1970-01-01 16066 days"

# 日期 --> 时间戳
echo $(($(date --date="2014/01/06" +%s)/86400+1))

用户的家目录 root 550 其它700

用户的邮箱​​/var/spool/mail/用户名/​

用户模板目录 /etc/skel/

十三、ACL权限

# dumpe2fs命令是查询指定分区详细文件系统信息的命令选项
# -h 仅显示超级块中信息,而不显示磁盘块组的详细信息
dumpe2fs -h /dev/sda3

# 临时开启分区ACL权限
# 重新挂载根分区,并挂载加入acl权限
mount -o remount,acl /


# 永久开启分区ACL权限
vi /etc/fstab

UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl
# 重新挂载文件系统或重启动系统,使修改生效
mount -o remoun /

十四、SetUID权限

1.要求,缺一不可

  • 只有可以执行的二进制程序才能设定SetUID权限
  • 命令执行者对该命令必须要有X(执行权限)
  • 命令执行者在执行该程序的时候暂时获得该程序文件的属主身份(灵魂附体)
  • SetUID权限只在该程序执行过程中有效
  • 要求: 命令执行者必须对改程序有X(执行的权限),否则设定为S(大写)表示不能生效

2.案例passwd

# 只有root对passwd、影子文件有读写权限,但是普通用户也可以修改自己的密码,因为命令passwd有SetUID权限。普通用户执行passwd命令的时候会暂时拥有root的身份。
whereis passswd
ll /usr/bin/passwd

3.危险的SetUID

关键目录应严格控制写权限。比如“/”
、“/usr”等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件
作一列表,定时检查有没有这之外的文件
被设置了SetUID权限

十五、SetGID权限

1.对文件的作用

  • 只有可执行的二进制程序才能设定SetGID权限
  • 命令执行者对该程序拥有X(执行)权限
  • 在执行命令的过程中,命令执行者的组身份升级为改程序文件的所属组
  • 只能程序执行过程中有效
whereis locate
ll /usr/bin/locate
ll /val/lib/mlocate/mlocate.db

2.对目录的作用

  • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录的有效组会变成此目录的属组
  • 若普通用户对此目录拥有w权限时,新建的文件默认属组就是这个目录的属组
cd /tmp/
mkdir dtest
chmod g+s /dtest/
ll -d /dtest/
su - test
cd /tmp/dtest/
touch adb
ll

十六、Sticky BIT

1.SBIT黏着位作用

  • 只对目录有效
  • 普通用户对该目录拥有w、x的权限
  • 如果没有黏着位,普通用户拥有w的权限则该用户可以删除文件。有了黏着位,普通用户虽然有W权限,但是也只能删除自己建立的文件。其他用户的文件是没有权限删除的。
ll -d /tmp/

十七、sudo权限

root把本来只能超级用户执行的 命令赋予普通用户来执行,sudo操作的对象是系统命令

root ALL=(ALL) ALL
# 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# 授权sc用户可以重启服务器
sc ALL= /sbin/shutdown –r now

//执行
su – sc

# 查看可用的sudo命令
sudo -l

# 普通用户执行sudo赋予的命令
sudo /sbin/shutdown -r now

十八、让Linux支持NTFS文件系统

# 解压
tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz
# 进入解压目录
cd ntfs-3g_ntfsprogs-2013.1.13
# 编译器准备。没有指定安装目录,安装到默认位置中
./configure
# 编译
make
# 编译安装
make install
  • 使用
mount -t ntfs-3g 分区设备文件名 挂载点

十九、fdisk命令分区过程

1.fdisk 参数详解

CentOs7基础_centos_13

# 关机

# 添加硬盘

# 通电开机

# 查看新硬盘的分区设备文件名
fdisk -l

# 使用fdisk命令分区
fdisk /dev/sdb

# 新建分区

# 选择主分区还是拓展分区

# n 新建

# 选择设备编号

# 设置起始柱面 +2GB

# 新建拓展分区
n /dev/sdb2

# 选择设备编号

# 设置起始柱面

# w保存退出

# 重新读取分区表信息
partprobe

# 格式化分区
mkfs -t ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb5

# 建立挂载点并挂载
mkdir disk1
mount /dev/sbd1 /disk1/

mkdir disk5
mount /dev/sbd5 /disk5/

2.分区自动挂载与fstab文件修复

/etc/fstab文件
第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高

/etc/fstab文件修复
mount -o remount,rw /

3.分配swap分区

# 新建swap分区
# 别忘记把分区ID改为82
fdisk /dev/sdb

# 格式化
mkswap /dev/sdb1

# 加入swap分区
swapon /dev/sdb1

# 取消swap分区
swapoff /dev/sdb1

# swap分区开机自动挂载
dev/sdb1 swap swap defaults 0 0

二十、Shell

(1)命令解释器(2)解释执行的脚本语言

1.查看Linux支持的Shell
cat /etc/shells

# 输入最后的单词(Shell分类)进入
# exit 退出
2.echo

功能描述: 标准输出

语法: echo [选项] [输出内容]

选项:

  • -e 带转义字符的输出

案例:

# 删除左侧字符
echo -e 'ab\bc' # ac 单引号双引号都可以

# 制表符和换行符
echo -e 'a\tb\ne\td\n'

# 按照十六进制ASCII码输出
echo -e \
"\x61\t\x62\t\x63\n\x64\t\x65\t\x66"

# 输出颜色
# 30m=黑色,31m=红色,32m=绿色,33m=黄色
# 34m=蓝色,35m=洋红,36m=青色,37m=白色
echo -e '\e[1;36m dingwen \e[0m'

CentOs7基础_文件名_14

3.hello world
#!/bin/bash
# the first program
# Author:dingwen <E-mail:dingwenemail@qq.com>

echo -e '\e[1;35m dingwen \e[0m'
4.脚本执行
  • bash 脚本(不需要改脚本文件有执行权限)
  • 赋予执行权限直接运行
chmod 755 hello.sh
# 相对路径执行
./hello.sh

# 绝对路径执行
/home/dw/data/sh/hello.sh
5.常用快捷键

CentOs7基础_文件名_15

6.输入重定向
7.输出重定向
(1)标准输出重定向
  • 命令 > 文件

以覆盖的方式,把命令的正确输出输出到指定的文件或者设备中

  • 命令 >> 文件

以追加的方式,把命令的正确输出输出到指定的文件或者设备中

(2)标准错误输出重定向
  • 错误命令 2> 文件

以覆盖的方式,把命令的错误输出输出到指定的文件或者设备中

  • 错误命令 2>> 文件

以追加的方式,把命令的错误输出输出到指定的文件或者设备中

#####(3)正确输出和错误输出同时保存

  • 命令 > 文件 2>&1

以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。

  • 命令 >> 文件 2>&1

以追加的方式,把正确输出和错误输出都保存到同一个文件当中。

  • 命令 &> 文件

以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。

  • 命令 &>> 文件

以追加的方式,把正确输出和错误输出都保存到同一个文件当中。

  • 命令 >> 正确文件 2>> 错误文件

把正确的输出追加到文件1中,把错误的输出追加到文件2中

8.输出重定向
  • 命令 < 文件 把文件作为命令的输入
  • 命令 << 标识符 … 标识符
wc < 文件名
8.多命令顺序执行
  • ;

格式: 命令1 ; 命令2 : …
作用:多个命令顺序执行,命令之间没有任何逻辑联系

  • &&

格式: 命令1 && 命令2
作用: 逻辑与:若命令1正确执行,则命令2执行。若命令1不正确执行,则命令2不执行。

  • ||

格式: 命令1 : 命令2
作用: 逻辑或:当命令1执行不正确,命令2才会执行。若命令1正确执行,则命令2不会执行。

案例:计算创建100MB的文件所需要的时间
dd if=输入文件 of=输出文件 bs=字节数 count=个数
# 选项:
# if=输入文件 指定源文件或源设备
# of=输出文件 指定目标文件或目标设备
# bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
# count=个数 指定输入/输出多少个数据块

date;dd if=/dev/zero of=/root/testFile bs=1k count=100000;date

ls anaconda-ks.cfg && echo yes

lsfda || echo no

lss && echo yes || echo no
9.管道符

命令格式:命令1 | 命令2

功能描述: 把命令1的正确输出作为命令2的操作对象

案例:

ll -a /etc/ | less

netstat -an |grep "ESTABLISHED"
10.通配符
  • ?:匹配一个任意字符
  • *:匹配0个或多个任意字符
  • []:匹配中括号中任意一个字符


11.其他特殊符号
  • ‘’:单引号,所有特殊字符都是原样输出,没有其他特殊含义
  • “”:双引号,特殊符号有特殊意思
  • ``:反引号,表示括起来的是系统命令和$()一样
  • $():系统命令的引用
  • # 注释 shell标识 root
  • CentOs7基础_vim_16name
  • \:转义符
11.变量

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息

变量设置规则:

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或双引号包括。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“CentOs7基础_服务器_17{变量名}包含
  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
  • 环境变量名建议大写,便于区分。

变量分类:

  • 用户自定义变量
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
# 变量定义
name="shen chao"
# 变量叠加
aa=123
aa="$aa"456
aa=${aa}789
# 变量调用
echo $name
# 变量查看
set
# 变量删除
unset name
12.环境变量

用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效

# 设置环境变量
export 变量名=变量值

# 查询环境变量
env

# 删除变量
unset 变量名

# 查看系统环境变量,系统查找命令的路径
echo $PATH

# 变量叠加
echo "$PATH"叠加的内容

# PS1: 设置系统提示符的环境变量
# \d:显示日期,格式为“星期 月 日”
# \h:显示简写主机名。如默认主机名“localhost”
# \t:显示24小时制时间,格式为“HH:MM:SS”
# \T:显示12小时制时间,格式为“HH:MM:SS”
# \A:显示24小时制时间,格式为“HH:MM”
# \u:显示当前用户名
# \w:显示当前所在目录的完整名称
# \W:显示当前所在目录的最后一个目录
# \#:执行的第几个命令
# \$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户
# 会显示提示符为“$
13.位置参数变量
  • $n n为数字,$0代表命令本身,$1-CentOs7基础_文件名_18{10}
  • CentOs7基础_vim_19*把所有的参数看成一个整体
  • CentOs7基础_文件名_20@把每个参数区分对待
  • $# 这个变量代表命令行中所有参数的个数
# 案例1

#!/bin/bash
# 计算用户输入的两个数字的和返回
# dingwen <E-mail:dingwenemail@qq.com>

var0=$0
num1=$1
num2=$2
sum=$((num1 + num2))
echo -e "$sum \n $var0"
# 案例2

#!/bin/bash
# $@ $* $# 的用法
# dingwen <E-mail:dingwenemail@qq.com>

echo '$='$#
echo '$*='$*
echo '$@='$@
# 案例3

#!/bin/bash
# $@ 和 $* 的区别
# dingwen <E-mail:dingwenemail@qq.com>

for i in "$*"
do
echo $i
done

for y in "$@"
do
echo $y
done
14、预定义变量
  • $? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
  • $$ 当先进程的进程号(PID)
  • $! 后台运行的最后一个进程的进程号(PID)
# 案例1

#!/bin/bash
# 预定义变量使用
# dingwen <E-email: dingwenemail@qq.com>

echo '当前进程号的PID:'$$

# 使用find查找hello.sh文件
# & 表示放入后台执行
find /root -name hello.sh &
echo '后台最后一个进程的PID'$!
15、变量测试与内容替换

CentOs7基础_vim_21

16、环境变量配置文件

CentOs7基础_文件名_22

  • /etc/profile
  • /etc/profile.d/*.sh
  • /etc/bashrc
  • ~/.bash_profile
  • ~/.bashrc

/etc下面的,所有用户都生效。~只对当前用户生效,每一个用户单独的环境配置文件。 ~代表家目录

加载顺序
/etc/profile的作用:

  • USER变量
  • LOGNAME变量:
  • MAIL变量:
  • PATH变量:
  • HOSTNAME变量:
  • HISTSIZE变量:
  • umask:
  • 调用/etc/profile.d/*.sh文件量

~/.bash_profile的作用

  • 调用了~/.bashrc文件
  • 在PATH变量后面加入了“:$HOME/bin”这个目录

~/.bashrc的作用

  • 定义默认别名
  • 调用/etc/bashrc

/etc/bashrc的作用:(未登录状态的shell)

  • PS1变量
  • umask
  • PATH变量
  • 调用/etc/profile.d/*.sh文件

​~/.bash_logout​​ 注销时生效的配置文件

​~/.bash_history​​ 历史命令保存文件

Shell登录信息

  • (1)本地终端欢迎信息: /etc/issue
  • CentOs7基础_centos_23

  • (2)远程终端欢迎信息: /etc/issue.net

转义符在/etc/issue.net文件中不能使用
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner/etc/issue.net”行才能显示(记得重启SSH服务​​​service sshd restart || systemctl restart sshd.service​​)

  • (3)登录后欢迎信息: /etc/motd (本地和远程都能生效)
17.正则表达式

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式.通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了

基础正则表达式

CentOs7基础_服务器_24

案例:

# “*”前一个字符匹配0次,或任意多次

# 匹配所有内容,包括空白行
grep "a*" test_rule.txt

# 匹配至少包含有一个a的行
grep "aa*" test_rule.txt

# 匹配最少包含两个连续a的字符串
grep "aaa*" test_rule.txt

# 匹配最少包含四个个连续a的字符串
grep "aaaaa*" test_rule.txt


# “.” 匹配除了换行符外任意一个字符

# “s..d”会匹配在s和d这两个字母之间一定有两个字符的单词
grep "s..d" test_rule.txt

# 匹配在s和d字母之间有任意字符
grep "s.*d" test_rule.txt

# 匹配所有内容
grep ".*" test_rule.txt

# “^”匹配行首,“$”匹配行尾

# 匹配以大写“M”开头的行
grep "^M" test_rule.txt

# 匹配以小写“n”结尾的行
grep "n$" test_rule.txt

# 会匹配空白行
grep -n "^$" test_rule.txt


# “[]” 匹配中括号中指定的任意一个字符,只匹配一个字符

# 匹配s和i字母中,要不是a、要不是o
grep "s[ao]id" test_rule.txt

# 匹配任意一个数字
grep "[0-9]" test_rule.txt

# 匹配用小写字母开头的行
grep "^[a-z]" test_rule.txt


# “[^]” 匹配除中括号的字符以外的任意一个字符

# 匹配不用小写字母开头的行
grep "^[^a-z]" test_rule.txt

# 匹配不用字母开头的行
grep "^[^a-zA-Z]" test_rule.txt

# “\” 转义符

# 匹配使用“.”结尾的行
grep "\.$" test_rule.txt
18.条件判断

两种判断格式

  • ​test -e dingwen.txt​
  • ​[ -e dingwen.txt ]​​空格必须有

安装文件类型进行判断

CentOs7基础_服务器_25

安装文件权限进行判断(不能区分权限时所属者所属组其他人)

CentOs7基础_服务器_26

两个文件之间进行比较

CentOs7基础_服务器_27

两个整数之间比较

CentOs7基础_vim_28

字符串的比较

CentOs7基础_服务器_29

多重条件判断

CentOs7基础_centos_30

案例:

# 第一个判断命令如果正确执行,则打印“yes”,否则打印“no”
[ -d /root ] && echo 'yes' || echo 'no'

# 判断文件是否有写权限
[ -w dingwen.txt ] && echo 'yes' || echo 'no'

# 创建硬链接
ln dingwen.txt /tmp/dw
# 比较两个文件的节点ID是否一致
[ dingwen.txt -ef /tmp/dw ] && echo 'yes' || echo 'no'

# 数值比较
[ 23 -ge 22 ] && echo 'yes' || echo 'no'
[ 23 -le 22 ] && echo 'yes' || echo 'no'

# 环境变量是否为空
[ -z $name ] && echo 'yes' || echo 'no'

# 数值比较
[ $x == $y ] && echo 'yes' || echo 'no'

# 判断变量aa是否有值,同时判断变量aa的是否大于23
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
19.if

单分支:

# if语句使用fi结尾,和一般语言使用大括号结尾不同
# [ 条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
# hen后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了
if [ 条件判断式 ] ;then
程序
fi

# 或者
if [ 条件判断式 ]
then
程序
fi

# ---------------------------------------------------------
# 案例1:判断根分区使用率
#!/bin/bash
# 统计根分区使用率
# Author: dingwen <E-mail: dingwenemail@qq.com>

# 根分区使用率

#!/bin/bash
# 统计根分区使用率
# Author: dingwen <E-mail: dingwenemail@qq.com>

# 根分区使用率
rate=`df -h | grep '/$' | awk '{print $5}' | cut -d '%' -f 1`

if [ $rate -ge 80 ]
then
echo '根分区快满啦'
fi

双分支:

if [ 条件判断式 ]
then
程序
else
程序
fi

# 或者
if [ 条件判断式1 ]
then
程序1
elif [ 条件判断式2 ]
then
程序2
else
当所有条件都不成立的时候执行
fi

# ---------------------------------------------------------
# 案例2:备份/etc目录
#!/bin/bash
# 备份/etc
# Author: dingwen <E-mail: dingwenemail@qq.com>

# 同步系统时间,把输出结果丢到回收站
ntpdate asia.pool.ntp.org &>/dev/nul

# 格式化日期
date=$(date +%Y%m%d%H%M%S)

# 统计/etc目录的大小
size=$(du -sh /etc)

if [ ! -d /tmp/etc.bak ]
then
mkdir /tmp/etc.bak
fi

# 以覆盖的方式写入时间
echo "date: $date" > /tmp/etc.bak/info.txt

# 以追加的方式写入目录大小
echo "size: $size" >> /tmp/etc.bak/info.txt

# 将/etc下目录打包
cd /
tar -zcf etc.bak.$date.tar.gz /etc

# 将压缩包拷贝到
mv etc.bak.$date.tar.gz /tmp/etc.bak/


# ---------------------------------------------------------
# 案例3:判断nginx是否启动,如果没有启动则重新启动,并且记录日志
#!/bin/bash
# 检查nignx是否正常启动,若没有启动则自动重启
# Author: dingwne <E-mail: dingwenemail@qq.com>
# 安装nmap
yum -y install nmap &>/dev/null

# 通过nmap得到nginx启动的标准
flag=$(nmap -sT 192.168.0.100 | grep 'tcp' | grep 'http$' | awk '{print$2 }')

# 获取当前时间
date=$(date "+%Y-%m-%d %H:%M:%S")

if [ $flag == 'open' ]
then
echo "$date nginx 正常运行中" >> /tmp/success.log

else
docker restart nginx
echo "$date nginx 意外停止,已经自动重启" >> /tmp/error.log
fi

# ---------------------------------------------------------
# 案例4:判断用户输入的是什么文件
20.case

功能描述:case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

语法:

case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
...省略其他分支
*)
都不满足执行程序
;;
esac

案例:

#!/bin/bash
# 使用case判断用户输入
# Author: dingwen <E-mail: dingwenemail@qq.com>

read -t 30 -p "Please inout your choose[yes/no]: " choose

case $choose in
"yes")
echo "yes"
;;
"no")
echo "no"
;;
*)
echo "error"
esac
21.for
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210217164104722.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MDIwOTE1,size_16,color_FFFFFF,t_70)

语法:

# 方式1:
for 变量 in 值1,值2,值3...
do
程序
done
# 案例1:
#!/bin/bash
# for demo
# Author dingwen <E-mail: dingwenemail@qq.com>

for time in morning noon afternoon evening
do
echo "$time"
done

# 案例2:
#!/bin/bash
# 批量解压缩脚本
# Author: shenchao (E-mail: shenchao@lampbrother.net)
cd /lampls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /lamp/ls.log
# 方式2:
for ((初始值;循环控制条件;变量变化))
do
程序
done

# 案例3:
#!/bin/bash
# for demo 1,200累加值
# Author: dingwen <E-mail: dingwenemail@qq.com>

sum=0
for(( i=1;i<=100;i++ ))
do
sum=$(( sum+i))
done

echo "$sum"


# 案例4:

#!/bin/bash
# 批量添加指定数量的用户
# Author: dingwen <E-mail: dingwenemail@qq.com>

# 用户分别输入用户名,添加用户数量,指定初始密码

read -t 30 -p "请输入用户名前缀:" name

read -t 30 -p "请输入批量添加用户数量: " number

read -t 30 -p "请输入用户初始密码: " password

echo -e "$name \t $number \t $password"

if [ ! -z $name -a ! -z $number -a ! -z $password ]
then
y=$number | sed 's/[0-9]//g'
if [ -z $y ]
then
for(( i=1;i<=$number;i++))
do
/usr/sbin/useradd $name$i &>/dev/null
/usr/bin/passwd --stdin $name$i &>/dev/null
done
fi
fi
22.while

功能描述:while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了

语法:

while [ 条件表达式 ]
do
程序
done

< 案例:

#!/bin/bash
# while demo
# Author: dingwen <E-mail: dingwenemail@qq.com>

i=1
sum=0

while [ $i -le 100 ]
do
sum=$(( sum+i))
i=$(( i+1 ))
done
echo $sum
23.until

功能描述:until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环

语法:

nutil [ 条件判断式 ]
do
程序
done

案例:

#!/bin/bash
# until demo
# Author:dingwen <E-mail: dingwenemail@qq.com>

i=1
sum=0

until [ $i -ge 101 ]
do
sum=$(( sum+i ))
i=$(( i+1 ))
done
echo $sum

二十一、服务管理

查询已安装的服务:

  • RPM:chkconfig --list
/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|restart||status

# 独立服务的自启动
chkconfig[--level 运行级别] [独立服务名] [on|off] # 开机自启动 2345
修改/etc/rc.d/rc.local文件
使用ntsysv命令管理自启动(red head 专有)


# xinetd服务管理(现在很少使用,需要自行安装,类似多个服务的管理,节省资源,响应速度稍慢)

# 安装
yum -y install xinetd
# 测试服务
yum -y install telnet-server

# 启动
vim /etc/xinetd.d/telnet

# 重启xinetd 服务

service xinetd restart

# xinetd 服务的自启动

chkconfig telnet on

# 也支持
ntsysv

CentOs7基础_服务器_31

  • 源码包:一般是​​usr/local/​
# 源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明`INSTALL`,查看启动脚本的方法

# 源码包服务的自启动
vi /etc/rc.d/rc.local
# 加入
/usr/local/apache2/bin/apachectl start

# 让源码包服务被服务管理命令识别
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache

# 让源码包的apache服务能被chkconfig与ntsysv命令管理自启动
vi /etc/init.d/apache
# chkconfig: 35 86 76
# 指定httpd脚本可以被chkconfig命令管理。格式是:chkconfig: 运行级别 启动顺序 关闭顺序
# description: source package apache
# 说明,内容随意
#把源码包apache加入chkconfig命令
chkconfig --add apache

CentOs7基础_文件名_32

二十二、进程管理

进程:进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源

进行管理作用:

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程
1.查看系统中所有进程

案例:

# 查看系统中所有的进程
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:产生此进程的命令名
2.查看系统的健康状态

语法:top [选项]

选项:

  • -d 秒数: 指定top命令每隔几秒更新。默认是3秒
  • 在top命令的交互模式当中可以执行的命令:
  • ? \ h : 显示交互模式的帮助
  • P: 以CPU使用率排序,默认就是此项
  • M: 以内存的使用率排序
  • N: 以PID排序
  • q: 退出top

第一行信息:

CentOs7基础_centos_33

第二行信息:

CentOs7基础_服务器_34

第三行信息:

CentOs7基础_文件名_35

第四行信息:

CentOs7基础_文件名_36

第五行信息:

CentOs7基础_vim_37

2.查看进程树

语法: pstree [选项]

选项:

  • -p: 显示进程的PID
  • -u:显示进程的所属用户
3.杀死kill
# 查看可用的进程信号
kill -l

# killall [选项][信号] 进程名字
# -i 交互式,询问
# -I 忽略进程名的大小写

# pkill [选项][信号] 进程名
# -t 终端号: 按照终端号踢出用户

# 强制杀死从pts/1虚拟终端登录的进程
pkill -t -9 pts/1

# 使用w命令查询本机已经登录的用户
w

CentOs7基础_centos_38

二十三、系统定时任务

1.crond服务管理与访问控制

# 默认系统已经开启
# 重启服务
service crond restart
# 自启动
chkconfig crond on

2.用户的crontab设置

语法: crontab [选项]

选项:

  • -e: 编辑crontab定时任务
  • -l: 查询定时任务
  • -r: 删除所有crontab定时任务

3. 定时任务编辑语法

(1) 基本结构

CentOs7基础_centos_39

(2) 特殊符号

CentOs7基础_文件名_40

(3) 案例

CentOs7基础_服务器_41

*/5 * * * * /bin/echo ”11” >> /tmp/test

二十四、日志管理

1.日志服务

在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致

2.rsyslogd的新特点

  • 基于TCP网络协议传输日志信息;
  • 更安全的网络传输方式;
  • 有日志消息的及时分析框架;
  • 后台数据库;
  • 配置文件中可以写简单的逻辑判断;
  • 与syslog配置文件相兼容

3.确定服务启动

# 查看服务是否启动
pa aux | grep rsyslogd

# 查看服务是否自启动
chkconfig --list | grep rsyslogd

4.注意

除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志。

5.常见日志的作用

CentOs7基础_文件名_42


CentOs7基础_vim_43


CentOs7基础_vim_44

6.日志文件格式
  • 事件产生的时间;
  • 发生事件的服务器的主机名;
  • 生事件的服务名或程序名;
  • 事件的具体信息。
7.rsyslogd 日志服务

配置文件​​/etc/rsyslog.onf​

# 服务名称[连接符号]日志等级 日志记录位置
# 认证相关服务.所有日志等级 记录在/var/log/secure日志中
authpriv.* /var/log/secure

服务名称:

CentOs7基础_centos_45


CentOs7基础_文件名_46

连接符

  • ”代表所有日志等级,比如:“authpriv.”代表authpriv认证信息服务产生的日志,所有的日志等级都记录
  • “.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录
  • “.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级就记录。这种用法及少见,了解就好
  • “.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录

日志等级

CentOs7基础_服务器_47

日志记录位置

  • 日志文件的绝对路径,如“/var/log/secure”
  • 系统设备文件,如“/dev/lp0”
  • 转发给远程主机,如“@192.168.0.210:514”
  • 用户名,如“root”
  • 忽略或丢弃日志,如“~”
8.日志轮替
(1)日志文件的命名规则

如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20130605”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可.如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为
“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。

(2) logrotate 配置文件
# 把apache日志加入轮替

vi /etc/logrotate.conf

/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}

二十五、运行级别

CentOs7基础_文件名_48

# 查看运行级别命令
runlevel

# 改变运行级别命令
init 运行级别

# 系统默认运行级别

vim /etc/inittab

# 系统开机后直接进入哪个运行级别
id:3:initdefault:

二十六、启动管理

1.启动流程图

CentOs7基础_服务器_49

2.initramfs内存文件系统

CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk。他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块,比如USB、SATA、SCSI硬盘的驱动和LVM、RAID文件系统的驱动

mkdir /tmp/initramfs
#建立测试目录
cp /boot/initramfs-2.6.32-279.el6.i686.img /tmp/initramfs/
#复制initramfs文件
cd /tmp/initramfs/
file initramfs-2.6.32-279.el6.i686.img
mv initramfs-2.6.32-279.el6.i686.img initramfs-2.6.32-279.el6.i686.img.gz
#修改文件的后缀名为.gz
gunzip initramfs-2.6.32-279.el6.i686.img.gz
#解压缩
file initramfs-2.6.32-279.el6.i686.img
cpio -ivcdu < initramfs-2.6.32-279.el6.i686.img
#解压缩

3.调用/etc/init/rcS.conf配置文件

  • 先调用/etc/rc.d/rc.sysinit,然后由/etc/rc.d/rc.sysinit配置文件进行Linux系统初
    始化。
  • 然后再调用/etc/inittab,然后由/etc/inittab配置文件确定系统的默认运行级别。

4.由/etc/rc.d/rc.sysinit初始化

1、获得网络环境
2、挂载设备
3、开机启动画面Plymouth(取替了过往的 RHGB)
4、判断是否启用SELinux
5、显示于开机过程中的欢迎画面
6、初始化硬件
7、用户自定义模块的加载
8、配置内核的参数
9、设置主机名
10、同步存储器
11、设备映射器及相关的初始化
12、初始化软件磁盘阵列(RAID)
13、初始化 LVM 的文件系统功能
14、检验磁盘文件系统(fsck)
15、设置磁盘配额(quota)
16、重新以可读写模式挂载系统磁盘
17、更新quota(非必要)
18、启动系统虚拟随机数生成器
19、配置机器(非必要)
20、清除开机过程当中的临时文件
21、创建ICE目录
22、启动交换分区(swap)
23、将开机信息写入/var/log/dmesg文件中

5.调用/etc/rc.d/rc文件

运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d/目录中的相应的程序/etc/rc3.d/k??开头的文件(??是数字),会按照数字顺序依次关闭/etc/rc3.d/S??开头的文件(??是数字),会按照数字顺序依次启动

6.启动引导程序grub

(1)grub中分区表示

CentOs7基础_服务器_50

(2)grub配置文件
/etc/default/gru
  • default=0 默认启动第一个系统
  • timeout=5 等待时间,默认是5秒
  • splashimage=(hd0,0)/grub/splash.xpm.gz这里是指定grub启动时的背景图像文件的保存位置的
  • hiddenmenu 隐藏菜单
  • title CentOS (2.6.32-279.el6.i686)title就是标题的意思
  • root (hd0,0)是指启动程序的保存分区kernel /vmlinuz-2.6.32-279.el6.i686 ro
    root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9
    rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us
    rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8
    rd_NO_LVM rd_NO_DM rhgb quiet定义内核加载时的选项
  • initrd /initramfs-2.6.32-279.el6.i686.img指定了initramfs内存文件系统镜像文件的所在位置
(3) Grub加密与字符界面分辨率调整
# 生成加密密码串
grub-md5-crypt

CentOs7基础_vim_51


CentOs7基础_centos_52

7.系统修复模式

(1) 单用户模式

CentOs7基础_文件名_53

(2)光盘修复模式

CentOs7基础_vim_54

(3)重要系统文件丢失,导致系统无法启动
bash-4.1# chroot /mnt/sysimage
#改变主目录
sh-4.1# cd /root
sh-4.1# rpm -qf /etc/inittab
#查询下/etc/inittab文件属于哪个包。
sh-4.1# mkdir /mnt/cdrom
#建立挂载点
sh-4.1# mount /dev/sr0 /mnt/cdrom
#挂载光盘
sh-4.1# rpm2cpio \
/mnt/cdrom/Packages/initscripts-8.45.3-1.i386.rpm \
| cpio -idv ./etc/inittab
#提取inittab文件到当前目录
sh-4.1# cp etc/inittab /etc/inittab
#复制inittab文件到指定位置
(4)Linux的安全性

CentOs7基础_服务器_55

二十七、备份与恢复

1.Linux系统需要备份的数据

  • /root/目录:
  • /home/目录:
  • /var/spool/mail/目录:
  • /etc/目录:
  • 其他目录:
  • 安装服务的数据

2.备份策略

(1)完全备份

完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体目录

(2) 增量备份

CentOs7基础_centos_56

(3) 差异备份

CentOs7基础_vim_57

二十八、常见问题

1.​​centOS7切换系统语言​

//查看当前系统语言包
locale

//如果没有zh_CN.UTF-8则需要安装中文语言包
yum install kde-l10n-Chinese

//临时修改,重启服务器会还原设置
LANG='zh_CN.UTF-8' #修改为中文
LANG='en_US.UTF-8' #修改为英文

//永久修改,重启生效
vi /etc/locale.conf
LANG='zh_CN.UTF-8'
#或者
localectl set-locale LANG-zh_CN.UTF-8

//修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.Xshell6 中文乱码(修改编码)

CentOs7基础_服务器_58

3.​​CentOS7​​无法输入中文

CentOs7基础_文件名_59

CentOs7基础_centos_60

4.​​make: *** No targets specified and no makefile found. Stop.​

原因:没有安装gcc相关依赖

解决

//nginx所需依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

5.Centos出现“FirewallD is not running”

原因:防火墙没有启动

解决​​systemcrl start firewalld​

6.Linux yum提示Loaded plugins错误的解决方法

在linux中使用yum时出现如下错误:

Loaded plugins: fastestmirror, security

Existing lock /var/run/yum.pid: another copy is running as pid 4733.

Another app is currently holding the yum lock; waiting for it to exit.。。

The other application is: yum-updatesd-he

Memory : 22 M RSS (249 MB VSZ)

Started: Fri Jul 6 12:18:29 2012 - 53:47 ago

State : Sleeping, pid: 4733

关机重启后也没有解决,然后尝试删除yum.pid文件,并重启yum服务后正常,具体命令如下:2

rm -rf /var/run/yum.pid

/sbin/service yum-updatesd restart

上面就是Linux yum出现Loaded plugins错误的解决方法的相关介绍了,如果你在关机重启后还是无法解决,可删除yum.pid文件即可解决

7.bash: ls: command not found的解决办法

原因:是因为环境变量PATH被修改了
解决:​​​export PATH=/bin:/usr/bin:$PATH​