Linux相关知识

安装CentOS7

环境说明
虚拟机:VM16.2.3
CentOS:CentOS-7-x86_64
CentOS参考下载连接:https://mirrors.bfsu.edu.cn/centos/7.9.2009/isos/x86_64/

使用VM创建CentOS

新建虚拟机

【文件】选择【新建虚拟机】,选择【典型】模式即可
image.png
选择已经下载好的iso光盘映像文件
image.png
自定义安装位置
image.png
选择分配的空间
image.png
完成创建
image.png

等待校验

image.png

安装配置

image.png

分配磁盘空间

image.png
选在我要配置分区-点击完成
image.png
选择LVM方案-创建
image.png
会自动生成-点击完成
image.png
接受更改
image.png

配置网络

image.png
选择打开-完成
image.png

开始安装

image.png

设置root账号的密码

image.png

等待安装完成

image.png
完成后选择重启即可
image.png

登录系统,学习常用热键和命令

在终端界面登录Linux系统

image.png

# CentOS Linux7 (Core)
显示系统名称(CentOS)和版本(7)
# Kerne1 3.10.0-1160.71.1.e17.×86_64 on an ×86_64
显示Linux核心的版本(3.10.0-1160.71.1.e17.×86_64),目前这主机的硬件版本(X86_64)
# localhost login 
登录的账号
# Password
密码(请注意,在输入密码的时候,屏幕上面不会显示任何的字样!)
# Last login:Mon Jun 5 09:00:22 from 192.168.32.115
上次登录时间及登录者的IP地址
# [root@localhost ~]#
@左边显示的是登录的账号,右边显示的是主机名,最右边显示当前所在目录

开始下达指令

# command [-options] parameter1 parameter2 ...
  	指令		选项				参数1			参数2

说明:

  • 指令:command为指令名称,例如切换工作目录的指令为 cd;
  • 选项:中括号 [] 在实际命令中并不存在,选项前通常会有 - ,例如:-h,–help
  • 参数:通常是依附在选项的参数或指令的参数
  • 空格:指令、选项、参数之间以空格作为区分,不论空格的多少shell都视为一格。(空格是非常重要的特殊字符)

image.png

  • 回车键(Enter):按下回车键后,就立即执行该命令。
  • 反斜杠(\):当指令太长时可以使用 \ 来换行
  • 其他:在Linux中,英文大小写字母时不一样的,例如:cd 和 CD并不一样

image.png

基础指令

  1. 显示日期的指令:date
    1. 格式化日期输出 date +%Y/%m/%d-%H:%M:%S

image.png

  1. 显示日历的指令:cal

1685930652813.png

重要的热键

  1. [Tab]按键

[Tab]按键具有【命令补全】与【文件补齐】的功能
例如:命令补全
1685930997219.png
文件补齐(按两下[Tab]键会将后边的文件补齐)
image.png

  1. [Ctrl] + c 组合按键

组合按键:具有中断目前程序的功能,或取消当前命令

  1. [Ctrl] + d 组合按键

组合按键:可以取代exit命令

  1. [shift]+{[PageUP]|[Page Down]} 组合按键

相当于滚轮,上下翻页

Linux系统的帮助文档 --help

可以使用 --help选项查看指令的详细用法
image.png

关机或重启

shutdown 与 reboot

  • shutdown 此命令较为常用
    • 可以选择关机模式:关机或者重启
    • 设定关机时间:指定时间关机/重启
    • 自定义关机讯息:关机前将自定义的讯息发送给在线用户
    • 可以仅发送警告讯息:仅通知在线用户关机讯息

参数说明

  • -k:不关机,仅发送警告讯息
  • -r:将系统服务停掉后重新启动(重启)
  • -h:将系统服务停掉后,立即关机
  • -c:取消已经正在进行的shutdown指令
  • 时间:指定时间关机

image.png
告诉使用者,本服务器将在十分钟后关机(可使用shutdown -c命令取消)

# 立即关机
shutdowm -h now
# 指定时间关机,若下达命令时间在20:25后则会在次日的20:25关机
shutdown -h 20:25
# 告诉所有在线用户,系统将会在30分钟后重启
shutdown -r +30 'The system will reboot'
  • reboot
    • systemctl reboot 重启
    • systemctl poweroff 关机

日期与时间设定

timedatectl
image.png

  • Local time:本地时间
  • Universal time:格林威治标准时间(0时区)
  • Time zone:当前时区(东八区,中国标准时间)
# 设置时区为上海时间
timedatectl set-timezone "Asia/Shanghai"
# 设置系统时间
timedatecle set-time "2023-06-05 11:13:40"

防火墙简易设定

目前CentOS 7 的预设防火墙机制为firewalld
指令:firewall-cmd

  • 组态:【执行时期】与【永久记录】
    • 执行时期:暂时行的设置,当重启防火墙后失效
    • 永久记录:重启防火墙或系统后不会失效
  • 界域(zone):依据不同的环境所设计的网络界域:本机网络、NAT 与 DMZ 等网域,系统会有默认的public(公开网域)
    • public(公共区域):是新添加网络接口的默认区域。
