Linux常用操作

1. 参考连接

看文档、权威书籍,或者找一门不错的视频课程,而不是搜索引擎。

2. 安装

2.0.1. 创建虚拟机

  1. 新建虚拟机;
  2. 自定义(高级);
  3. 选择虚拟机硬件兼容性——默认下一步;
  4. 安装程序光盘映像文件iso;
  5. 处理器配置不用管;
  6. 分配内存1GB足矣;
  7. 使用桥接网络(代表你的linux通过主机联网);
  8. 后两步默认即可;
  9. 磁盘容量20G足够,拆分多个文件;

2.0.2. 安装Linux系统

  1. 方向键选择第一个(ctrl+alt可将鼠标切出);
  2. 选择中文(安装过程中使用的语言);
  3. 软件选择GNOME桌面;
  4. 安装位置需进入查看点击完成;
  5. 安装过程中可设置root密码及新建用户。

2.0.3. 启动

  1. 进入查看许可证,接受协议;
  2. 可打开以太网;
  3. 选择汉语;
  4. 时区shanghai。

2.0.4. Tips

安装之后最好把yum命令对应的安装源改为国内镜像,但是最小化安装的CentOS 7网络(也可能其他情况)是没有配置的,此时ping不通,丢包率1。

  1. 先检查网络是否通畅(ping),是则参考 yum国内镜像
  2. 否则需要配置 /etc/sysconfig/network-scripts/ifcfg-ens33,(此时可以顺便配置下网卡名,详见下文:网络接口命名规则修改);
  3. 先备份 /etc/yum.repos.d/CentOS-Base.repo 文件(用cp命令或者mv),备份之后继续下一步;
  4. 能ping表示可以联网了,此时需要curl(或者wget,最小化默认不安装wget),使用其中的一个工具来下载repo,参考:aliyun CentOS 镜像
  5. 下载完镜像的文件之后运行 yum makecache 重新生成缓存(yum clean all 可清空缓存),此时的输出提示显示yum源换成了阿里的;
  6. 然后使用yum安装软件时使用的就是国内的镜像源。
  • 字符系统改变终端字体,在 /lib/kbd/consolefonts下存有各种字体对应的文件,使用 setfont sun12x22 这样的命令可临时设置字体,需要持续设置可执行 echo 'setfont sun12x22' >> /etc/bashrc
  • bashrc文件中的命令会在登入shell时执行。
  • yum -y update可升级所有软件包及内核(生产环境慎用)
  • 我自己喜欢用putty远程连接虚拟机中的Linux,这样可以复制粘贴,字体看着也舒服。

3. 基础

3.1. init

init是CentOS 6及以前中的第一个进程。

init 0 关机
init 1 单用户模式
init 5 图形界面
init 3 命令行界面
init 6 重启

touch xxx 新建文件xxx
mkdir 创建目录

man 帮助
help 帮助
区分外部和内部

3.2. 文件

df -h 查看内存
lscpu 查看cpu

pwd 显示当前目录名
cd 更改目录
ls [OPTION]... [FILE]... 查看目录下文件,可查看多个
ls 加参数 (可合并写)
-l 长格式显示文件
-h 显示文件大小及单位
-r 逆序显示
-a 显示隐藏文件
-t 按事件顺序显示
-R 递归显示
/ 代表根目录
/root root用户的home目录
su - xxx 切换为xxx用户

3.3. 目录

cd 
cd - 回到上次目录
cd /path/to/...      绝对
cd ./path/to/...     相对(当前)
cd ../path/to/...    相对(父级)

rmdir 删除空目录
rm -r -f 删除非空目录
rm filename 删除文件,若不需要提醒可加-f 参数
cp 复制目录、文件

参数 -r 递归地拷贝目录

mv 移动(改名)

通配符 *
单个字符 ?
文本查看
cat 文本显示到终端
head 查看文件开头
tail 查看文件结尾 -f 文件更新后显示信息同步更新(跟踪文件变化。用于观察日志文件)
wc 统计文件内容信息
打包、压缩

早期linux备份文件(主要备份etc中的文件)的介质时磁带,使用命令tar
打包后(注意tar是打包而不是压缩)的磁带文件进行压缩存储,压缩的命令是gzip、bzip2

tar命令集成了gzip、bzip2,打包的时候可以进行压缩,
需带上参数 -z 或者 -j,分别对应gzip、bzip2

tar -c表示压缩 
    -x表解包 
    -f指定操作类型为文件(而非文件夹)

bzip2压缩最小,但是有点慢

在网络中可能见到 .tbz2和.tgz的后缀,这是bzip2、gzip的缩写形式
解压
解压方式取决于压缩包的压缩方式,xxx.tar是一层压缩,xxx.tar.xz是两层压缩
tar -zxf openresty-1.19.3.1.tar.gz
tar -xvf openresty-1.19.3.1.tar.xz
z代表使用原来文件的压缩方式,x代表解包,f代表指定文件

3.4. vim编辑器

vi编辑器

多模式编辑:正常模式(复制粘贴)、插入模式(文本输入)、命令模式(保存退出)、可视模式()

vim编辑器:在vi基础上增加了无穷步骤的重做和回退

:set nu 显示行号

3.4.1. 正常模式

一般进入vim最开始的模式就是正常模式,在此输入 i、I、a、A、o、O 都可进入插入模式

i 在光标当前位置进入插入模式
I 在光标当前行首进入插入模式
a 在光标的下一位进入插入模式
A 对应I,在末尾进入插入模式
o 在光标下一行进入插入模式(原有的下一行依次向下移动)
O 在光标上一行进入插入模式(类似小写o)

