Linux基本命令(纯干货)

RHCSA命令知识点

一.访问命令行

1.poweroff #关机

2.reboot #重启

3.cat #查看文件的内容 例:cat /etc/os-release

4.ls #显示出文件夹中的文件
补充: ls -l #查看具体信息(以长格式输出) -A显示隐藏文件
ll -a #以长格式查看文件夹中的所有信息
ls -lh # -h 表示显示文件的大小

5.head #查看文件中的头部信息(默认十行)
例如 : head -5 +文件名 #显示文件头部5行
head -n 5 +文件名

6.tail #查看文件的尾部信息(默认十行)
例如: tail -5 +文件名 显示文件尾部5行
tail -f +文件名(-f 表示查看动态信息)
tail -n 5 +文件名

7.history #查看使用过命令

8.who #查看当前用户的名字

9.whoami #查看当前用户的名字以及虚拟终端

10.date #查看当前系统的时间

11.wc #统计文本的字数,行数等信息(-l 行数,-w单词数,-c字符数)

12.file #查看文件的类型

13.passwd #修改当前用户的密码 echo “ 密码 ” | passwd --stdin 用户名

14.pwd #查看当前目录的绝对路径(.pwd显示的是当前的工作目录,…表示目录的上一级目录,–表示的是家目录)
Linux中在文件名中加一个" . "号则可以将文件设置成隐藏文件。

15.touch #创建一个文件

16.rm #删除文件,需要输入y/n,如果直接敲回车,那么文件还在(硬件有价,数据无价)
补充:rm -f #删除文件(直接删除,不询问)对于接下来所出现的询问,使用y进行跳过
rm -d #删除目录,加上-f,删除一个目录,不需要询问,但是不可以删除非空目录
rm -r #递归删除,需要一个一个递归询问删除,如果再加上-f ,则一次性全部删除。

17.mkdir #创建文件夹
补充:mkdir -p dir1/dir2/dir3/dir4/dir5 -p参数的作用是创建目录时自动创建缺失的父目录,
因为若直接进行mkdir dir1/dir2/dir3的话,会因缺少父目录报错
主要想创建的是 dir5 这个目录。
tree dir1 可以更加直观的查看文件夹的结构。

18.cd #切换当前目录

19.cp 源路径(源文件) 目的地(复制成的文件) #复制文件,只针对文件
cp -r 源文件 复制后的文件 #将源目录整体复制到目标目录
cp -a(-a=-pr -p表示不改变属性,-r 表示复制目录)

20.mv 源路径 目的地 #移动或者重命名文件
补充: mv 旧的名 新的名字 (改名)
mv 文件名 / (移动)
***补充:cp命令默认不保存原始文件的状态信息(权限,用户),mv命令则保留了文件中的原始信息。

21.硬链接和软连接:快捷方式

区别:
硬链接在源文件删除之后链接文件依旧存在,但是软链接在源文件删除之后就会失效
硬链接不可以跨文件系统使用,软链接则可以
硬链接只能作用于常规的普通文件

21.修改主机名:hostnamectl set-hostname

22.查看主机名:hostname

二.从命令行管理文件

shell变量:
例:filename=myfile #创建变量filename,并且值为myfile
echo filename
filename #echo命令会原样输出命令后的参数信息
echo KaTeX parse error: Expected 'EOF', got '#' at position 30: …ile #̲()格式是来获取变量的值
例:echo this date :echo$(date)
this date : Sat May 14 04:22:22 CST 2022

man #查看帮助手册
例: man echo
补充: man 1 passwd #查看passwd的一号命令文档
man 5 passwd #查看passwd的5号配置文件文档,可以看到配置文件位置
–help #使用帮助手册,比man简单一点。
修改shell变量(shell 中的环境变量都是通过全大写字母表示的)

1.暂时改变 shell 变量:
echo $ {PATH} #输出环境变量
临时修改环境变量:PATH=$ {PATH} :/root #赋予环境变量新的value
export PATH #将全局变量在当前终端中全局生效

2.修改系统默认的编辑器类型:
export EDITOR=vim #将终端上的默认编辑器设置成 vim

3.永久的修改shell环境:
首先我们需要知道四个文件:/etc/profile , /etc/bashrc---->针对的是所有的用户
-/.bash_profile , -/.bashrc---->针对的是单独用户

三.创建,查看以及编辑文本件

1.重定向(命令和文件之间的关系)
1.输出流:1表示标准输出,2表示错误输出

例如:ls -l 2 > error >result #执行 ls -l命令,将命令的标准输出重定向到 result 文件中,错误的提示信息重定向输出重定向到 error 文件中(新建文件夹存放内容)
补充:Linux系统中有两个特殊的设备文件
/dev/zero:只会输出数字 0,用于数据填充
/dev/null:外号黑洞文件(只进不出),常用于回收我们的错误输出和标准输出