systemctl start  firewalld # 启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
systemctl disable firewalld # 停止
systemctl stop firewalld  # 禁用

firewall-cmd --version  # 查看版本
firewall-cmd --help     # 查看帮助

# 查看设置:
firewall-cmd --state  # 显示状态
firewall-cmd --get-active-zones  # 查看区域信息
firewall-cmd --get-zone-of-interface=ens33  # 查看指定接口所属区域
firewall-cmd --panic-on  # 拒绝所有包
firewall-cmd --panic-off  # 取消拒绝状态
firewall-cmd --query-panic  # 查看是否拒绝

firewall-cmd --reload # 更新防火墙规则
firewall-cmd --complete-reload
# 两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务


# 将接口添加到区域,默认接口都在public
firewall-cmd --zone=public --add-interface=ens33
# 永久生效再加上 --permanent 然后reload防火墙
 
# 设置默认接口区域,立即生效无需重启
firewall-cmd --set-default-zone=public

# 查看所有打开的端口:
firewall-cmd --zone=dmz --list-ports

# 加入一个端口到区域:
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 开放多个端口
firewall-cmd --zone=public --add-port=80-85/tcp --permanent

Linux的文件权限与目录配置

文件拥有者、群组、其他人

用户的信息都记录在/etc/passwd文件内,密码则以密文的形式存放在/etc/shadow文件内,所有的组名都记录在/etc/group文件内

Linux文件权限

Linux文件属性

查看文件的指令:ls(例如:ls -al 列出当前目录下所有文件,包含隐藏的文件)

1685947411916.png

-rw-r--r--.  1 root root  176 1229 2013 .bash_profile
  • 第一栏:包含文件类型和文件权限
    • 第一个字符:表示文件类型
      • d:目录
      • -:文件
      • l:连接档
      • b:表示为装置文件里面的可供储存的接口设备(可随机存取装置)
      • c:表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
    • 第二到最后一个:每三个为一组,[r]代表可读,[w]代表可写,[x]代表可执行,[-]代表没权限
      • 第一组:文件的拥有者具备的权限,以.bash_profile为例,文件的拥有者有读写权限,没有执行权限
      • 第二组:加入此组的用户具备的权限,以.bash_profile为例,加入此组的用户有读的权限,但是没有写和执行的权限
      • 第三组:其他的用户(非文件拥有者,没有加入此组的其他用户)所具备的权限,以.bash_profile为例,其他用户具有读的权限,但是没有写和执行的权限
  • 第二栏:有多少档名连结到此节点
  • 第三栏:表示这个文件(或目录)的拥有者
  • 第四栏:表示这个文件的所属群组
  • 第五栏:这个文件的大小,默认单位为bytes
  • 第六栏:文件的创建时间或最后一次修改时间
  • 第七栏:文件名称

改变文件属性与权限

  • chgrp:改变文件所属群组
  • chown:改变文件拥有者
  • chmod:改变文件权限
  1. 改变文件所属群组,chgrp

要被改变的组名必须要在/etc/group文件中存在,否则就会显示错误!

chgrp -R [组名] [文件|目录]

# 修改的组要保证已经创建,创建组:groupadd [组名]
chgrp -R mysql /momo/app/mysql
  1. 改变文件拥有者,chown

用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有记录的用户名称

chown -R [用户名] [文件|目录]

chown -R mysql /momo/app/mysql
  1. 改变文件权限,chmod

可读[r]:4
可写[w]:2
可执行[x]:1

chown -R [权限] [文件|目录]

  • 使用数字改变权限,例:(owner/group/others)分别为(读写执行/读写/读)

owner = rwx = 4 + 2 + 1 = 7
group = rw = 4 + 2 + 0 = 6
others = r = 4 + 0 + 0 = 4
执行命令:chmod -R 764 /momo/app/mysql

  • 使用符号改变权限,例:(owner/group/others)分别为(读写执行/读写/读)

owner = u = rwx
group = g = rw
others = o = r
执行命令:chmod -R u=rwx,g=rw,o=r /momo/app/mysql

对象rwx
文件读取文件中的内容修改文件中的内容执行文件内容
目录看到目录修改目录名cd到该目录下

Linux的目录配置

FHS标准

重点在于规范每个特定的目录下应该要放置什么样子的

可分享的(shareable)不可分享的(unshareable)
不变的(static)/usr(软件存放处)/etc(配置文件)
/opt(第三方软件)/boot(开机与核心档)
可变动的(variable)/var/mail(使用者邮箱)/var/run(程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)
  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的 socket 文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。
  • /(root,根目录):与开机系统有关
  • /usr(unix software resource):与软件安装/执行有关
  • /var(variable):与系统运作过程有关

根目录(/)的意义与内容

所有目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关