: 进入命令模式(末行)

v 可视模式

h 左移动光标
j 下移动光标
k 上移动光标
l 右移动光标
        在图形界面系统中使用方向键也行,但在字符系统中可能只能用hjkl

esc 从其他模式回到正常模式

y 命令表示复制 
yy 复制(可多行)
y$ 复制光标位置到结尾的内容

d 表示剪切
dd 剪切整行
d$ 剪切光标位置到末尾

p 粘贴

u 撤销

ctrl + r 重做

x 删除单个字符(实为剪切单个字符)

r 替换单个字符

:set nu 显示行数 之后按数字,然后shift + g可将光标跳转到指定行

小写g(按两次跳转到第一行)
大写G 跳转到最后一行

shift + 6 (^)光标到行首
shift + 4 ($)光标到行尾

3.4.2. 插入模式

3.4.3. 命令模式

Esc 从其他模式回到正常模式

:w 保存
:q 退出
:w path/file_name 另存
:wq 保存退出vim
:q! 不保存退出
:! 临时执行shell命令(后接要执行命令)
/ 查找字符(后接要查找的字符) 
    匹配之后按回车,再按n向下一个匹配字符移动光标
        shift + n 向上一个匹配字符移动

:s/old/new 对当前行中的文本中的old字符替换为new
:%s/old/new 对整个文本进行替换
:%s/old/new 对整个文本内匹配的old进行替换
:x,ys/old/new 再x到y行进行替换
:set 设置命令

3.4.4. 可视模式

三种进入方法
v 字符可视模式
V 行可视模式
ctrl + v 块可视模式
    配合d和I可进行块的便利操作
    d是剪切、I是在光标位置插入

在使用I插入后只是在光标位置插入了,要应用到选中的块中需要按esc,这样会应用到选中的块中

4. 用户管理

4.1. 管理

useradd 新建用户
userdel 删除用户
    加上-r直接删除用户在home下的文件夹 
    比如userdel -r hui
passwd 修改用户密码

groupadd 新建用户组
groupdel 删除用户组
    新建用户组之后可以使用usermod -g 组名 用户名 把已有的用户加入到用户组中

也可以在创建用户的同时直接加入到用户组中 useradd -g groupdemo hui2
    groupdemo用户组是已有的

ubuntu root密码忘记怎么办?加入普通用户具有sudo权限,那么直接sudo su root改密码就好了,否则重置或者重装。su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。

新建用户会创建 /home/username/下面的目录,可使用ls -a查看隐藏文件
使用tail -10 /etc/shadow 查看密码文件
使用tail -10 /etc/passwd 查看密码??
创建时若没有指定用户组,则会创建与用户名同名的用户组

4.2. 切换

su 是切换用户
sudo 是以其他用户身份执行命令
visudo 设置需要使用sudo的用户组,比如要给普通用户设置某一命令权限,就是用visudo,然后修改文件

比如关机命令,默认只有root用户才有,不过可能需要授权给其他用户,但是又不能暴露root的密码,所以可把这条指令授权给普通用户


在切换用户是常常临时切换,不然切回root(可能)需要输密码比较麻烦
su - tempUserName

5. 文件

5.1. 重要文件

/etc/passwd
格式:username:切换要不要密码:userID:user组:注释:家目录:user登录命令解释器
root:x:0:0:root:/root:/bin/bash
yama:x:1000:1000:yama:/home/yama:/bin/bash

Linux识别用户不是根据用户名,而是根据userID,所以当有用户ID相同,比如yama的ID为0,则yama会变为root用户;加入把命令解释器设置为 /sbin/nologin 则代表不让用户登录,比如tcpump用户。
/etc/shadow
保存用户密码文件
格式:userName:加密后的密码:::::

yama:$6$7LKCrS2L5rGfUCbw$rU1BXreBwFPF6To6q1NB7UPkvr2XTvWCh64QmVfgR    Wu.J6yPcUDJZ4GUX1Xjkm0LEnHVy0y5g3AOiLaIrRWAz/::0:99999:7:::
/etc/group
格式:组name:是否需要密码验证(x表示需要?):组的gid:其他组设置 
root:x:0:
其中第四个字段代表其他组设置,比如一个用户属于两个组,那么可以在另一个组的第四个字段处声明(在第四个字段写入username即可)

/bin是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

/sbin一般是指超级用户指令。主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。

/usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。

/usr/sbin 放置一些用户安装的系统管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。

如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么首先就要考虑root 的$PATH里是否已经包含了这些环境变量。
可以查看PATH,如果是:PATH=$PATH:$HOME/bin则需要添加成如下:
PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin

使用ls加参数可查看文件的各种信息
比如:
-rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c
dr-xr-xr-x.  17 root root  224 12月 14 16:29 ..
lrwxrwxrwx.   1 root root    7 5月  11 2019 bin -> usr/bin


文件权限表示方法
-rw-r-xr--. 1 userName groupName mTime fileName
(容易发现左边的权限和右边的属X一一对应,第一个字符-表示文件类型)
rw- 文件属主的权限
r-x 文件属组的权限
r-- 其他用户的权限

目录权限表示方法
x 进入目录
rx 显示目录内的文件名
wx 修改目录内的文件名

创建新文件有默认权限,根据umask值计算,属主和属组根据当前进程的用户来设定

vim对文件的修改保存实际上是一种对原有文件的替换