2.管道(命令和命令之间的关系)
1.格式:命令1 | 命令2
将命令1的执行结果作为命令2的输入。将原本没有关系的命令组合成一种功能。
例如:ls -l | grep p #将原本 ls -l命令输出结果通过grep命令进行过滤,只保留出现 p 字母的那一行
管道符中,会使用 tee 命令将管道中的输出copy一份到文件中
例如: ls -l | tee result | wc -l # tee将 ls -l 命令的输出 copy 到文件 result 中,并且 wc -l 命令来统计 ls -l 命令执行的结果

3.Vi和Vim编辑器
三种模式:编辑模式:浏览,查找和替换,复制粘贴
插入模式:修改文本内容,使用右键copy,并且右击paste粘贴。
底部命令模式:保存和退出(w:保存,q:退出,wq:保存并退出,q!:只退出不保存)
切换:编辑模式下按 i 进入插入模式,使用 esc 键从插入模式返回编辑模式
编辑模式下使用 :进入底部命令模式,删除 :后会进入编辑模式
在底行模式下显示行数::set number
在底行模式下取消显示行数::set nonumber

四.管理本地用户和组

1.id #使用id命令来查看一个用户的信息
例如:id redhat

补充:uid指的是用户编号,(0是超级管理员用户,而1-999指的是系统用户,1000以上指的是普通用户)
gid主组编号(主组)
groups:所在组的 id(通常是从属组,可以有很多个)

2.三个文件:
用户数据库:存放用户信息的文件 /etc/passwd
用户的密码:存放着用户的密码 /etc/shadow
#通常使用 passwd 或者 change 来改变用户的密码属性组的数据库:存放着组的信息的文件名 /etc/group
补充:用户信息的格式

sbin/nologin :不允许远程登录
bin/bash:允许远程登录

3.useradd #增加用户的命令
4.usermod #修改用户信息的命令
两个命令需要使用到的参数

给用户添加附属组:usermod -aG 附属组名 用户名

5.userdel #删除用户的命令
最好搭配 -r 参数一起使用,因为文件归属问题由 UID 决定而不是由用户名决定的。

6.groupadd #添加组的命令
通常情况下生成用户的情况下会自动生成与用户名同名的组作为用户的主组
groupmod -n(修改组名) -g(修改组id)

7.groupdel #删除组的命令
通常情况下不能直接删除,除非这个组已经不是用户的主组时才可以删除。

8.su #用于切换用户身份
补充:su redhat #仅仅是切换身份(没有加载用户的配制环境,之后的环境会存在原始用户的一些信息)
su - redhat #模拟登录此用户(模拟登录,并且加载了用户相应到的配制信息,文件信息都是该用户的)

9.sudo #让某个用户去执行命令,赋予一些用户一些权限。
sudo的两个操作:sudo + 所需要执行的操作
提权的两个文件:
/etc/sudoers
一个是给普通用户添加权限,并且可以设置免密登录,在下图2中:NOPASSWD:ALL
另一个是给组中的用户添加权限(%wheel ALL=(ALL) ALL)

五.控制对文件的访问

1.Linux文件类型,使用 file or ls -l 可以查看文件的类型。

2.Linux中的文件权限:
r :读
w:写
x:执行

3.用户权限:
u:文件所属用户
g:文件所属组
o:其他用户
a:全部用户
格式:

文件权限使用数字表示法对应数字:r:4 w:2 x:1,没有权限的话就是-

两种改变权限的方式:
1.数字表示法:chmod *** / 文件路径/文件名 (* 表示数字421的权限,第一个表示文件用户,第二个表示所属组,第三个*表示其他用户)

2.文字表示法:chmod u-w,g+r,o = - result #对应的就是去除掉 w 权限,对于所属组用户添加 r 权限,设置其他用户没有权限。

补充:chmod -R a-x dir1(dir 1 中有 dir2 和 file1) #这个命令会将 dir1目录中所有文件包括它自己的 x 权限全部取消
chmod -R a+x dir1 #这个命令会将 dir1 中所有的文件添加 x 权限。
chmod -R a+X dir1 #这个命令会将dir1 中所有的目录加上 下权限,但是文件没有添加 x 权限。
-R表示递归添加权限。

4.chown:修改文件的所属用户,组
例如:chown redhat result #将文件 result 的所属用户修改为 redhat。
chown :root result #将文件 result 的所属组修改为root。
chown root : root result #同时修改所属用户和所属组。