目录应该存放的文件内容
/bin放置的是在单人维护模式下还能够被操作的指令,如:cat、chmod、chown、date、mv、cp、mkdir、bash等
/boot这个目录主要在放置开机会使用到的文件
/dev任何装置与接口设备都是以文件的型态存在于这个目录当中
/etc主要的配置文件放置在这个目录中,账号密码文件也在这个目录下
  • /etc/opt:放置第三方软件
    |
    | /lib | 存放开始时用到的函数库 |
    | /media | 放置可移除的装置,如:软盘、光盘、DVD等 |
    | /mnt | 挂载某些额外的装置 |
    | /opt | 第三方软件安装位置 |
    | /run | 系统开机后产生的各项信息文件 |
    | /sbin | 系统管理员常用指令集 |
    | /tmp | 缓存文件 |
    | /lost+found | 这个目录是使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下。使用xfs 文件系统不会存在产生 |
    | /usr | 所有系统默认的软件存放路径 |
    | /var | |

/usr的意义与内容

所有系统默认的软件存放路径

目录存放的文件
/usr/bin/一般用户使用的指令
/usr/lib/存放函数库
/usr/local/软件的安装路径
/usr/sbin/系统管理员常用指令集
/usr/share/存放只读文件
/usr/src/一般原始码建议放置到这里

/var的意义与内容

大多存放程序运行时的数据

目录存放的文件
/var/cache/程序运行的缓存
/var/lib/程序运行过程中使用到的数据文件
/var/lock/程序锁
/var/log/存放各类日志
/var/run/某些程序在启动后会将PID记录在此
/usr/src/一般原始码建议放置到这里

目录树

在Linux下,所有的文件和目录都是由根路径开始
1686021165893.png

绝对路径与相对路径

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称
  • 相对路径:相对于当前路径的文件名写法。开头不是/就属于相对路径

Linux的文件与目录管理

目录与路径

.		代表此层目录
..	代表上层目录
-		代表前一个工作目录
~		代表【目前用户身份】所在的家目录
~account		代表account这个用户的家目录

目录的相关操作

  • cd:变换目录
  • pwd:显示当前目录
  • mkdir:建立一个新目录
  • rmdir:删除一个空目录
  1. cd (变换目录)
cd    进入用户主目录;
cd ~  进入用户主目录;
cd -  返回进入此目录之前所在的目录;
cd ..  返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../..  返回上两级目录
  1. pwd (显示目前所在目录)

image.png

pwd	显示链接文件路径
pwd -P	显示真实的工作路径
  1. mkdir(创建新目录)
# 在当前目录下创建test目录
mkdir test
# 在/tmp/test/test1/test2下创建test3目录,因为test1、test2没有创建所以执行命令会报错
mkdir /tmp/test/test1/test2/test3
# 逐级创建目录/tmp/test/test1/test2/test3,使用-p参数如果没有目录会逐级创建目录
mkdir -p /tmp/test/test1/test2/test3
# 创建目录并赋予权限(own/g/o)771 /tmp/test,使用-m参数设置权限
mkdir -m 771 /tmp/test
  1. rmdir(删除空目录)
rmdir -p /tmp/test/test1/test2/test3

文件与目录管理

  • ls:文件与目录的监视
  • cp:复制文件或目录,建立连结
  • rm:移除文件或目录
  • mv:移动文件或目录,重命名
  1. ls(文件与目录的监视)
# ls [-aAdfFhilnrRSt] 文件名或目录名称
# ls [--color={never,auto,always}] 文件名或目录名称
# ls [--full-time] 文件名或目录名称..

-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏档,但不包括 ... 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据文件、目录等信息,给予附加数据结构,例如:
*:代表可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件容量大小排序,而不是用档名排序;
-t :依时间排序,而不是用档名。
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
  1. cp(复制文件或目录)
# cp [-adfilprsu] 来源文件(source) 目标文件(destination)

-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行
  1. rm(移除文件或目录)
# rm [-fir] 文件或目录

-f:忽略不存在的文件,不会出现警告
-i:互动模式,在删除前会询问使用者是否执行
-r:递归删除,最常用也是最危险的操作
  1. mv(移动文件或目录,或更名)
# mv [-fiu] 来源(source) 目标(destination)

-f:如果目标文件已经存在强制,不会询问直接覆盖
-i:若目标文件已经存在,则会询问是否覆盖
-u:若目标文件已经存在,且source比较新,则会更新

文件内容查阅

  • cat 由第一行开始显示文件内容
  • tail 在屏幕上显示指定文件的末尾若干行,默认显示10行
  1. cat(由第一行开始显示文件内容)
-n或--number:从1开始对所有输出的行数编号;
-b或--number-nonblank:和-n相似,只不过对于空白行不编号;
-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;

cat /momo/app/test1.txt
  1. tail (在屏幕上显示指定文件的末尾若干行,默认显示10行)
-c<N>或——bytes=<N>:输出文件尾部的N(N为整数)个字节内容;
-f<name/descriptor>或;--follow<nameldescript>:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;
-F:与选项“-follow=name”和“--retry"连用时功能相同;
-n<N>或——line=<N>:输出文件的尾部N(N位数字)行内容。

实例

#(显示文件file的内容,从第20行至文件末尾)
tail -n +20 file
#(显示文件file的最后10个字符)
tail -c 10 file 

# 显示 mail.log 最后的 25 行
tail -25 mail.log 
# 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -f mail.log 
# 等同于--follow=name  --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
tail -F mail.log 

指令与文件的搜寻

  • which:查询指令
  • whereis:查找系统中特定目录下的文件
  • find:搜索文件名
  1. which(寻找『执行档』)
