码迷,mamicode.com
首页 > 系统相关 > 详细

Linux基本使用

时间:2020-07-12 20:47:02      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:mem   过期   详细信息   内存   编译器   用户和用户组管理   发送信息   挂载u盘   声明   

Linux

教程:兄弟连的Linux教程

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

一、Linux由来

Linux系统诞生于1991年,由芬兰大学李纳斯和后来陆续加入的众多爱好者共同开发完成。

Linux是开源软件,源代码开放的UNIX。

二、Linux发展

Linux主要版本:

技术图片

LAMP代表

  • L : linux 操作系统
  • A : Apache Web服务器
  • M : Mysql数据库
  • P : PHP语言

三、Linux应用领域

  • 基于Linux企业服务器
  • 嵌入式应用
  • Linux在电影娱乐业

四、Linux分区

4.1、分区

Linux系统只能有4个分区,3个主分区,1个扩展分区。而扩展分区可以再次分4小分区?

4.2、格式化

写入文件格式,通常一个新硬盘,都是需要格式化,才能进行存储文件内容的,而格式化就是写一个架子来规定硬盘可以存储什么样的文件,在Linux中有EXT2EXT3EXT4

4.3、分区设备文件名

系统自己做的,对于我们来说是透明的

技术图片

4.4、挂载

就像于给分区分配实际内存,比如Windows中C盘有100G的空间

Linux中,必须分区

  • /(根分区)

  • swap分区(交换分区,内存2倍,不超过2G)

  • 推荐分区

    • /boot(启动分区,200MB)

五、VMware网卡之间关系

VMware虚拟机中的网络选项

桥接模式 --- 使用的是真实网卡就是从路由中分配IP

NAT 模式 ---- 使用VMware 8网卡通信

仅主机模式 --- 使用VMware1网卡通信

六、Linux学习建议

6.1、Linux不靠扩展名区分文件类型

  • 压缩包:*.gz*.bz2*.tar.bz2*.tgz
  • 二进制软件包:*.rpm
  • 脚本文件:*.sh
  • 配置文件:*.conf

七、Linux常用命令

7.1、文件处理命令

以点开头的文件就是隐藏文件

命令格式

命令 [-选项] [参数]