5.特殊权限
一旦文件具有g+s权限,那么创建的文件和目录所属组是一样的
特殊权限对于普通文件对于目录文件u+s(+4000),suid权限 4使用文件归属用户去执行文件无g+s(+2000),guid权限 2使用文件归属组去执行文件在目录中创建的所有文件的归属组和目录的所属组保持一致o+t(+1000),sticky权限 1无

6.默认权限
普通用户创建的文件权限默认:664,目录权限为:775
root用户创建的文件权限默认:644,目录权限为:755
补充:对于普通文件来说,默认权限不会含有 x 权限

umask修改默认权限:临时修改:umask +数值

六.监控和管理Linux进程

1.ps #获取瞬间系统所有的进程,但是只有一瞬间
2.top #运行在终端上的任务管理器,查看所有的进程,并且是动态变化的
ps -aux 会查看到系统中所有的进程信息,会调用参数 -a -u -x,可以结合管道和重定向符号使用
进程的格式

其中 PID 是唯一的,进程的 ID 编号
TTY表示的是进程运行的位置,包含了后台(看不见),前台(看的见)。
CMD为进程的程序名或者启动命令,所以在Linux中启动一个软件我们只需要从CMD调用启动命令就可以了

进程管理

3.kill + PID #通过发送信号来调整一个进程的状态。(-9 参数会让程序数据没有保存就退出,而 -15 参数会让程序正常退出,default)
补充:kill命令不一定是让进程自我毁灭,还有就是让程序退出或者改变状态。
作业管理
我们如果执行一条命令太长时间而导致无法使用终端时,我们会进行作业管理

jobs #使用该命令查看被我们放置在后台的作业以及运行状态。
fg 作业ID #将作业编号是所选 id 的作业从后台转到前台
ctrl+z #我们用这个命令会将长时间占领我们终端的命令转到后台,但是此任务会变成stopping状态
bg 作业ID #使用bg命令会将stopping状态的任务恢复running状态
补充:

七.控制服务和守护进程

1.不同单元管理不同的服务
service单元 通常文件后缀名.service
表示服务或者守护进程,实现对服务的启动,关闭,以及重启

socket单元 通常文件后缀名.socket 表示进程套接字服务(软件使用,需要联网)
target单元 通常文件后缀名.target 表示多个单元的组合

2.管理服务

命令作用
systemctl status sshd.service 查看sshd的服务的状态(active)
systemctl start sshd.service 启动sshd服务
systemctl stop sshd.service 停止sshd服务
systemctl enable sshd.service 将sshd服务设置为开机自启
systemctl disable sshd.service 取消sshd服务的开机自启
systemctl restart sshd.service 重启sshd服务(先stop,后start)
systemctl reload sshd.service 重载sshd服务
systemctl is-active sshd.service 查看sshd服务是否在运行中
systemctl is-enabled sshd.service 查看sshd服务是否设置为开机自启

3.Linux的级别
target在systemd中可以表示系统的一种状态

target级别对应Linux原本运行的级别效果
poweroff.target runlevel 关机
rescue.target runlevel 救援模式,只可以用root用户进入,无网络连接
multi-user.target runlevel 标准的运行状态,无图形化界面的多用户模式
graphical.target runlevel 在multi-user.target基础上增加了图形化界面reboot.targetrunlevel重启
查看系统默认启动方式:Systemctl get-default
修改系统默认命令行模式: systemctl set-default multi-user.target

八.配置和保护ssh

1.ssh是一种协议,实现远程访问终端的能力。
ssh分为客户端和服务端,分为openssh-client和openssh-server两个部分。

2.ssh #登录远程终端
例如:ssh -p 22 redhat@localhost
使用ssh客户端,通过22端口登录localhost主机上的redhat用户。
补充:第一次进行ssh远程连接的时候,需要主机上的指纹信息进行手工确认,会保存在-/.ssh/known_hosts文件中,之后的登录会和记录的信息作比对,只有一致才会进行连接。

3.ssh公钥私钥
非对称加密:公钥和私钥(公钥=锁,私钥=钥匙)
对称加密:单一密钥
过程:ssh-keygen #生成公钥和私钥,之后会告诉你公钥和私钥文件存放的位置
ls .ssh/ #查看公钥和私钥
ssh-copy-id -p 22 redhat@localhost
#自动将我们的公钥推送到我们需要登录的主机的用户目录下,推送之后我们就不需要输入mo密码了
实质上就是将公钥写入所登录的用户的 .ssh/authorized_keys文件中(配置ssh免密码登录)

4.ssh服务的安全设定
使用的ssh协议的默认端口为22
允许root用户通过ssh登录
默认允许使用密码登录
需要修改/etc/ssh/sshd_config文件的内容,修改完之后又一定要restart或者reload服务