# which [-a] command

-a:将所有由[PATH]目录中可以找的指令均列出

# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

image.png

  1. whereis(查找系统中特定目录下的文件)
# whereis [-bmsu] 文件或目录名

-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

whereis命令只会在以下目录下查找目标文件
image.png

  • find(搜索文件名)

image.png

 # find [PATH] [option] [action]

 -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-typ<文件类型>:只寻找符合指定的文件类型的文件;

f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo

实例

# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111"

# 在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"
# 忽略大小写
find /home -iname "*.txt"

# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf"

访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

# 搜索最近七天内被访问过的所有文件
find . -type f -atime -7

vi与vim

vi:所有的Unix系统都会内置vi文书编辑器
vim:是vi的升级版,具有程序编辑能力,可以主动以字体颜色辨别语法的正确性

vi的使用

vi 的三种模式

基本上 vi 共有三种模式:『一般指令模式』、『编辑模式』、『指令列命令模式』

  • 一般指令模式(command mode)

使用vi命令打开一个文件就进入一般指令模式(默认的模式),可以使用【上下左右】移动光标、【delete】删除字符、也可使用【复制】【粘贴】。

对于不存在的文件使用vi编辑时会创建一个新文件并且屏幕下方会显示【New File】

  • 编辑模式(insert mode)

一般模式下无法直接编辑文件内容,使用按键【insert、i、I、o、O、a、A、r、R】等进入编辑模式,屏幕下方会显示【INSERT和REPLACE】,按下【Esc】返回一般指令模式

  • INSERT:插入
  • REPLACE:替换

image.png

  • 指令列命令模式(command-line mode)

在一般模式中,输入【: / ?】三个其中任何一个进入指令列命令模式,可以提供【搜索资料】动作,读取、存盘、大量取代字符、离开vi、显示行号等

按键说明

光标移动、复制粘贴、搜索替换
如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 即加上想要移动的行数后,按下动作即可!
一般指令模式

光标移动
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或 向右箭头键(→)光标向右移动一个字符
[Ctrl + f]向下移动一页,相当于[Page Down]
[Ctrl + b]向上移动一页,相当于[Page Up]
[Ctrl + d]向下移动半页
[Ctrl + u]向上移动半页
[Home]光标移动到这一行的第一个字符
[End]光标移动到这一行的最后一个字符
G光标移动到文件的最后一行
gg光标移动到文件的第一行
搜索和替换
/word向光标之下寻找‘word’字符串
?word向光标之上寻找‘word’字符串
n重复上一个搜索动作,结合/word,就是一直向下寻找‘word’字符串
N与 n 相反
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代
为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显
示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制、粘贴
x,Xx:向后删除一个字符,X:向前删除一个字符
nxn为数字,连续向后删除n个字符,
dd删除光标所在行
nddn为数字,删除光标所在的向下n行,从光标行算起
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行所有数据
d$删除光标所在位置到最后一个字符
d0删除光标所在位置到第一个字符
yy复制光标所在行
nyyn为数字,复制光标所在行向下n行
y1G复制光标所在行到第一行
yG复制光标所在行到最后一行
p将复制的数据粘贴到下一行
P将复制的数据粘贴到上一行
J将光标所在行与下一行合成一行
ncj其中n为数字,例如向下删除10行,10cj
u复原上一个动作,就是撤销
[Ctrl + r]重做上一个动作,就是取消撤销
.重复上一个动作

编辑模式

进入编辑模式
i,I进入插入模式
i:从光标所在处插入
I:从当前所在行的第一个非空格的字符处开始插入
a,A进入插入模式
a:从光标所在处的下一个字符处插入
A:从光标所在行的最后一个字符插入
o,O进入插入模式
o:从光标所在行的下一行插入新的一行
O:从光标所在行的上一行插入新的一行
r,R进入取代模式
r:只会取代光标所在的那一个字符一次
R:会一直取代光标所在的文字,直到按下ESC为止
[Esc]推出编辑模式,切换至一般命令模式

指令模式

:w将编辑的内容写入硬盘文件中(保存)
:w!强制保存
:q退出vi编辑器
:q!强制退出vi编辑器,修改过文件但不想保存时使用
:wq保存后离开,:wq!强制保存后离开
ZZ没有改动则直接离开,有改动则保存后离开
:w [filename]将编辑的数据存储到另一个文件
:r [filename]读入另一个文件的内容,并加到光标后
:n1,n2 w [filename]将n1到n2的内容储存成filename这个文件
:! command暂时离开vi编辑器执行command指令并显示执行结果
例:
:! ls -l 列出当前目录下的文件列表,按[Enter]返回编辑
:set nu显示行号
:set nonu取消行号显示

vim的暂存档

image.png
image.png

当编辑文件时,以非正常方式退出编辑后系统会产生一个以 [.swp]结尾的文件

  • O:以只读的方式打开文件
  • E:直接编辑文件不管暂存的文件
  • R:将暂存文件中的内容恢复到当前文件中继续编辑
  • D:当确定之前的暂存文件没有用了,可以选择删除
  • Q:直接退出vim编辑
  • A:中止本次编辑

