Linux-系统管理
用户管理
添加用户(需要在 root 用户下执行,其他普通用户无法创建用户)
# 不会创建用户目录、设定密码等
useradd abc
# 会创建用户目录、设定密码等
adduser abc
设置密码
passwd abc
查看某一个用户是否存在
id abc
# uid=0(root) gid=0(root) groups=0(root),113(docker)
添加用户会经过那些操作
- 会在 /etc/passwd 中添加用户
cat /etc/passwd
# abc:x:1002:1002::/home/abc:/bin/sh
- 会在 /etc/shadow 中添加用户
cat /etc/shadow
# abc:!:18510:0:99999:7:::
删除用户
# 不会删除用户目录
userdel abc
# 删除用户目录
userdel -r abc
修改用户属性
- 修改用户目录
usermod -d /home/dd abc
- 修改用户所属的组
usermod -g group1 abc
新建用户组
groupadd group1
切换用户
# - 表示完全切换,会切换到该用户的目录下,如果没有 - 则还会在当前目录
su - abc
给特定用户执行某些命令的权限
visudo
# 用上面的命令可以给某些用户赋予某些命令的权限
/etc/passwd 文件解析
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
# 用户名/用户是否需要密码进行验证/uid/gid/注释/用户目录/命令解释器
# sbin/nologin 是不能被登录的
在新建用户时可以不用 adduser 命令,直接编辑该文件也可以起到新增用户的目的
/etc/shadow 文件解析(用来保存用户和密码的关系)
mysql:!:18493424:0:99999:7:::
user1:$6$9JTohwDk$baTsdfsVJRRfSds6PCdF0xBQlqslTekjWK9xT7/yIoTTUv45raWwtZRpwtMn5mNwjULCvL2XRJ9Nj3kFhekJBsjgBfq.:18511:0:99999:7:::
# 用户名/加密后的密码
# 相同的密码加密后是不同的
/etc/group 文件解析(用户组文件)
mysql:x:116:
user1:x:1002:
# 用户组名称/是否需要密码/gid/其他组设置(一个用户可以属于多个组)
文件权限
文件权限格式
ls -l
-rwx------+ 8 xx staff 256 Mar 6 2020 Movies
drwx------+ 10 xx staff 320 Mar 6 2020 Music
# 第一位,表示文件类型
# 后面接着的9位 rwx------ 表示权限,每三个字符为一组,分别表示用户对该文件的权限、该组对文件的权限和其他用户的权限
# xx 用户
# staff 用户组
文件类型
-普通文件
d目录文件
b块特殊文件
c字符特殊文件
l符号链接
f命令管道
s套接字文件
文件权限的表示方法
数字权限的表示方法
- r=4
- w=2
- x=1
目录权限的表示方法
x可以进入目录
rx显示目录内的文件名
wx修改目录内的文件名
修改文件属主和属组的方法
- 修改属主
chown user1 /test
- 修改属组
chgrp :user1 /test
修改权限
u属主
g属组
o其他用户
a包括上述三种
+增加权限
-减少权限
=设置权限
# 为test的属主设置w权限
chmod u+w ./test
# 为属主、属组合其他用户设置只有wr权限
chmod a=wr ./test
linux 中默认的文件权限是 644, 是 666-umask (022)=644,既 rw-r--r--
如果属主权限和属组权限冲突,则以属主权限为主
特殊权限
SUID用户可执行的二进制文件,执行命令时获取文件属主的权限
root@master:~# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 23 2019 /usr/bin/passwd
SGID用于目录,在该目录下新建的文件和目录,权限自动更改为该目录的属组,常用于共享文件
SBIT用户目录,在该目录下新建的文件和目录,只有 root 和自己可以删除
ls -l /
drwxrwxrwt 13 root root 4096 Sep 7 18:21 tmp
网络管理
网络状态查看工具
-
net-tools (centos 7 之前推荐的工具)
- ifconfig-eth0 第一块网卡(根据网卡接入方式不同,名称也会不同)
- route
- netstat
-
iproute2 (centos 7 之后推荐的工具)
修改网卡名称为 eth0
网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
- 编辑 etc/default/grub 文件,增加 biosdevname=0 和 net.ifnames=0
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
- 更新 grub
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启 (reboot)
查看网卡物理连接情况
mii-tool eth0
查看网关
# 使用 -n 参数不解析主机名
route -n
查看网卡
ifconfig
网络故障排除命令
ping网络主机是否畅通,ping 目标主机的域名或者 ip
traceroute如果网络通畅,但是还是访问不通,可以通过该命令查看路由信息,跟踪当前主机到目标主机的网络状态
- traceroute -w 1 目标主机 // -w 等待超时的时间
- 更详细、更丰富的的 traceroute 命令-> mtr 命令(推荐)
mtr如果网络主机通畅,但是还是访问不通,可以查看是否有数据包丢失了
nslookup查看域名对应的 ip
telnet如果主机没有问题,可以查看端口是否开放(明文传输,已被 ssh 替代)
- telnet [主机][端口]
nc:
- 监听服务器端口 - 有客户端连接后,从客户端发送的数据将在终端显示。
nc -l [端口]
如
nc -l 8800
功能在本机上开启一个TCP服务器端口8800
- 端口扫描
nc -nvz [服务器地址] [端口区间]
如
nc -nvz 127.0.0.1 500-505
功能扫描地址127.0.0.1上的500-505端口
- 连接服务器端口 - 连接成功后,可以发送数据到服务端,也可接收来自服务端的数据。
nc [服务器地址] [端口]
如
nc 127.0.0.1 502
功能连接到127.0.0.1上的502端口(TCP)
- 发送文件 发送成功后会退出 nc。-
nc [服务器地址] [端口] < [文件名]
如
nc 127.0.0.1 502 < test
功能向127.0.0.1上的502端口(TCP)发送test文件
tcpdump如果主机和端口都 ok,则需要抓包进行分析,tcpdump -i any -n port 80
- -i 包的类型 tcp/udp
- -n 如果是域名则解析成 ip
- port 80 本机的 80 端口的包
- host 10.0.0.1 本机到 10.0.0.1 的包
- 组合port 80 and host 10.0.0.1
- -w [文件名]捕获下来并保存到某个文件
netstat 和 ss检测服务监听的地址是否正确,查看本机对外服务的端口
lsof 显示相应端口的进程
- lsof -i :1080
网络服务管理 (centos)
- 可以分为两种SysV 和 systemd
- 网络配置文件ifcfg-eth0,会随着网卡的不同文件名也会不同
- 比如 /etc/sysconfig/network-scripts/ifcfg-ens3,在这个里面可以配置 dhcp,ip 等信息
进程管理
调整优先级
nice范围从 - 20 到 19,值越小优先级越高,抢占的资源就越多
renice重新设置优先级
# 在启动前设置某一个程序的优先级
nice -n 10 ./a.sh
# 在程序启动后重新设置一个程序的优先级
renice -n 15 pid
进程的作业控制
&将任务放到后台执行
./a.bash &
jobs: 查看后台任务,并获取编号
jobs
ctrl + z:将前台任务停止并放到后台, 暂停进程
fg jobsID:将后台任务放到前台执行
bg jobsID:将前台任务放到后台执行
进程间通信
- 查看信号
[root@848e7f64efd8 /]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
- 常用信号
ctrl + == SIGINT
# 立即终止,不受阻塞,信号是SIGKILL
kill -9 pid
守护进程(daemon)
守护进程和一般进程的区别
- 让程序脱离当前终端执行
- 随着系统启动而启动,不用用户手动的去执行
-
nohup
- nohup 命令会使进程忽略 hangup(挂起)信号
- nohup 可以让一个命令脱离终端执行,但他不是守护进程
-
screen 或者 tmux
- screen可以同时连接多个本地或远程的命令行会话,并在其间自由切换
- screen 进入 screen 环境
- ctrl + a d 退出(detached)screen 环境
- screen -ls 查看 screen 会话
- screen -r sessionid 恢复会话
每个进程的依赖的环境都在 /proc/pid 的文件夹中 ```shell cd /proc/123
进程执行的位置
ls -l cwd
out
cwd -> /
进程的输出
ls -l fd
out
lrwx------ 1 root root 64 Sep 14 05:15 0 -> /dev/pts/4 lrwx------ 1 root root 64 Sep 14 05:15 1 -> /dev/pts/4 lrwx------ 1 root root 64 Sep 14 05:15 2 -> /dev/pts/4 lrwx------ 1 root root 64 Sep 14 12:32 255 -> /dev/pts/4
0 是标准输入
1,2 是标准输出
---
<a name="tDHr2"></a>
## 服务管理工具 - systemctl
- 常用操作systemctl start|stop|restart|reload|enable|disable 服务名称
- 软件包安装的服务单元/usr/lib/systemd/system
- service -> /etc/init.d
- systemctl -> /usr/lib/systemd/system
- cd /usr/lib/systemd/system
- vim sshd.service --查看服务文件
- cd /lib/systemd/system --服务文件目录
- ls -l runlevel*.target --查看服务文件映射
---
<a name="JWOl7"></a>
## SELinux
安全增强版本的 Linux,以前的 linux 是利用用户和文件的权限来进行安全控制既 DAC(自主访问控制)<br />
<br />MAC(强制访问控制)会给用户、进程和文件都打上标签,如果三者标签不一致则不允许执行<br />
<br />SElinux 是一个内核模块,也是 Linux 的一个安全子系统。SELinux 可是设置 DAC 或者是 MAC。需要注意的是开启 SELinux 会消耗服务器的性能,所以一般在生产环境下都是关闭的
```shell
# 查看SELinux状态
getenforce
内存和磁盘管理
内存和磁盘使用率查看
- 内存 free -m/-g/top
[root@hadoop3 ~]# free -m
total used free shared buff/cache available
Mem: 64264 51686 2089 140 10488 11807
Swap: 0 0 0
[root@hadoop3 ~]# free -g
total used free shared buff/cache available
Mem: 62 50 2 0 10 11
Swap: 0 0 0
- 磁盘
fdisk
[root@hadoop3 ~]# fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009ac89
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 104857566 52427759+ 83 Linux
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
如上图所示,共有两个磁盘/dev/vda、/dev/vdb
其中 /dev/vda 是分区了,因为有 /dev/vda1
df 常常用来查看磁盘是否满了
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 16G 32G 34% /
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 24K 32G 1% /dev/shm
tmpfs 32G 1.5M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/vdb 197G 55G 134G 29% /data
tmpfs 6.3G 0 6.3G 0% /run/user/0
du
[root@hadoop3 elasticsearch]# du -h docker-compose.yaml
4.0K docker-compose.yaml
du -h 和 ls -lh 区别是,du 是实际占用的空间,而 ls -lh 是包含空洞空间的,其中磁盘有些位置是空的,只是声明了文件存储的位置,并没有实际存储数据
Linux 文件系统管理
Linux 常见的文件系统
硬链接
- 多个文件其实都是链接到同一个数据块,修改一个文件,其余的文件都会同步变化。
- 硬链接是不允许跨文件系统的。
- 创建硬链接的方式ln afile bfile
[root@VM-0-16-centos test]# cat base
aaaa
[root@VM-0-16-centos test]# ln base yin
[root@VM-0-16-centos test]# ls -li
# inode号是相同的,他们指向同一个inode块
131106 -rw-r--r-- 2 root root 5 Nov 25 09:56 base
131106 -rw-r--r-- 2 root root 5 Nov 25 09:56 yin
[root@VM-0-16-centos test]# rm base
rm: remove regular file ‘base’? y
[root@VM-0-16-centos test]# cat yin
aaaa
软链接
- 克服了硬链接不能跨文件系统的问题。
- 但是实现上是不同的,软链接是创建了完全不同的一个文件,当系统读取这个文件时会发现这个文件是个链接文件,所以就会读取它链接的那个原文件
- 对软链接文件设置权限并不会改变该文件的权限,而是改变的是原文件。
- 创建软链接的方式ln -s afile bfile
[root@VM-0-16-centos test]# cat base
aaaa
[root@VM-0-16-centos test]# ln -s base ruan
[root@VM-0-16-centos test]# ls -li
# inode号不同
131103 -rw-r--r-- 1 root root 5 Nov 25 09:59 base
131104 lrwxrwxrwx 1 root root 4 Nov 25 10:00 ruan -> base
[root@VM-0-16-centos test]# cat ruan
aaaa
[root@VM-0-16-centos test]# rm base
[root@VM-0-16-centos test]# ls -li
total 0
131104 lrwxrwxrwx 1 root root 4 Nov 25 10:00 ruan -> base
[root@VM-0-16-centos test]# cat ruan
# 当删除了原始文件,因为软连接是指向的原始文件,并没有指向inode号,所以访问不到原始文件
cat: ruan: No such file or directory
[root@VM-0-16-centos test]# echo dddd >> ruan
[root@VM-0-16-centos test]# ls -li
# 向软连接里写内容,就相当于在原始文件里写内容,所以原始文件就重新出现了
131103 -rw-r--r-- 1 root root 5 Nov 25 10:00 base
131104 lrwxrwxrwx 1 root root 4 Nov 25 10:00 ruan -> base
[root@VM-0-16-centos test]# cat base
dddd
硬盘分区与挂载
- 硬盘分区fdisk /dev/vdb,如果是 2T 以上的硬盘需要用 parted 命令
- 格式化设置分区文件系统mkfs.文件系统 /dev/vdb
- 分区挂载到目录下mount /dev/vdb /xx
- 这样挂载只是将数据写到了内存中,如果想要重启后还是挂载到该目录,需要修改文件 /etc/fstab
root@max-master:~# cat /etc/fstab
UUID=e1d5f0dc-9df2-421e-a87b-f761f5db8947 / ext4 defaults 0 0
##/swap.img none swap sw 0 0
max-master:gfs-configs /var/cache/zoomeye-max glusterfs defaults,_netdev 0 0
/dev/vdb1 /xx ext4 defaults 0 0
系统日志
/var/log 查看日志
- tail -f cron -- 查看定时任务
- tail -f messages -- 查看常规信息
- tail -f dmesg --查看内核启动日志
- tail -f secure -- 查看安全相关的日志
-