九.分析和存储日志

1.日志是我们排除故障的主要依据,以 .log为后缀名,并且主要关注 error 和 warning 两个日志记录。

2.主要日志文件存放目录:/var/log
日志文件位置作用/var/log/messages绝大多数的系统日志文件,
包含了作业的调度,邮件处理,测试等部分/var/log/secure与安全(身份验证)有关的日志记录/var/log/maillong与邮件服务有关的日志/var/log/cron与计划任务有关的日志/var/log/boot.log与系统启动有关的日志

十.管理网络

1.ip address #查看所有网络相关的信息

2.ip address show ens160(网卡名) #显示ens160网卡的信息

3.nmcli #基于命令实现对网络的管理,激活配置IP地址

4.nmtui #基于TUI界面对于网络的管理,配置IP地址或者修改主机名

5.介绍TUI界面
注意:使用nmtui命令设置过IP地址后一定要重激活网络一下

6.使用nmcli来进行激活IP地址
命令:nmcli connection up ens160 (网卡名)
开启网卡:ifup 网卡名称
关闭网卡:ifdown 网卡名称

7.主机名
使用 nmtui 对主机名进行修改
ssh远程登录有网络连接的server主机:ssh -p 22 [email protected](该主机的IP地址)

8.基于网络的时间同步
(1).timedatectl #查看时间信息

方法一
(2).timedatectl list-timezones #显示所有的可用时区
timedatectl set-timezone Asia/Shanghai #将时区设置在亚洲上海时区

方法二
(3).chronyd #实现网络时间的同步(既是服务端又是客户端) 配置文件地址:/etc/chrony.conf
pool 2.rehl.pool.ntp.org iburst #pool后面接的地址为时间同步服务集群
server ntp.aliyun.com iburst #server后面接的是具体的一台时间同步服务器
同时我们需要确保服务开启自启:systemctl start chronyd.service
systemctl enable chronyd.service
or
systemctl enable --now chronyd.service(一部搞定)
查看是否生效:chronyc sources

方法三:date -s “2023-4-5” 11:18:00 "

十一.归档和传输文件

1.归档,类似与windows中的压缩文件,将多个文件合成一个独立的文件夹。后缀名为 .tar。

2.tar #完成归档文件的创建,解压和查看
例:tar -c -v -f man.tar ./man # -c 表示创建一个归档,-v表示创建归档的过程 ,而 -f 表示指定归档的文件名( f 要放于最后) 后面是需要归档的文件
tar -t -f man.tar # -t 等同于–list参数,表示查看一个归档文件的内容
tar -x -f man.tar # -x参数表示解压一个归档,-f 指定需要解压的归档名,若要指定解压到哪个目录则需要 -C 参数。
tar -xvf man.tar -C /目标路径 # 使用-C命令将它放于指定路径

3.tar不会对于压缩文件默认的大小,所以使用tar命令时会加上一些额外的参数来调整系统支持的压缩程序来实现对归档文件的大小实现压缩。
使用 file + 压缩包名 可以查看压缩算法。

参数格式作用-j,–bzip2
tar -c -j -f man.tar.bz2 ./man使用bzip2程序进行对归档文件进行压缩(压缩时间和压缩率折中方案),文件后缀名
.tar.bz2-z,–gziptar -c -z -f man.tar.gz ./man使用gzip程序进行归档文件(时间最快),文件后缀名 .tar.gz-J,–xztar -c -J -f man.tar.gz ./man使用xz程序进行归档文件的压缩(压缩率最好),文件后缀名 .tar.xz

传输文件
4.使用 ssh 客户端软件提供的 scp 命令实现文件的传输。
scp # scp 需要两个参数,
./man.tar表示的是本地位置
[email protected] :./root 表示的是192.168.204.20这个主机上root用户下的面的 /root 用户
例如:scp ./man.tar [email protected] : ./root

同步传输
5. rsync 命令代替cp以及scp命令完成文件的同步工作
优势:他不是对于文件的覆盖,而是对于文件的追加,只传输差异的部分
例如:rsync -avz ./man [email protected]: /root
-a 参数支持对于目录的递归处理,保留文件的权限信息和连接信息和时间信息。
-z 参数表示压缩成gzip形式。

十二.安装和更新软件包

1.RPM #红帽制定的用于linux系统环境上面的软件包安装的格式
格式:软件包名-版本号,发行版本号,架构.rpm
在使用图形化界面的时候,光盘会自动加载到 /run/media 目录下。

使用方法:
rpm -i /run/media/root/RHEL-8-4-0-BaseOS-……/zsh-5.5.1-6.e18_11.2……
使用 tab 补全。