如果因为意外情况而导致暂存文件的想要恢复,请执行[ R ]恢复原来内容,[ :wq ]保存并退出后将暂存文件手动删除(或者再次进入编辑执行[ D ]将暂存文件删除),否则再编辑时还会发出警告。

vim的额外功能

区块选择

v字符选择,选择光标经过的地方
V列选择,选择光标经过的列
[ Ctrl + v ]区块选择,可以用长方形的方式选择
y复制选中的地方
d删除选中的地方
p将选中的地方剪切到光标所在处

多文件编辑

vim test.txt test2.txt
:n编辑下一个文件
:N编辑上一个文件
:files列出目前的这个vim的开启的所有文件

多窗口功能

image.png

:sp [filename]开启一个新窗口
[ Ctrl + w ] + j 或 [ Ctrl + w ] + ↓移动到下一个窗口
[ Ctrl + w ] + k 或 [ Ctrl + w ] + ↑移动到上一个窗口

挑字补全功能

在使用vim进行程序编写的时候使用,提供关键字补全,内置词补全等功能

按键组合补齐的内容
[ctrl] + x --> [ctrl] + n目前正在编辑的【文件的内容文字(就是当前文件中出现的所有词)】作为关键词,予以补全
[ctrl] + x --> [ctrl] + f以当前目录内的所有文件名作为关键字,予以补全
[ctrl] + x --> [ctrl] + o以扩展名作为语法补充,以vim内建的关键字,予以补充。比如CSS语法

环境设定与记录

  • ~/.vimrc:记录环境变量的设定
  • ~/.viminfo:记录编辑历史
    | vim的环境设定参数 | |
    | — | — |
    | :set nu
    :set nonu | 设定和取消行号显示 |
    | :set hlsearch
    :set nohlsearch | hlsearch:高亮搜索,符合的字符会添加底色
    nohlsearch:取消高亮搜索 |
    | :set autoindent
    :set noautoindent | 自动缩排 |
    | :set backup
    :set nobackup | 自动备份 |
    | :set ruler
    :set noruler | 右下角的行号显示 |
    | :set showmode
    :set noshowmode | 左下角的状态提示 |
    | :set backspace=(012) | 0/1:退格键(backspace)只能删除刚刚输入的字符
    2:可以任意删除 |
    | :set all | 显示目前设定的所有环境设定值 |

Linux的磁盘分区、初始化、挂载

文件系统的简单操作

磁盘与目录的容量

df:列出文件系统的整体磁盘使用量
du:显示每个文件和目录的磁盘使用空间

  • df 查询磁盘使用情况
# df [-ahikHTm] [目录或文件名]

-a:列出所有文件系统,包含系统特有的/proc等文件系统
-k:容量以KB为单位显示
-m:容量以MB为单位显示
-h:以可读性较高的方式显示
-H:以M=1000K取代M=1024K的进制方式
-T:显示文件系统的类型
-i:显示inode信息
  • du 显示每个文件和目录的磁盘使用空间
# du [-ahskm] [目录或文件名]

-a:列出当前目录下所有目录和文件的占用空间
-h:以可读性更高的方式显示
-s:列出总量,即当前所在目录占用空间
-k:以KB为单位显示
-m:以MB为单位显示

# 查找大文件
du -h | sort -hr | head -n 10

磁盘的分区、格式化、检验、与挂载

观察磁盘的分区状态

lsblk:列出系统上的所有磁盘列表
blkid:查看块设备的文件系统类型、LABEL、UUID等信息

  • lsblk 列出系统上的所有磁盘列表
# lsblk [-dfimpt] [device]

-d:仅列出磁盘本身,不会显示分区信息
-f:同时列出磁盘内的文件系统名称
-i:使用ASCII的线段输出,不适用复杂的编码
-m:输出权限数据
-p:列出完整的文件名
-t:列出详细
  • blkid 查看块设备的文件系统类型、LABEL、UUID等信息

磁盘分区 gdisk/fdisk

MBR(Master Boot Record)是一种比较老的磁盘分区方式,最初设计用于IBM PC-DOS操作系统。MBR使用32位的分区表来记录磁盘上的分区信息,其中每个分区最大支持2TB的容量。MBR分区表的结构非常简单,只有446个字节的引导代码、64个字节的分区表和2个字节的结束标识符。MBR分区表中只能记录最多4个主分区或3个主分区和1个扩展分区,扩展分区可以包含多个逻辑分区。MBR分区方案已经存在了很长时间,它可以被大多数操作系统所支持,包括Windows、Linux和macOS等。
GPT(GUID Partition Table)是一种新的磁盘分区方式,它是UEFI标准中规定的一种分区方案。GPT使用64位的分区表来记录磁盘上的分区信息,其中每个分区最大支持9.4ZB的容量。GPT分区表结构比MBR更为复杂,它包括了一个主引导分区、一个备份主引导分区、一个主分区表和备份主分区表。GPT分区方案支持最多128个分区,而且没有主分区和扩展分区的概念,所有的分区都是基本分区。GPT分区方案支持UEFI启动方式,同时也可以被大多数操作系统所支持,包括Windows、Linux和macOS等。

  • 总的来说,MBR和GPT是两种不同的磁盘分区方案,它们的主要区别在于支持的最大容量、分区数量、分区表结构等方面。如果你的计算机支持UEFI启动方式,那么建议使用GPT分区方案。如果你的计算机不支持UEFI启动方式,那么只能使用MBR分区方案。

