基础知识
1、文件系统
文件系统概念
概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的 方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进 行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的 存取,安全控制,日志,压缩,加密等
类型
1、linux常见类型:
ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
ext4:是 ext 文件系统的最新版。使用巨型文件 (16TB)、最大1EB的文件系统,EXT4是Linux系统下的日志文件系统
xfs:SGI,支持最大8EB的文件系统,根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
swap iso9660 光盘 btrfs(Oracle) reiserfs
2、windows常见类型
FAT32:最多只能支持16TB的文件系统和4GB的文件
NTFS:最多只能支持16EB的文件系统和16EB的文件
exFAT:
3、UNIX
FFS(fast) UFS(unix) JFS2
4、网络文件系统
NFS CIFS
5、集群文件系统
fastdfs ceph moosefs mogilefs glusterfs lustre
文件系统管理工具:mkfs.ext4 mkfs.xfs mkfs.vfat
ls 简单查看
-l 详细信息
-h 具体大小
-a 全部文件
2、权限管理
UGO权限
文件权限设置: 可以赋于某个用户或组 能够以何种方式 访问某个文件
属主 属组 其它
u g o
rwx rwx rwx
r - 可读 (4)
w - 可写 (2)
x - 可执行 (1)
更改权限 chmod 注意:修改文件的权限时,要保证有目录的x权限。
更改属主、属组
要求修改a.txt文件的属主为rng 属组为IT ?
# chown rng:IT a.txt
ACL权限
设置单独用户和组对于单个文件的具体rwx基础权限
# setfacl
选项
-m //添加acl权限
-x //删除acl权限
-b //删除所有的acl权限
案例
1、给tom用户设置对a.txt有rw的权限
# setfacl -m u:tom:rw a.txt
2、给IT组设置对a.txt有rx权限
# setfacl -m g:IT:rx a.txt
3、删除tom用户给a.txt 设置的acl权限
# setfacl -x u:tom a.txt
4、删除a.txt文件上的所有acl权限
# setfacl -b a.txt
# getfacl /zabbix/ //查看文件或者目录的acl权限
getfacl: Removing leading '/' from absolute path names
# file: zabbix/
# owner: zabbix
# group: nagcmd
user::rwx #属主权限
user:tomcat:r-x #tomcat的acl权限
group::r-x #属组权限
mask::r-x
other::--- #其他人权限
问题:不小心操作 chmod a-x /usr/bin/chmod ? 怎么恢复 ?
方法1:
# setfacl -m u:root:rwx /usr/bin/chmod
# chmod a+x /usr/bin/chmod
方法2:
# cp /usr/bin/cat /usr/bin/cat.bak
# cp /usr/bin/chmod /usr/bin/cat.bak //按y进行覆盖
# cat.bak a+x /usr/bin/chmod
SUID SGID skity
SUID
给可执行文件设置suid权限,“类似给单个命令进行提权”
# chmod u+s
# chmod 4000
案例:
给whoami命令进行单独提权
# chmod u+s /usr/bin/whoami
# whoami //显示当然登入的用户是root
# su - zabbix
$ whoami
root //由于whoami被root用户赋予suid权限,所以相当于现在执行whoami命令还是root本身
SGID
给目录设置,任何用户在该目录下创建文件,会继承其属组
【一定要有x权限存在】
# chmod g+s 目录
# chmod 2000 目录
案例:
配置一个目录,该目录任何用户都可以进行创建文件,但是自动修改文件的属组为IT
# mkdir /test
# groupadd IT
# chown :IT /test
# chmod g+s /test
SKITY
给目录设置,任何用户都不能随意删除其他用户创建的文件
【一定要有x权限存在】
案例
创建目录,并按以下要求设置: /data 目录属于 IT 组 , 目录可以被 IT 的组成员读取、写入和访问,其他任何用户不具备这些权
限(root 用户除外) 在/data 目录中创建的文件的所属组自动变成 IT 组
# mkdir /data
# chmod g=rwx /data
# chmod o= /data
# chown :IT /data
# chmod g+s /data
特殊权限 chattr
对root用户生效
# chattr +a file100
# chattr +i file200
# lsattr file300
3、进程管理
ps -ef
ps -aux
netstat -tnlp
nice值 (-19~20)
nice值越低,抢占资源能力越高
相关命令
nice -- 运行时直接设置nice值
用法: nice -n 数字 command
renice -- 对于已经运行的,调整nice值
用法: renice 数字 PID
bg 任务编号 : 指定任务在后台运行
fg 任务编号 : 将后台运行的命令变成前台运行
[2]+ Stopped firefox 192.168.1.250
[2]+ firefox 192.168.1.250 &
[2]+ Running firefox 192.168.1.250 &
firefox 192.168.1.250
A. kill案例1: 杀死vim进程
[root@system_manager ~]
root 5594 0.1 0.2 151492 5120 pts/0 S+ 11:37 0:00 vim /root/b.txt
root 5609 0.0 0.0 112720 984 pts/1 S+ 11:37 0:00 grep --color=auto vim
[root@system_manager ~]
[root@system_manager ~]
root 5657 0.0 0.0 112720 984 pts/1 S+ 11:38 0:00 grep --color=auto vim
B. kill案例2: 杀死远程sshd连接
[root@system_manager ~]
root 1162 0.0 0.2 112796 4296 ? Ss 10:59 0:00 /usr/sbin/sshd -D
root 3665 0.0 0.2 160884 5716 ? Ss 11:01 0:00 sshd: root@pts/1
root 5764 0.0 0.0 112708 972 pts/0 S+ 11:40 0:00 grep --color=auto sshd
[root@system_manager ~]
[root@system_manager ~]
root 3665 0.0 0.2 160884 5716 ? Ss 11:01 0:00 sshd: root@pts/1
root 5795 0.0 0.0 112708 972 pts/0 S+ 11:40 0:00 grep --color=auto sshd
[root@system_manager ~]
c.killall案例:
[root@system_manager ~]
root 6000 0.0 0.2 151568 5232 pts/0 S+ 11:43 0:00 vim file1.txt
root 6052 0.0 0.2 151564 5224 pts/1 S+ 11:44 0:00 vim file2.txt
root 6281 0.0 0.0 112720 980 pts/3 S+ 11:46 0:00 grep --color=auto vim
[root@system_manager ~]
[root@system_manager ~]
root 6313 0.0 0.0 112720 980 pts/3 S+ 11:46 0:00 grep --color=auto vim
d.pkill案例:
[root@system_manager ~]
17:29:06 up 21 min, 4 users, load average: 0.00, 0.03, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 107月18 ?xdm? 28.49s 0.26s /usr/libexec/gnome-session-binary --sessio
root pts/0 10.18.41.54 17:18 1:54 0.04s 0.04s -bash
root pts/1 10.18.41.54 17:10 1:46 0.06s 0.06s -bash
root pts/2 10.18.41.54 17:11 2.00s 0.12s 0.01s w
[root@system_manager ~]
[root@system_manager ~]
17:29:35 up 22 min, 3 users, load average: 0.00, 0.03, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 107月18 ?xdm? 28.43s 0.26s /usr/libexec/gnome-session-binary --sessio
root pts/1 10.18.41.54 17:10 2:15 0.06s 0.06s -bash
root pts/2 10.18.41.54 17:11 7.00s 0.13s 0.02s w
4、网络设置
网络配置
ifconfig:
1、查看信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.105.225 netmask 255.255.255.0 broadcast 192.168.105.255
inet6 fe80::20c:29ff:fe64:6f0e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:64:6f:0e txqueuelen 1000 (Ethernet)
RX packets 534821 bytes 684553169 (652.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 227482 bytes 183585898 (175.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 6 bytes 300 (300.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6 bytes 300 (300.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
"ens33"中的"en"是""EtherNet”"的缩写,表示网卡类型为以太网,"s"表示热插拔插槽上的设备hot-plugslot 数字“33”表示插槽编号。
inet 192.168.105.225 ip地址
inet6 fe80::20c:29ff:fe64:6f0e ipv6
netmask 255.255.255.0 子网掩码
broadcast 192.168.105.255 广播地址
ether 00:0c:29:64:6f:0e mac地址
RX packets 534821 bytes 684553169(652.8MiB) 接受数据包个数、大小统计信息
RX errors 0 dropped 0 overruns 0 frame 0 异常接受包的个数、如丢包量、错误等
TX packets 227482 bytes 183585898 (175.0 MiB) 发送数据包个数、大小统计信息
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 发送包的个数、如丢包量、错误等
2、设置网络接口的ip地址,子网掩码
ifconfig ens33 ip地址 netmask 子网掩码
ifconfig ens33 ip地址 /子网掩码长度
3、设置虚拟网络接口
ifconfig ens33:1 ip地址
4、禁用或者重新激活网卡
hostname:
1、修改主机名
临时生效
永久修改主机名称
或
【主机名】
2、查看ip
route:
Linux中的路由表决定着本机向其它主机、其它网络发送数据的去向,是排除网络故障的重要信息
route
1、查看路由表信息
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
192.168.105.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
当目标网段为"default"时,表示此行是默认网关记录:当下一跳为""gateway"时,表示目标网段是与本机直接相连的。但是,直接执行"route"命令无法直接看出默认网关地址
destination 对应目标网段的地址
gateway 对应下一跳路由器地址
iface 对应发送数据的网络接口
2、增加/删除到指定网段的路由记录
netstat
查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
-t:查看TCP (Transmission Control Protocol,传输控制协议)相关的信息
-n:以数字的形式显示相关的主机地址、端口等信息
-l:显示处于监听Listenin状态的网络连接及端口信息
-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r:显示路由表信息.
-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-u:显示 UDP (User Datagram Protocol,用户数据报协议〉协议相关的信息
# netstat -tnlp
# netstat -anpt
测试网络连接
ping
-c:指定次数
-i:每隔多长时间发送数据包
Destination Host Unreachable:表示目的主机不可达,可能目标地址不存在或者主机已经关闭
Metwork is unreachable:表示没有可用的路由记录(如默认网关),无法达到日标主机所在的网络
Request timeout:目标主机有严格的防火墙限制时,或者当网络中存在影响通信过程稳定性的因素(如网卡故障、病毒或网络攻击等)
nslookup 域名解析 bind-utils(包名)

注意:最多只能写三行
当然也可以
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network

dig 解析详细过程DNS信息收集 bind-utils(包名)
本地主机映射文件 /etc/hosts
当客户端访问域名时,首先搜索本地dns解析(即/etc/hosts下的映射关系,找不到后再从DNS服务器中寻找)
因此许多项目为了方便记忆,会在项目中用自定义的域名来代替开发IP
静态ip
防火墙:
查看状态: # systemctl status firewalld
立即关闭: # systemctl stop firewalld
开机不启动: # systemctl disable firewalld
SELINUX:
查看状态:
立即关闭:
开机不启动:
常见网络接口
enp3s0 以太网接口 eth0,eth1
wlan0 无线接口
lo 本地回环接口 127.0.0.1 localhost
virbr0 桥接接口
vmnet1 vmware提供的
vmnet8 vmware提供的
修改网络信息
ifconfig ens33 192.168.10.100临时配置ip,重启失效。
5、文件管理
基础知识

bin 存放命令 - 普通用户的命令
boot linux启动内核文件
dev 存放设备
etc 存放系统配置文件
home 存放普通用户的家目录
root 超级管理员root的家
sbin 存放命令 - 管理员用户的命令
tmp 临时目录
var 动态信息,内存,进程
vim编辑器尾行模式:
:wq
:q
加上 ! 代表强制
1、替换修改内容
:1 s/root/ROOT/g
:1,5 s/root/ROOT/
:% s/root/ROOT/g
(匹配的内容支持正则匹配)
:% s/[0-9]
2、功能
: set number
: set list
vim编辑器可视块模式:
批量添加:
ctrl + v -> 方向键选中块 -> 大写的i (shift + i) -> 输入添加的内容 -> Esc Esc键
高级命令

管道
上图为管道图示,将上一个命令的输出作为下一个命令的输入
# find / -name mysql | xagrs -I {} rm -rf {} 删除mysql
# cat /etc/passwd | head -5 查看前五行
# cat /etc/passwd | tail -5 查看后五行
文件查找find
-name
-type
-size
-group
-user
-empty
-mtime
grep过滤
功能:打印出匹配到"关键字"的行
写法:grep [选项] 关键字 文件
模式:
root
^root
root$
^$
选项:
-i
-v
-n
-q
-c
wc统计
功能:统计行数,字符数,单词数
语法: wc [选项] 文件
选项:
-l
-c
sort排序
功能: 将文件中的行进行排序后输出
语法: sort [选项] 文件
选项:
-n
-r
-t
-k
uniq去重
功能: 过滤掉连续重复的行
语法: uniq [选项] 文件
选项
-c //统计相同的行的行数,行数写在最前面
-i //不区分大小写
-u //只打印不重复的行
cut处理列
功能:打印列
语法:cut 选项 文件
选项:
-d
-f
tr处理字符
功能: 从标准输入中去替换、缩减或删除字符,并将结果写到标准输出
语法:tr [选项] set1 [set2]
选项:
-d
-s
-t
tee
功能:将从标准输入中读取到的内容同时写入到标准输出和文件中
语法:tee [选项] 文件
选项:
-a //追加到文件中,默认是覆盖
xargs 传参
# echo "tom jerry"
tom jerry
# echo "tom jerry" | xargs -n1 id
uid=8889(tom) gid=8892(tom) 组=8892(tom),8890(WEB)
uid=1001(jerry) gid=8890(WEB) 组=8890(WEB),10(wheel)
参数以换行隔开
# cat a.txt
123.txt
123.html
123.py
# cat a.txt | xargs -I {} touch {}
# ls
123.html 123.py 123.txt
打包压缩 zip unzip
对于文件夹最好打包上传,文件数量过多时传输会较慢。
# zip -r tmp.zip /tmp zip压缩目录时加上-r
# unzip tmp.zip
tar
# tar caf tmp.zip /tmp
# tar xf tmp.zip -C /usr/local/
系统安装和配置
1、安装
CentOS-7-x86_64-Minimal-2009.iso
ubuntu-20.04.6-live-server-amd64.iso
openEuler-20.03-LTS-SP1-x86_64-dvd.iso
openKylin-1.0-x86_64.iso
在虚拟机上安装即可
2、分区
分区类型
MBR:
最大支持2TB以内的硬盘
主分区: 编号1-4,与扩展分区的和不能超过4个,可直接格式化使用
扩展分区:编号1-4,最多只能有一个,不能直接格式化使用
逻辑分区:在扩展分区上划分,编号从5开始, 可格式化使用
分区不是无限分的,对于串口设备,最多15个分区,1-4编号是主分区或者是扩展分区,5-15编号是逻辑分区(MSDOS分区表格式)
GPT 最多可分128个分区,没有主分区扩展分区之说
因此一般来说,有/分区,/boot分区,swap分区,home分区 四个分区,如下图
[root@citycloud dev]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 99G 0 part
│ ├─centos-root 253:0 0 450G 0 lvm /
│ ├─centos-swap 253:1 0 7.9G 0 lvm [SWAP]
│ └─centos-home 253:2 0 41.1G 0 lvm /home
└─sda3 8:3 0 400G 0 part
└─centos-root 253:0 0 450G 0 lvm /
sr0 11:0 1 1024M 0 rom
分区步骤
分区-使用过程:
1.分区 fdisk 设备名
2.通知内核重读分区表 partprobe
3.格式化 mkfs.xfs
4.挂载使用 mount /dev/sda1 /boot
swap分区制作
用文件制作
# dd if=/dev/zero of=/tmp/swap.txt bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.92631 s, 547 MB/s
# mkswap /tmp/swap.txt
# swapon /tmp/swap.txt
写入开机自启
# vim /etc/fstab
/tmp/swap.txt swap swap defaults 0 0
卸载swap
# swapoff /tmp/swap.txt
# rm -rf /tmp/swap.txt
删除/etc/fstab制作的swap行
# swapoff -a 关闭所有swap
LVM
一、LVM的创建过程
1)添加硬盘或者创建分区,通知内核
2)创建物理卷 PV (pvcreate)
3)创建卷组 VG (vgcreate)
4)创建逻辑卷 LV (lvcreate)
5)创建文件系统 (mkfs.xfs)
6)挂载使用 (mount autofs /etc/fstab)
lvm扩容
pvcreate /dev/sdb2
vgextend centos /dev/sdb2
lvextnd -L 原始大小+扩容大小 /dev/centos/root
注意:xfs不支持缩容
3、文件系统格式化
mkfs即可
4、网络设置
做桥接和NAT地址转换均可,能保证在局域网内都能访问
用户和权限管理
1、创建用户、组
存放用户和组的文件
/etc/passwd
/etc/group
创建用户
# useradd 用户名
选项
-u
-d
-M
-g
-G
-s
创建组
# groupadd 组名
---选项
-g
删除用户
# userdel 用户名
选项
-r
删除组
# groupdel 组名
【注意:如果组作为用户的基本组,不可被删除】
2、组成员管理
# usermod 选项 用户名
选项
-g
-G
-aG
# gpasswd 选项 组名
选项
-a
-d
-M
3、权限和访问控制
给普通用户提权
方法1、把普通用户添加到wheel组
方法2、修改配置文件 /etc/sudoers
普通用户 ALL=(ALL) ALL
软件包管理
我们在实际使用过程中要学会线上安装和离线安装
线上用yum,线下下载rpm包(如mysql安装)、tar.gz等
1、yum使用
# cd /etc/yum.repos.d/
想安装啥软件,添加repo仓库即可,aliyun仓库源能满足大部分需求,小部分的需要我们自己寻找。
# yum makecache 做缓存
# yum clean all 清除缓存
# yum search 包名 找包
# yum repolist 校验repo仓库有无问题
# yum remove 包名 -y 删除包
# rpm -qa | grep 包名 | xargs -I {} rpm -e {} --nodeps 删除包
打开Yum缓存功能:安装完软件之后,软件不会被删除(默认安装完之后,不会保留安装包)
# vim /etc/yum.conf 修改下面参数的值为1,软件会被保存到cachedir指定的目录下
keepcache=1
自己制作yum源
#mkdir /myyum
把想用yum安装的软件包拷贝到目录下
#createrepo /myyum //此目录就可以作为yum源了。
2、rpm 使用
安装
# rpm -ivh 包全名
# rpm -Uvh 包全名
卸载
# rpm -e 包名
--nodeps
rpm包无法自动解决依赖性问题,需要手动解决,非常麻烦..
Shell脚本编写与自动化
1、shell基础
shell是一种命令解释器,shell也是一种编程语言,shell,python,perl三种
# cat /etc/shells