rpm -qa #查看系统中所有的安装的软件包名配合管道符使用会比较方便
例如:rpm -qa | grep zsh #查看zsh软件包的名字
但是实际上有许多软件需要依次安装,所以使用 rpm 会报错,所以我们使用 DNF(yum)命令。

DNF

2.DNF:更加高级的rpm软件包的管理,yum 的升级版,但是两者功能一样(只是新旧版本更替)。

命令作用
dnf install 安装软件
dnf remove 卸载软件
dnf update 升级软件
dnf makecache 生成软件依赖缓存信息(提高软件安装效率)
dnf clean all 删除缓存文件
dnf provides 基于某个文件或者是命令反向查找软件包的名字
dnf search 查找软件包(基于软件名或者软件的信息)
dnf 的安装软件需要先配置软件包仓库,dnf只会读取/etc/yum.repos.d/目录下所有的.repo文件作为仓库的信息。

3.仓库的配置:
【repoid】 # repoid 作为仓库的唯一标识
name=repo name #仓库的描述,用于说明仓库的作用
baseurl=repo url #仓库的 url 配置地址
enabled=1 #表示是否启用仓库(1表示启用)
gpgcheck=1 #表示是否进行gpgcheck校验
gpgkey=repo gpgkey url #如果开启了gpgkey 校验,则需要指定gpgcheck的 url。
gpgkey的路径在:baseurl中的目录下面,这个目录有一个文件/run/media/root/RHEL-8-4-0-BaseOS-x86_64/RPM-GPG-KEY-redhat-release

两个例子:
这边挂载的是 /run/media/root/RHEL-8-4-0-BaseOS-x86_64/BaseOS/

baseos:此仓库的软件包一般不怎么更新,通常与系统底层和核心有关系
appstream:此仓库内提供的主要是上层的用户软件,采用滚动更新的方式,实现更多版本的切换和较新的更新。
如果我们按默认的来配的话,将它挂载到 /mnt/dvd 下
我们需要输入以下的命令

vim /etc/yum.repos.d/local.repo
[baseos]
name=baseos name
baseurl =file:///mnt/dvd/BaseOS
enabled=1
gpgcheck=0
[appstream]
name=appstream name
baseurl=file:///mnt/dvd/AppStream
enabled=1
gpgcheck=0

注意:不管是 /mnt/dvd ,还是 /run/media/root/RHEL ,都是进入文件系统 /dvd/sr0 的一个通道,文件都在文件系统中。

当我们配置好仓库的文件信息之后,我们需要做的就是清理旧的数据并且生成缓存信息文件
dnf clean all #清空旧的数据
dnf makecache #生成缓存信息文件
or
dnf clean all && dnf makecache #两者合一,&&符号表示当前一个命令执行完之后执行后一个命令
例如: dnf install zsh #安装 zsh 文件包。
dnf install httpd #安装httpd软件包,并且会自动处理依赖软件包
dnf remove httpd #卸载httpd软件包,也会自动将系统中用不到的依赖进行移除

4.dnf 还有基于组和模块的软件包管理方式。
group:多个软件的组合,满足一定的软件环境
modules:某个软件的版本和其配置方案
只需要在原本的 install 和 remove 之类的命令的参数上加上 group 或者是 module 就可以了

十三.访问 Linux 文件系统

1.df -Th #查看现有的文件系统和占用情况

分区在磁盘的基础上进行的
/dev/sda1,/dev/sda2 #表示的是sda磁盘上的1号和 2 号分区
挂载和卸载文件系统
2.umount /run/media/root/RHEL-8-4-0 BaseOS-x86_64 #使用 umount 卸载光盘设备

mkdir -p /mnt/dvd #创建一个挂载点设置为 /mnt 目录下的一个目录

mount /dev/sr0(分区) /mnt/dvd(挂载点)
#de将 /mnt/dvd 目录通过 mount 命令成为访问 /dev/sr0 (磁盘)的入口。
属于临时性操作,系统重启后与失效。

持久性挂载
3.通过 /etc/fstab 文件来确定系统重启过程中需要进行挂载的文件系统和挂载位置。
格式: 要挂载的设备或者文件系统 挂载点目录 文件系统类型 挂载参数 0 0
/dev/sr0 /mnt/dvd iso9660 defaults,ro 0 0
vim /etc/fstab
在文件之后加上 /dev/sr0 /mnt/dvd iso9660 defaults,ro 0 0
之后根据文件说法,执行 systemctl daemon-reload
通常,我们也使用 mount -a的方式来让系统重新按照 /etc/fstab中的内容完成没有挂载的设备进行挂载操作。