GPT分区方案则使用gdisk进行分区,MBR分区方案则使用fdisk进行分区

磁盘格式化

不同的文件类型使用不同的格式化指令

  • XFS:mkfs.xfs,例如:mkfs.xfs /dev/sdb1
  • EXT4:mkfs.ext4,例如:mkfs.ext4 /dev/sdb1

文件系统挂载与卸载

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)上
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录
# 挂载 mount [文档名] [目录]
mount /dev/sdb1 /momo
# 卸载 umount [文档名] 或者 [目录]
umount /dev/sdb1
umount /momo

设置开机挂载

image.png

[装置/UUID] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]

1664157417096.png

列数名称解释
第一列设备ID第六步中的UUID
第二列挂载点挂载的目录
第三列文件系统类型格式化分区时,格式化的文件类型(ext4)
第四列挂载参数auto: 系统自动挂载,fstab默认就是这个选项
defaults: 最常见参数,可以满足需要大多数文件系统使用
noauto 开机不自动挂载
nouser 只有超级用户可以挂载
ro 按只读权限挂载
rw 按可读可写权限挂载
user 任何用户都可以挂载
第五列dump备份设置当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作;
第六列开机磁盘检查顺序数字越小越优先检查,如果两个分区的数字相同,则同时检查。当其值为0时,永远不检查。根”/”分区永远都为1。其它分区从2开始。

挂载操作实例(普通模式,不支持动态扩容)

  1. 查看服务器磁盘信息

执行命令:fdisk -l
找到需要挂载的盘,例如图中挂载的盘为20G,名称为/dev/sdb
1686288169891.png

  1. 对磁盘进行分区

执行命令:fdisk /dev/sdb
1686288471135.png

执行以下步骤,如图(1-7)

1. 输入命令 n 后回车,此步骤为创建一个新分区
2. 默认为p,直接回车,此步骤为创建逻辑分区
3. 创建分区,默认为1,直接回车即可
4. 开始位置,直接回车即可
5. 结束位置,直接回车即可
6. 查看分区信息
7. 输入命令 w 后回车,此步骤为保存
  1. 查看磁盘分区情况

执行命令:fdisk -l
/dev/sdb1即为刚刚创建好的分区
1686288781551.png

  1. 格式化分区

执行命令:mkfs.xfs /dev/sdb1
1686289189011.png

  1. 创建挂载目录并挂载

创建挂载目录:mkdir /momo
挂载:mount /dev/sdb1 /momo
1686289387433.png

  1. 查看磁盘的UUID

执行命令:blkid
1686289437958.png

  1. 设置开机自动挂载磁盘

执行命令:vim /etc/fstab
1686289637672.png

文件与文件系统的压缩,打包

Linux系统常见的压缩命令

*.Z compress 程序压缩的文件;
*.zip zip 程序压缩的文件;(常见)
*.gz gzip 程序压缩的文件;(常见)
*.bz2 bzip2 程序压缩的文件;
*.xz xz 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;(常见)
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩(常见)
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩

gzip

gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。

# gzip [-cdtv#] 文件名

-c:将压缩的数据输出到屏幕上
-d:解压缩的参数
-t:查看文件是否有错误
-v:显示压缩比
-#:#为数字,-1最快、-9最慢

tar

Linux下的归档使用工具,用来打包和备份。

# 常用的命令
# 解压缩
tar -xv -f test.tar 
# 打包
tar -czv -f test.tar index.html test2.txt test3.txt

-c:打包
-x:解压
-z:透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j:透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J:透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz特别留意, -z, -j, -J 不可以同时出现在一串指令列中

shell脚本

通过一次执行多条命令并经过一定的运算与逻辑处理,帮我们一次性完成某项任务
shell.sh文件必须具备读和执行的权限(rx)

执行

  • 直接指令下达
    • 绝对路径:/momo/test/shell.sh
    • 相对路径:进入/momo/test目录下,执行./shell.sh
    • 变量【path】,设置环境变量
  • 使用bash程序来执行
    • bash shell.sh
    • sh shell.sh

简单练习

#!/bin/bash
# -------- 基本信息 ----------
# 描述:
# 	第一个shell脚本
# 作者:qin

echo "Hello World!"

exit "----执行成功----"
  1. 指定脚本解释器:以 #!/bin/bash 开头的第一行,用于指定脚本解释器。
  2. 注释:用于解释脚本的用途、作者、版本等信息,以及对脚本中各部分的解释。
  3. 变量定义:用于定义变量,可以是局部变量或全局变量。
  4. 函数定义:用于定义函数,可以是内置函数或自定义函数。
  5. 主体代码:包含了脚本的主要执行逻辑,包括各种命令、流程控制语句、循环语句等。
  6. 退出状态码:用于表示脚本执行的结果,通常在脚本的最后一行使用 exit 命令来设置。