类型:
- 普通文件
d 目录文件(一切皆文件,目录也是文件)
b 块特殊文件
c 字符特殊文件
l 符号链接
f 命名管道
s 套接字文件

字符权限:
r 读
w 写
x 执行(比如ls、cat等命令其实都是可执行的文件,对于一个文件使用vim打开也需要执行权限)
数字权限表示方法:(八进制)
r = 4
w = 2
x = 1

特殊权限s对应4,t对应1

5.2. 修改权限

chmod 修改文件、目录权限
由于权限可用字符、数字表示,所以修改方法也有两种
chmod u+x fileName
chmod 755 fileName

u、g、o、a分别代表修改上图中粉色、蓝色、绿色、全部

chmod u+ 增加权限
chmod u- 减少权限
chmod u= 直接设置权限

如下更改de.c文件的权限:

  • u-w减少属主的写权限
  • g+x增加属组的执行权限
  • o=rwx设置其他用户的读写执行权限
[root@localhost]# ls -ld de.c
-rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c

[root@localhost]# chmod u-w,g+x,o=rwx de.c
[root@localhost]# ls -ld de.c
-r--rwxrwx. 1 yama yama 52 12月 20 12:51 de.c
还有一种方法是使用数字来表示,数字467分别代表读、读写、读写执行,也就是权限值相加
比如 chmod 446 de.c 代表给de.c文件设置属主读权限,属组读权限,其他用户读写权限
[root@localhost]# ls -ld de.c
-rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c
[root@localhost]# chmod 446 de.c
[root@localhost]# ls -ld de.c
-r--r--rw-. 1 yama yama 52 12月 20 12:51 de.c
[root@localhost]# chmod 664 de.c
[root@localhost]# ls -ld de.c
-rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c

在Linux里面创建文件默认是666权限,但是会减去umask文件掩码(0022),也就是022,所以新建文件默认权限是644,也就是 rw-r--r--

chown 更改属组、属主

经自己的centos8测试,属主及属组为yama的文件不能被yama用户更改属组和属主,这可能和自己的配置有关,root用户不受限制

chown yama ./de.c 表示更改de.c文件的属主为yama,
如果要更改属组需要使用 chown :groupName fileName

chgrp 可以单独更改属组(不常用)

在terminal使用 ctrl + r 可以搜索之前使用过的命令

尽量不要使用root用户做权限的修改,因为它是不受任何限制的,即便一个文件只有属主才有读权限,root用户也能对其进行写入等等操作。
在教程中都是用root用户,这是为了减少练习环境不一致导致的错误解读,而且只是练习环境,所以可以使用root,在生产环境中不要这么做。

5.3. 修改权限注意

echo 显示(对比编程语言中的print)
echo huidt > fileA 表示把原本的输出‘huidt’ 重定向至fileA文件中
> 这个符号会把原本文件中的内容全部清空

当文件权限出现冲突,比如:
user1用户属于group1用户组,文件fileA的权限是----w----,也就是说只有用户组李的用户对其才有写权限
而属主user1并没有任何权限,但是user1又属于group1,
此时user1对文件fileA是没有任何权限的,这时候冲突的权限要以属主为准,而不是属组
对于目录文件,一般的权限组合是x、rx、wx

对于系统目录,下面的目录权限可能不一样,文件确是一样的
对于这样的权限叫做特殊权限,有以下几种

SUID:用于二进制可执行文件,执行命令时取得文件属主权限。如 /usr/bin.passwd
SGID:用于目录,在改目录下创建新的文件和目录,权限自动改为该目录的属组
SBIT:用于目录,该目录下新建的文件和目录,仅root和自己可以删除。如 /tmp

如下:有一个特殊的s权限,指的是SUID,代表不管是root用户还是普通用户在执行这个文件时都会以文件的属主进行操作
[yama@localhost demo]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33600 4月   7 2020 /usr/bin/passwd

SUID的意思是 set user id,比如普通用户执行 passwd 命令的时候,对应的密码文件保存在
/etc/shadow----------. 1 root root 1489 12月 20 13:52 /etc/shadow 这个文件任何用户都是没有权限的(root除外,它的属主也是root),所以 s 代表当普通用户,比如 yama 执行的时候,会自动取得属主root的权限,这使得普通用户也有了操作系统文件的部分权限

还有SBIT,可以看到末尾的其他用户有一个t权限,因为/tmp是临时目录,任何用户都可以在此操作,但为了防止其他用户删掉当前的文件,所以设置t权限

[root@localhost demo]# ls -ld /tmp
drwxrwxrwt. 31 root root 4096 12月 21 15:59 /tmp

在修改特殊权限的时候不再使用权限数字相加,而是将特殊权限单独列在数字开头,比如s对应4,t对应1,那么 /usr/bin/passwd 文件的权限就是4755,/tmp 权限就是1777,就是在原有数字的前面加上特殊权限数字。

6. 网络管理

6.1. 网络状态查看

net-tools VS iproute2

6.1.1. net_tools

6.1.1.1. ifconfig
ifconfig 

    eth0 第一块网卡(网络接口)
    第一个网络接口也可能叫其他名字:
        eno1 板载网卡
        ens33 PCI-E网卡
        enp0s3 无法获取物理信息的PCI-E网卡
    
    CentOS 7使用了一致性网络设备命名,以上不匹配则使用eth0

如下为 ifconfig 的结果
ens33即为我的设备网卡名,inet 表IP地址,netmask 表子网掩码,inet6 表MAC地址,RX、TX表发送和接受的数据。其中还有一个 lo 网卡表示本地环回,IP地址永远是127.0.0.1,用来开发测试,virbr0 网卡一般是Linux虚拟化出来的一些网关