查看块设备
1.lsblk #查看系统中的块信息
lsblk -f -p #-p 显示完整的路径名 -f 显示他的文件系统类型
blink #和 lsblk 作用差不多,不过优先显示 UUID 的值

文件查找
1.locate #查找文件 -i 参数表示忽视大小写
2.find #查找文件
find + 查找范围 + 查找方式
例如: find / -name fstab #从根目录开始查找文件名为fstab的文件。
find / -iname fstab #和上面一样,只是不区分大小写
find / -type d -name core #查找目录名是 core 的目录
find / -user redhat -type d #查找用户Redhat所有的目录文件
find / -size +2M -size -10M #查找文件大小在5M和10M之间的文件
find / -user redhat -type f -name “ . *” #查找用户redhat所有的隐藏文件
find / -user redhat -type f -name “ . *” -exec cp “{ }” /root/downloads/ \ ;
#将查找到的用户redhat所有隐藏文件复制到 /root/downloads 目录下。

find 查找范围 查找方式 -exec 执行的操作 \;
find / -user redhat(查找所有者为redhat的用户) -exec cp -pr(-a) “{ }” /root/lmj/ \;(并且将他复制到/root/lmj这个目录下,\表示结束符)

find / -user ljf -exec rm -rf “{ }” \;
查找 /etc 目录下存在的以wd为结尾的文件: find /etc -iname *wd (使用 * 表示模糊查询)

find根据文件权限来查找文件:
使用方式:find 查找范围 -perm 权限的数值 (精确查找)
find 查找范围 -perm -权限的数值 (查找大于权限数值的文件)
(如果有 - 的话表示:查找大于权限数值的文件,如果没有 - 的话,表示查找等于权限数值的数据)
find 查找范围 -perm -g=r 查找文件所有组含有 r 的权限,其余权限无所谓
find 查找范围 -perm -g=r 查找文件所有组只有r的权限
find 查找范围 -perm -2000 查找特殊权限sgid的文件

3.grep #在文档中进行字符查找(目录不行)
grep命令:
grep 查找的字符 文件名
grep -v #表示反选,除了root,没有root的都查找出来。
grep -i #表示忽略大小写。

十四.分析服务器获取支持

网页控制台
systemctl enable --now cockpit.socket
之后访问主机的9090端口就可以了

十五.提高命令行生产率

shell编程:开头第一行必须为 #!/bin/bash
当此文件获得执行权限之后,调用系统在哪一个程序运行,文件名一般以 .sh作为结尾。
vim a.sh #编辑shell代码
cat a.sh #查看shell代码

三种执行shell代码的方法:
bash 文件名.sh #调用bash在一个新的终端下进行
source 文件名.sh #调用source在当前终端下进行
chmod a+x a.sh #赋予执行权限,然后在新的终端下执行
./文件名.sh #在相对目录下执行代码循环