良好的注释习惯

  • script 的功能;
  • script 的版本信息;
  • script 的作者与联络方式;
  • script 的版权宣告方式;
  • script 的 History (历史纪录);
  • script 内较特殊的指令,使用『绝对路径』的方式来下达;
  • script 运作时需要的环境变量预先宣告与设定。

简单范例

对谈式脚本:变量内容由用户决定

read指令

#!/bin/bash
# 功能描述:
#       用户输入名字和姓氏,程序显示全名
# 作者:qin
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "请输入你的名字: " name # 提示使用者输入
read -p "请输入你的姓式: " surname # 提示使用者输入
echo -e "\n你的全名是: ${surname} ${name}" # 结果由屏幕输出

随日期变化:利用date进行文件的建立

#!/bin/bash

echo -e "根据提示创建三个日期文件"

read -p "请输入文件名" fileuser

filename=${fileuser:-"filename"}

date1=$(date --date='2 days ago' +%Y%m%d)
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)

file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}

touch "${file1}"
touch "${file2}"
touch "${file3}"

echo "文件创建完成"
  • date --date=‘2 days ago’:显示两天前的日期
  • touch:创建新的空文件

使用test指令的测试功能

# 检查 /momo 是否存在
test -e /momo && echo "exist" || echo "Not exist"

详细参数说明

选项含义/作用
校验【文档】是否存在,如:test -e filename
-e校验【文档】是否存在(常用)
-f校验【文档】是否存在且为文件(常用)
-d校验【文档】是否存在且为目录(常用)
-b校验【文档】是否存在且为一个 block device 装置
-c校验【文档】是否存在且为一个 character device 装置
-S校验【文档】是否存在且为一个 Socket文件
-p校验【文档】是否存在且为一个FIFO文件
-L校验【文档】是否存在且为连结档
侦测【文档】是否具有某项权限,如:test -r filename
-r侦测【文档】是否存在且具有【可读】权限
-w侦测【文档】是否存在且具有【可写】权限
-x侦测【文档】是否存在且具有【可执行】权限
-u侦测【文件】是否存在且具有【SUID】的属性
-g侦测【文件】是否存在且具有【SGID】的属性
-k侦测【文件】是否存在且具有【Sticky bit】的属性
-s侦测【文档】是否存在且为【非空白文档】
比较两个文件,如:test file1 -nt file2
-nt判断 file1 是否比 file2 新
-ot判断 file1 是否比 file2 旧
-ef判断 file1 与 file2 是否为同一文件
比较两个整数,如:test n1 -eq n2
-eq是否相等
-ne是否不相等
-gtn1 大于 n2
-ltn1 小于 n2
-gen1 大于等于 n2
-len1 小于等于 n2
判断字符串
test -z string判断字符串是否为空,为空则返回true
test -n string判断字符串是否为空,非空则返回true
test str1==str2判断str1与str2是否相等
test str1 != str2判断str1与str2是否不同
多重条件判断,例如:test -r filename -a -x filename
-a(and)两个条件同时成立
-o(or)两个条件只有一个成立即可
!取反,如:test ! -x file,当file不具有x时,返回true

使用 [] 符号判断

[ -z "${HOME}" ]; echo $?
  • 在中括号 [] 内的每个组件都需要有空格来分隔;
  • 在中括号内的变数,最好都用双引号括起来;
  • 在中括号内的常数,最好都用单或双引号括起来;

脚本中的默认变数($0,$1…)

  • $#:代表指令后边的参数个数
  • $@:显示全部参数
  • $*:显示全部参数
  • ${n}:显示第n个参数

执行命令
sh how_params.sh param1 param2 param3
1686550368093.png

#!/bin/bash

echo "井号:$#"
echo "艾特号:$@"
echo "米号:$*"
echo "1:${1}"
echo "2:${2}"
echo "3:${3}"

条件判断式

if … then

if [ 判断条件 ]; then
	当条件成立时执行的操作
fi
  • $$ 代表 AND
  • || 代表 OR
[ "${yn}" == "Y" -o "${yn}" =="y" ]
# 可以替换为
[ "${yn}" == "Y" ] || [ "${yn}" == "y" ]

# 单一的条件判断
if [ 判断条件 ]; then
	当条件成立时执行的操作
else
	当条件不成立时执行的操作
fi

# 多种条件判断
if [ 判断条件一 ]; then
	当条件一成立时,执行的操作
elif [ 判断条件二 ]; then 
	当条件一不成立,条件二成立时,执行的操作
else
	当条件一和条件二均不成立时,执行的操作

case … esac

case $变量名称 in 
	"第一个变量内容")
   程序段
   ;;
  "第二个变量内容")
   程序段
   ;;
  *)
   不包含第一个变量内容与第二个变量内容的其他程序执行段
   exit 1
   ;;
esac

function

function fname() {
	程序段
}

不定循环(while do done 或 until do done)

符合【判断条件】开始执行程序段,直到不符合条件为止

while [ 判断条件 ]
do
	程序段
done

不符合【判断条件】开始执行程序段,直到符合条件为止

until [ 判断条件 ]
do
	程序段
done