[yama@localhost demo]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.127  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::1744:b082:b9d8:f881  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f4:9f:76  txqueuelen 1000  (Ethernet)
        RX packets 47  bytes 9571 (9.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 81  bytes 9273 (9.0 KiB)
        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 48  bytes 4080 (3.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 48  bytes 4080 (3.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:02:6f:c5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
6.1.1.2. 查看网线连接
查看网线连接
[root@localhost yama]# mii-tool eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
6.1.1.3. 查看网关

当网络通信时需要连接其他网络地址范围时就需要配置网关,也可称作配置路由。
网关Gateway又叫网间连接器、协议转换器,在网络层以上实现网络互连。
网关实质上是一个网络通向其他网络的IP地址,访问某个网站时把包首先发送到哪个IP地址(这个IP地址是网关), 然后由这个IP地址上的设备负责分发数据包。

route命令,使用n参数不解析主机名

[root@localhost yama]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.43.1    0.0.0.0         UG    100    0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

[root@localhost yama]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

上面的default表示默认网关192.168.43.1,除默认网关之外还可配置器明细路由,也叫静态路由

6.1.1.4. 网络配置命令
ifconfig <接口> <IP地址> [netmask]
表修改网络配置

ifup <接口>
启用网卡,比如ifup eth0

ifdown <接口>
禁用网卡

添加网关
添加默认网关
route add default gw <Gateway IP>

添加指定网关
route add -host <指定IP> gw <Gateway IP>
在访问特定主机ip时走指定的网关

添加指定网段的网关
route add -net <指定网段> netmask <子网掩码> gw <Gateway IP>
在访问指定网段时的路由

删除网关
route del default gw <Gateway IP>

修改网关一般是删除旧的再增加新的

6.1.2. iproute2

网络命令集合:ip命令

ip addr lsxxxx
......对应:ifconfig

ip link set dev eth0 up
设置网卡启停对应:ifup eth0 和 ifdown eth0

ip addr add 10.0.0.1/24 dev eth1
    对应:ifconfig eth1 10.0.0.1 netmask 255.255.255.0(设置ip和子网掩码)

ip route add 10.0.0.1/24 via 192.168.0.1
    对应:route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1

6.2. 网络接口命名规则修改

在对大量网络设备进行操作时如果设备网卡名不同,则批量化操作起来就会比较麻烦,所以需要修改为一致的网卡名。

网卡命名规则受两个参数的影响:biosdevnamenet.ifnames

如下是CentOS_8的grub文件的内容,其中GRUB_CMDLINE_LINUX表示系统启动时linux需要做的一些内容(引导内核kernel),类似于启动菜单,在quiet之后设置参数即可,设置后不会立即生效,因为这个文件只是用来用户读取的

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd    .lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

步骤总结:

  • 编辑 /etc/default/grub 文件,增加 biosdevname=0net.ifnames=0
  • 修改原网卡文件:将 /etc/sysconfig/network-scripts/ifcfg-ens33 文件中 NAME 和 DEVICE 名称的值改为eth0
  • 重命名原网卡文件:将/etc/sysconfig/network-scripts/ifcfg-ens33文件名改为ifcfg-eth0
  • 更新grub:执行#grub2-mkconfig -o /boot/grub2/grub.cfg
  • 重启:执行#reboot
biosdevnamenet.ifnamesNIC name
default01ens33
Combination 110em1
Combination 200eth0

6.3. 网络配置

见网络配置命令

6.4. 路由命令

见iproute2

6.5. 网络故障排除

ping
traceroute
mtr
nslookup
telnet
tcpdump
netstat
ss

traceroute可加参数w,比如 traceroute -w 1 www.baidu.com ,表示如果其中的一个ip长时间超时,则只等待最多1s

[yama@localhost ~]$ traceroute -w 1 yama.thdong.top
traceroute to yama.thdong.top (47.103.10.22), 30 hops max, 60 byte packets
 1  _gateway (192.168.43.1)  6.442 ms  6.479 ms  7.087 ms
 2  * * *
 3  10.138.76.213 (10.138.76.213)  57.145 ms  57.087 ms  57.167 ms
 4  * * *

其中的*号表示主机不支持traceroute追踪

mtr直接执行,当主机间通信时会显示比traceroute更加详细的信息。

nslookup可从域名得到ip

[yama@localhost ~]$ nslookup yama.thdong.top
Server:		192.168.43.1
Address:	192.168.43.1#53

Non-authoritative answer:
Name:	yama.thdong.top
Address: 47.103.10.22

server默认是DNS
[root@centos8 demo]#  nslookup
> server
Default server: 172.18.6.89
Address: 172.18.6.89#53
Default server: 114.114.114.114
Address: 114.114.114.114#53
Default server: 172.18.6.88
Address: 172.18.6.88#53

telnet可用于检测与目标主机的某端口是否畅通,是常见的控制远程服务器的方法,ctrl + ] 停止,quit退出telnet

[yama@localhost ~]$ telnet www.baidu.com 80
Trying 36.152.44.95...
Connected to www.baidu.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
[yama@localhost ~]$ 
tcpdump一般作为网络抓包工具

[root@localhost demo]# tcpdump -i any -n port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

-i any表示抓取任意网卡,-n表示不解析成域名(以IP显示),port 80表示80端口

还可以捕获某一主机,使用host参数
tcpdump -i any -n host 10.0.0.1

如果向指定某一ip的端口,则同时使用host和port
tcpdump -i any -n host 10.0.0.1 and port 80

可使用-w 以及文件路径及文件名把捕获到的结果保存下来
netstat用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等

[root@localhost demo]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1705/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1118/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1115/cupsd          
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1118/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1115/cupsd    

n显示ip t表以tcp方式 p表进程 l表tcp状态(listen)
ss命令使用与netstat基本相同,显示格式不同

[root@localhost demo]# ss -ntpl
State   Recv-Q   Send-Q     Local Address:Port     Peer Address:Port                                                                        
LISTEN  0        128              0.0.0.0:111           0.0.0.0:*      users:(("rpcbind",pid=879,fd=4),("systemd",pid=1,fd=37))             
LISTEN  0        32         192.168.122.1:53            0.0.0.0:*      users:(("dnsmasq",pid=1705,fd=6))                                    
LISTEN  0        128              0.0.0.0:22            0.0.0.0:*      users:(("sshd",pid=1118,fd=5))                                       
LISTEN  0        5              127.0.0.1:631           0.0.0.0:*      users:(("cupsd",pid=1115,fd=10))                                     
LISTEN  0        128                 [::]:111              [::]:*      users:(("rpcbind",pid=879,fd=6),("systemd",pid=1,fd=39))             
LISTEN  0        128                 [::]:22               [::]:*      users:(("sshd",pid=1118,fd=7))                                       
LISTEN  0        5                  [::1]:631              [::]:*      users:(("cupsd",pid=1115,fd=9))   

6.6. 网络服务管理

网络服务管理程序分为两种:Sysv和systemd

  • service network start|stop|restart (比较老,我在centos8中使用的时候已经不行了)
  • chkconfig -list network
  • systemctl list-unit-files NetworkManager.service (以下为systemd ,比较新)
  • systemctl start|stop|restart NetworkManager
  • systemctl enable|disable NetworkManager

有关配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0/etc/hosts

在centos7中使用 service network status 查看网络状态,其实已经使用了systemctl来进行控制,在7中处理network,还有NetworkManager这样一个服务,而centos8 已经用NetworkManager替换了network,使用 systemctl status NetworkManager查看网络状态,不过NetworkManager服务完全是由systemctl来警醒控制的。

如下查看网络状态

[root@localhost demo]# systemctl status  NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor pr>
   Active: active (running) since Fri 2020-12-25 16:56:47 CST; 35min ago
     Docs: man:NetworkManager(8)
 Main PID: 5109 (NetworkManager)
    Tasks: 3 (limit: 11154)
   Memory: 4.5M
   CGroup: /system.slice/NetworkManager.service
           └─5109 /usr/sbin/NetworkManager --no-daemon

12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888409.6276] dhcp>
12月 25 17:26:50 centos8.yama101 NetworkManager[5109]: <info>  [1608888410.7571] agen>
12月 25 17:30:49 centos8.yama101 NetworkManager[5109]: <info>  [1608888649.6596] audi>
[root@localhost demo]# 

查看NetworkManager服务

[yama@centos8 demo]$ systemctl list-unit-files NetworkManager.service
UNIT FILE              STATE  
NetworkManager.service enabled

1 unit files listed.

这样理解network服务,NetworkManager服务,network服务是centos6的网络默认管理工具, centos7重写了一遍就是NetworkManage服务,因为network只能支持service来管理, 而centos7默认的服务管理工具换成了systemctl(centos7中的network和NetworkManager都是用它实现的)

在centos7中如果需要沿用以前的控制方式就需要禁用新的方式(NetworkManager),反之在使用新的方式进行控制的时候建议禁用旧的方式;不要两套一起用。

在centos7中使用 chkconfig --list network 可以查看network在不同运行级别中的使用情况(在centos8中已经查不到),
然后可使用 chkconfig --level xxxx(数字级别) network off|on 进行启用或禁用

使用 systemctl enable|disable  NetworkManager 启用或禁用NetworkManager服务

ifconfig 和 ip 是同样的情况,他们都可以查询网络状态,都可以设置ip,但是设置了之后只能保存在内存中,重启之后配置就没有了。要想重启之后还需要保持配置需要写入配置文件, 通过service network restart 重新加载配置文件来让网络配置生效,记住在centos8中只有systemctl restart NetworkManager了

6.7. 常用网络配置文件

/etc/sysconfig/network-scripts/ifcfg-* 以及 /etc/hosts,前者是各个网卡的配置文件

[root@localhost demo]# hostname centos8-101.yama
临时修改主机名
[root@localhost demo]# hostnamectl set-hostname centos8.yama101
永久修改,永久修改记得同时更改 /etc/hosts 文件 中本机地址127.0.0.1的对应关系,如下
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   centos8.yama101

7. 软件安装

7.1. 软件包管理器

CentOS、RedHat、Fedora使用yum包管理器,软件安装包格式为rpm,(RedHat Package Manager)
Debian、Ubuntu使用apt包管理器,软件安装格式为deb

7.2. rpm包和rpm命令

wget-1.14-18.el7_6.1.x86_64

软件名称软件版本系统版本平台
wget1.14-18el7_6.1x86_64

其中比较关键的是软件版本,因为软件包互相之间有依赖关系,el7表示是CentOS7、RedHat7、Fedora7的版本,el6可以强制安装到7的系统中,但稳定性可能不佳。

rpm命令常用参数
    -q 查村软件包
    -i 安装软件包
    -e 卸载软件包
在查询和卸载时只需要使用软件包的名字就可以,但是安装时则需要软件包完整的文件的名字

查询时可使用 -a | more 进行分屏,例如 rpm -qa | more 分屏后空格看下一屏,q退出

在安装系统的时候可以直接从光驱中安装软件,加入系统装好了还想使用光盘中的文件则需要在Linux里面挂载光盘文件(我理解的挂载就是像win一样插入U盘手动识别读取)。在Linux根目录中有个dev文件夹,里面的有些文件被称为设备文件(指b开头的文件,无法使用cat、cp等命令操作,详见文件含义),其中有个设备文件就是光驱 /dev/sr0

[yama@localhost ~]$ ls /dev/sr0 -l
brw-rw----+ 1 root cdrom 11, 0 1月   1 15:19 /dev/sr0

插入光驱,然后在Linux中识别,/dev/ 文件夹下的块设备然后执行 dd if=/dev/file of=/xxx/xxx.iso 可以把真的光盘做成光盘镜像。

虽然不能使用cp和cat命令,但可使用mount(挂载)命令对这种块特殊文件进行操作,特别是在字符界面不会有像windows那样插入U盘弹出盘符的提示,所以必须手动操作。

mount /dev/sr0 /mnt

Linux建议挂载到/mnt目录下,挂载之后rpm包在/mnt/Packages文件夹中,然后就可以使用rpm命令安装这些包,在使用rpm -i参数安装yyy包时,可能提示依赖检测失败,xxx被yyy需要,那么这时候要先安装xxx包才能安装yyy.

7.3. yum仓库

yum是一个仓库,也理解为包管理器,两个好处:

  • 不用处理复杂的依赖关系
  • 官方软件包来源可靠

7.3.1. yum源配置

官方yum源::http://mirror.centos.org/

阿里镜像源:http://mirrors.aliyun.com/centos/

修改yum下载源只需要修改文件 /etc/yum.repos.d/CentOS-Base.repo 即可,修改方法参考清华CentOS 镜像使用帮助,更方便的是可以直接使用官方提供的同名文件覆盖源文件即可,参考阿里提供的CentOS-Base.repo文件http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

文件下载之后运行yum makecache即可

7.3.2. 常用选项

  • install 安装软件包
  • remove 卸载
  • list | grouplist 查看
  • update 升级(不指定软件名则更新全部)

我在VM中使用yum install 时连校园网出现了问题,这可能是和校园网关有关系,学校也许会监视学生上网记录,望周知。

7.4. 源代码编译安装

如果软件的版本不符合要求则需要通过源代码编译安装(yum仓库中不一定有你需要的版本),在早期的的时候没有yum这样方便的工具常使用这种方法。

举个例子:编译安装openresty

  1. 先下载 wget https://openresty.org/download/openresty-1.19.3.1.tar.gz
  2. 解压 tar -zxf openresty-1.19.3.1.tar.gz
  3. 进入解压后的文件夹 cd openresty-1.19.3.1
  4. 执行configure文件 ./configure --prefix=/usr/local/openresty
  5. 编译 make -j2
  6. 编译安装 make install

编译安装过程中可能会出现很多问题,比如缺gccgcc-c++PCREopenssl库等等,需执行yum install pcre-devel openssl-devel安装。

编译时会有提示使用gmake,二者都可以,gmake是跨平台的,make之后出现build文件夹,接着执行make install将build中的文件全都安装到指定目录中,此时再看ls /usr/local/openresty/*文件夹中已经装好了openresty.

7.5. 内核升级

7.5.1. rpm格式内核

查看内核版本 uname -r

三种升级方式:

  • rpm包自己安装,麻烦
  • yum install kernel-3.10.0 或者yum update也会升级内核无法使用最新的稳定版
  • 源码编译安装,像编译安装openresty一样,依赖复杂

参考链接:

使用源码编译安装比较复杂,这个安装一般的软件不一样,如下:

  1. 下载内核文件:wget https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.10.4.tar.xz
  2. 解压:tar xvf linux-5.10.4.tar.xz -C /usr/src/kernels
  3. 进入kernels文件夹:cd /usr/src/kernels
  4. 配置内核编译参数(这之前可以提前安装依赖:yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel -y):
    1. make menuconfig | allyesconfig | allnoconfig
    2. 使用系统当前配置:cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.10.4/.config
  5. make -j2 all开始编译。不知道有几个cpu可使用lscpu查看
  6. 安装内核(两步都要)
    1. make modules_install
    2. make install
  7. 最后reboot,系统引导师新的内核已经可选

7.5.2. 实操

使用yum安装内核,yum仓库和国内很多镜像常常没有最新的稳定版,此时还有一个epel的库,它在centos库的默认基础上进行了扩展,yum install epel-release -y 安装这个库。然后可使用yum install kernel安装最新的内核版本,也可指定版本安装,在kernel后加上版本名即可。

话说有必要升级内核到5吗?依照网友的说法,没必要,各大云服务厂商也在3左右。

7.6. grub配置文件

系统启动的引导文件,CentOS7使用grub2(很多方便的工具,用命令即可修改),之前使用grub1(所有文件需要手动编辑)

相关文件列表:

  • /etc/default/grub
  • /etc/grub.d/
  • /boot/grub2/grub.cfg
  • ``

修改启动内核、忘记root密码也是在此操作

7.7. 使用ps和top查看进程

7.7.1. 进程的概念与进程查看

进程指运行中的程序,或者表述为一次活动。从程序开始运行到终止的整个生命周期是可管理的。
例如C语言从main函数开始运行,但终止方式不止一种,分为正常终止(从main返回或调用exit)和异常终止(调用abort、接收信号等),所以我们需要查看进程的状态以便进行管理。

查看命令:

  • ps
  • pstree
  • top

进程是树形结构,和权限有密不可分的关系

ps查看当前正在运行的进程,在字符系统中就是tty,图形系统中是pts

[root@izuf6gv9wljzw8p0wgmnlvz yama]# ps
  PID TTY          TIME CMD
15834 pts/0    00:00:00 su
15835 pts/0    00:00:00 bash
15865 pts/0    00:00:00 ps

加上参数e显示其他(所有)进程

[root@izuf6gv9wljzw8p0wgmnlvz yama]# ps -e | more
  PID TTY          TIME CMD
    1 ?        00:00:05 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:10 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:00 migration/0
    8 ?        00:00:00 rcu_bh
    9 ?        00:01:24 rcu_sched
   10 ?        00:00:02 watchdog/0

加上参数f显示更多信息,其中的UID并不一定是启动进程的用户,因为这是可以修改的,比如nginx、openresty的UID都是root用户启动的,但是UID却是nobody。PPID表父进程,

[root@izuf6gv9wljzw8p0wgmnlvz yama]# ps -ef | more
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan04 ?        00:00:05 /usr/lib/systemd/systemd --switc
hed-root --system --deserialize 21
root         2     0  0 Jan04 ?        00:00:00 [kthreadd]
root         3     2  0 Jan04 ?        00:00:10 [ksoftirqd/0]
root         5     2  0 Jan04 ?        00:00:00 [kworker/0:0H]
root         7     2  0 Jan04 ?        00:00:00 [migration/0]
root         8     2  0 Jan04 ?        00:00:00 [rcu_bh]

使用参数eLf表示查看轻量级进程,也就是线程

[root@izuf6gv9wljzw8p0wgmnlvz yama]# ps -eLf | more
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1 Jan04 ?        00:00:05 /usr/lib/systemd/syst
emd --switched-root --system --deserialize 21
root         2     0     2  0    1 Jan04 ?        00:00:00 [kthreadd]
root         3     2     3  0    1 Jan04 ?        00:00:10 [ksoftirqd/0]
root         5     2     5  0    1 Jan04 ?        00:00:00 [kworker/0:0H]

pstree查看进程树,可以看出CentOS第一个启动的进程是systemd,在CentOS6中是init

[yama@izuf6gv9wljzw8p0wgmnlvz ~]$ pstree
systemd─┬─AliSecGuard───6*[{AliSecGuard}]
        ├─AliYunDun───22*[{AliYunDun}]
        ├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
        ├─BT-Panel───{BT-Panel}
        ├─BT-Task───6*[{BT-Task}]
        ├─CmsGoAgent.linu─┬─exe───8*[{exe}]
        │                 └─5*[{CmsGoAgent.linu}]
        ├─2*[agetty]
        ├─aliyun-service───7*[{aliyun-service}]
        ├─assist_daemon───7*[{assist_daemon}]
        ├─atd
        ├─crond
        ├─dbus-daemon
        ├─dhclient
        ├─firewalld───{firewalld}
        ├─mysqld_safe───mysqld───18*[{mysqld}]
        ├─nginx───2*[nginx]
        ├─ntpd
        ├─php-fpm───7*[php-fpm]
        ├─polkitd───5*[{polkitd}]
        ├─pure-ftpd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───sshd───bash───su───bash
        │      └─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]

top动态查看计算机状态,进程、负载、内存等等
可加参数top -p xxx,xxx是对应的进程PID

top - 14:15:20 up 5 days, 21:55,  3 users,  load average: 0.00, 0.01, 0.05
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1883724 total,   421816 free,   656240 used,   805668 buff/cache
KiB Swap:  1049596 total,  1049596 free,        0 used.  1036820 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1371 root      10 -10  141972  22716  10352 S  0.7  1.2  60:48.79 AliYunDun
 3684 root      10 -10  436896   4844   2328 S  0.3  0.3   4:32.92 AliSecGuard
    1 root      20   0   43240   3636   2432 S  0.0  0.2   0:05.99 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:10.71 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   1:25.53 rcu_sched
   10 root      rt   0       0      0      0 S  0.0  0.0   0:02.78 watchdog/0
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.17 khungtaskd
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd

7.7.2. 进程的控制命令

  • 进程的优先级调整:
    • nice 范围从-20到19,值越小优先级越高,抢占资源越多
    • renice重新设置优先级
  • 进程的作业控制
    • jobs
    • & 符号
xx表-20到19的数字 ,nice表普通的修改优先级,renice用于改变运行中的进程的优先级
nice -n xx
renice -n xx

作业控制一般指进程的运行前台、后台的控制

后台运行demo.sh
./demo.sh &

查看在后台运行的进程
jobs

n表示jobs查看到的开头数字,将其切回前台运行
fg n

ctrl+z将当前正在运行的进程切到后台并暂停

同fg,n代表进程,在后台运行
bg n

7.7.3. 进程的通信方式

  • 管道符 | 也是进程通信的一种
  • 还有一种叫做信号,就是终端用户输入快捷键控制程序,比如 ctrl+c,比如kill
  • 还有一种叫做socket套接字

可用kill -l查看目前支持的左右信号,ctrl+c代表的就是2好SIGINT

[yama@izuf6gv9wljzw8p0wgmnlvz ~]$ 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
63) SIGRTMAX-1  64) SIGRTMAX

假如你的程序不希望别人使用ctrl+c来停止它,那么应该使用shell脚本来处理对应的SIGINT信号,其中9号命令程序马上停止并且不受任何阻断,

kill -9 PID

在当前终端创建的进程会以当前终端为父进程,当该终端被杀死但是子进程使用了nohup得以继续运行时,子进程的父进程会变为systemd(CentOS 6中为init)

7.7.4. 守护进程和系统日志

守护进程指开机自启动的进程,和一般进程相比,它不需要终端就能启动,占用的是根目录,而且它的输出会打印到一些特殊文件中。

  • 使用nohup 与 & 符号配合运行一个命令
    • nohup命令使进程忽略hangup(挂起)信号
  • 守护进程(daemon)和一般进程的区别
    • 开机自启
    • 无需终端就能启动
    • 占用根目录
    • 其输出会打印到特殊文件中
  • 使用screen命令
    • screen进入screen环境
    • ctrl+a d 退出(detached)screen环境
    • screen -ls 查看screen的会话
    • screen -r sessionid 恢复会话

nohup意思是即便当前终端关闭也不会影响程序的运行,常常配合 & 符号使得同时可执行其他命令。同时nohup会忽略掉输入并把输出追加到当前目录中的nohup.txt文件中

回到开始说的daemon进程,它会开机自启动,就像win中的一些登陆验证、网络服务一样,会在用户登录之前就开始启动,道理其实和nohup是一眼的,是在启动之后杀死父进程,然后将其作为1号进程的子进程,并且它的输出会打印到根目录的日志文件中。假如不打印到根目录的文件中就会导致占用其他一些文件夹,假设该文件夹是一个U盘,则不能拔出,因为它此时被占用了,正在打印输出。而根目录假设也是一个U盘但它只会在系统关机或重启的时候才算是拔出。

Linux中有一个特殊的目录/proc,里面的内容默认是不存在的,其实时操作系统在读取内存的一些信息,然后把内存的一些信息以文件的方式在里面进行呈现,可以对其进行查看的操作。在/proc中有和进程号同名的目录,改目录下面就是进程的一些属性,比如cwd表示当前所在的位置,它是一个文件,可使用ls -l cwd查看。改目录中还有一个fd目录,日志输入输出就放在其中,ls -l fd查看,其中0代表输入,1代表输出,在/root/nohup.txt

使用screen可避免网络问题导致的中断

7.7.5. 服务管理工具systemctl

这也叫服务集中管理工具,提供常见功能的守护进程。

CentOS 6及以前使用service管理,CentOS 7中service和systemctl并存,systemctl实际上是service的强化和简单化

系统的启动有不同的级别,使用chkconfig --list查看

[yama@localhost ~]$ chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关

查看这些级别最初是使用init来控制的,这是CentOS 6中的1号进程,是无法用kill杀死的进程,所以使用kill无法关机(可使用init 0 就是发送关机信号给1号进程的的意思),如输出中所提是,init现在已经被systemd取代了,systemd是CentOS 7中的1号进程.

这里将这个级别和服务有什么关系呢?

且看network 0:关 1:关 2:开 3:开 4:开 5:开 6:关,发现某些级别在某些服务中是开的,也就是说当运行级别到了这个级别是就会开启或关闭这个程序,比如network 在级别3也就是字符系统是就打开了这个服务,init 6重启时就关闭了这个服务。比如在init 5图形界面中打开所需要的服务,这样就能通过级别来控制所需要的服务。

systemctl也有同样的功能,可使用systemctl list-dependencies [target]来查看依赖关系

[yama@localhost ~]$ systemctl list-dependencies | grep network
● ├─network.service

service还可以设置服务的启停,比如常用的service network start|stop|

systemctl具有同样的功能,不过是服务名称写在最后面:systemctl start|restart|stop|reload|enable|disable|status 服务名称 ,enable表服务开机运行,disable表不随开机运行,status表查看服务状态

timeline 11.5

7.7.6. SELinux简介

SELinux是一个安全强化的程序,由于消耗性能,生产环境中可能不会使用。最初设计目标是避免资源的误用,其实 SELinux 是在进行程序、文件等细部权限配置依据的一个核心模块。由于启动网络服务的也是程序,因此刚好也能够控制网络服务能否存取系统资源的一道关卡!

传统的Linux安全是利用用户的权限和文件的权限来控制的(这可能导致安全风险),这种叫做自主访问控制(DAC);还有一种叫做强制访问控制(MAC),即使给进程、用户、文件都打上标签,只有三者的标签对应并且类型一致才能进行操作。就这两种控制模式参考:鸟哥——程序管理与 SELinux 初探

MAC也叫委任式存取控制,它可以针对特定的程序与特定的文件资源来进行权限的控管!也就是说,即使你是 root,那么在使用不同的程序时,你所能取得的权限并不一定是 root , 而得要看当时该程序的配置而定。如此一来,我们针对控制的『主体』变成了『程序』而不是使用者!此外,这个主体程序也不能任意使用系统文件资源,因为每个文件资源也有针对该主体程序配置可取用的权限! 如此一来,控制项目就细的多了!但整个系统程序那么多、文件那么多,一项一项控制可就没完没了! 所以 SELinux 也提供一些默认的政策 (Policy) ,并在该政策内提供多个守则 (rule) ,让你可以选择是否激活该控制守则。

getenforce 查看SELinux状态
sestatus 查看详细状态
setenforce 0 临时关闭(需要管理员权限执行)
/etc/selinux/config SELinux配置文件,配置后重启生效

8. Makefile参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值