var 是所定义的变量。
list 可以是{1,6},只可以是多个参数使用空格分割方式 var 的变量(例:$(find /home -name ".* " -user redhat -type f) # 寻找home目录下以“ . ”开头的属于redhat的文件)。

特殊变量
exit 0 #表示退出码为0,正常退出
exit 1 #表示退出码为1,执行过程中有问题
使用echo $? #查看上一个命令的执行结果

十六.计划将来的计划

延迟任务(一次性任务)
1.at #让系统在特定的一个时间执行一个命令
at 时:分 年月日 < 任务文档
例如:echo $ "date > /root/at_result " | at now +5min 五分钟后执行这个命令
计划任务
2.crontab #管理计划务
例如:crontab -l #查看当前这个用户的计划任务信息
crontab -l -u Redhat #查看指定用户的计划务信息
crontab -e #编辑用户的计划任务,会进入vim页面
crontab -r # 删除crontab任务
格式进入 /etc/crontab 中进行查看。
如果使用crontab进行删除用户的话,则需要使用 /sbin/bash/crontabll

分 时 日 月 周 (日和周不建议混用)* * * * * 每分钟执行一次0 * * * * 每小时执行一次(2:00 ,3:00)30 * * * * 每小时第30分钟执行(2:30,3:30)0 0 * * * 每天运行一次(每天的0:00)0 0 1 * * 每月的第一天的0:000 0 * * 1 每周一运行一次0 0 * 1 1 1月的每周一运行一次*/5 * * * * 每5分钟运行一次0 */3 * * * 每隔3小时运行一次20 */3 * * * 每隔3小时的第20分钟运行一次5,6 * * * * 每小时的第5分钟和第6分钟运行一次5,6 1-10 * * * 每天的 1点到10点的每小时第5分钟和第6分钟执行一次2,5 1-10/2 * 1 1 每年1月份每周一1点到10点的时间段中,每隔2小时的第2和5分钟运行一次

十七.调优系统性能

1.修改系统性能优化的方案选择,从预选中选择最适合当前使用的场景来进行自动的优化Linux系统。
tuned-adm list #显示所有可用的优化方案
tuned-adm recommend #根据当前的软硬件推测出最佳的性能方案
tuned-adm off # 关闭当前的模式
tuned-adm profile +推荐方案 #启用这个方案
tuned-adm active #显示当前激活的配置方案,就是当前正在使用的方案
tuned-adm profile $(tuned-adm recommend) #获取推荐值并设置启用此方案

十八.使用ACL控制对文件的访问

1.acl 为了解决 ugo-rwx 这种模式下针对所有用户权限管理不精细的问题(指定用户的权限)
getfacl #查看文件访问控制列表信息
setfacl #修改文件访问控制列表信息 (一般在权限后面有一个+号时就要使用这两个命令)

使用 man setacl 之后使用 /example查看格式。
setfacl -m u:lisa:r file(setfacl主命令 -m表示修改 u:用户:权限 文件名)
setfacl -x u:lisa:r file(setfacl主命令 -x表示删除 u:用户:权限 文件名)

十九.管理SELinux安全性

临时设置SELinux的工作状态
1.getenforce #获取当前的SELinux的工作状态
2.setenforce #设置当前的SELinux的工作状态
状态:Permissive #可以用数字 0 表示
Enforcing #可以用数字 1 表示
永久的修改SELinux工作模式的配置文件: vim /etc/selinux/config

测试SELinux的工作性质
例子:
测试准备:
我们在浏览器中看到,当SElinux模式设置为Permission时,1.html和2.html都可以访问
当SELinux模式设置为Enforcing时,1.html可以访问,但是2.html不可以访问
使用 ls -Z /var/www/html 可以看出两个文件的类型标签是不一样的。

SElinux的工作原理
标签匹配:
格式:
**在文件创建时,会根据在哪一个目录下创建而根据selinux默认规则打上标签
semanage fcontext -l #查看到所有的文件标签对应的关系,即selinux的默认规则。

人工修改SElinux默认的文件上下文规则

semanage fcontext -a -t 上下文规则 “文件地址”
参数信息:-a 表示添加规则
-m 表示修改规则
-d 表示删除规则
最后都需要进行重新生成一下restorecon目录,重新生成上下文规则
restorecon -R -v 文件地址
在man手册里查看用法
man semanage-fcontext
如果一个目录下都要修改上下文规则:
则 semanage fcontext -a -t 上下文规则 “/var/www/html/(/.*)?”

SELinux的布尔值
semanage boolean -l #查看selinux布尔值的管理
setsebool -P httpd_can_network_connect_db on # -P表示永久生效,将httpd_can_network_connect_db布尔值设置为on,开启功能
setsebool -P httpd_can_network_connect_db off # -P表示永久生效,将httpd_can_network_connect_db布尔值设置为off,关闭功能

SELinux的端口管理
semanage port -l #查看SElinux的端口管理
semanage port -a -t http_port_t -p tcp 82 #添加82作为httpd能够绑定的端口
修改端口的配置文件:/etc/httpd/conf/httpd.conf
注意:端口号添加之后需要防火墙放行
SELinux故障排除工具
sealert -a /var/log/audit/audit.log
#在出现了因为selinux导致的故障时如果产生了日志才会通过sealert命令分析并且提出解决方案

SeLinux操作步骤:
查看http状态: systemctl status httpd.service
查看selinux工作模式: getenforce
检查文件的上下文规则: ll -Z
设置上下文规则: semanage fcontext /Re
查看selinux端口:semanage port
修改配置文件的端口:vim /etc/httpd/conf/httpd.conf
重启http服务:systemctl enable --now httpd.service
查看防火墙服务的状态:systemctl status firewalld.service
之后允许防火墙通过:man firewall-cmd
重启防火墙服务:systemctl enable --now firewalld.service

二十.管理基本存储

补充:
磁盘分区:在磁盘上按照大小分成规定的区域,有主分区—>逻辑分区—>拓展分区(fdisk,gdisk,parted)
文件系统:存储设备上组织文件的方法,刚刚建立的分区需要格式化才可以成为文件系统(mkfs)
注意:逻辑分区不可以格式化
交换分区:运行内存不够使用时,需要从物理内存中提取一部分内存进行程序运行,这些提取的部分被放进交换分区中(相当于虚拟内存)
磁盘分区(添加硬盘----分区(fdisk,gdisk)----格式化(mkfs)–挂载(mount))
实验中:需要新添3块磁盘
sata类型:5G
sata类型:3G
nvme类型:5G

lsblk #查看块设备
Linux中对于磁盘分区的管理有三个命令:fdisk,gdisk,parted(只在自动化脚本中使用)
磁盘的分区依赖于分区表,分区就是在分区表上记录
两类分区表:

1.mbr(dos,msdos):最多只支持四个主分区,可以将主分区转变为拓展分区,在拓展分区上创建更多的逻辑分区进行管理
主分区和逻辑分区都支持挂载操作,但是只有主分区可以标识启动。

2.gpt:没有分区类型区别,所有分区都是mbr上的主分区。最多128个。

三个命令的使用:
1.fdisk:支持在 mbr 和 gpt 两个分区表上做磁盘管理
2.gdisk:只支持在 gpt 分区表上做磁盘管理,或者将 mbr 分区表转化为 gpt 使用。
3.parted:自动化脚本使用

fdisk + 所添加的磁盘 #对于磁盘进行分区操作
参数:m #获取帮助
g #将 mbr 转变成 gpt
w #保存操作并且退出
q #不保存操作直接退出
p #打印这个分区表的信息
n #进行磁盘分区操作
创建完成之后,可以通过lsblk命令查看分区情况(查看磁盘情况)
若没有出现创建的分区,使用partprobe刷新分区列表

mkfs #查看操作系统信息,并且安装操作系统(格式化)
mkfs.文件系统类型 磁盘分区
例如:mkfs.ext4 /dev/sdb3
使用blkid /dev/sdb3 (查看创建的文件系统)
文件系统上面有两个数值:
1.blocks:决定了放多大的文件数据
2.inodes:决定了放文件数据的数量
当有了文件系统之后,我们就可以进行挂载操作
如果需要将ext4转换为xfs,则需要进行+ -f 参数
如果从xfs转换为ext4,则不需要进行+参数。

交换分区(特殊的文件系统)交换分区不需要进行格式化
mkswap #创建交换分区
free -m #查看当前存在的交换分区
swapon + /dev/sdb2 #激活交换分区
swapoff + /dev/sdb2 #取消激活交换分区
swapon -s #查看交换分区文件系统信息
分区+创建交换分区+激活交换分区+之后可以进行挂载

管理逻辑卷
传统磁盘的问题:
分区大小不可以自由调节(一个8G和一个20G的想要变成一个12G和16G的,物理磁盘做不到)
而逻辑卷就可以做到

LVM(逻辑卷管理)
pv:物理卷(将磁盘和分区转化为物理卷才可以进行LVM管理)
vg:卷组(多个物理卷组成的虚拟磁盘的设备)
pe:物理块(物理卷添加到卷组过程中的一种统一的分割方式)
lv:逻辑卷(卷组上,通过任意的pe形成的一个分区设备)

pvcreate #创建物理卷
例如:pvcreate /dev/sdb3 /dev/sdc(分区的路径)
pvscan #扫描系统中所有的物理卷
vgcreate #创建卷组
vgcreate 卷组名 /dev/sdb3 /dev/sdc(两块物理卷的路径)
vgscan #扫描系统中所有的卷组
vgdisplay 卷组名 #查看该卷组的详细信息
如果要修改pe的包的大小,则需要加上参数 -s 选项 ,后面加上 pe 的大小即可(pe的大小为2的倍数)
删除卷组: vgremove + 卷组名
lvcreate #创建逻辑卷
例如:lvcreate -n 逻辑卷名 -L 401M(逻辑卷的大小) 卷组名
lvcreate -l PE的数量 -n 逻辑卷名 卷组名
lvscan #查看逻辑卷的详细信息(可以查看路径)
创建完逻辑卷之后和分区操作一样,进行格式化创建文件系统并且进行挂载。
格式化:mkfs.ext4 格式化分区路径 / mkfs -t 格式化类型 格式化路径
挂载:mount 挂载分区 挂载点

提高逻辑卷的大小:lvresize -l +899 /dev/myvg/mylv(添加的899个pe块)
补充:这是创建过文件系统过后,虽然逻辑卷大小变化了,但是文件系统的大小没有变化
文件系统才是我们文件存储的空间的大小,而块设备只是相当于我们的存储上限。
但是我们可以通过 -r 参数对逻辑卷和文件系统大小一起调节。

补充:创建完逻辑卷之后,他的文件系统不像磁盘分区直接是/dev/sr0
而是 /dev/卷组名/逻辑卷名 or /dev/mapper/卷组名—逻辑卷名
查看逻辑卷的路径:lvscan / /dev/mapper/卷组名—逻辑卷名

你可能感兴趣的:(Linux,linux,服务器,前端)