文章目录

基础知识

两大分支(内核都一样,只有几十MB)
https://blog.csdn.net/wangjianno2/article/details/51607847
在这里插入图片描述
应用领域:
踩点网站:www.netcraft.com

Linux安装

系统分区

第一步分区,第二步格式化,第三步起文件名,第四部挂载

1.磁盘分区

磁盘分区是使用分区编译器在磁盘上划分几个逻辑部分。

分区的类型:

  1. 主分区:最多有4个
  2. 扩展分区:a.最多只有1个;b.主分区加扩展分区最多有4个;c.不能写入数据,只能包含逻辑分区
  3. 逻辑分区 :可以包含数据

一共四个大柜子,4号柜子里有两个小柜子
1,2,3号柜子是主分区;4号是扩展分区;5,6号柜子是扩展分区的逻辑分区。
1,2,3,5,6号柜子可以存放数据。
在这里插入图片描述

2.格式化

分区是将大柜子分为小柜子,格式化是将小柜子再细分成指定大小的小块(1kb、2kb、4kb)用来写数据
硬盘只有经过格式化后才可以写入数据。
这里的格式化是指高级的格式化,又称逻辑格式化,它是指用户选定的文件系统(FAT16,FAT32,NTFS,EXT2,EXT3,EXT4等)

在windows中能够识别的文件系统是FAT16,FAT32,NTFS
linux够识别的文件系统是,EXT2,EXT3,EXT4

3.硬件设备文件名

在这里插入图片描述 根目录 /
设备 dev

硬盘有设备文件名,那么分区也要有设备名。分区的设备名是在硬盘的设备名后加上数字
/dev/hda1 (IDE硬盘接口) 的意思是 IDE接口(hd)的第一块硬盘(a)中的第一个分区(1)

现在的大部分IDE都落后了,很少看到hda,大部分都是sda

sda1、sda2、sda3、sda4、sda5、sda6
在这里插入图片描述

sdb1、sdb2、sdb5、sdb6、sdb7。没有sdb3和sdb4。因为不管如何,sdb3和sdb4都是只主分区或扩展分区,逻辑分区都是从数字5开始。

在这里插入图片描述

4.挂载

挂载点必须是空目录

必须分区推荐分区
/(根分区)、swap分区(交换分区,内存2倍,不超过2GB)/boot (启动分区,200MB)
swap分区 是虚拟内存。
系统启动会需要空间,如果放在根分区下,内存不够启动不起来。所以一般会单独设立/boot

/是一级目录;/boot、/etc、/home是二级目录;passwd、shadow、group是三级目录。
和windows不同,上述的只是逻辑目录,实际中,子目录不一定在父目录的存储下。
在这里插入图片描述

系统安装

进入bios

虚拟机启动时,快速按 f2.(本人手慢,试了好几次,不行。尝试使用重启时按f2,进入了 )。

点击虚拟机进入,鼠标消失。
快捷键ctr+alt,退出虚拟机,鼠标出现。

boot 是启动,显示启动优先顺序,谁靠上,谁优先。
因为我们是虚拟机,会自动选CD-ROM Drive( 光盘即iso),虽然显示的是其他。
但是实际物理机不会,如果使用光盘,必须调整此处,设定CD-ROM Drive为最上面。系统装完后,需要再次进入bios,将将Hard Drive设置为第一项。

退出

安装界面

在这里插入图片描述选择第一项。

分区设置

系统分区设置:
在这里插入图片描述

  1. /boot分区会自动调整为sda1
  2. 除了 必备的/根分区和swap分区还有推荐的/boot分区,其他分区都是可选的。所以可以根据需要设立/home分区。
  3. swap分区不需要设置挂载点。只要选择文件爱你系统类型和大小即可。
  4. /根分区最好是最后设立,因为最后剩余的空间全部给根分区,不需要计算了,很方便。
  5. 当设立第4个主分区时,系统会自动将第四个主分区改为扩展分区,再在扩展分区下设立逻辑分区。这很好理解,因为最多只能有4个主分区,操作系统不知道你是不是要继续加,所以自动将你的改为扩展分区下的逻辑分区。

在这里插入图片描述个人使用可以安装桌面;如果是服务器,建议使用最小化

厉害的可以选择自定义:一定要选择语言支持的中文支持。
现在可以选择basic server。

root 用户

每个用户都有一个默认的目录。
管理员是/root/
普通用户a是/home/a