ls -a /etc

  • 命令名称:ls

  • 命令英文原意:list

  • 命令所在目录:/bin/ls

  • 命令执行权限:所有用户

  • 功能描述:显示目录文件

  • 语法:`ls 选项[-aldh] [文件或目录]

    • -a 显示所有文件,包括隐藏文件
    • -l 详细 信息显示
    • -d 查看目录属性
    • -i 显示ID
    • -h 以单位(KB、MB)显示文件大小

文件头表示意义

技术图片

d开头表示是一个文件夹

-开头表示是一个文件

-rw-r--rr--rw对应root所属人,-r对应所属组,那么r、w、x都是意思呢?

r:读

w:写

x:执行

7.1.2、目录处理命令

创建一个目录

  • 命令名称:mkdir

  • 命令英文原意:make directories

  • 命令所在路径:/bin/mkdir

  • 执行权限:所有用户

  • 语法:mkdir -p [目录名]

  • 功能描述:创建新的目录

    • -p 代表递归创建
  • 示例

  • mkdir -p /tmp/project/c
    mkdir /tmp/project/c++
    

进入目录

cd

cd ../返回上级目录

cd ./同级目录

查看当前所有路径

命令名称:pwd

命令英文原意:print working directory

命令所在路径:/bin/pwd

执行权限:所有用户

语法:pwd

功能描述:显示当前目录

示例:

pwd
/tmp/project/c

删除文件夹

删除目录

命令名称:rmdir

命令英文原意:remove empty directories

命令所在路径:/bin/rmdir

执行权限:所有用户

语法:rmdir [目录名]

功能描述:只能删除空目录,所以此命令用的少

示范

rmdir /tmp/project/c

文件拷贝

命令名称:cp

命令英文原意:copy

命令所在路径:/bin/cp

执行权限:所有用户

语法:cp -rp [原文件路径] [目标文件路径]

? -r 复制目录

? -p 保留原文件属性

功能描述:复制文件或目录,目录需要带上-r

示例

cp -r /tmp/project/c /home/roo

也可以一次性赋值多个目录
cp -r /tmp/project/c /tmp/project/c++ /home/root


剪切、改名文件或目录

命令名称:mv

命令原意:move

命令所在目录:/bin/mv

执行权限:所有永辉

语法:mv [原文件或目录路径] [目标目录]

功能:剪切文件、改名

示例:

mv /tmp/pro/c /home/roo

改名
mv /tmp/pro/c++ /tmp/pro/c

删除文件或目录

命令名称:rm

命令英文原意:remove

命令所在路径;/bin/rm

执行权限:所有用户

语法:rm -rf [文件或目录]

? -r 删除目录

? -f 强制删除

功能描述:删除文件

示例

rm /tmp/pro/c

7.1.3、文件处理命令

创建文件

命令名称:touch

命令所在路径:/bin/touch

执行权限:所有用户

语法:touch [文件名]

功能描述:创建空文件

示例:touch /tmp/Hello.java

注意事项:可以创建带有空格的文件,必须加双引号才行,不然会当做两个文件来创建

如:touch Project File 会当做两个文件

技术图片

解决办法是加上双引号:touch "C++ Java Project"

技术图片

显示文件全部内容

命令名称:cat

命令所在路径:/bin/cat

执行权限:所有用户

语法:cat [文件名]

? -n 显示行号

功能描述:显示文件内容

示例:cat /etc/issue

? cat -n /etc/issue

倒序显示文件全部内容

命令名称:tac

命令所在路径:/bin/tac

执行权限:所有用户

语法:tac [文件名]

? -n 显示行号

功能描述:显示文件内容

示例:tac /etc/issue

? tac -n /etc/issue

显示文件内容带分页

命令名称:more

命令所在路径:/bin/more

执行权限:所有用户

语法:more [文件名]

? (空格) 或 f 翻页

? 回车 换行

	  q或Q				退出

功能描述:分页显示文件内容

示例:more /etc/servimces

分页显示文件内容带上下翻页

命令名称:less

命令所在路径:/usr/bin/less

执行权限:所有用户

语法:less [文件名]

? PU 和 PD 上一页,下一页

? 回车 换行

	  q或Q				退出			

? 输入/ 再输入关键字进行搜索,再输入n表示下一个

功能描述:分页显示文件内容(可向上翻页)

示例:less /etc/servimces

显示文件前面几行内容

命令名称:head

命令所在路径:/usr/bin/head

执行权限:所有用户

语法:head [文件名]

? -n 指定行数

示例:head -n 20 /etc/servimces

如果不指定默认显示前10行

显示文件末尾内容

命令名称:tail

命令所在路径:/usr/bin/tail

执行权限:所有用户

语法:tail [文件名]

? -n 执行从尾部开始显示几行

? -f 动态显示文件默认内容

示例:tail -n 18 /etc/servimces

7.1.4、链接命令

链接文件 软连接 or 硬链接

命令名称:ln

命令影院原意:link

命令所在路径:/bin/ln

执行权限:所有用户

语法:ln -s [原文件] [目标文件]

? -s 创建软连接

? 去掉-s硬链接

功能描述:生成链接文件

软链接与硬链接的区别

软链接:像是一个windows中的快键方式

技术图片

硬链接:是一个文件的拷贝 + 同步更新

7.2、权限管理命令

7.2.1、权限管理命令chmod

命令名称:chmod

命令英文原意:change the permissions mode of a file

命令所在路径:/bin/chmod

执行权限:所有用户

语法:

  1. chmod [{ugoa} {+-=} {rwx} [文件或目录]]

    符号 代表
    u 所属者
    g 所属组
    o 其他人
    a 所有人
    对应字母 所代表的权限
    r
    w
    x 执行
  2. chmod [权限数字 [文件或目录]]

    权限对应数字
    r 4
    w 2
    x 1
  3. 参数 : -R 递归修改,就是修改目录中所有权限

功能描述:改变文件或目录的权限

以字符方式修改权限

-rw-r--r-- 1 root root 0 Apr 29 17:56 Hello.java

chmod u=rwx Hello.java

-rwxr--r-- 1 root root 0 Apr 29 17:56 Hello.java

以数字修改权限

chmod 774 Hello.java

[root@iZ8vb6xljiklnfnmawnio3Z temp]# chmod 774 Hello.java

7.2.2、其他权限管理命令

修改文件或目录所属者

命令名称:chown

命令英文原意:change file ownership

命令所在路径;/bin/chown

执行权限:所有用户

语法:chown [所属者] [文件或目录]

功能描述:改变文件或目录的所有者

示例:chown xiaoxin /temp

? 修改/temp目录所属者为:xiaoxin

改变文件或目录所属组

命令名称:chgrp

命令英文原意:change file group ownership

命令所在路径:/bin/chgrp

执行权限:所有用户

语法:chgrp [用户组] [文件或目录]

功能描述:改变文件或目录所属组

示例:chgrp xiaoxin /tmp/temp

? 改变/tmp/temp目录用户组为xiaoxin

修改默认创建文件或目录的权限

命令名称:umask

命令英文原意:the user file-creation mask

命令所在路径:Shell内置命令

执行权限:所有用户

语法:umask [-S]

? -S 以rwx形式显示新建文件默认权限

功能描述:显示、设置文件的默认权限

示例:umask -S

注意事项

  1. 如果加上-S参数以可读方式显示
  2. 如果没有加上-S是数字方式显示,而且数字方式不是正常阅读的,需要用777-得到的数字等于的就是权限表示
[root@iZ8vb6xljiklnfnmawnio3Z ~]# umask 
0022

777 - 0022 = 0755  ===> -rwx r-x r-x

7.3、文件搜索命令

命令名称:find

命令所在路径:/bin/find

执行权限:所有用户

语法:find [搜索范围] [匹配条件]

功能描述:文件搜索

7.3.1、find各种使用方法以及举例

7.3.1.1、根据名字查询找

find /etc/ -name init

不区分大小写查找

find /etc/ -iname init

模糊查找

find / -name *init* # 查询包括init字符的文件
find / -name init???    # init开头后面3个位置字符的文件名

7.3.1.2、根据文件大小查找

linux中文件大小划分

1数据块 ======== 521字节 0.5kb

100MB === 102400KB

find / -size +大小
符号代表 作用
+n 大于n
-n 小于n
n 等于

7.3.1.3、根据文件或目录所属者查找

find /home -user xiaoxin   # 根据所属者查找
find /home -group xiaoxin  # 根据所属组查找

7.3.1.4、根据文件属性来查找

find /etc -cmin -5
# 在/etc目录下查找被修改过属性的文件和目录

参数

  • amin访问时间
  • cmin问价耐属性
  • mmin文件内容

7.3.1.5、根据文件类型查找

  • -type
    • f 文件
    • d 目录
    • l 软连接文件

find /etc -name init -a -type f

7.3.1.6、根据i编号查询

根据文件的编号来查询文件或目录

find / -inum 1179683

7.3.1.7、逻辑命令 与 或

  • -a 就是与
  • -o 就是或

示例

find /etc -size +100 -a size -200

7.3.1.8、根据查询结果进行筛选显示

find /etc -name init -exec ls -l {} ;

就是对查询结果进行再一次操作,还可以再次进行筛选

-exec相当于连接另一个命令的意思

7.3.2、其他搜索命令

7.3.2.1、文件搜索命令,与find类似,但是比它快

命令名称:locate

命令所在路径:/usr/bin/locate

执行权限:所有用户

语法:locate 文件名

功能描述:在文件资料库中查找文件

范围:locate init

find命令的比较,locate命令查找比find命令快,但是有缺点,locate命令是通过一个文件来查找的,所以他快,但是有时候,你新建里的文件,var/lib/mlocate没有更新到最新创建的文件,就会搜索不到,如果想要解决,就需要updatedb命令来更新一下文件

7.3.2.2、命令搜索工具

命令名称:which

命令所在路径:/usr/bin/which

执行权限:所有用户

语法:which命令

功能描述:搜索命令所在目录以及别名信息

示例:which cp

另一个命令搜索工具,搜索出来的命令带命令的帮助文档位置

命令名称:whereis

命令所在路径:/usr/bin/whereis

执行权限:所有用户

语法:whereis [命令名称]

功能描述:搜索命令所在目录及帮助文档路径,以及配置文件所在位置

示例:whereis ls

7.3.2.3、文件内容搜索

命令名称:grep

命令所在路径:/bin/grep

执行权限:所有用户

语法:grep -i v [指定字符串] [文件]

功能描述:在文件中搜寻字符串匹配的行并输出

? -i 不区分大小写

? -v 排除指定字符串

示范:grep mysql /root/install.log

? grep "on an" /etc/issue

帮助类型

1:命令帮助

5:配置文件帮助

7.4、帮助命令man

命令名称:man

命令英文原意:manual

命令所在路径:/usr/bin/man

执行权限:所有用户

语法:man [命令或配置文件]

功能描述:获取帮助信息

示例:

  • 获取命令的帮助man ls
    • 查看ls命令的帮助信息,是less和more命令的组合
  • 获取配置文件的帮助man servimces
    • 查看配置文件servimces的帮助信息
    • 在获取配置信息的帮助的时候不要带上绝对路径

7.4.1、帮主命令help获取Shell内置命令的帮助

命令名称:help

命令所在路径:Shell内置命令

执行权限:所有用户

语法:help 命令

功能描述:获取Shell内置命令的帮助信息

示例:help cd

7.4.2、简介获取命令信息whatis

命令名称:whatis

命令所在路径:/usr/bin/whatis

语法:whatis 命令

示例:whatis cp

7.4.3、简介获取配置文件信息apropos

命令名称:apropos

命令所在路径:/usr/bin/apropos

语法:apropos 配置文件

示例:apropos servimces

7.5、用户管理命令

7.5.1、添加用户useradd

命令名称:useradd

命令所在路径:/usr/sbin/useradd

执行权限:root

语法:useradd用户名

功能描述:添加新用户

示例:useradd xiaoxin

7.5.2、设置密码passwd

命令名称:passwd

命令所在领:/usr/bin/passwd

执行权限:所有用户

语法:passwd 用户名

功能描述:设置用户密码

示例:passwd xiaoxin

7.5.3、查看登陆用户信息who

命令名称:who

命令所在领:/usr/bin/who

执行权限:所有用户

语法:who

功能描述:查看登陆用户信息

示例:who

7.5.4、更加详细查看登陆用户信息w

命令名称:w

命令所在路径:/usr/bin/w

执行权限:所有用户

语法:w

功能描述:查看登陆用户详细信息

示例:w

7.6、压缩解压命令

7.6.1解压缩gzip、

压缩

命令名称:gzip

命令所在路径:/bin/gzip

执行权限:所有用户

语法:gzip [文件]

功能描述:只能压缩文件

压缩后文件格式:.gz

注意事项:压缩后,原文件就会没有

解压

命令名称:gunzip

命令所在路径:/bin/gunzip

执行权限:所有用户

语法:gunzip [压缩文件]

功能描述:加压缩.gz的压缩文件

压缩后文件格式:gz

注意事项:解压后,原压缩文件就会没有

7.6.2、解压缩tar

压缩

命令名称:tar

命令所在路径:/bin/tar

执行权限:所有用户

语法:tar 选项[-zcf] [压缩后文件名] [目录]

? -c 打包

? -v 显示详细信息

? -f 指定文件名

? -z 打包同时压缩

功能描述:打包目录:

压缩后文件格式.tar.gz

注意事项:

  1. 如果想要打包的同时压缩命令一定要这么写:tar -zcf 名字.tar.gz] [要压缩的目录]

解压缩tar

tar命令加压缩语法:

? -x 解包

? -v 显示详细信息

? -f 执行解压文件

? -z 解压缩

示例:tar -zxvf [需要解压名.tar.gz]

注意事项:

  1. 这里顺序也不能换tar -zxvf [需要解压名.tar.gz]也就是说先要加压缩,在解包

7.6.3、解压缩zip

压缩

命令名称:zip

命令所在路径:/usr/bin/zip

执行权限:所有用户

语法:zip 选项[-r] [压缩后的文件名] [文件或目录]

-r是压缩目录所用到的

压缩后的文件格式:.zip

解压

命名名称:unzip

命令所在目录:/usr/bin/unzip

执行权限:所有用户

示例:unzip test.zip

7.6.4、压缩命令bzip2

压缩

命令名称:bzip2

命令所在路径:/usr/bin/bzip2

执行权限:所有用户

语法:bzip2 选项[-k] [文件]

参数说明:-k产生压缩文件后保留原本文件

压缩后文件格式:.bz2

示例:bzip2 -k temp

tar -cjfv JavaProject.tar.bz2 JavaProject

解压

命令名称:bunzip2

命令所在路径:/usr/bin/bunzip2

执行权限:所有用户

语法:bunzip2 选项[-k] [压缩文件]

-k 解压后保留原文件

示例:bunzip2 -k temp.bz2

tar -xjf Java.tar.bz2

7.7、网络命令

7.7.1、write给本地用户发送信息

指令名称:write

所在路径:/usr/bin/write

执行权限:所有用户

语法:write <用户名>

功能描述:给本地用户发信息,以Ctrl + D保存结束

示例:write xiaoxin

7.7.2、wall-给所有用户发送信息

指令名称:wall

所在路径:/usr/bin/wall

执行权限:所有用户

语法:wall [message]

示例:wall 消息

7.7.3、ping-发送网络请求

命令名称:ping

命令所在路径:/bin/ping

执行权限:所有用户

语法:ping [-c] IP地址

-c 执行发送次数

示例:ping www.baidu.com 会一直发送,Ctrl+D结束

ping -c 3 www.baidu.com 3次结束

7.7.4、ifconfig-查看网络

命令名称:ifconfig

命令所在路径:/sbin/ifconfig

执行权限:root

语法:ifconfig 网卡名称 IP地址

功能描述:查看和设置网卡信息

示例:ifconfig eth0 192.168.8.250

ifconfig 只是查看网络信息

7.7.5、last-列出过去登入系统的用户信息

命令名称:last

命令所在路径:/usr/bin/last

执行权限:所有用户

语法:last

功能描述:列出目前与过去登入系统的用户信息

示例:last

7.7.6、lastlog-特定用户最后登入时间

命令名称:lastlog

命令所在路径:/usr/bin/lastlog

执行权限:所有用户

语法:lastlog

功能描述:检查某特定用户上次登录的时间

示例:lastlog -u 用户ID

7.7.7、traceroute-查看数据到主机间路径

命令名称:traceroute

命令所在路径:/bin/traceroute

执行权限:所有用户

语法:traceroute

功能描述:显示数据包到主键间路径

示例:traceroute www.baidu.com

详细看:https://commandnotfound.cn/linux/1/335/traceroute-%E5%91%BD%E4%BB%A4

7.7.8、netstat-显示网络相关信息

命令名称:netstat

命令所在路径:/bin/netstat

执行权限:所有用户

语法:netstat [参数]

参数:

  1. -t : TCP协议
  2. -u:UDP协议
  3. -l:监听
  4. -r:路由
  5. -n :显示IP地址和端口号

功能描述:显示网络相关信息

示例:

  1. netstat -tlun 查看本机监听端口
  2. netstat -an 查看本机所有的网络
  3. netstat -rn 查看本机路由表

7.7.9、setup-配置网络

命令名称:setup

命令所在路径:/usr/bin/setup

执行权限:root

语法:setup

功能描述:配置网络

安装:https://blog.csdn.net/zhangzhikaixinya/article/details/46691323

7.7.10、mount-挂载命令

命令名称:mount

命令所在路径:/bin/mount

执行权限:所有用户

语法:mount [-t文件系统] 设备文件名 挂载点

示例:mount -t iso9660 /dev/sr0 /mnt/cdrom

7.8、关机重启命令

7.8.1、shutdown

语法:shutdown [参数] 时间

参数:

  1. -c : 取消前一个关机命令
  2. -h:关机
  3. -r:重启

使用举例:shutdown -r now

now当前时间

7.8.2、退出登录命令

logout

八、vim

8.1、vim常用操作

  1. 创建或打开文件vim filename
  2. 退出:wq
  3. esc退出编辑模式,切换命令模式

8.1.1、插入命令

命令 作用
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在标签所在行行首插入
o 在光标下插入新行
O 在光标上插入新行

8.1.2、定位命令

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
:$ 移至行尾
:0 移至行首

8.1.3、删除命令

命令 作用
x 删除光标所在处字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定范围的行

8.1.4、复制和剪切命令

命令 作用
yy 复制当前行
nyy 复制当前行一下n行
dd 剪切当前行
ndd 剪切当前行一下n行
p、P 粘贴在当前光标所在行下或行上

8.1.5、替换和取消命令

命令 作用
r 取代光标所在字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作

8.1.6、搜索和搜索替换命令

命令 作用
/string 搜索指定字符串
搜索时忽略大小写:set ic
n 搜索指定字符的下一个出现位置
:%s /old/new/g or c 全文替换指定字符串
:n1,n2s/old/new/g or c 在一定范围内替换指定字符串

g代表不询问替换

c询问替换

8.1.7、保存与退出命令

命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 保存修改并退出
:q! 不保存修改退出
:wq! 强制修改保存并退出(文件所有者与root可以使用)

8.2、vim使用技巧

导入那个执行结果 : :r 命令

:r 文件路径,就会将这个文件导入到打开文件所在路径

  1. :!which 指令:显示执行所在路径

自定义快捷键

:map 命令+自定义操作

  1. :map ^p I#<ESC> 在头部插入#
  2. :map ^B 0x 删除首行第一个字符
  3. :map i2210075017@qq.com 在光标处插入邮箱

注意:^是 Ctrl + V + 你要设置的快捷键

连续行注释

:n1, n2s/^/#/g ^行首,#要替换内容 g不用询问

:n1, n2s/^#//g 去掉行首的#号

替换

:ab mymail 2210075017@qq.com 输入mymail后就会自动替换邮箱

如果想永久生效,那么配置文件就必须写在用户目录下命名为.vimmrc文件就会自定义的配置就会永久生效

九、软件包管理

软件包分类

  1. 源码包
  2. 二进制包(RPM包、系统默认包)

9.1、RPM包管理

安装略过

9.1.1、查询是否安装

rpm -q 包名   不用全包名,只要包名就可以了
rpm -qa   查询所有已经安装包

9.1.2、查询详细信息

rpm -qi 包名
- i 查询软件信息
- p 查询未安装包信息,得在包目录下

9.1.3、查看系统文件属于哪个rpm包

rpm -qf 系统文件名

rpm -ql 包名,查看包名安装在哪个文件路径下

9.1.4、查看软件包的依赖性

rpm -qR 包名
-R: 查询软件包的依赖性
-p: 查询未安装包信息(在没有安装包的路径下查询)

9.1.5、RPM包校验

rpm -V 已经安装的报名
-V: 晓燕指定RPM包中文件

验证内容参数如下:
S : 文件大小是否修改
M : 文件类型或文件的权限是否被修改
5 : 文件MD5校验和是否修改(可以看做文件内容是否改变)
D : 设备中,从代码是否改变
L : 问价你路径是否改变
U : 问价耐属性(所有者)是否改变
G : 文件属组是否改变
T : 文件修改时间是否改变
文件类型:
	c : 配置文件
	d : 普通文件
	g : "鬼"文件
	l : 授权文件
	r : 描述文件

9.1.6、RPM包中文件提取

rpm2cpio 包全名 cpio -idv .文件绝对路径

cpio 选项 <文件|设备>
 选项:
 	-i: copy-in,还原
 	-d: 还原时自动新建目录
 	-v: 显示还原过程

rpm2cpio 将rpm包转换为cpio格式的命令

cpio 是一个标注农工局,用于创建软件档案文件和档案文件中提取文件

示例

rpm -qf /bin/ls
# 查询ls属于哪个包
mv /bin/ls /tmp/
# 造成ls命令误删除假象
rpm2cpio /mnt/cdrom/Packages/coreutil-8.4-19.el16.i686.rpm | cpio -div ./bin/ls
cp /root/bin/ls /bin/

9.2、yum在线管理

9.2.1、IP地址配置

setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT = "no" 改为yes

servimce network restart

9.2.2、修改yum源

vim /etc/yum.repos.d/CentOS-Base.repo

参数说明
	- [base] 容器名称,一定要放在[]中
	- name : 容器说明,自己可以随意写
	- mirrorlist : 镜像站点,这个可以注释掉
	- baseurl : 我们yum源服务器的地址。默认是CenOS服务yum源服务器
	- enabled : 此容器是否生效,如果不写或写成enabled=1都是生效,写成enabled=0就是不生效
	- gpgcheck : 如果是1是指RPM的数字证书生效
	- gpgkey : 数字证书的公钥文件保存位置。不用修改

9.2.3、查询可用软件包列表

yum list
# 查询所有可用软件包列表

9.2.4、搜索安装包

yum search 关键字
# 搜索服务器删给所有和关键字相关的包

9.2.5、安装

yum -y install 包名
参数:
	install  安装
	-y : 自动回答yes

9.2.6、升级

yum -y update 包名
参数:
	update 升级
	-y: 自动回答yes

注意事项:

  1. 如果yum -y update 没有写指定包名,那么就会升级所有软件包括内核,如果升级内核,需要在服务器本地进行配置,所以千万不要全部升级
  2. 使用yum安装的,尽量不要卸载

9.2.7、卸载

yum -y remove 包名

9.2.8、Yum软甲那组管理命令

# 1. 查出所有可用的软件组列表
yum grouplist

# 2. 安装指定软件组,组名可以由grouplist查出来,如果名字有空格,要用双引号抱起来
yum groupinstall 软件组名

# 3. 卸载指定软件组
yum groupremove 软件组名

9.2.9、光盘yum源

9.3、源码包管理

区别

  1. 概念上区别
  2. 可选安装位置

安装准备

  1. 安装C语言编译器 gcc
  2. 下载要安装的源码

注意事项

  1. 源代码保存位置:/usr/local/src
  2. 软件安装位置:/usr/local/
  3. 如何确定安装过程报错:
    • 安装过程停止,并出现error、warning或no的提示

源码包安装过程

  1. 下载源码包
  2. 解压缩下载的源码包
  3. 进入解压缩目录

./config 软件配置与检查

  • 定义需要的功能选项
  • 检查系统环境是否符合安装要求
  • 把定义好的功能选项和检测系统的信息都吸入Makefile文件,用于后续编辑

在解决之后,需要先查看两个文件

  1. INSTALLREADME 分别是:安装说明,使用说明

开始操作

  1. 进入到包目录后,直接解压
  2. ./config --prefix=/usr/local/名字
  3. make 编译
  4. make install 编译安装

注意事项

  1. 如果在编译的时候出现错误,可以使用make clean 来清理编译出的垃圾文件

9.4、脚本安装包

概念

  1. 脚本安装包并不是独立的软件包类型,常见的安装十源码包
  2. 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简答参数,即可安装

.sh后缀的文件,直接运行即可,进入目录,./*.sh

*代表当前文件的名字

十、用户和用户组管理

10.1、用户配置文件

10.1.1、用户信息文件

用户信息文件/etc/passwd

概念

在Linux中主要是通过用户配置文件来查看和修改用户的信息

/etc/passwd文件中每个用户字段的说明

技术图片

第1字段:用户名称

第2字段:密码标志

第3字段:UID(用户ID)

  • 0: 超级用户
  • 1-499: 系统用户(伪用户)
  • 500-65535:普通用户

第4字段:GID(用户初始组ID)

第5字段:用户说明

第6字段:家目录

  • 普通用户:/home/用户名/
  • 超级用户:/root/

第7字段:登陆之后的Shell

什么是初始组和附加组

初始组:就是用户一登陆就立刻拥有的用户组先关权限,每个用户的初始组只能有一个,一半就是和这个用户的用户名相同的组名作为这个用初始组

附加组:指用户可以加入多个其他用户组,并拥有这个用户组对应的权限。附加组可以加入多个

用户对应的密码在影子文件中:/etc/shadow

10.1.2、影子文件

影子文件所在路径

/etc/shadow

vim /etc/shadow

第1字段:用户名

第2字段:加密密码

  • 如果密码位是:!!* 代表没有密码,不能登录

第3字段:面膜最后一次修改日期

  • 使用1970年1月1日作为标准时间,每过一天时间戳加1

第4字段:两次密码的修改间隔时间(和第3字段比)

第5字段:密码有效期(和第3个字段相比)

第6字段:密码修改到期前的警告天数(和第5字段相比)

第7字段:密码过期后的宽限天数(和第5字段比较)

  • 0:代表密码过期后立即生效
  • -1:代表密码永久不会失效

第8字段:账号失效时间

  • 用时间戳表示

第9字段:保留

技术图片

时间戳换算

  • 把时间戳换算为日期
date -d "1970-01-01 时间戳 days"
  • 日期换算为时间戳
echo $(($(date --date="时间" +%s)/86400+1))
echo $(($(date --date="2020/07/02" +%s)/86400+1))

10.1.3、组信息文件

组信息文件 /etc/group

第1字段:组名

第2字段:组密码标志

第3字段:GID

第4字段:组中附加用户

组密码文件 /etc/gshadow

第1字段:组名

第2字段:组面膜

第3字段:组管理员用户名

第4字段:组中附加用户

10.1.4、用户管理相关文件

10.1.4.1、用户的家目录

普通用户:/home/用户名,所有者和所属组都是此用户,权限是700

超级用户:/root/,所有这和所属组都是root用户,权限是550

10.1.4.2、用户的邮箱

目录:/var/spool/mail/用户名/ 如果有邮件就会出现在这个文件中

10.1.4.3、用户模板目录

目录:/etc/skel/ 此目录下所有文件,在创建新用户的时候都会从这里copy一份到新用户家目录下

10.2、用户管理命令

10.2.1、useradd-用户添加命令

命令格式

useradd [参数] 用户名
参数:
	-u UID : 手工指定用户的UID
	-d 家目录: 手工指定用户的家目录
	-c 用户说明: 手工指定用户的说明
	-g 组名:手工指定用户的初始组 --> 不建议使用
	-G 族名:	指定用户的附加组
	-s shell: 手工指定用户的登陆shell。默认是/bin/bash.

示例:useradd -u 666 -G root,bin -d /home/lamp1 -c "test user" -s /bin/bash sc

useradd sc后修改的其实就是一下文件

grep sc /etc/passwd
grep sc /etc/shadow
grep sc /etc/group
grep sc /etc/gshadow
ll -d /home/lamp/
ll /var/spool/mail/lamp

用户默认值文件

/etc/default/useradd

  • GROUP=100 用户默认组
  • HOME=/home 用户家目录
  • INACTIVE=-1 密码过期宽限天数(shadow文件7字段)
  • EXPIRE= 密码失效时间
  • SHELL=/bin/bash 默认shell
  • SKEL=/etc/skel 模板目录
  • CREATE_MAIL_SPOOL=yes 是否建立邮箱

注意事项:

  1. Linux中有共有模式与私有模式,现在创建的用户默认都是私有,所以GROUP=100 就不起作用

/etc/login.defs

PASS_MAX_DAYS   99999	# 密码有效期
PASS_MIN_DAYS   0		# 密码修改间隔
PASS_MIN_LEN    5		# 密码最小5位
PASS_WARN_AGE   7		# 密码到期警告
UID_MIN         1000	# 最小和最大UID范围
UID_MAX         60000
ENCRYPT_METHOD SHA512    # 加密模式

10.2.2、passwd-修改用户密码

命令格式:

passwd [参数] 用户名
参数:
	-S : 查询用户密码的密码状态。仅root用户可用
	-l : 暂时锁定用户。仅root用户可用
	-u : 解锁用户。仅root用户可用
	--stdin : 可以通过管道符输出的数据作为用户的密码

使用举例

查看密码状态

passwd -S user1
user1 PS 2020-07-02 0 99999 7 -1 (Password set, SHA512 crypt.)
# 用户名密码设定时间(2020-07-02) 密码修改间隔时间(0) 
# 密码有效期(99999)  警告时间(7)   密码不失效(-1)

锁定用户与解锁用户

passwd -l user1
passwd -u user1

其实锁定用户,就是改的是/etc/shadow文件,在密码前面加了个!!

没有加锁

技术图片

已经加锁

技术图片

使用字符串作为密码

echo "123" | passwd --stdin user1

10.2.3、usermod-修改用户信息 和 chage-修改用户密码状态

修改用户信息-usermod

命令格式

usermod [参数] 用户名
参数:
	-u: UID		修改用户名的UID号
	-c: 用户说明  修改用户的说明信息
	-G: 组名	   修改用户的附加组
	-L: 		临时锁定用户(lock)
	-U: 		解锁用户锁定(unLock)

举例:
usermod -c "test user" -G root -u 550 user1

修改用户密码状态-chage

命令格式

chage [参数] 用户名
参数:
	-l:		列出用户的详细密码状态
	-d日期:  修改密码最后一个更改日期(shadow3字段)
	-m 天数: 两次密码修改间隔(4字段)
	-M 天数: 密码有效期(5字段)
	-W 天数: 密码过期前警告天数(6字段)
	-I 天数: 密码过后宽限天数(7字段)
	-E 日期: 账号失效时间(8字段)

注意事项:

其实上面的功能我们可以在/etc/shadow文件中直接通过Vim来修改,但是为什么要学习这个命令呢?

chage -d 0 用户名
# 这个命令其实就是把密码修改日期归0了(shadow3字段)
# 这样用户一登录就要修改密码

就是为了这条命令。

10.2.4、userdel-删除用户 和 su-用户切换命令

删除用户userdel

命令格式

userdel [-r] 用户名
参数:
	-r: 删除用户的同时删除用户家目录

底层做的事情

vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm -rf /var/spool/mail/用户名
rm -rf /home/用户名/

查看用户ID

命令格式

id 用户名
uid=1000(user1) gid=1000(user1) groups=1000(user1)

切换用户身份su

命令格式:

su [参数] 用户名
参数:
	-: 选项只使用"-"代表连带用户的环境变量一起切换
	-c: 仅执行一次命令,而不是切换用户身份
	
例子:
su - root
su - root -c "useradd user2"

10.3、用户组管理

10.3.1、添加用户组

命令格式

groupadd [参数] 组名
参数:
	-g GID 		指定组ID

10.3.2、修改用户组

命令格式

groupmod [参数] 组名
参数:
	-g GID 		指定组ID
	-n 新组名	  修改组名
	
例子
groupmod -n testgrp groupl
# 把组名groupl 修改为testgrp

10.3.3、删除用户组

groupdel 组名

10.3.4、用户添加组或从组中删除

gpasswd [参数] 组名
参数:
	-a 用户名:		把用户加入组
	-d 用户名:		把用户从组中删除 

10.3.5、修改用户组的注意事项

  1. 要删除组,但是要删除组中已经有用户,那得看该用户的初始组是哪个,如果不是要删除的组,那么可以直接把这个组删除掉;如果组下用户的初始组是该组,那么就必须先删除用户

十一、权限管理

11.1、ACL权限

什么是 ACL权限,它的出现以及应用场景

Linux系统所自带的权限系统,已经无法满足我们的需求。

比如,创建一个/project目录,指定它的所属组,所有人,以及其他人。对属主(root)以及属组都有rwx权限,其他人无权限。

这个时候又来一个用户,他得有r-x读与运行权限,这个时候就需要ACL权限

技术图片

一个目录只能属于一个用户组

首先来查看系统有哪些分区

df -h

查看ACL权限是否开启

dumpe2fs -h /dev/vda1
参数:
	-h: 仅显示超级块中信息,而不显示磁盘快组的详细信息

目前所有Linux系统都已默认开启ACL

临时开启分区ACL权限

mount -o remount.acl
# 重新挂载根分区,并挂载加入acl权限

永久生效开启ACL权限

vim /etc/fstab
# UUID=1114fe9e-2309-4580-b183-d778e6d97397 /                       ext4    defaults,acl        1 1
mount -o remount
# 重新挂载文件系统或重启系统,使修改生效

上图场景的模拟

# 先来添加几个用户
useradd student1
useradd student2
useradd student3

# 创建一个学生用户组
groupadd Stu
# 添加用户到组
gpasswd -a student1 Stu
gpasswd -a student2 Stu
gpasswd -a student3 Stu

# 创建目录
mkdir /project

# 修改目录权限
chown root:Stu /project  
# 设置权限
chmod 770  /project #xrwx
# 查看权限
ll -d /project

# 添加试听用户
useradd st
passwd st

# 开始给st用户设置ACL权限
setfacl -m u:st:rx /project
# u表示给用户
# g表示给用户组
# 后面跟目录或文件

# 查看ACL权限
# getfacl 目录或文件
getfacl /project

11.1.1、查看与设定ACL权限

查看ACL权限

getfacle 目录/文件名
# 查看ACL权限

设定ACL权限

setfacl [参数] 目录/文件名
参数:
	-m: 设定ACL权限
	-x: 删除指定的ACL权限
	-b: 删除所有的ACL权限
	-d: 设定默认ACL权限
	-k: 删除默认ACL权限
	-R:	递归设定ACL权限
	
	
示例:
setfacl -m u:用户名:对应权限 目录
u: 表示用户
g: 表示用户组

setfacl -m u:st:rx /project

11.1.2、最大有效权限mask与删除ACL权限

mask的作用

mask用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限

[root@iZ8vb6xljiklnfnmawnio3Z ~]# getfacl /root/project
getfacl: Removing leading ‘/‘ from absolute path names
# file: root/project
# owner: root
# group: Stu

user:st:r-x

mask::r-x

只有mask 和 user 全向相与才是真正可用权限

删除ACL权限

setfacl -x u:用户名 文件名
# 删除指定用户的ACL权限

setfacl -x g:用户组名 文件名
# 删除指定用户组的ACL权限

setfacl -b 文件名
# 删除文件的所有ACL权限

11.1.3、默认ACL权限和递归ACL权限

什么是递归

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

递归的给目录设置权限

setfacl -m u:用户名:权限 -R 文件名

注意事项:

  1. 使用上面命令,是对已经存在的文件或目录设置权限,如果是之后再新建的就不会有权限
  2. 解决办法是:设置默认权限

默认ACL权限

默认ACL权限就是如果父目录设定ACL权限,那么父目录所新建的子文件都会继承父目录的ACL权限

setfacl -m d:u:用户名:权限 文件名

11.2、文件特殊权限

11.2.1、SetUID----4

什么是SetUID

用来以该文件属主身份运行的一个权限。

简单的说:一个文件有SUID权限的话,那么其他用户在运行这个文件的时候,就会拥有属于该文件的属主权限

  1. 只有可执行的二进制程序才能设定SUID权限。
  2. 命令执行者要对该程序拥有x(执行)权限
  3. 命令执行者在执行噶程序时,获得程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
  4. SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

简单的应用场景

passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

ll /bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat

SetUID权限的执行流程

技术图片

11.2.1.1、设定SetUID的方法

4代表SUID

chmod 4755 文件名   # 建议这种方式来操作。如果文件没有x权限那么就会有错误 是大写的`S`
chmod u+s 文件名

这是没有x权限,但是以chmod u+s 文件 给予的SETUID权限,会发现有大写S

技术图片

建议

对于关键目录严格控制此权限。比如://usr

11.2.2、SetGID -- 2

SetGID对目录的作用

  1. 普通用户必须对此目录拥有rx权限,才能进入此目录
  2. 普通目录在此目录中的有小组会变成此目录的属组
  3. 若普通用户对此目录拥有w权限时,新建的文件默认数组就是这个目录的属组

SetGID对文件的作用

  1. 只有可执行的二进制程序才能设置SGID权限

  2. 命令执行者要对该程序拥有x(执行)权限

  3. 命令执行在执行程序的时候,组身份升级为该程序文件的属组

  4. SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

11.2.2.1、设定SetGID

chmod 2755 文件名
chmod g+s 文件名

实战举例

cd /tmp/
mkdir test
# 设置GID
chmod g+s test

# 设置所有用户都有权限
chmod 777 test
# 切换用户,查看user1用户在使用test目录的时候,所属组的情况
su - user1
cd /tmp/test
touch abc

# 查看权限
ll
技术图片

11.2.2.3、取消SetGID

chmod 755 文件名
chmod g-s 文件名

11.2.3、SetckyBIT--1

SBIT粘着位作用

  1. 粘着位目前只对目录有效
  2. 普通用户对该目录拥有wx权限,即普通用户可以在此目录拥有写入权限
  3. 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

粘着位具体作用

对于一个目录,这个目录是/tmp目录,所有用户都可以并拥有wrx权限,那么,需求是:在这目录下所有用户都可以读,但是每个用户只能对自己创建的文件进行修改或删除,这个时候就需要SBIT粘着位

11.2.3.1、设置与取消粘着位

# 设置粘着位
chmod 1755 目录名
chmod o+t 目录名

# 取消粘着位
chmod 777 目录名
chmod o-t 目录名

11.3、文件系统属性chattr权限

命令格式,注意:如果使用该命令设置权限,使用ll权限是查看不了权限的,只能使用lsattr命令来查看

chattr [+-=] [参数] 文件或目录名
	+: 增加权限
	-: 删除权限
	=: 等于某权限

参数:
	i: 如果对文件设置i属性,那么不允许对文件进行 删除、改名、也不能添加和修改数据。
	   对目录:只能修改目录下文件的数据,但不允许建立(新建)和删除文件
	a: 如果对文件设置a属性,那么只能在文件中增加数据,不能删除、修改数据;
	   对目录:只允许在目录中建立和修改文件,不允许删除

使用举例

chattr +i abc

查看文件系统属性

命令格式

lsattr 参数 文件名
参数:
	-a: 显示所有文件和目录
	-d: 若目标是目录,仅列出目录本身的属性,而不是子文件的

使用举例

lsattr -a abc

11.4、系统命令sudo权限

什么是sudo权限?作用。以及场景

场景:Linux上,只能有一个root用户,对有些命令,其他普通用户也会用得到,如果普通用户需要使用root级别命令。老是通知Liunx中root用户来帮我们执行的话,不现实,root管理员有他自己的事情要做

sudo权限:root把本来只能超级用户执行的命令赋予普通用户来执行。

sudo的操作对象是系统命令

这个时候就需要sudo权限登场了。它可以由root指定我们可以执行哪些命令

sudo实际上修改的就是/etc/sudoers文件

visudo
# 打开/etc/sudoers文件

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 用户名  被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

给予普通用户权限

# 在/etc/sudoers文件中加入
# 用户名 ALL=绝对权限路径 参数
sc ALL=/sbin/shutdown -r now

普通用户查看可用的sudo命令

sudo -l
# 普通用户执行sudo赋予的命令
sudo /sbin/shutdown -r now
# 当前时间重启

注意:千万不要给他vim软件的权限。因为给他这样类似的软件之后普通用户可以通过软件来修改重要的文件了

十二、文件系统管理

12.1、回顾分区和文件系统

分区类型

  • 主分区:加上扩展分区,最多只能有4个
  • 扩展分区:只能有一个分区属于扩展分区,但是扩展分区不能存储数据和格式化,必须再划分逻辑分区才能使用。
  • 逻辑分区:逻辑分区是在扩展分区中划分的。
技术图片

12.2、文件系统常用命令

12.2.1、df/du/fack/dumpe2fs命令

12.2.1.1、df-文件系统查看命令

df [参数] [挂载点]
参数
	-a: 显示所有的文件系统信息,包括特殊文件系统如 /proc、/sysfs
	-h: 使用习惯单位显示容量,如KB, MB或GB等
	-T: 显示文件系统类型
	-m: 以MB为单位显示容量
	-k: 以KB为单位显示容量。默认就是以KB显示

12.2.1.2、du-统计目录大小

du [参数] [目录]
参数:
	-a: 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
	-h: 使用习惯单位显示磁盘占用量, 如KB、MB、GB
	-s: 统计总占用量,而不列出子目录和子文件占用量

有趣的问题

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  1.9G   36G   5% /

du -sh /
1.8G	/

可以很清楚看到,都是/目录,df查看的却比du查看的占用空间要大,这是为什么?

du命令与df命令的区别

  • df命令是从文件系统考虑的,不光要考虑文件占用空间,还要统计被命令和程序占用的空间(最常见的是文件已经删除了,但是程序并没有释放空间)
  • du命令是面向文件的,只会计算文件或目录占用的空间

12.2.1.3、fsck-文件系统修复命令

fsck [参数] 分区设备文件名
参数:
	-a: 不用显示用户提示,自动修复文件系统
	-y: 自动修复。和-a作用一致,不过有些文件兄只支持-y

12.2.1.4、dumpe2fs-显示磁盘状态命令

dumpe2fs 分区设备文件名

12.2.2、挂载命令

查询与自动挂载

mount -l
# 查询系统已经挂载的设备, -l 会显示卷标名称

mount -a
# 依据配置文件/etc/fstab的内容,自动挂载

挂载命令格式

mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
参数:
	-t 文件系统: 加入文件系统类型来指定挂载的类型,可以ext3、ext4,、iso9660文件系统
	-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
	-o 特殊选项: 可以指定挂载的额外选项

12.2.3、挂载光盘与U盘-实战

挂载光盘

# 1. 先来创建挂载点,所谓挂载点就是一个目录,可以理解为Widnows中盘符
mkdir /mnt/cdrom   # /mnt目录是CoentOS系统专门留的目录

# 2. 挂载点与设备名建立关系
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
# 上面连个命令是一样的效果;iso9660是光盘的文件系统


#-----
# 卸载光盘
umount 设备文件名或挂载点
umonnt /mnt/drom

挂载U盘

# U盘的话就和硬盘是一样的了,设备名是系统分配的,我们要系那个知道那么只能查询
# 查询设备文件名
fdisk -l

# 建立联系
mount 设备文件名 挂载点
mount /dev/sdb1 /mnt/usb

注意:Liunx默认不支持NTFS文件系统

12.2.4、支持NTFS文件系统

12.3、fdisk分区

12.3.1、fdisk命令分区过程

# 1. 添加硬盘
# 2. 使用命令,查看硬盘,得到硬件名
fdisk -l

# 3. 使用fdisk 命令分区
fdisk 得到的硬件名

# 4. 进入工具后开始分区,具体看下面的指令图
n  # 新建分区
 --> e extended 
 --> p primary partition(1-4)
 Partition number (1-4): 1   # 主分区号
 First cylinder (1-1305, default 1):  # 指定分区大小 开始位置 
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G #指定分区大小可以用G、M、K表示
#--- 到此第一个分区完成,不过只是示例,到时候具体看

fdisk分区交互指令说明

技术图片

12.3.2、分区自动挂载与fstab文件修复

什么是fstab文件和fstab文件作用

是用来存放文件系统的静态信息的文件

Fstab文件:就当前对我而言,这个文件作用是为了完成自动挂载而存在的,只要里面写的东西,在系统启动的时候就会自己去挂载,不用每次手动挂载

第一字段:分区设备名或UUID(硬盘通用唯一UUID)

第二字段:挂载点

第三字段:文件系统名称

第四字段:挂载参数

第五字段:指定分区是否被dump备份,0代表不备份;1代表每天备份;2代表不定期备份

第六字段:指定分区是否被fsck检测,0代表不检测;其他数字代表检测的优先级,那么1的优先级最高,其他依次。

# 查看设备的UUID
dumpe2fs -h 设备名

添加需自动挂载的

vim /etc/fsttab

# 打开文件后,自己写就行了

# 添加完成后,检测是否修改正确,重新挂载
mount -a
# 上面就是根据配置文件/etc/fstab的内容自动挂载

/etc/fstab文件修复

mount -o remount, rw /

# 然后修改/etc/fstab文件即可

12.5、分配swap分区-交换分区

# 查看内存与swap分区使用情况
free [参数]
参数:
	-m: 以M格式查看
	-g: 以G格式查看

十三、Shell

什么是Shell

百度百科:在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

对于我们而言,Shell就是一个解释器,把我们的代码转换成为计算机能够识别的二进制。

13.1、第一个Shell程序以及注意事项

第一个Shell程序

#!/bin/bash   # 这个表示是一个声明吧  一定要加
# 这是第一个脚本,上面表示SH编程

echo "Hello, World"
  • echo 表示输出
  • #!/bin/bash 表示是一个shell程序

注意事项:

  1. 文件最好以.sh为后缀。
  2. 严格区分大小写
  3. 如果是在Windows中写的Shell文件到Liunx是不能直接执行的,那是因为回车以及换行的方式不一样的原因具体可以通过cat -A hello.sh来查看,这个时候可以通过dos2unix来转化一下

dos2unix的安装

# 1. 安装
yum -y install dos2unix

# 2. 开始转换
dos2unix hello.sh

13.2、shell的运行

方式一:赋予运行权限

chmod 755 hello.sh
./hello.sh

方式二:通过bash调用执行

bash hello.sh

13.3、bash的基本功能

13.3.1、历史命令-history 与命令补全-tab键两次

历史命令

history [参数] [历史命令保存文件]
参数:
	-c: 清空历史命令
	-w: 把缓存中的历史命令写入历史命令保存文件中,刷新历史命令文件,讲历史命令写入.bash_history文件中

每个用户的history文件在/home/用户名目录下.bash_history文件中

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改

历史命令的调用

  1. 使用上、下箭头调用以前的历史命令
  2. 使用!n重复执行第N条历史命令
    • n:可以通过命令history命令查看编号
  3. 使用!!重复执行上一条命令
  4. 使用!字符串会执行最近以字符串开头的命令

命令补全

在bash中,命令与文件补全是非常方便与常用的功能,我们只要输入命令或文件时,按Tab键就会自动补全。

按两次Tab键就会提示出与你要输入的类似的命令

既可以补全命令也可以补全文件名

技术图片

13.3.2、命令别名与常用快捷键

别名的设置方式

# 设置别名
alias 别名=‘原命令‘

# 查询命令别名
alias

命令执行顺序

  1. 第一顺序位执行用绝对路径或相对路径执行的命令
  2. 第二顺序位执行别名
  3. 第三顺序位执行bash的内部命令
  4. 第四顺序位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

设置别名永久生效

写入文件,文件位置为:/root/.bashrc每个用户目录下的.bashrc文件

vim /root/.bashrc

# .bashrc

# User specific aliases and functions

alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘
alias vi=‘vim‘

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

删除别名

unalias 别名

13.3.2.1、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 恢复屏幕输出

13.3.3、输入输出重定向

什么是重定向

举个例子来说,原本ls命令是讲该目录中文件输出到屏幕中来,而我想让他输出到一个文件当中去,这就是重定向

13.3.3.1、输出重定向

技术图片

13.3.3.2、正确输出与错误输出到一文件

技术图片

13.3.3.3、输入重定向

wc [参数] [文件名]
参数:
	-c: 统计字节数
	-w: 统计单词数
	-l: 统计行数
如果什么都写 : wc abc
会统计abc文件的字节数、单词数、行数

13.3.4、多命令顺序执行与管道符

技术图片

代码示例

ls; date; cd /usrssdxx; pwd

# 会照样执行 执行到cd报错因为没有目录

13.3.4.1、dd-文件或设备拷贝

dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项
	if=输入文件		指定源文件或源设备
	of=输出文件		指定目标文件或目标设备
	bs=字节数		指定一次输入/输出多少字节,即把这些字节看做一个数据块
	count=个数	  指定输入/输出多少个数据块
	
例子
date; dd if=/dev/zero of=/root/testfile bs=1k count=100000; date

13.3.4.2、管道符

命令1 | 命令2

# 将命令1的一个正确的输出,作为命令2的操作对象

# 例子:
ll -a /etc/ | more
#ll -a /etc 出的结果使用more分页

netstat -an | grep "ESTABLESHED"
# netstat -an的输出,然后使用grep搜索

13.3.4.3、grep - 搜索命令

grep [参数] "搜索内容"
参数
	-i: 忽略大小写
	-n: 输出行号
	-v: 反向查找
	--color=auto 搜索出来的关键字用颜色显示

13.3.5、通配符与其他特殊符号

技术图片 技术图片

13.4、变量

13.4.1、用户自定义变量

  1. bash中变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定变量的类型为数值型。
  2. 变量两边不能有空格

代码示例

# 变量定义
name=hello

# 变量调用
echo name

# 变量查看,查看所有变量包括环境变量以及自己定义的变量
set

# 变量删除
unset name

# 下面是变量定义
name="xiao bai"

# 变量叠加
aa=123
aa="$aa"456
aa=${aa}789

13.4.2、环境变量

在内存中定义环境变量

export 变量名=变量值

# 查询变量
env  
# 如果查询不到,太多不好看,可以这么玩,管道流
env | grep ‘变量名‘ 

# 删除变量
unset 变量名

在内存中插入目录到PATH环境变量中

  1. 首先我们都知道像ls这种命令其实都是可执行文件,可以使用相关命令查看该命令所在路径。
  2. 然后根据路径看到该路径在环境变量PATH中,这样我们可以自己创建一个可执行文件,把目录加入PATH环境变量中。然后直接执行我们的sh脚本
# 先来创建目录 并创建文件
# 当前目录是/root/目录
mkdir test
cd test
vi Hello.sh

# 设置权限,提升为可以执行
chmod 755 Hello.sh

# 添加到PATH环境变量中
PATH=${PATH}:/root/test

# 然后就可以在任意目录执行
Hello.sh 

13.4.3、位置参数变量

位置参数变量 作用
$n n为数字,$0代表命令本身,$1-$9代表第一个参数到第9个参数,十以上的参数需要用大括号使用${10}
$* 这个变量代表命令行中所有参数,把插入的参数看做一个整体,其实就是字符串
$@ 这个变量也代表命令行中所有参数,和上面不同的是这个封装为数组
$# 这个表示参数的个数

$n的实例

#!/bin/bash

echo $0
echo $1
echo $2
echo $3

# ----一下是运行的时候
# 先提权
chmod 755 canshu1.sh
canshu1.sh 11 22 33

# ----- 结果
./canshu1.sh is ./canshu1.sh
11 is  11
22
33

$*$@区别

#!/bin/bash

for i in "$*"
	do 
		echo $i
	done
x=1

for y in "$@"
	do
		echo $y
	done

# ---- 结果
[root@iZ8vb6xljiklnfnmawnio3Z temp]# bash ./canshu2.sh 1 2 3 4
1 2 3 4
1
2
3
4

13.4.4、预定义变量

预定义变量 作用
$? 验证上一条命令是否正确的被执行,如果这个变量的值为0,证明上一个命令正确执行;如果变量为非0,则证明上一条命令执行不正确
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号

$?的实例

echo $?
--->:0
lst
--->:-bash: lst: command not found
echo $?
--->:127

可以看到,上次命令执行成功那$?的值是0,如果错误,则是非0的值。

$$与$!的实例

#!/bin/bash

echo "The current process is $$"
# 输出当前进程的PID
# 是这个脚本在运行的时候的PID

find /root -name hello.sh &
# 使用find命令在root目录下查找hello.sh文件
# 符号& 的意思是把命令放入后台执行。

echo "The last one Daemon process is $! "


#----输出结果
The current process is 13959
The last one Daemon process is 13960 

13.4.5、read-接受键盘输入

read [参数] [变量名]
参数
	-p: "提示信息" 在等待read输入时,输出提示信息
	-t: 秒数 read命令会一直等待用户输入,使用此选项可能指定等待字符数,就会执行
	-n: 字符数 read命令值接受指定的字符数 就会执行
	-s: 隐藏输入的数据,适用于机密信息的输入

代码示例

#!/bin/bash

read -t 30 -p "Please input your name: " name
echo -e "\n"
echo "Is your name? $name "

read -t 30 -p "Please input your age" -s age
# 加密输入 -s
echo -e "\n"
echo "Is your age? $age " 

read -t 30 -p "Please input your gender[M/F]" -n 1  gender
echo -e "\n"
echo "Is your gender?  $gender" 

13.4.6、数值运算与运算符

13.4.6.1、declare-声明变量类型

declare [+/-] [参数] 变量名
参数:
	-: 给变量设定类型的属性
	+: 取消变量的类型属性
	-i: 将变量声明为整数型
	-x: 将变量声明为环境变量
	-p: 显示指定变量被声明的类型
	
	
#-----使用举例
aa=11
declare -p aa
--->:declare -- aa="11"


# -----方法一:
aa=11
bb=22
# 计算和
declare -i cc=$aa+$bb

# ------方法二:
aa=11
bb=11
dd=$(expr $aa + $bb)
# 注意空格必须有

#------方法三:
aa=11
bb=22
ff=$(( $aa+$bb ))

13.4.7、变量测试与内容替换

技术图片

代码示例

x=${y-new}  # new 就是新值    x肯定没有 y也是,那么y没有 那x肯定是新值了
echo $x
---->:new

13.5、环境变量配置

13.5.1、环境变量配置文件

什么是环境变量配置文件

主要是定义对系统的操作环境生效的系统默认环境变量,比如PATHHISTSIZEPSI``HOSTNAME等等默认的环境变量

常用环境变量配置文件

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

/etc/开头的都是每个用户读取的环境变量配置文件,其余都是用户家目录下的配置文件

13.5.1.1、source命令直接修改配置文件不用重启

source 配置文件
也可以,这么玩
. 配置文件

主要用于 ,一般对配置文件修改后需要重启什么的,使用这个命令修改之后不必重启,直接生效

13.5.2、配置文件的执行顺序

技术图片

/etc/profile文件的主要作用

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

~/.bash_prifile的作用

PATH变量,对于一些新的环境配置需要的可以加入这个环境中

  • 调用了~/.bashrc文件
  • 在PATH变量后面加入了PATH=$PATH:$HOME/bin

13.5.3、其他配置文件和登陆文件

注销时生效的配置变量文件

~/.bash_logout

其他配置文件

~/bash_history

技术图片

远程终端欢迎信息:/etc/issue.net

  1. 上面图中的转移符在,这里不能使用
  2. 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入Banner /etc/issue.net行才能显示(还得重启SSH服务service sshd restart)

登陆后欢迎信息

/etc/motd

不管是本地登陆还是远程登陆,都可以显示欢迎信息

13.6、正则表达式

正则表达式用来在文件中匹配符合条件的字符串。正则是包含匹配。grepawksed等支持正则

13.6.1、基本正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配出了换行符外任意1个字符
^ 匹配行首,例如^hehe开头的hello
$ 匹配行尾,例子和上面一样
[] 匹配括号中指定的1个字符,如[0-9]或[a-z]匹配0到9或a到z小写
[^] 匹配括号以外的1个字符,就是说只要不是括号里的字符
\ 转移符。
\{n\} 表示其前面的字符恰好出现n次,如:a\{2\}两个字符a
\{n, \} 表示其前面字符出现不小于n次。例如[0-9]\{2\}表示两位以上数字
\{n, m\} 表示前面的字符至少出现n次,最多出现m次例如:[a-z]\{6,8\}匹配6-8个小写字母

代码示例

grep "a*" test.txt
# 匹配所有内容,包括空白行。*是匹配0次或多次,所以

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

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

grep "aaaa*" test.txt
# 匹配最少包含4个连续a的字符串

13.6.2、字符串截取命令

13.6.2.1、cut字段提取

cut [参数] 文件名
参数:
	-f: 列号,提取第几列
	-d: 分隔符,按照指定分隔符分割列
	
#----示例
1       xiaohong        89
2       xiaobai         100
cut -f 2 student.txt
--->:xiaohong
--->:xiaobai

13.6.2.2、printf命令

printf ‘输出类型输出格式‘ 输出内容
输出类型
	%ns:	输出字符串。n是输出几个字符
	%ni:	输出整数。n是输出几个数字
	%m.nf:	输出浮点数,m和n是数字,代指输出的整数和小数位数
输出格式
	\a:		输出警告声
	\b:		输出退格键
	\f: 	清楚屏幕
	\n:		回车
	\r:		回车,也就是Enter键
	\t:		水平输出退格键,也就是Tab键
	\v:		垂直输出退格键,也就是Tab键

13.6.2.3、awk命令

awk ‘条件1{动作1} 条件2{动作2}...‘ 文件名
条件一般为表达式
动作:
	格式化输出
	流程控制
	
前-后:加入BEGIN和END关键字
awk ‘BEGIN {printf"This is a book"} {printf $2 "\t" $4 "\n"}‘ student.text
--->:This is a bookxiaohong	
xiaobai	

13.7、sed命令

sed是一种几乎包括在UNIX平台的轻量级编辑器。主要是用来将数据进行选取、替换、删除、新增的命令

sed [参数][动作] 文件名
参数:
	-n: 一般sed会直接把所有数据输出屏幕,如果加入此参数,则只会输出经过sed命令处理的输出屏幕上
	-e: 允许对输出数据应用多条sed命令编辑
	-i: 用sed的修改结果直接修改读取数据文件,而不是由屏幕输出
技术图片

代码示例

sed ‘2p‘ -n student.text 
# 查看文件第二行
--->:2	xiaobai		100


####-------字符串替换
sed ‘s/旧字符串/新字符串/g‘ 文件名

[root@iZ8vb6xljiklnfnmawnio3Z temp]# cat student.text 
1	xiaohong	89
2	xiaobai		100
3	xiaohuang	50
4	xiaohei		90
5	baibai		100
[root@iZ8vb6xljiklnfnmawnio3Z temp]# sed ‘3s/50/150/g‘ student.text 
1	xiaohong	89
2	xiaobai		100
3	xiaohuang	150
4	xiaohei		90
5	baibai		100

13.8、字符串处理

13.8.1、sort-排序命令

sort [参数] 文件名
参数
	-f: 忽略大小写
	-n: 以数值型进行排序,默认使用字符串排序
	-r: 反向排序
	-t: 指定分隔符,默认是分隔符是制表符
	-k n[,m]: 安装指定字段范围排序,从n字段开始m字段结束(默认到行尾),简单说就是指定根据哪列进行排序
sort /etc/passwd

sort -k 3,3 /etc/passwd

13.8.2、wc-统计命令

wc [参数] 文件名
参数:
	-l: 只统计行数
	-w: 只统计单词数
	-m: 只统计字符数
	什么不写,都统计

13.9、文件判断-条件判断

13.9.1、按照文件类型

技术图片
# 两种判断格式
test -e /root/install.log
[ -e /root/install.log ]

# 然后通过
echo $? # 来验证上次命令是否执行正常

#----
[ -d /root ] && echo "yes" || echo "no"
# 如果文件存在则打印yes

13.9.2、文件权限判断

技术图片

使用方式和上面的一样

13.9.3、两个文件之间比较

技术图片
[ canshu1.sh -nt canshu2.sh ] && echo "yes" || echo "no"
--->: no

13.9.4、两个整数之间比较

技术图片

13.9.5、字符串比较

技术图片
name=sc
# 给name赋值

[ -z "$name"] && echo "yes" || echo "no"

13.9.6、多个条件判断

技术图片
aa=11
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"

13.10、流程控制

13.10.1、if

if [ 条件表达式 ]; then
	程序
fi

if [ 条件表达式 ]
	then 
		程序
fi        
#!/bin/bash

rete=$(df -h | grep "/dev/vda1" | awk ‘{print $5‘} | cut -d "%" -f1)
# 把分区使用率给变量rete

if [ $rete -ge 80 ]
        then
                echo "Warning! /dev/vda1 is full!!"
fi

if...else

if [ 条件表达式 ]
	then 
		条件成立,执行此处
	else
		条件不成立,执行此处
fi   
#!/bin/bash

port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk ‘{print$2}‘ " )

if[ "$port" == "open" ]
	then 
		echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
	else
		/etc/rc.d/init.d/httpd start &>/dev/null
		echo "$(date) restart httpd !!" >> /tmp/autostart-error.log
fi

多分支if使用

if [ 表达式1 ]
	then 
		语句1
elif [ 表达式2 ]
	then
		语句2
...
else 
	所有不满足,执行此
fi

13.10.2、case

case相当于编程语言中的switch

case $变量名 in
	"值1")
		语句1
	;;
	"值2")
		语句2
	;;
	"值2")
		语句2
	;;
	*)
		都不满足,执行此处
		;;
esac

13.10.3、for

使用方式1

for 变量 in 值1 值2 值3 值3
	do 
		程序
	done
	
#!/bin/bash

#-----示例
for i in 1 2 3 4 5
        do
                echo "date is ${i}"
        done	

语法二

for (( 初始值; 循环控制条件; 变化值 ))
	do
		程序
	done

13.10.4、while

while [ 条件判断 ]  # 成立执行程序
 do
 	程序
 done

十四、服务管理

14.1、服务分类

  • RPM安装的服务
    • 独立的服务
    • 基于xinetd的服务
  • 源码包安装的服务

服务的启动与自启动

启动:就是当前系统中启动的服务

自启动:就是指重启系统后,软件的服务会随着系统重启一起启动

14.2、查询已安装的服务

RPM服务的查询

systemctl list-unit-files
# 查看服务的自启动状态,可以看到所有RPM包安装的服务
# 回车是下一页
# 左边是名称,右边是:enabled 是开机启动; disabled开机不启动

源码包安装的服务

# 一般是/usr/local目录下

14.3、RPM包安装服务的位置

RPM包安装的一下位置中,默认位置

/etc/init.d/:启动脚本位置

/etc/sysconfig/:初始化环境配置文件位置

/etc/:配置文件位置

/etc/xinetd.conf:xinetd配置文件

/etc/xinetd.d:基于xinetd服务的启动脚本

/var/lib/:服务产生的数据放在这里

/var/log/:日志

独立服务的启动

systemctl start|stop|status|restart 服务名.service

关闭一个服务

systemctl stop xxx.service

重启一个服务

systemctl restart xxx.service

显示一个服务的状态

systemctl status xxxx.service

查看一个服务是否开机启动

systemctl is-enabled xxxx.service

查看已启动的服务列表

systemctl list-unit-files | grep enabled

设置开机时启动服务

systemctl enable xxx.service

设置开机禁止服务的启动

systemctl disable xxx.service 

14.4、源码包的服务管理

在每个源码包里,都有启动方式的介绍

路径+脚本 start

想要源码包的安装像rpm那样启动,用到时候再说吧

十五、系统管理

15.1、进程管理

15.1.1、进程查看

# 查看系统中所有进程,使用BSD操作系统格式
ps aux [推荐使用]

# 查看系统中所有进程,使用Liunx标准命令格式
ps -le

每列的说明

USER:进程是由哪个用户产生的

PID:进程的ID号

%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源

%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源

VSZ:该进程占用虚拟内存大小,单位KB

RSS:该进程占用实际物理内存的大小。单位KB

TTY:该进程是在哪个终端运行的。其中tty1-tty7代表本地控制台终端。tty1-tty6是本地字符界面终端。tty7是图形终端。pts/0-256代表虚拟终端

STAT:进程状态。常用的有R:运行S:睡眠T:停止状态s:包含子进程+:位于后台

TIME:进程占用CPU的运算时间,注意不是系统时间。

COMMAND:产生此进程的命令名

15.1.2、进程管理

进程管理作用

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

15.1.2.1、top-查看系统健康状态

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

信息说明

第一行任务队列信息

内容 说明
20:12:57 当前时间:时分秒
up 7 days, 3:14 系统运行时间。本机已经7天3个小时
1 users 当前登录了1个用户
load average: 0.01, 0.04, 0.05 系统在前1分钟,5分钟,15分钟的平均负载。一般认为小于1小时,负载较小,大于1,系统已经超出负载

第二行进程信息

内容 说明
Tasks: 75 total 系统中进程总数
1 running 正在运行的进程数
74 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程,如果是0需要手工检查僵尸进程

第三行CPU信息

内容 说明
Cpu(s): 0.2 us 用户模式占用的CPU百分比
0.2 sy, 系统模式占用的CPU百分比
0.0 ni 改变过优先级的用户进程占用的百分比
99.7 id 空闲的CPU的CPU百分比
0.0 wa 等待输入/输出的进程的占用CPU百分比
0.0 hi 硬中断请求服务占用的CPU百分比
0.0 si 软中断请求服务占用的CPU百分比
0.0 st st(Steal time)虚拟时间占用的百分比,就是当有虚拟机时2,虚拟CPU等待实际CPU的时间百分比

第四行物理内存信息

内容 说明
Mem : 3880340 total, 物理内存总量,单位KB
2873604 free 空闲的物理内存数量,我们使用的虚拟机,总共分配了628M内存
88604 used 已经使用的物理内存数量
918132 buff/cache 作为缓冲区的内存数量

第五行交换分区

内容 说明
Swap: 0 total 交换分区(虚拟内存)的总大小
0 free 空闲交互分区的大小
0 used 已经使用的交互分区的大小
3509836 avail Mem 作为缓存的交互分区大小

KiB Swap: 0 total, 0 free, 0 used. 3509836 avail Mem

15.1.2.2、pstree-查看进程树

pstree [参数]
参数
	-p: 显示进程的PID
	-u: 显示进程的所属用户

15.1.2.3、终止进程

15.1.2.3.1、kill-查看可用进程信号
kill -l

常用的进程号

技术图片

代码示例

kill -1 xxxx
# 重启该进程

kill -9 xxx
# 强制杀死该进程
15.1.2.3.2、killall-根据线程名杀死进程
killall [参数][进程号] 进程名
参数
	-i: 交互式,询问是否要杀死某个进程
	-I: 忽略进程名的大小写
	
killall -9 httpd
# 杀死httpd进程
15.1.2.3.3、pkill-踢出用户
pkill [参数][进程号] 进程名
参数:
	-t: 终端号    按照终端号踢出用户
	
#----
# 使用w命令查询本机登陆用户获取TTY
w
# 踢出用户
pkill -t -9 上面获取的TTY

15.2、工作管理

15.2.1、&-进程放入后台

# 进程放入后台的方式有两种
# 第一种,放入后台
tar -zcf etc.tar.gz /etc/ &

# 第二种,暂停进程放入后台
top #然后Ctrl + Z快捷键

15.2.2、jobs-查看后台工作/进程

jobs [-l]
	-l: 显示工作的PID
# +号代表最近一个放入后台工作,-号代表第二个放入后台工作

15.2.3、fg-后台工作恢复到前台执行

fg %工作号
参数
	%工作号	%号可以省略,但是注意工作号与PID的区别

15.2.4、bg-将后台暂停工作恢复到后台执行

bg %工作号

#注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行

15.3、系统资源查看

15.3.1、vmstat-命令监控系统资源

vmstat [刷新延时 刷新次数]

#例如
vmstat 1 3

15.3.2、dmesg-开机时硬件检测信息

dmesg

dmesg | grep CPU

15.3.3、free-查看内存使用状态

free [-b|-k|-m|-g]
参数
	-b: 以字节为单位显示
	-k: 以KB为单位显示,默认是KB
	-m: 以MB为单位电视
	-g: 以GB为单位显示

15.3.4、uptime-显示系统启动时间和平均负载

uptime
# 也就是top命令的第一行,

15.3.5、查看系统与内核相关信息

uname [参数]
参数
	-a: 查看系统所有相关信息
	-r: 查看内核版本
	-s: 查看内核名称

15.3.6、判断当前系统的位数

file /bin/ls
# 查看ls命令格式

15.3.7、查看当前Linux发型版本

lsb_release -a

15.3.8、lsof-列出进程打开或使用文件的信息

lsof [参数]
参数
	-c 字符串: 只列出以字符串开头的进程打开的文件
	-u 用户名: 只列出某个用户的进程打开的文件
	-p pid: 列出某个PID进程打开的文件
	
# 意思就是说该进程调用了哪些文件
lsof -p xxxx

15.4、系统定时任务

15.4.1、crond-服务管理与访问控制

查看该服务是否开启

systemctl list-unit-files | grep crond

15.4.2、用户crontab设置

crontab [参数]
参数
	-e: 编辑crontab定时任务
	-l: 查询crontab任务
	-r: 删除当前用户所有的crontab任务
crontab -e
# 进入crontab编辑界面,会打开vim编辑你的工作
* * * * * 执行的任务

时间的定义,每个*的作用

项目 含义 范围
第一* 一个小时当中第几分钟 0-59
第二个* 一天当中第几个小时 0-23
第三个* 一个月当中第几天 1-31
第四个* 一年当中第几月 1-12
第五个* 一周当中星期几 0-7(0和7都是代表星期日)

特殊符号

特殊符号 含义
* 代表任何时间。比如第一个*代表一小时中每分钟都执行一次
, 代表不连续的时间,比如"0 8, 12, 16 * * *"命令,就是代表每天8点0分,12点0分16点0分都执行一次
- 代表连续的时间范围,比如"0 5 * * 1-6"命令,代表每周一和周六凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如"*/10 * * * *"命令,代表每隔10分钟都执行一次

例子

时间 含义
45 22 * * * 命令 每天22点45分执行命令
0 17 * * 1 命令 每周1的17点0分执行
0 5 1, 15 * * 命令 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1命令 每月1号和15号,每周1的0点0分执行一次

注意:星期几和几号最好不用一起使用,容易混乱

十六、日志

16.1、确定日志已经启动

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

# 查看服务是否自启动
systemctl list-unit-files | grep rsyslog

常见日志作用

日志文件 说明
/var/log/cron 记录系统定时任务相关的日志
var/log/cpus 记录打印信息的日志
var/log/dmesg 记录系统开机时内核自检的信息。也可以使用dmesg命令直接查看
/var/log/btmp 记录错误登陆的日志。这个文件是二进制的,不能vi看,使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次的登陆时间,这个文件也是二进制,要使用lastlog命令查看
/var/log/secure 记录验证和授权方面信息。只要涉及账户和密码的程序都会记录。
/var/log/message 记录系统重要信息日志,这个日志会记录Linux系统绝大多数重要信息,如果系统出现问题,首先应该坚持这个
/var/run/utmp 记录当前一登录的用户信息。这个文件会随着用户登录和注销不断变化,只记录当前登录用户的信息。要使用wwhousers等命令查看

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

16.2、日志文件格式

基本日志格式包含以下四列

  1. 事件产生的时间
  2. 发生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

16.3、/etc/rsyslog.conf配置文件

/etc/rsyslog.conf配置文件

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

服务名称

服务名称 说明
auth 安全和认证相关信息(不推荐使用authpriv代替)
authpriv 安全和认证相关消息(私有的)
cron 系统定时任务cront和at产生的日志
daemon 和各个守护进程产生的日志
ftp ftp守护进程产生的日志
kern 内核产生的日志(不是用户进程产生的)
loca10-loca17 为本地使用预留的服务

连接号

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

日志等级

技术图片

16.4、日志轮替

日志论题简单的说,就是为了防止日志被替换,比如,今天的服务器记录的日志写到secure文件中,那么到明天之后,日志名就变为secure-日期。然后今天又会有新的日志。依次类推

这种配置的方式要在/etc/logrotate.conf 文件中修改。

先来看一下配置文件中参数

logrotate配置文件中参数

参数 参数说明
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字 保留的日志文件个数。0指没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组 如 create 0600 root utmp
mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略日志警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替。否则就算时间到达也不会轮替
size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k
dateext 使用日期作为日志轮替文件后缀,如secure-20200709

16.4.1、把apache日志加入轮替

vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log{
	daily
	create
	rotate 30
}
# 只要这么写appche就会加入日志

logrotate命令

logrotate [参数] 配置文件名
参数
	-v: 显示日志轮替过程
	-f: 强制进行日志轮替。不管日志轮替条件是否符合
	
#---
logrotate -f /etc/lofrotate.conf

十七、启动管理

17.1、linux运行级别,以及修改默认级别

ContOS运行级别

运行级别 含义
0 关机
1 单用户模式,只要用于系统修复,常用语修改root密码
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动

查看当前系统运行几倍

runlevel

运行级别的修改

init 运行级别

修改系统默认运行级别

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

十八、备份与恢复

Linux需要备份的目录

  • /root/目录
  • /home/目录
  • /var/spool/mail/目录
  • /etc/目录
  • 其他目录

18.1、备份策略

完全备份:完全备份是指把所有需要备份的数据全部备份。可以是整个硬盘,也可以是整个目录

增量备份:第一次备份,整个都备份,第二次备份只备份增加的数据,依次类推

技术图片

差异备份:第一次全部备份。第二次对一第一次只备份增加的。第三次备份对第一次备份对比,备份增加的

技术图片

18.2、dump-备份

1.验证是否安装该命令

rpm -qa | grep dump

# 安装
yum -y install dump

使用方式

dump [参数] 备份之后的文件名 原文件或目录
参数
	-level: 就是我们说的0-9十个备份级别  0完全备份  1第一次增量 2第二次增量  最多可以9次 
	-f 文件名: 指定备份之后的文件名
	-u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
	-v:  显示备份过程中更多的输出信息
	-j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
	-W: 显示允许被dump的分区的备份等级及备份时间

注意事项

  1. dump备份分区的时候可以使用增量备份

  2. 当备份为独立分区时,可以使用-u参数。如果备份分区下文件不能使用-u会报错误

    DUMP: You can‘t update the dumpdates file when dumping a subdirectory
    DUMP: The ENTIRE dump is aborted.
    

18.3、restore-恢复

restore [参数] [选项]
参数:
	-C: 比较备份数据和实际数据的变化
	-i: 进入交互模式,手工选择需要恢复的文件
	-t: 查看模式,用于查看备份文件中拥有哪些数据。
	-r: 还原模式,用于数据还原
	
选项:
	-f: 指定备份文件的文件名
	
# 还原
# 1. 先创建新目录
# 之后 restore -r -f 备份文件.bz2

Linux基本使用

标签:mem   过期   详细信息   内存   编译器   用户和用户组管理   发送信息   挂载u盘   声明   

原文地址:https://www.cnblogs.com/q2210075017/p/13289580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!