算术运算
\+ - * / %(取余,取模) 幂(**/^)
1). echo $[] 或 echo $(()) 只能计算整数
2). bc 可计算小数 ; 例:
3). expr 10 + $num 运算符两边要有空格,通常用来判断参数是否整数
4). let 通常作变量赋值
调试shell脚本
2、shell变量
1.本地变量
本地变量也叫自定义变量,用户根据自己的需求自己去定义的变量
作用范围(作用域):在整个shell脚本中生效. 如果是在命令行定义的变量,作用范围是当前shell
定义变量:变量名字=变量值 //注意:等号两边一定不能有空格
2.环境变量
作用范围:当前shell及其子shell
常用环境变量:
USER /当前登录的用户
UID /当前登录的用户uid
HOME /当前登录的用户家目录
HOSTNAME /当前的主机名
PWD /当前所在的目录
PS1 /
3.位置变量
$0 —— 表示当前运行的脚本或者命令本身
$1~${10} —— 表示脚本的位置参数,$1就是第一个参数,依此类推 变量传参
$# —— 表示参数个数
$@和$* —— 表示参数的列表
"$@" —— 将每一个参数看成独立的字符串打印,(纵向打印)
"$*" —— 将所有参数看成一个字符串,(横向打印)
4.预定义变量
$$ ——查看当前shell的pid
$? —— 上一条命令执行状态的返回值
执行状态返回值(0-255),分两类
0:正确执行
1-255:错误执行