[root@localhost ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg

anaconda-ks.cfg有何用?
当你要安装几千台linux时,是会累死的。但可以使用本台linux作为模板,进行安装。

远程登录管理工具

一.虚拟机网络配置

在这里插入图片描述默认有三种配置方式,加上一个自定义。

连接方式网卡ip关系
host-onlyVM1VM1与虚拟机同一网段
桥接主机有线或无线网卡真实物理网卡与虚拟机同一网段
NATVM8VM8与虚拟机同一网段
什么是网关:
https://blog.csdn.net/u013568373/article/details/92063406
三种连接:
桥接:https://www.linuxidc.com/Linux/2016-09/135521.htm
NAT: https://www.linuxidc.com/Linux/2016-09/135521p2.htm
host-only :https://www.linuxidc.com/Linux/2016-09/135521p3.htm

1.桥接

桥接使用的物理机的真实网卡。

下图中的有两个真实网卡,一个是本地有线连接,一个是本地无线连接

在这里插入图片描述优点:可以和本机还有局域网中同一网段的电脑直接通信。(什么鬼?如何直接通信?)
缺点:需要占用网段的ip。容易造成冲突。

例如,主机的以太网是192.168.1.1,那么虚拟机可以是192.168.1.2。
设置虚拟机ip:

ifconfig eth0 192.168.1.2 #eth0 eth是网卡文件名,0是指第一个网卡

主机ping 192.168.1.2是可以ping通的。

注意,此处更改ip只是临时的,重启会失效。想要永久更改需要更改配置文件

可能会出现问题,我设置了桥接,用的是物理网卡。但是有两个物理网卡(有线,无线)。虚拟机可能会连错。可以在 VMware的“编辑”->“虚拟网络编辑器”中选择桥接进行手动选择。
在这里插入图片描述

2.NAT

装完虚拟机后会出现两个虚拟网卡。一个是VMnet1,一个是VMnet8。
NAT是通过VMnet8这块假网卡,和本机进行通讯。
在这里插入图片描述第一步:
虚拟机工作站
在这里插入图片描述
windows上的虚拟网卡:
在这里插入图片描述

第二步:
/etc/sysconfig/network-scripts 的ifcfg-ens33
在这里插入图片描述
第三步:
在这里插入图片描述

ubentu设置网络信息:
在这里插入图片描述
重启网络(不知道有没有用,我运行下面代码后,ifconfig是没有变的,之后尝试重启,就改成功了)

/etc/init.d/networking restart

3.host-only

host-only是通过VMnet1这块假网卡,和本机进行通讯。

例如,主机的VMnet1是192.168.118.1,那么虚拟机可以是192.168.118.2。
设置虚拟机ip:

# 单单运行ifconfig 命令查看会有一个 lo 这是巡回地址,是自身的地址
ifconfig eth0 192.168.118.2 #eth0 eth是网卡文件名,0是指第一个网卡

主机ping 192.168.118.2是可以ping通的。
就算没有联网那个,本机和虚拟也是可以通信的(就是最大的好处)。

第一步:修改虚拟网卡VMnet1
在这里插入图片描述

第二步:设置虚拟机的连接方式
在这里插入图片描述
第一步:设置虚拟机的连接方式

给虚拟机分配ip
192.168.118.2

三者区别

使用虚拟网卡和真实网卡的区别:
桥接使用的是真实的网卡,可以和本机和同一网段上的计算机进行通信。
NAT和host-only只能和本机进行通信,但都不用占用真实网站的ip地址。

使用NAT和host-only的区别:
host-only只能和本机进行通信。
NAT在本机联网的情况下,虚拟机也可以联网

secureCRT

secureCRT安装教程:
https://blog.csdn.net/qq_39052513/article/details/100272502
secureCRT和secureFX是一起安装的,一个连接,一个传输文件。

创建新连接:
在这里插入图片描述

在这里插入图片描述
如果出现:The remote system refused the connection.说明需要下载安装openssh-server

#sudo apt-get install openssh-server
#ps -e |grep ssh
# 出现sshd说明安装成功并运行了

WinSCP

WinSCP下载地址:
https://www.onlinedown.net/soft/20088.htm
WinSCP是专门提供window到linux的文件传输。
sftp是在ftp的基础上进行加密。
在这里插入图片描述

初学者建议

注意事项

  1. linux区分大小写

  2. linux的所有内容都是文件形式保存的,包括硬件。
    比如:ifconfig eth0 192.168.118.2 只是将信息保存在内存中,是临时有效。只有更改文件的内容,才真实有效。

  3. linux文件没有扩展名。linux本身是不需要扩展名的,但是为了管理员的方便,会人为的添加扩展名。
    在这里插入图片描述

  4. linux所有的存储设备都必须挂载之后用户才可以使用,包括硬盘,u盘和光盘。

服务器管理和维护建议

1.linux各个目录的作用

在这里插入图片描述在这里插入图片描述在这里插入图片描述

bin和usr:命令

二进制可执行文件就是命令,一般放在bin标志的目录中。

在这里插入图片描述

linux的大部分命令都在上述的前四个文件夹中。
bin中的命令,所有用户都可以执行。
sbin中的命令,只有管理员可以执行

usr(读作user)中的命令在单用户模式下是不能执行的。
单用户模式就是win里面的安全模式,是做修复用的

boot目录:启动分区

boot目录就是启动分区。别在里面写数据。如果系统需要备份,需要备份这个目录。

dev目录:设备

dev目录保存的都是设备文件。

etc目录:配置

etc是专门的默认配置文件保存位置。也需要备份

home目录:家

普通用户的家目录。
例如用户a的目录就是/home/a
(管理员的home目录是root)

lib目录:函数库

系统调用的函数库

lost+found目录:碎片
  1. 这个是系统断电后产生的文件碎片放这里。
  2. 平时,这个目录是空的
  3. 每个分区都有自己的lost+found目录。
media、mnt、misc目录:挂载

都是系统为我们准本的专门用来挂载的目录。

media是用来挂载媒体设备,软盘和光驱。
mnt是挂载额外设备,例如u盘,移动硬盘和其他操作系统分区。
misc是挂载NFS服务

opt目录:软件

opt是第三方安装的软件保存位置。
但是,我们更喜欢把软件放在/usr/local/目录中。

proc、sys目录:虚拟文件

虚拟文件系统,数据保存在内存中。
记录的是内核、进程、设备状态和网络状态的信息。

root目录:管理员home

是管理员的home目录。

srv目录:服务数据

服务数据目录。了解即可。

tmp目录:临时

临时目录,每次开机时会自动清空该目录

usr目录:资源

系统软件资源目录。
usr是Unix Software Resource的缩写。类始于win的系统盘(C盘)的Windows目录。建议备份

var目录:动态

动态数据保存位置。主要保存缓存、日志等。

2.服务器注意事项

  1. 远程服务器只能重启,不能关机。你关机了,谁去重启?跑过去?
  2. 重启时应该关闭服务。我们电脑关机时,会关掉大部分应用。
  3. 不要在服务器访问高峰运行高负载命令(早上3到5点最空闲)
  4. 远程配置防火墙时不要把自己踢出服务器。
  5. 指定合理密码规范并定期更新。
  6. 合理分配权限
  7. 定期备份重要数据和日志。

常用命令

命令大概包含3000多
包括

  1. 文件处理命令
  2. 权限管理命令
  3. 文件搜索命令
  4. 帮助命令
  5. 用户管理命令
  6. 压缩解压命令
  7. 网络命令
  8. 关机重启命令

文件处理命令

文件处理命令包括

  1. 命令格式与目录处理命令ls
  2. 目录处理命令
  3. 文件处理命令
  4. 链接命令

命令格式与目录处理命令 ls

命令的基本格式包括三个部分:命令、选项(可选)、参数(可选)
选项前面有-,代表他是选项。选项是用来选择表现形式的。-a -l等价于-al,大部分的选项顺序是可以颠倒的。
简化选项的-a等同于完整选项 --all
在这里插入图片描述
在这里插入图片描述

-a a的意思是all; 查看所有文件,包括隐藏文件
-l l的意思是long; 查看每个文件的详细信息
-h h的意思是human ; 人性化查看信息
-d d的意思是dir ;只查看目录本身,不看内部文件
-i i的意思是identity ;查看i节点

用户划分:
每个文件把用户分为三类

  1. 所有者 user 简化: u
  2. 所属组 group 简化:g
  3. 其他人 other 简化: o

我创建了文件,我就是所有者。我可以把所有者移交给别人,所有者只能有一个。
所属组是一个组,所有组里的用户具有相同权限。
剩余的其他人是other

文件类型+权限:
文件类型:-文件、d目录、l链接、
在这里插入图片描述

实例:

[william@localhost /]$ ls -l
总用量 66
lrwxrwxrwx.   1 root root     7 430 21:52 bin -> usr/bin
dr-xr-xr-x.   6 root root  1024 430 22:09 boot
drwxr-xr-x.  19 root root  3300 63 14:02 dev
drwxr-xr-x. 141 root root 12288 63 14:02 etc
文件类型和权限引用次数文件所有者文件所属组文件大小最后一次修改时间文件名
lrwxrwxrwx.1rootroot74月 30 21:52bin -> usr/bin

目录处理命令 mkdir、cd、pwd

在这里插入图片描述
默认只有父目录存在才可以创建子目录。目录可以是多个,空格隔开
-p p指parents 递归的创建目录,也就是无需父目录

在这里插入图片描述
在这里插入图片描述
返回根目录 cd /
一个点.代表当前目录
两个点..代表父目录

在这里插入图片描述

目录处理命令 rmdir、cp、mv、rm

在这里插入图片描述
因为rmdir只能删除空的目录,要是目录里有文件和其他目录,是无法删除的。
在这里插入图片描述
-r --recursive 递归复制目录及其子目录内的所有内容
-p --preserve 保持指定的属性(默认:模式,所有权,时间戳)

原文件可以是多个目标目录只能是一个
文件复制的时候可以更改文件名

 cp /tmp/xiaodianying /root/xxx.18 #xxx.18是新的文件名

在这里插入图片描述
cp命令是拷贝,源文件是还存在的。但是mv是移动,源文件不存在了。

和复制一样,可以将多个文件一起移动到同一个目录。
也可以改名,方式和cp一样。

#移动
mv /tmp/xiaodianying /root

在同一个目录下移动就是改名。F

在这里插入图片描述
-r, -R, --recursive 递归删除目录及其内容
-f, --force 强制删除。忽略不存在的文件,不提示确认

文件处理命令 touch、cat、tac

touch:创建
在这里插入图片描述
# touch myvedio

除了/,其他的任何字符都可以作为文件名,但不建议使用空格

cat:查看
在这里插入图片描述

cat是正向显示内容,tac是反向显示内容。
tac
tac是cat反过来写的。
在这里插入图片描述
cat和tac不适合看大文件

文件处理命令 more、less、head、tail

more
在这里插入图片描述
more只能向下翻
less既可以向下,也可以向上翻。同时支持查找。

在这里插入图片描述
使用pageup是一页一页往上翻,使用向上箭头是一行一行往上翻。
查找是/查找内容。使用n代表下一个.

head:查看前几行的内容。

在这里插入图片描述head:查看后几行的内容。
在这里插入图片描述

链接命令 ln

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

[root@localhost etc]# ln -s /etc/issue /tmp/issue.soft #软连接
[root@localhost etc]# ln  /etc/issue /tmp/issue.hard #硬链接


[root@localhost tmp]# ls -l /etc/issue #原文件信息
-rw-r--r--. 2 root root 23 95 2019 /etc/issue
[root@localhost tmp]# ls -l /tmp/issue.soft #软链接信息
lrwxrwxrwx. 1 root root 10 65 14:09 /tmp/issue.soft -> /etc/issue
[root@localhost tmp]# ls -l /tmp/issue.hard  #硬链接信息
-rw-r--r--. 2 root root 23 95 2019 /tmp/issue.hard
命令文件类型权限原文件删除时i节点跨分区对目录
软链接l(链接文件)rwxrwxrwx失效不同可以可操作
硬链接-(文件)rw-r–r–依旧存在不可不可操作

软链接类似于windows的快捷方式。文件很小,只是一个链接。指向原文件,权限由源文件决定。

硬链接是直接复制文件,但和复制文件的区别是它会同步更新。因为它们的inode是相同的。

权限管理命令

权限管理命令 chmod

chmod:更改权限

只有管理员root和文件的建立者可以修改文件的权限。
在这里插入图片描述在这里插入图片描述
-R, --recursive 以递归方式更改所有的文件及子目录

操作对像

u 文件属主权限
g 同组用户权限
o 其它用户权限
a 所有用户(包括以上三种)

权限设定

+ 增加权限
- 取消权限
= 唯一设定权限

权限类别

r 读权限
w 写权限
x 执行权限
X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
s 文件属主和组id
i 给文件加锁,使其它用户无法访问

例:

单个修改

[root@localhost tmp]# ls -l japanlovestory.list
-rw-r--r--. 1 root root 0 64 23:12 japanlovestory.list
[root@localhost tmp]# chmod u+x japanlovestory.list #给文件的使用者(u)添加(+)执行权限(x)
[root@localhost tmp]# ls -l japanlovestory.list
-rwxr--r--. 1 root root 0 64 23:12 japanlovestory.list

多个同时修改

[root@localhost tmp]# chmod g+w,o-r japanlovestory.list  #给所属组添加写权限,并给其他人剥夺读权限
[root@localhost tmp]# ls -l japanlovestory.list 
-rwxrw----. 1 root root 0 64 23:12 japanlovestory.list

使用数字修改

[root@localhost tmp]# chmod 640 japanlovestory.list  #6=rw-;4=r--;0=---
[root@localhost tmp]# ls -l japanlovestory.list 
-rw-r-----. 1 root root 0 64 23:12 japanlovestory.list

-R递归修改

[root@localhost tmp]# mkdir -p /tmp/a/b #a为父目录,b为子目录
[root@localhost tmp]# ls -ld /tmp/a
drwxr-xr-x. 3 root root 4096 65 16:32 /tmp/a
[root@localhost tmp]# ls -ld /tmp/a/b #权限默认都是rwxr-xr-x
drwxr-xr-x. 2 root root 4096 65 16:32 /tmp/a/b
[root@localhost tmp]# chmod 777 /tmp/a #常规修改权限
[root@localhost tmp]# ls -ld /tmp/a
drwxrwxrwx. 3 root root 4096 65 16:32 /tmp/a
[root@localhost tmp]# ls -ld /tmp/a/b #子目录权限未被修改
drwxr-xr-x. 2 root root 4096 65 16:32 /tmp/a/b
[root@localhost tmp]# chmod -R  777 /tmp/a #递归修改权限
[root@localhost tmp]# ls -ld /tmp/a/b #子目录权限被修改
drwxrwxrwx. 2 root root 4096 65 16:32 /tmp/a/b

文件
r:cat/more/less/head/tail
w:vim
x:script/command

目录
r:ls
w:touch/mkdir/rmdir/rm
x:cd

其他权限管理命令 chown、chgrp、umask

chown:改变文件所属人
在这里插入图片描述

  1. 只有管理员root可以更改文件的所属者。
  2. 用户必须存在。[root@localhost tmp]# useradd shenchao

用例:
在这里插入图片描述

chgrp:改变文件所属组。
在这里插入图片描述
用例:
在这里插入图片描述
umask:缺省创建权限
在这里插入图片描述

  1. linux中任何性建立的文件都会把可执行去掉
  2. 文件夹是rwxr-xr-x,文件是rw-r--r--

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

文件搜索命令

文件搜索命令 find、locate(针对文件)

在这里插入图片描述条件:
-name:名字查找
-iname:不区分大小写
-size:文件大小 +n 大于、 -n小于、 n等于
-user:根据所有者来查找
-group:根据所属组来查找
-amin:最近访问 access
-cmin:最近文件属性的改变change
-mmin:最近改变的文件内容modify
-type:根据文件类型查找 f文件,d目录,l软连接
-inum:根据i节点信息查找
-a:同时满足条件 and
-o:满足至少一个 or

  1. 搜索是精准搜索,模糊查找可以添加*内容*内容*内容???(*匹配任意个字符,?匹配单个字符)

在这里插入图片描述

  1. 查找区分大小写,2使用-iname可以忽略大小写
    在这里插入图片描述
  2. 指定文件大小 使用-size,单位是数据块,一个数据块是512字节=0.5KB。例如100MB=102400KB=204800块

在这里插入图片描述

  1. 指定用户和所属组,-user-group

在这里插入图片描述

  1. 根据最近修改时间查找,-amin-cmin-mmin,+=-号

例如:在/etc下查找5分钟内被修改过属性的文件和目录
在这里插入图片描述

  1. 条件连接,-a表示与,-o表示或

文件名为init**且文件类型是文件
在这里插入图片描述

  1. 根据文件类型-type, f文件,d目录,l软连接

  2. 根据i节点查找-inum
    在这里插入图片描述

  3. 对查找结果进行进一步分析 ,-exec 命令内容 {} \;
    {} 表示整合,\表示替换,;表示结束
    在这里插入图片描述
    locate:
    在这里插入图片描述
    -i, --ignore-case 匹配模式时忽略大小写区别

  4. 需要更新资料库updatedb

  5. /tmp不在文件资料库的范围里,里面的文件是找不到的

文件搜索命令 which、whereis(针对命令)

which:找到命令所在目录
在这里插入图片描述

在这里插入图片描述
有些结果是带有alias(别名的),意思是执行了cp就等同于执行cp -i,-i是增加提示询问。

whereis:
在这里插入图片描述whereis 除了找到命令所在的路径,还可以找到他的文档。

在这里插入图片描述
man的意思是manual

文件搜索命令 grep(针对内容)

grep:查找内容所在文件里的位置
在这里插入图片描述
-n:显示行号
–color=auto:显示颜色

例1:在/etc/inittab中不区分大小写地查找’targets’,并显示行号
在这里插入图片描述

例2:查找有效配置数据(不以注释#开头的配置项,句中出现#的属于有效项)-v是反向查找

grep -v ^#  /etc/inittab

例3:批量查找普通用户的用户名和uid

[root@localhost ~]# cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1,3 
william:1000

帮助命令

帮助命令 man(命配)、whatis(命)、apropos(配)

在这里插入图片描述

  1. 查找内容:/内容,按n查找下一个,按p重头开始,空格翻页,回车换行,q退出

  2. 使用man查看配置文件信息不使用绝对路径。

  3. 配置文件和命令同名时,默认优先命令

  4. whereis passwd,1是命令帮助,5是配置文件帮助
    在这里插入图片描述

  5. 如果发生命令和配置文件冲突,想要访问命令,需要在配置文件前加上5

[root@localhost etc]# man 5 passwd

查看配置文件的标准流程:

  1. 使用命令 man 文件名。这个会告诉你文件的格式,教你如何看
  2. 使用命令 more 文件绝对路径。这个会告诉你具体的配置信息。

通过man 查看是详细的信息,如果想要命令简短信息,可以使用

whatis ls
apropos services

帮助命令 --help(选项)、help

–help 用于查看命令的选项,使用方法是 命令 --help

ls --help

help:内置命令是无法使man查看,只能用help
在这里插入图片描述

在这里插入图片描述

用户管理命令

用户管理命令 useradd、passwd、who、w

useradd:添加用户
在这里插入图片描述

passwd:修改密码
在这里插入图片描述

(密码技巧:e=@,abcd=1234)

who:查看有几个用户在线。
linux是支持多用户。
在这里插入图片描述
在这里插入图片描述

| 登录用户名 |登录终端 | 终端号 | 登录时间 | 登录主机 ip地址 |
|–|–|–|–|–|–|–|–|–|
| root | tty(本地)或pts(远程) | 0 | 2020-06-08 21:06 |:0(本机) 或192.168.198.1(远程) |

tty:表示本地登录
pts:远程登录

w:查看登录用户详细信息
在这里插入图片描述在这里插入图片描述

21:50:38 up 57 min,  2 users,  load average: 0.00, 0.01, 0.05
当前时间    运行时间    当前用户     负载均衡:过去1分钟 ,过去5分钟,过去15分钟的负载情况
 IDLE           JCPU               PCPU 				WHAT
 停止操作多久了    累计占用cpu时间      当前命令占用cpu时间    执行的命令

压缩解压缩命令

病毒很难感染压缩文件,所以上传文件可以选择压缩先。
压缩格式:.gz .zip .rar
zip是唯一一个在win和linux不需要安装其他东西就可以使用

压缩格式		压缩			解压
.gz			gzip 		gunzip (gzip -d)
.tar		tar -cf		tar -xf
.tar.gz		tar -czf	tar -xzf
.zip		zip (-r)	unzip 
.bz2		bzip2		bunzip (bzip2 -d)
.tar.bz2	tar -cjf	tar -xjf

gzip,bzip2只能压缩文件,所以需要先用tar将目录打包成文件,再打包。bzip2唯一优点是可以保留源文件。
zip 由于压缩比低,所以不怎么用。

压缩解压缩命令 gzip、gunzip 、bzip2、bunzip2(针对文件)

gzip:将文件压缩成 文件名.gz,不能压缩目录,且不保留源文件
在这里插入图片描述
gunzip:解压缩

在这里插入图片描述
bzip2:gzip的升级版,可以保留源文件
在这里插入图片描述

相比于gzip,bzip2可以保存源文件。
他的压缩比同样惊人。
推荐压缩大文件。
压缩后的文件名的后缀是.gz

在这里插入图片描述
bunzip2

在这里插入图片描述

在这里插入图片描述

压缩解压缩命令tar (针对目录)

在这里插入图片描述
-c, --create
-v, --verbose 详细地列出处理的文件
-f, --file
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-j, --bzip2 通过 bzip2 过滤归档

实现压缩
方式一:先打包,再压缩。

  1. 打包
    在这里插入图片描述2. 压缩
    在这里插入图片描述

方式二:打包压缩一起
在这里插入图片描述
打包成后缀名为.tar.bz2,也很常用。

在这里插入图片描述

解压缩
在这里插入图片描述
在这里插入图片描述

解压缩.tar.bz2

在这里插入图片描述

压缩解压缩命令zip、unzip (都可)

在这里插入图片描述
linux的压缩软件,win都支持,使用的不多,因为压缩比不大。

压缩文件

在这里插入图片描述
压缩目录

在这里插入图片描述
解压缩

在这里插入图片描述

网络命令

网络命令 write、wall、mail(针对消息)

write 是给计算机中的另一个指定在线用户发送实时文本消息。
在这里插入图片描述

在这里插入图片描述
输入回车,对方显示一行,
输入结束ctr+d

wall:给所有在线用户发送命令

在这里插入图片描述
自己也会受到一份消息。

在这里插入图片描述mail
在这里插入图片描述
发送:
mail 用户名
输入内容,ctr+d结束,即发送。

接收:
mail
N开头表示未读
输入序列号即可查看邮件内容
h:再次显示邮件列表
d 序列号 :删除该邮件
q: 退出

网络命令ping、ifconfig

ping

在这里插入图片描述
ping 三次
在这里插入图片描述
在这里插入图片描述
直接ifconfig是查看当前网关信息
在这里插入图片描述
这里写一下扩展知识内容:

en标识ethernet
o:主板板载网卡,集成是的设备索引号
p:独立网卡,PCI网卡
s:热插拔网卡,USB之类的扩展槽索引号
nnn(数字):MAC地址+主板信息计算得出唯一序列

ens33中的
inet值就是ip地址,也是最关键的信息。
RX packets是接收到的包总数。
TX packets是发送的包总数

lo是回环网卡。

virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机到(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。

网络命令 last、lastlog (针对用户)

last:查看各个用户的登录信息
在这里插入图片描述

在这里插入图片描述

lastlog -u uid

网络命令 traceroute、netstat、nmtui

traceroute:路由路径
在这里插入图片描述

在这里插入图片描述

netstat:查询网络状态
查询现在的计算机开了哪些端口
在这里插入图片描述
在这里插入图片描述
-tlun在这里插入图片描述

-an: a的意思是显示所有。 比-tlun的最大优点是State里显示established,是指在线远程连接
在这里插入图片描述

-rn
在这里插入图片描述
nmtui和之前的setup功能差不多。可以代替手工修改配置文件
用于修改ip.
配置完后需要service network restart

挂载命令

挂载命令 mount、umount

mount:
在这里插入图片描述

单独mount可以查看挂载哪些东西。
在这里插入图片描述

umount:
如果已经挂载了,那么设备和挂载点是连在一起的,随便umount一个都行。但注意不要在挂载点里里面umount

关机重启命令

关机重启命令 shutdown

在这里插入图片描述
-h 关机
现在关机:
shutdown -h now

指定时间晚八点半关机:
shutdown -h 20:30

-r 重启
shutdown -r now

建议推荐使用shutdown命令。

其他关机命令还有halt、poweroff、 init 0

其他重启命令reboot、init 6

在这里插入图片描述
NFS=network file system 实现不同计算机文件共享,但安全性不高,不建议使用。

系统运行级别

查看系统运行级别:
在这里插入图片描述

退出登录命令logout

文本编译器Vim

早期叫vi,后来增强了,叫Vim。Vim有颜色提示
在这里插入图片描述
在这里插入图片描述

Vim常用操作

插入 、定位、删除、复制、剪切

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

替换、撤回、搜索、搜索替换

在这里插入图片描述
在这里插入图片描述

保存、退出

在这里插入图片描述

使用技巧

在这里插入图片描述

导入内容

将其他文件的内容插入到当前文件中

:r 文件名

把命令结果导入文件中

:r !命令

# :r !date

查找命令所在位置

:!which 命令

# :!which ls

定义快捷键

语法: :map 快捷键 触发命令

范例1:
使用ctr+p 添加行首(I) 注释(#) 并进入 ** 命令模式 **

:map ^P I#<ESC>

^p的输入 ctr+v+p

范例2:
使用ctr+b 删除行首(0)

:map ^B 0x

连续行注释

^代表行首 ,#是注释,g代表不用提示
添加注释: :起始行,终止行s/^/#/g
^# 代表行首的#
消除注释: :起始行,终止行s/^#//g

替换

语法: :ab 被替换字符串 替换字符串

例: :ad myname zhangwendi

长期保存

上述的改变都是临时的,重启后失效。
需要在家目录里编写
/root/.vimrc
/home/william/.vimrc
在这里插入图片描述

软件包管理

在这里插入图片描述
总结:

  1. 安装包分为源码包和二进制包也就是rpm 包。
  2. rpm包有两种安装方式,第一种是手工rpm命令安装,第二种是yum命令安装。手工命令缺点是有依赖性问题。yum命令安装是专门解决依赖问题,缺点是有些Linux会收费和没有查询命令。
    3.源码包只要不报错,很方便。还有一种是通过脚本安装源码包,类似Windows安装软件

简介

软件包分类:

  1. 源码包和脚本安装包
  2. 二进制包,又称(RPM包(redhat系列)、DPKG(Debian系列)系统默认包)

源码包可以看源码,二进制包不可以。

脚本安装包是源码包的子类,并不多见。脚本安装包是通过源码包再开发的。特点是不需要手动安装,实现写好安装界面,点击install.sh进行安装。
为何脚本安装包那么好用,用的人却不多。首先它是基于源码包的。用源码包的人有限。其次用源码包的都是厉害的专业人士,喜欢自由的自定义。安装界面是给初学者用的。

由于源码包容易报错,一般人不会搞。
所以大部分通过编译,转换为二进制包,是RPM格式,相当于win的.exe。
还有一个原因是源码包安装是先要编译成二进制包,再安装,速度很慢。但直接使用二进制节省了编译的过程,会很快。
软件开发商会先编译,再发行,提高用户体验。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

rpm命令管理

RPM命令规则

在这里插入图片描述
noarch:任何平台
不写linux平台:任何linux平台

RPM包依赖

在这里插入图片描述

需要添加依赖。
在这里插入图片描述 libodbcinst.so.2是so和数字结尾的是库依赖,不是单独的包。需要查询这个库所在的包,再安装那个包。
找包的方式:

http://www.rpmfind.net/ (网站极慢)
在这里插入图片描述
在这里插入图片描述

包名和包全名

在这里插入图片描述

RPM安装、升级、卸载

安装、升级、卸载都需要到Package目录中,查询以安装包时路径随意,查询未安装包是,同样需要到Package目录中写全名

安装:
在这里插入图片描述
–nodeps千万不能用

在这里插入图片描述
安装过程很痛苦。

在这里插入图片描述
命令行提示告诉我们要装4个和httpd相关的包。根据包全名安装。再对每个包进行安装。

升级:
在这里插入图片描述
这个和安装一摸一样,有时候,使用升级来替换安装。

卸载:
在这里插入图片描述
因为已经安装过来,所以只需要写包名。

查询是否安装、信息、位置

查询:
之前的安装、升级、卸载都可以使用yum进行取代,但查询只能使用rpm
在这里插入图片描述

添加管道符

rpm -qa | grep httpd

在这里插入图片描述
在这里插入图片描述
-p 后面跟包全名

rpm 安装不建议修改安装位置。

查询文件归属、依赖性

在这里插入图片描述
之前是通过报错来确定依赖性,现在使用查询的方式。

查询命令ls来自哪个包

rpm -qf /usr/bin/ls

在这里插入图片描述
-p 后面使用包全名

效验和文件提取恢复

包效验
在这里插入图片描述

rpm -V httpd

在这里插入图片描述
在这里插入图片描述

文件提取
在这里插入图片描述
最常用的是解决误操作。例如删除了一个文件,发现删除错了。这时候不需要重新下载整个包。
在这里插入图片描述
上面的意思是:使用cpio命令从rpm包中提取指定文件。
\ :换行
.:提取到当前目录下

在这里插入图片描述
例如误删除ls命令,进行恢复的过程:
下面是centos6
在这里插入图片描述
我的centos7:
在这里插入图片描述
在这里插入图片描述

./usr/bin/ls :指保存在当前目录下,建立/usr/bin/ls,按道理说应该不管文件夹什么名都可以,但这里还必须是/usr/bin/ls这个名字。

在这里插入图片描述

yum在线管理

yum可以使用在线的库。也可以使用镜像的库。

在部分redhat系列的linux中,yum是被当做售后服务,是要注册码收钱的。在centos中不需要。

yum管理的还是rpm包。不存在yum包一说

网络ip配置

去看前面的远程登录管理的NAT

网络yum源

在这里插入图片描述
以后缀名repo的代表是合法的。
[base]:是容器名称,一般不改。通过yum命令查询就可以看到。
name: 等同于注释。

mirrorlist:是容器所在地址镜像 (默认生效)
baseurl:容器真正的所在地址(默认不生效)

enable:默认为1,为1是可以不写的

所在位置:/etc/yum.repos.d/
在这里插入图片描述
默认是CentOS-Base.repo有效。

yum命令

yum 查询list、安装install、升级update、卸载remove

查询:
在这里插入图片描述

yum search 关键字 # 关键字就等于包名

在这里插入图片描述

安装:
在这里插入图片描述
会从远程服务器下载包,会需要一定的时间。自动解决依赖问题。

安装C语言编译器。
在这里插入图片描述
升级:
千万不能输入 yum -y update ,不加包名的话,会更所有包,包括内核。这样远程连接就断开了。
在这里插入图片描述

用什么装什么,就算不用,也别卸载。你敢用yum卸载,电脑就敢死机。
像a->b->c这样的依赖关系,删除c时,yum是会把b,a都卸载掉。但a和b可能还是被其他的包使用。这样就会玩坏掉。
在这里插入图片描述

YUM软件包组管理命令

在这里插入图片描述

yum grouplist 显示的可能是中文的。可以先LANG="en_US.UTF-8",将编码改为英文格式。

在这里插入图片描述
如果组名有空格,使用双引号括起来。

光盘yum源搭建

之前安装gcc包是通过在线下载的方式,速度很慢,花了大约20分钟。
在没连网或者想要加快速度,可使用光盘作为yum源,虽然不是最新的版本,但同样可靠。
实际操作优先选择将光盘作为yum源。

在这里插入图片描述
\代表连接下面语句,实际不需要

在同一个目录下移动就是改名。
想要它失效,又不能删除它们,那就改名。他是按照后缀repo识别的。

在这里插入图片描述
修改的时候一定要注意格式。
有效配置语句之后不能加注释
语句后面别加空格。

在这里插入图片描述

更改为清华源

  • Update /etc/yum.repos.d/CentOS-Base.repo according to https://mirrors.tuna.tsinghua.edu.cn/help/centos/
    • Set all the gpgcheck=0
  • yum update

源码包管理

源码包和RPM包的区别

源码包rpm包
安装位置/usr/local/…默认规则
服务管理绝对地址 操作(绝对地址 操作) 或 (service 服务 操作 )
在这里插入图片描述

在这里插入图片描述
大部分的rpm包是按照上面的目录进行自动安装。可以使用rpm -ql 包名来查看安装位置。

在这里插入图片描述

服务启动区别

在这里插入图片描述

在这里插入图片描述
运行服务是需要像上面第一行一样,先指定服务启动程序的绝对地址,后跟start命令。
可以使用service取代地址是因为service会去默认地址去找。
只有RMP包可以使用service,源码包不行。

service命令在centos7中已经不能使用了,使用systemctl取代。
为什么不能用了呢?因为service会从/etc/rc.d/init.d文件夹下找启动脚本,但现在软件服务已经不把启动脚本放在/etc/rc.d/init.d中了,service自然就无效了。

ps httpd :查看httpd服务是否开启

systemctl :查看正在运行的服务
systemctl list-unit-files :查看所有服务
systemctl start 服务名 :开启服务
systemctl stop 服务名 :关闭服务

开启阿帕奇服务后需要关闭防火墙

源码包安装过程

需要先下载源码包
在这里插入图片描述
查看c语言编译器是否安装:

[root@localhost ~]# rpm -q gcc
gcc-4.8.5-39.el7.x86_64

包下载可以下载在本地windows电脑。

源代码保存位置和软件安装位置:
在这里插入图片描述

在这里插入图片描述

  1. 下载源码包,这个之前就已经下载到window中看,如何移动到虚拟机中?
    答:使用远程传输工具winscp。
    直接将安装包拖动到家目录下。

  2. 解压缩:tar -zxvf httpxxx.tar.gz。查看文件有多大 du -sh httpxxx

  3. 进入已经解压缩的命令。一般软件都会有安装说明(INSTALL)和使用说明(README)。

vi INSTALL查看安装步骤
在这里插入图片描述
接着进行configure
在这里插入图片描述
定义需要的功能选项
查看所有可以配置的功能:

./configure --help

定义安装目录:

./configure --prefix=/usr/local/apache2ZWD

运行上面的命令后,系统检测和Makefile都建立好了。

接着编译

make

只是编译,不会向apache2ZWD中写入结果
如果make编译出现报错,使用make clean将之前的清除。

接着安装:

make install

会向apache2ZWD中写入编译结果

启动软件:
在这里插入图片描述INSTALL说明文件中有提示。

/usr/local/apache2ZWD/bin/apachectl start

源码包卸载

在这里插入图片描述

脚本安装包

在这里插入图片描述

实例

安装Webmin
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用户和用户组管理

在这里插入图片描述

用户配置文件

在这里插入图片描述

用户信息文件/etc/passwd

在这里插入图片描述

查看说明

 man 5 passwd

在这里插入图片描述
在这里插入图片描述

第1段:用户名称。

第2段:密码标识。
早期linux是直接把密码放在密码标志里,现在是放在影子文件/etc/shadow中。
原因是,/etc/passwd任何人都是是可读的,别人都可以看到,就算是密文,也可以尝试暴力破解。

[root@localhost /]# ll /etc/passwd
-rw-r--r--. 1 root root 2358 717 15:10 /etc/passwd

[root@localhost /]# ll /etc/shadow
----------. 1 root root 1402 68 21:15 /etc/shadow 
----------  表示谁都看不了,只有root用户可以

查看配置

vim /etc/passwd

x,代表有密码,如果x没有,代表无密码,只能在本机登录,不允许远程。

第3段:UID。
理论上,每个用户有一个唯一的标识,就是UID。

超级用户:
由于管理员UID只有一个,为0,想要将一个用户设置为管理员,那么就将他的UID设置为0。这样,多个用户共用一个UID成为管理员。

伪用户:
伪用户是系统内的用户,命令会调用这些用户,一但删除,系统会崩溃。这些用户不能更改,不能登录

普通用户:
就是我们自己添加的用户。

**第4段:GID。**初始组。
一个用户必须属于一个初始组,可以属于多个附加组。
初始组不建议更改。
例如:一个不老实的男的会有一个初始老婆,还有多个附加女人。男的离婚后可以有附加女上位,次数多后,这个男的就忘了当初生的文件儿子是谁生的了。
初学者或者复杂的用户管理不建议更改初始老婆。
在这里插入图片描述

第5段:用户说明。
用户名的说明,加不加都可以。

第6段:家目录。
普通用户:/home/用户名/ 是固定的。

第7段:登录后的shell。

在这里插入图片描述
所有普通用户必须写/bin/bash/sbin/nologin是指无法登录。

影子文件/etc/shadow

shadow在国外的意思很酷,就像大威天龙一样吊。
/etc/shadow是passwd的影子。
在这里插入图片描述
第2个字段:
可以在密码之前加上!来暂时停用该用户。

在这里插入图片描述

第4个字段:
是修改密码的要求时间间隔,10表示10天之内不再更改。

第6个字段:
如果字段5的有效期是60,第6个字段的警告日期为9,那从第51天起就会一直报警。
在这里插入图片描述

在这里插入图片描述

组信息文件/etc/group

在这里插入图片描述
默认组名和用户名是一样的,每个用户会自动创建一个组。例如:
在这里插入图片描述

在这里插入图片描述

组密码文件/etc/gshadow

在这里插入图片描述
组密码对于小白来说没什么用。管理员忙不过来,将组的管理权限给各个组的一个人,知道密码的可以管理组。但这回降低安全性。

用户管理相关文件

家目录、邮箱、模板

在这里插入图片描述

[root@localhost ~]# ll /home/   
总用量 12
drwx------.  3 shenchao shenchao 4096 66 12:21 shenchao
drwx------. 15 william  william  4096 63 14:49 william
drwx------. 15 yangmi   yangmi   4096 610 09:15 yangmi
[root@localhost ~]# ll -d /root/
dr-xr-x---. 15 root root 4096 718 15:44 /root/

由于root用户是超级用户,权限管理对它是失效的。

在这里插入图片描述

在这里插入图片描述

[root@localhost skel]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

每添加一个用户,会从这里复制默认信息。可以在这里事先写好一些注意事项,当用户创建好后就会看到。

用户管理命令

在这里插入图片描述

添加useradd

在这里插入图片描述
用户添加和 密码设置要一起进行。

[root@localhost ~]# useradd sc
[root@localhost ~]# passwd sc
更改用户 sc 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

在这里插入图片描述

下图中括号表示设置第几个字段的值。
在这里插入图片描述
在这里插入图片描述

passwd

管理员只要 passwd 用户名
普通用户只要 passwd
在这里插入图片描述

下面的是通道,适用于shell编程。
在这里插入图片描述

修改信息usermod、密码状态chage

useradd是针对新用户的,usermod是针对已经存在的用户的。

在这里插入图片描述

在这里插入图片描述
通过passwd锁定用户是在密码前面添加了2个感叹号。
通过usermod锁定用户是在密码前面添加了1个感叹号。
不管在密码前面添加几个字符,都会锁定用户。

在这里插入图片描述
就是通过命令行来修改/etc/shadow的内容,也可以通过vim来直接修改。

有用的特点:
在这里插入图片描述
我们创建用户时,可以设置每个用户的默认密码123456,再设置 -d 0,这样是指用户从未修改过密码。那么用户第一次登录时必须修改密码。

删除 userdel、查看用户ID id、切换 su

在这里插入图片描述
上面的是通过命令行来删除用户,如果是想自己修改文件完成,也是可以的,效果一样。
在这里插入图片描述

在这里插入图片描述

gid是初始组,组里包含初始组合附加组。下图演示将user1添加到root组里面。
在这里插入图片描述

在这里插入图片描述
一定要加 减号,两边空格隔开。
在这里插入图片描述
在这里插入图片描述

用户组管理命令

用户组无非是增删改查,用户组是可以设置密码的,之前讲过,但没必要。

添加组 groupadd、修改groupmod、删除groupdel

不加选项,默认增加id
在这里插入图片描述
不建议修改组的id和组名,建议直接删除重建。
在这里插入图片描述
在这里插入图片描述
含有初始用户的组无法删除。全是附加进来的可以删除。
需要先删除初始的那个用户。

用户归属组修改gpasswd

在这里插入图片描述
是作为附加用户加入的。
在这里插入图片描述
在这里插入图片描述
自己通过vim手动改和使用命令行是一样的。

权限管理

在这里插入图片描述
一个文件:所有人,所属组,其他人,读写执行

ACL权限

简介与开启

一个文件只能有一个所属组
现实的情况很复杂,当来了一个新的用户,权限分配怎么分都不合理。这时就需要ACL了。
ACL的原理:不管用户属于哪个组,单独拎出来,直接给相应的权限。组的权限分配也是一样的。

在这里插入图片描述
文件所在的分区要支持ACL才行。
默认就是支持ACL。
在这里插入图片描述
如果没有开启,需要我们开启

方式一:临时
在这里插入图片描述

方式二:永久生效

在这里插入图片描述
一般含有的default是支持ACL,但是有些default是可以改的。这时候只需要加上,acl.
改这个文件一定要小心,改错重启不了的。

查看getfacl与设定setfacl

在这里插入图片描述
在这里插入图片描述

案例设置:
添加两个用户和一个组,并将用用户加入组中。

[root@localhost ~]# mkdir /project
[root@localhost ~]# useradd bimm
[root@localhost ~]# useradd cangls
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# gpasswd -a bimm tgroup
正在将用户“bimm”加入到“tgroup”组中
[root@localhost ~]# gpasswd -a cangls tgroup
正在将用户“cangls”加入到“tgroup”组中
[root@localhost ~]# cat /etc/group
bimm:x:1004:
cangls:x:1005:
tgroup:x:1006:bimm,cangls
[root@localhost ~]# chown root:tgroup /project/
[root@localhost ~]# chmod 770 /project/
[root@localhost ~]# ll -d /project/
drwxrwx---. 2 root tgroup 4096 722 16:46 /project/

添加用户st,设置acl权限。
有设置了acl权限的文件,drwxrwx---.会变为drwxrwx---+
修改用户的权限是 u:用户名:权限
修改组的权限是 g:组名:权限

[root@localhost ~]# useradd st
[root@localhost ~]# passwd st
更改用户 st 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# setfacl -m u:st:rx  /project/
[root@localhost ~]# ll -d /project/
drwxrwx---+ 2 root tgroup 4096 722 16:46 /project/
[root@localhost ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---

切换到用户st,尝试操作。

[root@localhost ~]# su - st
[st@localhost ~]$ cd /project/
[st@localhost project]$ ls
[st@localhost project]$ touch abc
touch: 无法创建"abc": 权限不够
[st@localhost project]$ exit
登出

添加组tgroup2,设置acl权限。

[root@localhost ~]# groupadd tgroup2
[root@localhost ~]# setfacl -m  g:tgroup2:rwx /project/
[root@localhost ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:rwx
mask::rwx
other::---

最大有效权限mask

在这里插入图片描述

在这里插入图片描述

查看 man getfacl发现,文件拥有者owen和其他人others不受mask影响。
在这里插入图片描述

[root@localhost ~]# setfacl -m m:rx /project/
[root@localhost ~]# getfacl /project/        
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx #拥有人
user:st:r-x
group::rwx # 所属组                     #effective:r-x
group:tgroup2:rwx               #effective:r-x
mask::r-x
other::---

删除ACL权限

删除ACL方式1:删除指定用户和组
在这里插入图片描述

删除ACL方式2:删除整个文件下的ACL

在这里插入图片描述

递归ACL权限

在这里插入图片描述

[root@localhost ~]# setfacl -m u:st:rx -R /project/

linux一般的选项是可以调换的,但这里的-R必须写在后面。
如果不加递归,文件内的文件就没有权限

上面设置的也有缺点,就是如果设置好后创建一个新的文件,那么递归权限又要重新设置一遍,明显不行。这就要设置默认的ACL权限了。

默认ACL权限

在这里插入图片描述
关于默认,之前设置的不会更改,所以如果之前就有文件设置了权限,那么要用之前的递归一遍。

之前的递归针对现有,默认针对未来。

文件特殊权限

在这里插入图片描述

SetUID 针对可执行文件

在这里插入图片描述

在这里插入图片描述

例如:存命令的/etc/shadow文件的权限是000,任何普通用户都改不了。但是任何用户都是可以改密码的,也就是可以间接更改/etc/shadow内容。
所以说,任何用户,执行passwd的时候,都穿了root(超级用户)的外衣。

在这里插入图片描述
在这里插入图片描述
SUID就相当于用户具有超级权限。

在这里插入图片描述
u+s是在原本的基础上添加SUID。
如果文件没有执行x权限,会显示加上S,这是无效的。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
SUID是比较危险的,毕竟权限那么大。
例如,超级用户可以查看shadow里的密码。如果为vim添加SUID,那么任何用户都可以修改了。

SetGID 针对文件和目录

SetUID:用户变为程序拥有者
SetGID:用户所在组变为程序拥有者所在组。

SetGID 针对文件:在这里插入图片描述
用例:文件搜索命令locate
在这里插入图片描述
我的理解:
其他人对mlocate.db的权限是---,没有读权限,但由于/usr/bin/locate的所有组里有‘s’,也是就是有SetUID,其他人所在组暂且变为拥有组,拥有读权限‘r’。
在这里插入图片描述
正式的解释:
在这里插入图片描述
SetGID 针对目录:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
观察上图可以发现,sc在/tmp/test里创建的文件是属于root组。

在这里插入图片描述

Sticky BIT 针对目录

在这里插入图片描述
只允许文件创建者删除文件。
主要是防止其他用户删除我的文件。

文件系统属性chattr权限

chattr

在这里插入图片描述
chattr可以连root一起限制。
i:对于文件只能查看,其他的都没有权限。对于目录,不能增删新文件。
a(append):对于文件可以查看、加入新数据。对于目录,只允许添加文件。
i很严格,不允许更改。a稍微宽松些,只允许加内容。
在这里插入图片描述

i 对文件操作:

[root@localhost ~]#chattr +i abc
[root@localhost ~]# lsattr -a abc
----i--------e-- abc

e代表ext4文件类型无法更改

i对目录操作:

[root@localhost /]# touch /test/abc
[root@localhost /]# chattr +i /test/
[root@localhost /]# lsattr -a  /test/
-------------e-- /test/abc #目录下的abc文件
-------------e-- /test/..  #这是根目录
----i--------e-- /test/.  #这是当前目录

-i的作用是防止误操作,对于文件,无法再更改其内容;对于目录,无法更改它的结构。

a对文件操作:
无法使用vim进行添加,因为无法判断Vim的操作。可以使用echo进行添加。

[root@localhost ~]# chattr +a abc

a对文件操作:

[root@localhost ~]# mkdir /test
[root@localhost ~]# chattr +a /test
[root@localhost ~]# touch /test/abc
[root@localhost ~]# ls /test
abc
[root@localhost ~]# rm -rf /test/abc
rm: 无法删除"/test/abc": 不允许的操作

lsattr 查询chattr权限

在这里插入图片描述

系统命令sudo权限

把原来只有管理员才能执行的命令交由普通用户。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
第一个ALL是指被管理的主机地址,ALL是指主机
在这里插入图片描述
授权时,后面的选项越具体,越安全。
在这里插入图片描述

文件系统管理

回顾系统和分区管理

1.分区类型

在这里插入图片描述
sda中的sd表示硬盘的类型为SATA(hd为硬盘),a表示第一块硬盘
在这里插入图片描述

2.文件系统

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

文件系统常用命令

df、du、fsck、dump2fs

在这里插入图片描述
df是显示分区的占用状态

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        895M     0  895M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M   11M  900M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda5        16G  4.0G   12G  25% /
/dev/sda3       2.0G   37M  2.0G   2% /home
/dev/sda1       197M  157M   40M  80% /boot
tmpfs           182M  4.0K  182M   1% /run/user/42
tmpfs           182M   60K  182M   1% /run/user/0

在这里插入图片描述

ll -h 目录 当目录里出现目录的时候,只会统计目录名和子目录名占用空间的大小。不会统计真实文件数据大小。但du

[root@localhost ~]# du -sh /etc/
42M     /etc/

在这里插入图片描述
df 看到的是真正的所剩空间,因为被命令和程序占用的空间。
在这里插入图片描述
每次系统启动的时候都会自动执行。有时自己修复,没问题的也会出问题,知道有这个命令就好,别用。

在这里插入图片描述

Filesystem volume name:   <none> # 卷标
Last mounted on:          /boot #挂载点
Filesystem UUID:          56b4e7c6-975e-4fa1-8c87-6f9c03a48d78 #分区唯一识别符
Default mount options:    user_xattr acl #默认挂载选项
Inode count:              51200 #分区默认node节点数
Block count:              204800 #分区默认数据块数
Block size:               1024 #数据块大小(1kb)
Inode size:               128 #node的大小

挂载命令

硬盘挂载是系统自动的,但光盘,u盘,软盘都需要自己挂载
在这里插入图片描述
centos7的输出比较多。

在这里插入图片描述
-o 特殊选项有以下参数:
在这里插入图片描述

[root@localhost ~]# mount -o remount, noexec /home

挂载的分区无法执行程序。

挂载光盘和U盘

在这里插入图片描述
上图中/dev/cdrom是/dev/sr0的软链接。
linux访问数据是通过盘符的,/mnt/cdrom是盘符,通过它访问数据

只要是个空目录都可以作为挂载点
但系统建议使用根下的media挂光盘,根下的mnt挂U盘。(完全没关系)
虚拟机中放入光盘后,才可以挂载光盘
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
需要鼠标在虚拟机内部,插入U盘才是在虚拟机
U盘的文件名不是固定的,可以通过fdisk查看
linux中将fat16识别为fat,fat32识别为vfat.
中文乱码需要调整编码集再重新挂载。

支持NTFS文件系统

Linux在安装时,会自动安装驱动。插入硬件会自动选择适合的驱动。但有两种情况需要我们自己手动加载,第一种:默认情况下,内核不会加载NTFS的驱动,需要手动。第二种:linux版本过早,没有新出现的硬件的驱动。

解决上述问题有两种方法:
一种修改内核。(没必要)
第二种:
在这里插入图片描述
windows上面下载,传输到linux上。

在这里插入图片描述
插入硬盘,fdisk -l 查看
在这里插入图片描述
sdb表示是第二块硬盘。
sdb1是第一个主分区,sdb2是扩展分区,sdb5是扩展分区下的逻辑分区。

mount -t ntfs-3g /dev/sdb1 /mnt/usb/
umount /mnt/usb/

ntfs不怎么稳定,不建议写入数据

fdisk分区

分区过程

想要分区,得有未被分配的空间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还没有分区,只有sdb,没有后面的数字

在这里插入图片描述
在这里插入图片描述

按错了,使用退格键删除不了,要按住ctr和退格键

在这里插入图片描述

[root@localhost ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.

这里的报错是正常的。别管他
在这里插入图片描述
扩展分区是无法给格式化的,里面的逻辑分区可以格式化。

mkfs -t ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb5

在这里插入图片描述

[root@localhost ~]# mkdir /disk1
[root@localhost ~]# mount /dev/sdb1 /disk1/
[root@localhost ~]# mkdir /disk5
[root@localhost ~]# mount /dev/sdb5 /disk5/

查看是否挂载上:
方式1:

[root@localhost ~]# mount
/dev/sdb1 on /disk1 type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sdb5 on /disk5 type ext4 (rw,relatime,seclabel,data=ordered)

方式2:

[root@localhost ~]# df
/dev/sdb1         999320    2564    927944   1% /disk1
/dev/sdb5        1998672    6144   1871288   1% /disk5

fdisk命令可以查看分区是否被分配,无法查看是否被挂载。所以使用mount或df查看过载情况。

分区自动挂载

在这里插入图片描述vim /etc/fstab

UUID=0ed8d0f1-2b93-4509-acd2-86239503c26c /disk1                  ext4    defaults        1 2
UUID=99ca6795-b8ed-4845-91b9-d54b5fd30dac /disk5                  ext4    defaults        1 2

第一字段不建议使用分区设备文件名,因为文件名会变,但UUID不会,更可靠。
UUID查看:

[root@localhost ~]# dumpe2fs -h /dev/sdb1
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          0ed8d0f1-2b93-4509-acd2-86239503c26c

只有分区才有lost&found
lost&found是每个分区的备份点

/etc/fstab文件很容易写错,可通过下面修复

/etc/fstab文件修复

重启失败后,还是有命令行的,可以输入管理员密码。
vim /etc/fstab。把错误信息改回来就行,但是你会发现,这个文件是只读文件,无法更改。这是因为/分区在报错的挂载时候,没有给写权限,重新挂载,给读写权限即可,如下所示:
在这里插入图片描述

mount -o remount,rw /
再重启。

Shell 编程

shell概述

在这里插入图片描述

在这里插入图片描述

将我们输入的abcd,翻译成内核可以识别的0101

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
进入到sh和csh,使用exit命令退出。

在这里插入图片描述
我们平时使用的都是bash

shell脚本执行方式

在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# echo 'hello world!'
hello world!
[root@localhost ~]# echo -e "a\tb\tc\nd\tc\tf"
a       b       c
d       c       f

支持颜色输出:
在这里插入图片描述

[root@localhost ~]# echo -e "\e[1;31m abcd \e[0m"  
# 输出红色的abcd

\e[1;表示开始颜色输出
31m表示红色
abcd表示输出的内容
\e[0m表示输出红色结束
在这里插入图片描述
Linux中#代表注释,但是#!/bin/Bash,不是注释,代表宣称以下脚本是shell脚本。

在这里插入图片描述
上面两种运行办法,第一种最好。
使用cat -A 文件名 可以查看隐藏的字符.
linux的回车键是$,

windows的回车键是M$,
在windows中写的shell脚本搬到linux中运行就会报错,格式不匹配。

解决办法1:
使用dos2unix将windows文件转为linux

递归的方式

dos2unix **/*
dos2unix hello.sh

一开始dos2unix需要安装,本地的镜像没有,需要使用网络yum源

解决办法1:
在win里面使用

Bash基本功能

历史命令与命令补全

在这里插入图片描述

通过history命令可以查看历史使用的命令
但当前使用的命令不会被保存到文件中,只有用户退出登陆后才会自动保存,也可以使用-w
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

命令别名与常用快捷键

在这里插入图片描述
在这里插入图片描述
我们执行的ls等命令,都是第4位,从$PATH环境变量定义的目录中查找。

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  1. linux中所有可执行文件和命令的执行本来都是需要用绝对路径。
  2. 之所以命令可以不用绝对路径,是因为命令有$PATH的简化操作。
  3. bash的内部的命令是自带的,没有可执行文件。使用whereis 命令 是无法查看来源的。

在这里插入图片描述

vim /用户名/.bashrc

在这里插入图片描述
在这里插入图片描述

输入输出重定向>>

在这里插入图片描述
每一个设备对应文件名,文件名不好记,就用文件描述符数字代替。
在这里插入图片描述
命令结果本来输出到屏幕,我想输出到文件中,这就是重定向。
有输出的命令才可以重定向。
上面的命令有点废,既然我知道对错,干嘛还打错。
在这里插入图片描述

可以把无意义的输出重定向到垃圾箱。

命令 &>/dev/null

在这里插入图片描述
输入重定向几乎没啥用处

[root@localhost ~]# wc -l < abc 
3 #abc有三行数据

多命令顺序执行与管道符

在这里插入图片描述
在这里插入图片描述

分号例子:

[root@localhost ~]# ls;cd /user;date
abc  anaconda-ks.cfg  Desktop  Documents  Downloads  initial-setup-ks.cfg  Music  Pictures  Public  sh  Templates  Videos
-bash: cd: /user: No such file or directory
Sat Sep 19 19:09:31 CST 2020

cp 只能拷贝文件或目录,
dd 可以复制所有不管是否的隐藏文件目录以及磁盘。主要用来磁盘复制。
在这里插入图片描述

[root@localhost ~]# date;dd if=/dev/zero of=/root/testfile bs=1k count=100000; date 
Sat Sep 19 19:19:44 CST 2020
100000+0 records in
100000+0 records out
102400000 bytes (102 MB) copied, 2.0344 s, 50.3 MB/s
Sat Sep 19 19:19:46 CST 2020

逻辑与例子:
软件源码包安装:

./configure && make && make install

逻辑或例子:

[root@localhost ~]# ls || echo yes
abc  anaconda-ks.cfg  

在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# netstat -an | grep ESTABLISHED  
tcp        0     96 192.168.1.100:22        192.168.1.10:53710      ESTABLISHED

通配符和特殊符号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ros@zwd:~$ name=July
ros@zwd:~$ echo '$name'
$name
ros@zwd:~$ echo "$name"
July
获取变量 $a=${a}
ros@zwd:~$ echo  $TURTLEBOT_BASE
kobuki

ros@zwd:~$ echo  ${TURTLEBOT_BASE}
kobuki

命令执行 反引号cmd 反引号=$(cmd)
ros@zwd:~$ echo `env | grep TURTLEBOT_BASE`
TURTLEBOT_BASE=kobuki
ros@zwd:~$ echo $(env | grep TURTLEBOT_BASE)
TURTLEBOT_BASE=kobuki

Bash的变量

用户自定义变量

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

位置参数变量就是预定义变量。

在这里插入图片描述
本地变量就是用户自定义变量。
变量名前加$符号,赋值时,等号左右不准有空格。
上面两种变量叠加是一样的。

在这里插入图片描述
set命令查询所有变量

环境变量

系统有自带的环境变量,用户也可以自定义环境变量
在这里插入图片描述
什么是子shell?
在原有的Shell中,输入bash,进入子shell.
查看当前shell位置: pstree
在这里插入图片描述

在这里插入图片描述

[root@localhost ~]# export age=18
[root@localhost ~]# sex=male
[root@localhost ~]# export sex
[root@localhost ~]# set |grep  age=   
age=18
[root@localhost ~]# set |grep  sex=
sex=male

在这里插入图片描述
可以把之前的hello.sh路径添加拷贝到PATH中,那么就可以直接执行hello.sh。
方式一:

cp hello.sh /bin/

缺点。把我们自己写的sh放入到系统命令中,傻子才这么干。
方式二:
将/root/sh拼接到PATH中

PATH="$PATH":/root/sh

缺点,只是临时改变,重启失效,永久改变之后会讲。
在这里插入图片描述
什么是系统提示符?
输入命令之前的显示就是系统提示符。
在这里插入图片描述
重启失效

位置参数变量

在这里插入图片描述
$n :

[root@localhost sh]# vim chanshu1.sh
[root@localhost sh]# chmod 755 chanshu1.sh 
[root@localhost sh]# cat chanshu1.sh 
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
[root@localhost sh]# ./chanshu1.sh 11 22 33
./chanshu1.sh
11
22
33

$* $@ :

[root@localhost sh]# ./canshu4.sh  1 2 3  4 5 6
1 2 3 4 5 6
1
2
3
4
5
6
[root@localhost sh]# cat canshu4.sh 
#!/bin/bash
for i in "$*"
        do
                echo $i
        done
for y in "$@"
        do
                echo $y
        done
[root@localhost sh]# 

预定义变量$?、$$、$!、read

在这里插入图片描述

$?的例子

[root@localhost sh]# ls
canshu4.sh  chanshu1.sh  hello.sh
[root@localhost sh]# echo $?
0  # ls 命令执行正确,返回0
[root@localhost sh]# lsd
bash: lsd: command not found...
[root@localhost sh]# echo $?
127 # lsd 命令执行找不到,返回127
[root@localhost sh]# ls dd
ls: cannot access dd: No such file or directory
[root@localhost sh]# echo $?
2 # dd 文件找不到,返回2

在这里插入图片描述

 [root@localhost sh]# cat read.sh 
#!/bin/bash
read -t 30 -p "Please input your name:" name
echo "Name is $name"
read -s -t 30 -p "Please enter your age:" age
echo -e "\n"
echo "Age is $age"
read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
echo -e "\n"
echo "Sex is $gender"

Bash的运算符

数值运算与运算符declare、expr、let、$(())

[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# cc=$aa+$bb
[root@localhost ~]# echo $cc
11+22

在这里插入图片描述

[root@localhost ~]# declare -p aa
declare -- aa="11"

[root@localhost ~]# export aa
[root@localhost ~]# declare -p aa
declare -x aa="11"

export aadeclare -x aa都可以将变量申明为环境变量。

在这里插入图片描述

[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# declare -i cc=$aa+$bb  
[root@localhost ~]# echo $cc
33

在这里插入图片描述

[root@localhost ~]# dd=$(expr $aa + $bb)  
[root@localhost ~]# echo $dd
33

推荐第三种方法
在这里插入图片描述
优先级数字越大,越先计算。

在这里插入图片描述

在这里插入图片描述

变量测试与内容替换

通过x判断y是否存在。
我们也可以使用if else来实现下面的逻辑,只不过系统提供的更简洁。
不需要死记,用到查下就行。

在这里插入图片描述

环境变量配置文件

简介 source

永久生效

在这里插入图片描述

配置文件修改后,一般需要重新登录才有效,但是使用source可以强制使其有效。

. 配置文件中的.就是source的缩写,.配置文件之间有空格

在这里插入图片描述

$PATH:命令的 查找目录
$HISTSIZE:历史命令保存最大数目
$PS1:提示符
$HOSTNAME: 主机名

作用

系统中主要配置文件:
在这里插入图片描述

*是通配符,表示所有的.sh文件
保存在etc中的是对所有用户都生效。
其他两个是只对当前用户生效。而且是.开头的文件,表示是隐藏文件.
在这里插入图片描述

bash有两种登录方式
一种是输入用户名和密码,另一种是打开子bash的方式。这两种读取的配置文件是不一样的。

先来讨论第一种情况:
一旦用户登录后,会首先读取/etc/profile
在这里插入图片描述

其他配置文件和登录信息

在这里插入图片描述
我退出时想要注销一些环境变量,那就把想过要注销的变量写在上面的文件中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只显示纯文本信息
在这里插入图片描述

正则表达式

基础正则表达式

在这里插入图片描述

  1. 通配符之前也讲过,是用来匹配文件名的。
  2. 正则是用来匹配文件内容的。

完全匹配是指一模一样才匹配
包含匹配是指只要包含,大字符串包含查找的字符串就算匹配。

在这里插入图片描述

匹配0次或多次
在这里插入图片描述

匹配1次
在这里插入图片描述
行首和行尾
在这里插入图片描述

[root@localhost ~] grep "^u" anaconda-ks.cfg

匹配括号内指定的
在这里插入图片描述
匹配括号内以外指定的
在这里插入图片描述

转义符
在这里插入图片描述
原本是正则表达式,加上转义符后变回来。

出现n次
在这里插入图片描述
出现不少于n次
在这里插入图片描述
前面的那个出现n次的,这里的包含了前面的。

出现不少于n次,最多m次
在这里插入图片描述

扩展表达式

没有,碰到再查。

字符截取

其实之前的grep也是字符串截取。
grep是行截取,cut和awk是列截取。
sed是流编辑器。
printf命令不是字符截取命令,只是因为awk命令中用到

cut命令

在这里插入图片描述
-d是指定制表符,默认是tab
在这里插入图片描述
例如:提取用户名和用户id

 [root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4

例:找到普通用户的用户名和uid

[root@localhost ~]# cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1,3 
william:1000
  1. 一般cut都会和grep 一起使用,像上面一样。
  2. 上面用的那么爽是用为用的是tab作为制表符,如果是文件里是空格作为制表符,那cut就失效了。可以使用awk

printf命令

awk 里面有个print,是自动加上了换行符。但是无法再shell中使用。
在这里插入图片描述
单引号和双引号都可以
在这里插入图片描述

123456[root@localhost ~]# printf '%s %s %s\n' 1 2 3 4 5 6
1 2 3
4 5 6

如果想要输出文件中的内容(格式丧失):

[root@localhost ~]# printf '%s' $(cat anaconda-ks.cfg)
#version=DEVEL#Systemauthorizationinformationauth--enab

awk命令

曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho、Weingberger 和 Kernighan,awk 就取自这 3 为大师姓的首字母。
在这里插入图片描述
awk是列读取命令

例:无条件执行
在这里插入图片描述

例:输出系统存储情况报告的第2行和第6行

[root@localhost ~]# df -h | awk '{print $2 "\t" $6 "\t"}'  
Size    Mounted
895M    /dev
910M    /dev/shm
910M    /run
910M    /sys/fs/cgroup
16G     /
976M    /disk1
2.0G    /disk5
2.0G    /home
197M    /boot
182M    /run/user/42
182M    /run/user/0

例:查看主盘有多少空间利用率

[root@localhost ~]# df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1
27

BEGIN
BEGIN 表示在执行之前先执行BEGIN后的内容

在这里插入图片描述

FS内置变量

在这里插入图片描述
上面通过-d设置了分隔符,这里使用awk的FS 来设置分隔符

[root@localhost ~]# awk 'BEGIN {FS=":"}{print $1 "\t" $3}' /etc/passwd
root    0
bin     1

END
END 表示在所有执行之后再执行END的内容
在这里插入图片描述

关系运算符

在这里插入图片描述

因为awk比较难懂,建议使用shell来辅助。

sed命令

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查看第2行

[root@localhost ~]# sed -n '2p' /etc/passwd     
bin:x:1:1:bin:/bin:/sbin/nologin

接收管道输入

[root@localhost ~]# df -h | sed -n '2p'
devtmpfs        895M     0  895M   0% /dev

判断输入num是否是数字,是数组返回空字符串

y=$(echo $num | sed 's/^[0-9]*$//g')
if[ -z "$y" ]

删除
在这里插入图片描述

追加和插入
在这里插入图片描述

字符串替换
在这里插入图片描述

字符处理命令sort、wc

在这里插入图片描述
在这里插入图片描述
什么选项都不加,默认是按照每行第一个字母排序。

在这里插入图片描述
上面的命令中,如果没有-n,会当成字符串来执行。

在这里插入图片描述

条件判断

文件是否存在 test、[ ]

在这里插入图片描述

在这里插入图片描述
在脚本中,最常用的是使用中括号。
注意中括号语音内容中间是有空格的。

例:判断当前文件夹下是否存在anaconda-ks.cfg

[root@localhost ~]# [ -f anaconda-ks.cfg ] && echo "yes" || echo "no"
yes

文件权限判断

在这里插入图片描述
它不会判断具体是所有人还是所属组还是其他人有读还是写还是执行,只要有一个角色满足就行。如果要实现具体角色有哪些权限,需要自己写脚本。

文件比较

在这里插入图片描述
在这里插入图片描述

整数判断-eq…

在这里插入图片描述

[root@localhost ~]# [ 23 -gt 22 ] && echo "yes" || echo "no"
yes

字符串判断-z、-n、==、!=

在这里插入图片描述
注意字符串判断是否是相等的时候,使用单个等于号也是可以的,但是不推荐,容易混淆。
例:判断字串是否相等

[root@localhost ~]# [ "$aa" == "$bb" ] && echo "yes" || echo "no"
yes

例:判断name变量是否为空

[root@localhost ~]# [ -z "$name" ] && echo "yes" || echo "no"
no

用处场景,当需要用户输入的时候,判断用户是否真的有数据输入

多重条件判断 -a、-o、!

在这里插入图片描述
在这里插入图片描述

流程控制语句

if

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ps aux、netstat -tlun、nmap -sT、

以判断httpd服务是否正常运行为例:

  1. ps aux 命令可以查看所有开启的服务PID和各种信息。但是如果httpd服务死机了,它是无法表达死机的。
  2. netstat -tlun命令可以查看所有端口占用。但只能确定httpd占用端口,而且端口一改就不行了。
  3. 使用nmap命令,它是来扫描的,如果正确连接上了,说明服务没问题。首先安装nmap:yum -y install nmap。接着扫描有哪些打开的端口:nmap -sT 192.168.1.100。显示如下:
Nmap scan report for 192.168.1.100
Host is up (0.0014s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
111/tcp open  rpcbind

获取含有tcp的三行,再获取包含http的那行,再截取第二列。

[root@localhost sh]# nmap -sT 192.168.1.100 | grep "tcp" | grep "http" | awk '{print $2}'
open

详细例子代码:

#!/bin/bash
port=$(nmap -sT 192.168.1.100 | grep "tcp" | grep "http" | awk '{print $2}')
echo "$port"
if [ "$port" == "open" ]
        then
                echo "$(date) httpd is ok." >> /tmp/httpd_ecc.log
        else 
                service httpd  restart &> /dev/null
                echo "$(date) httpd reboot!" >> /tmp/httpd_ecc.log
fi

在这里插入图片描述

case语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

for 循环

在这里插入图片描述

简单例子:

[root@localhost sh]# cat for1.sh 
#!/bin/bash

for i in "1" "2" "3" "4" "5"
        do
                echo $i
        done
[root@localhost sh]# ./for1.sh   
1
2
3
4
5     

有用实例:

[root@localhost sh]# cat for2.sh 
#!/bin/bash
cd /root/sh/
ls *.sh > ls.log

y=1
for i in $(cat ls.log)
        do 
                echo $y
                y=$(($y+1))
        done
[root@localhost sh]# ./for2.sh 
1
2
3
4
5
6
7
8   

在这里插入图片描述
在这里插入图片描述

while、until循环

在这里插入图片描述

在这里插入图片描述

while例子:

[root@localhost sh]# cat ./while1.sh 
#!/bin/bash

i=1
s=0
while [ $i -le 100 ]
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo "The sum is :$s"

在这里插入图片描述

[root@localhost sh]# cat ./until.sh 
#!/bin/bash

i=1
s=0

until [ $i -gt 100  ]
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo "The sum is :$s"

Linux服务管理

服务简介和分类

在这里插入图片描述

  1. linux本身就是通过rpm包安装的。如果服务通过源码包安装,相当于第三方。
  2. linux绝大多数服务是独立的服务,用户访问服务,服务响应用户,例如httpd服务,好处是相应时间快,缺点是服务太多,耗费内存资源。
  3. 基于xinetd服务是指xinetd服务本身是一个独立的服务在内存中,本身没有功能。唯一的功能是管理一串服务。
    例如用户访问rsync服务过程: 用户->xinetd服务 ->rsync服务->xinetd服务->用户。优缺点和独立服务刚好相反。

在这里插入图片描述

在这里插入图片描述
注意,现在使用systemctl代替chkconfig。具体使用自己查。
查看服务是否开启:
方式1:(通过查看pid肯定可行)

ps aux | grep httpd

方式2:(通过查看端口,不一定肯定可行,有些服务不开端口)

 lsof -i

在这里插入图片描述
约定俗成,rpm会自动把配置文件放在**/etc/**中,会把启动脚本放在/etc/rc.d/init.d/中(哈哈,以前的确是这样,但现在改了,和上面的RPM一样,用systemctl),其他文件会放在开发人员认为合理的地方。

也就是说,源码包会把软件安装在用户指定的位置,删掉的时候删一个文件夹即可。相反,由于RPM自动安装在默认位置,导致到处都是,所以需要使用-e

RPM包安装服务管理

独立服务的管理

在这里插入图片描述
上面的目录是通用的,还会有一些服务是有自己独特的目录。例如httpd会有/var/www/html来放置网页

在这里插入图片描述
现在使用systemctl 代替

在这里插入图片描述
上图方式一:无需多言,使用systemctl代替
上图方式二(推荐):这个有趣,用户输入用户名和密码之前,系统会读取上面这个文件,里面有个touch命令,很有意思,是更新那个文件的修改时间来记录系统启动时间。你可以在上面的文件中输入重启时自动执行的命令。

上图方式三:打*号的是自启动。(红帽专有)
在这里插入图片描述
按tab进行红色按钮切换。

基于xinetd服务管理

xinetd:超级守护进程

这个现在基于xinetd服务管理已经越来越少了,了解下就可以。

源码包安装服务的管理

在这里插入图片描述
那么怎么知道源码包中启动脚本的绝对路径?死记吗?NO,在安装说明中有详细的说明。vim INSTALL

在这里插入图片描述
在这里插入图片描述
不建议用
在这里插入图片描述

86:开启顺序
76:关闭顺序
这个只要不和linux中已有的重合就行。如何查看已有的?
/etc/rc.d 中的rc*.d,(*代替的数字表示级别)
上面是35,所以是rc3.d
S开头代表开始,K开头代表结束。

还是不建议使用

进程管理

在这里插入图片描述
例如命令ls,运行一遍就是进程,只不过该开始和结束都很快,你很难观察到。

进程查看ps、top、pstree

在这里插入图片描述

注意 ps aux是UNIX命令。也是可以使用的,而且更常用

在这里插入图片描述
在这里插入图片描述

TTY表示登录终端。为问好?表示不知道是谁调用,表示是系统内核产生的
pts:虚拟终端,就是远程登录。上图应该是0-255,最多支持256个远程终端登录

[root@localhost rc3.d]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 194056  7216 ?        Ss   17:26   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

在这里插入图片描述

[root@localhost rc3.d]# top
top - 21:34:07 up  4:07,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 201 total,   1 running, 200 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863104 total,   816596 free,   500156 used,   546352 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1185312 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                      
     9 root      20   0       0      0      0 S   0.3  0.0   0:08.61 rcu_sched                                                                                    
   752 root      20   0  324492   6768   5272 S   0.3  0.4   0:32.44 vmtoolsd                                                                                     
     1 root      20   0  194056   7216   4224 S   0.0  0.4   0:07.12 systemd  

在这里插入图片描述
主要看最后一项,刺痛负载

在这里插入图片描述
僵尸进程不一定就是问题,有时进程正在关闭的过程中,会显示为僵尸,再等等它。

在这里插入图片描述
主要是观察空闲CPU的CPU占用比
在这里插入图片描述
主要看空闲的物理内存数量
在这里插入图片描述

在这里插入图片描述

终止进程kill、killall、pkill、

在这里插入图片描述
常用进程信号:
在这里插入图片描述
15是默认信号,15干不过,那就执行9
在这里插入图片描述
22354是PID
在这里插入图片描述
信号和之前的一样。

killall -9 httpd

在这里插入图片描述
pkill和killall差不多,但多了-t.
在这里插入图片描述

工作管理&、 jobs、fg

在这里插入图片描述

把进程放进后台等价于windows中的最小化。

方式一: 在完整命令后加& (命令还在运行) --后台运行
方式二:命令执行后 按下ctr+z(命令运行暂停)-- 后台暂停

在这里插入图片描述

[root@localhost ~]# jobs -l
[1]+  2368 Stopped (signal)        top

当然也是可以通过ps查看的,只不过没有jobs看起来清晰

在这里插入图片描述
在这里插入图片描述
是把后台暂停变为后台运行。
打包,查找这些事可以后台运行,但是vi,top这些是无法后台运行的。

系统资源查看

vmstat查看系统资源

在这里插入图片描述
和top差不多,就是更简单些

[root@localhost ~]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1067456   2236 341124    0    0    62     2   43   43  0  1 98  1  0
 0  0      0 1067456   2236 341124    0    0     0     0   39   52  0  0 100  0  0
 0  0      0 1067456   2236 341124    0    0     0     0   37   54  0  0 100  0  0

dmesg开机自检(硬件信息)

在这里插入图片描述
有些面试会问如何查找硬件信息,这是就用dmesg

free内存使用状态

在这里插入图片描述
啊,注意是内存啊.

在这里插入图片描述

CPU信息

在这里插入图片描述

之前的dmesg | grep CPU也可以查看内存信息。

cat /proc/cpuinfo也可以查看内存信息
主要就是型号和缓存大小

model name      : Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
cache size      : 6144 KB

uptime 平均负载

在这里插入图片描述

内核版本linux?x86?

在这里插入图片描述

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

64位还是32位?

查看外部命令。
命令分为外部命令和内部命令(shell命令)可以通过type 命令名 查看

[root@localhost ~]# type cd  
cd is a shell builtin #内部命令
[root@localhost ~]# type mkdir
mkdir is /usr/bin/mkdir #外部命令

外部命令通常放在/bin,/usr/bin,/sbin,/usr/sbin…等等,可通过“echo $PATH”命令查看外部命令的存储路径

在这里插入图片描述

[root@localhost ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable,

Linux发行版本

[root@localhost ~]# cat /etc/system-release
CentOS Linux release 7.7.1908 (Core)

进程正在使用的文件

在这里插入图片描述

[root@localhost ~]# lsof -p 2314
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    2314 root  cwd    DIR    8,5      4096 25165889 /root
bash    2314 root  rtd    DIR    8,5       250       64 /

系统的定时任务

在这里插入图片描述
systemctl
一般不需要手动,会默认自顶启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

例子:
在这里插入图片描述

在这里插入图片描述

[root@localhost ~]# crontab -l
* * * * * echo 11 >> /tmp/test

注意在 crontab中运行.sh 时,是要加转义字符的。
在这里插入图片描述
还有,如果系统觉得当前繁忙,会适当延迟执行定时任务。
上面的其实是用户的定时任务,linux自己还有好多定时任务,例如日志更新轮替等等

日志管理

在这里插入图片描述

在这里插入图片描述
其实只需要知道它更先进就行

日志启动

在这里插入图片描述

[root@localhost ~]# systemctl list-units --type=service | grep rsys
rsyslog.service                                                                           loaded active running System Logging Service

常见日志

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

rsyslogd日志服务

日志格式

在这里插入图片描述

cat /var/log/message

在这里插入图片描述

日志的配置文件

/var/log 下的日志文件都是由/etc/rsyslog.conf配置文件进行配置的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
*表示任何日志名
在这里插入图片描述
在这里插入图片描述
none日志等级是指不计入。
在这里插入图片描述
*号代表任何人
在这里插入图片描述

日志轮替

一个是切割日志,日志按天分割,一个是新的替换旧的

日志命名规则

在这里插入图片描述

在这里插入图片描述
现在一般都会加dateext

logrotate配置文件

/etc/logrotate.conf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加日志轮替

注意:RPM包安装的服务自动会在轮替中,但源码包不会。因为logrotate会自动搜索/var/log目录,源码安装的日志在自定义安装目录,不会被识别。时间一久,空间就满了

在这里插入图片描述
把上面的代码加上,上面的是正确的日志,还有错误的日志也要加。

logrotate命令(强制轮替)

在这里插入图片描述

启动管理

CentOS 6.3启动管理

系统运行级别runlevel、init

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
现在完全淘汰了。但如果像知道怎么做,这个文件里的注释就相当于文档。

设置默认启动运行级别

systemctl set-default TARGET.target

系统启动过程

在这里插入图片描述

  1. 因为电脑可能有多个系统,所以引导程序会有引导分支。

  2. dmesg命令可以查看linux内核自检信息

  3. 自检后,需要使用内核去加载驱动。大部分的驱动都是linux内核自带的,检查硬件后,加载相应的驱动就行。为了解决驱动过多,内核过大,他会把常用的放在内核中,不常见的作为函数模块(程序)保存在硬盘中(/lib/中)

  4. 内核先加载inittramfs(/boot/),再加载常见内核。再建立仿真目录,加载真正的仿真分区.

  5. boot分区是引导程序加载进来的,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
K是关机时的执行顺序,S是开机时的执行顺序。

启动引导程序 grub

在这里插入图片描述

版本有所变动
现在的grub配置文件在/boot/grub2/grub.cfg中,软链接如下:

[root@localhost etc]# ll grub2.cfg 
lrwxrwxrwx. 1 root root 22 Sep 16 19:33 grub2.cfg -> ../boot/grub2/grub.cfg

但这个文件不能修改,具体修改可以去/etc/default/grub

在这里插入图片描述
时代变了。
查看拥有的内核

cat /boot/grub2/grub.cfg |grep menuentry 

在这里插入图片描述

修改内核

grub2-set-default "CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)" 

查看当前使用内核

[root@localhost grub.d]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)

备份和恢复

备份概述

在这里插入图片描述
可能日志目录也需要备份,看情况

备份就是拷贝数据到另外一个地方,当前数据丢失后,能够恢复
在这里插入图片描述
备份策略1:完全备份
在这里插入图片描述

缺点:耗时,耗空间

备份策略2:增量备份
在这里插入图片描述
优点:省空间。缺点:需要依次还原备份,比较麻烦

备份策略3:差异备份

在这里插入图片描述
只备份完全数据中不存在的数据,时间长了后和增量备份差异不大

备份命令dump

我说:为什么要用这些命令啊,cp不好吗?
神说:小屁孩,你懂啥,叫你用你就用。
dump需要手动安装
在这里插入图片描述

查询是否安装了dump,下面是没有安装。
在这里插入图片描述

0表示完全备份,是在第一次次备份使用
1表示增量备份,在第一次备份之后使用
只有在备份分区的时候,才可以使用增量备份

备份分区

这里演示采用/root/boot.bak.bz2,一般绝对不会备份到root中。
在这里插入图片描述

备份目录

在这里插入图片描述
备份文件只能用 -0

恢复备份命令restore

在这里插入图片描述
这4个模式只能选一种。

模式选项-C
文件选项只需要写备份的文件名就行,因为是有记录备份和源文件的关系的。
在这里插入图片描述

模式选项-t
查看备份文件中有哪些数据
在这里插入图片描述

模式选项-r
恢复

还原分区

在这里插入图片描述

可能有很多个增量数据。
恢复备份需要进入到新建的文件夹内部。

还原目录

在这里插入图片描述

Logo

更多推荐