固定循环(for … do … done)

# 第一次循环 $var的内容为 con1 第二次循环 $var的内容为 con2  ...
for var in con1 con2 con3 con4 ...
do
	程序段
done

数值处理(for … do … done)

for (( 初始值; 限制值; 执行步阶))
do
	程序段
done
  • 初始值:某个变量在循环当中的初始值,直接以类似i=1
  • 限制值:当变量的值在这个限制值的范围内,就继续进行循环。例如 i<= 100;
  • 执行步阶:每进行一次循环时,变量的变化量。例如 i = i + 1
#!/bin/bash

for (( i=0; i<=10; i++))
do
    n=$((${i} + 1))
    echo "第${n}次循环"
done

debug追踪

# sh [-nvx] xxx.sh

-n:不执行脚本,只检查语法
-v:执行脚本前,先将脚本的内容输出到屏幕上
-x:将使用到的脚本内容输出到屏幕上

Linux账号管理与ACL权限设定

Linux的账号和群组

使用者账号

Linux中有/etc/passwd和/etc/shadow两个文件记录账号的各类信息

  • /etc/passwd:每一行代表一个账号,每行使用 : 分隔,以下按照顺序介绍
    • 账号名称:就是登录时使用的账号

    • 密码:早期的Unix系统的密码就是放到这个字段上,因为隐私性就将密码以密文的方式存到/etc/shadow文件中,这里则使用 x 填充

    • UID:使用者标识符
      | id范围 | ID使用者的特性 |
      | — | — |
      | 0 | 系统管理员,就是root账号对应的UID |
      | 1~999 | 系统账号 |
      | 1000~60000 | 可登录账号,给一般使用者账号 |

    • GID:所属群组的标识符

    • 用户信息说明栏:用来解释这个账号的用途或者意义

    • 家目录:账号登陆之后会默认在家目录下

    • shell:当用户登入系统后就会取得一个 Shell 来与系统的核心沟通以进行用户

的操作任务。

  • /etc/shadow:主要存放账号的密码信息
    • 账号名称:与/etc/passwd中的账号对应
    • 密码:经过加密的密码
    • 最近修改密码的日期:以时间戳的形式记录
    • 密码不可变动的天数:密码更改后几天之内不允许再次更改密码
    • 密码需要重新更改的天数:就是密码在几天后会失效,需要重置密码
    • 密码需要变更期限前警告的天数:密码有效期快到的时候会提醒,具体时间看设定的天数为多少
    • 密码过期后的账号宽限时间:密码过期后 n 天内还可以使用
    • 账号失效日期:过失效日期后,账号则会失效
    • 保留:系统保留字段

群组

  • /etc/group:记录群组信息,每一行代表一个群组,以 :分隔
    • 组名
    • 群组密码
    • GID
    • 这个群组支持的账号名称

账号和群组管理

groupadd 用于创建一个新的工作组

groupadd [用户组名]

groupdel 用于删除指定的工作组

注:删除的用户组中不能包含用户,否则会失败
groupdel [用户组名]

useradd 用于创建的新的系统用户

选项

-d<登入目录>:指定用户登入时的启始目录;
-e<有效期限>:指定帐号的有效期限;
-g<群组>:指定用户所属的群组;
-M:不要自动建立用户的登入目录;
-s<shell>:指定用户登入后所使用的shell;
-u<uid>:指定用户id。

实例

# 如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。
useradd mysql
# 创建一个mysql用户并加入root组
useradd -g root mysql

userdel 用于删除系统用户

userdel mysql

passwd 用于设置用户的认证信息,包括用户密码、密码过期时间等

选项

-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。

拓展信息
与用户、组账户信息相关的文件
存放用户信息:

/etc/passwd
/etc/shadow

存放组信息:

/etc/group
/etc/gshadow

用户信息文件分析(每项用:隔开)

例如:jack:X:503:504:::/home/jack/:/bin/bash
jack  //用户名
X  //口令、密码
503  //用户id(0代表root、普通新建用户从500开始)
504  //所在组
:  //描述
/home/jack/  //用户主目录
/bin/bash  //用户缺省Shell

组信息文件分析

例如:jack:$!$:???:13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的口令
13801  //创建日期与今天相隔的天数
0  //口令最短位数
99999  //用户口令
7  //到7天时提醒
*  //禁用天数
*  //过期天数

实例

# 设置密码
passwd mysql

su 切换用户

su [用户名]

sudo 用来以其他身份来执行命令,预设的身份为root

软件安装RPM,SRPM,YUM

RPM与SRPM

RPM:已经编译并打包好的安装程序
SRPM:没有编译包含原始码的安装程序

文件格式文档名格式是否直接安装内含程序类型可否修改参数并编译
RPMxxx.rpm已编译不可
SRPMxxx.src.rpm未编译之原始码

RPM的优点

  • RPM内含有已经编译过的程序与配置文件等数据,免除重新编译的困扰
  • RPM在安装前,会检查系统的硬盘容量、操作系统版本等,可以避免文件被错误安装
  • RPM文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件
  • RPM管理的方式使用数据库记录RPM文件的相关参数,便于升级、移除、查询与验证
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qin0264

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值