Linux操作系统基础
基本概念
Linux是一种类Unix操作系统,其本质是Linux内核,他具有免费、开源、灵活(自定义系统)、稳定、安全、高效等特点
Linux内核的创始人是林纳斯linus
内核是操作系统的核心部分,是连接应用程序和硬件的桥梁,他是为应用程序对计算机硬件的安全访问的一部分软件。 内核通常提供一种硬件抽象的方法,来完成对硬件复杂的操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源
常见的Linux发行版本
Linus Torvalds 开源的只是 Linux 内核,我们上面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。
Linux 的发行版本可以大体分为两类:
- 商业公司维护的发行版本,以著名的 Red Hat(红帽) 为代表,比较典型的有 CentOS 。
- 社区组织维护的发行版本,以 Debian 为代表,比较典型的有 Ubuntu、Debian。
Linux系统安装
Ubuntu Server
-
下载Ubuntgu Server镜像
几种镜像关系:
DVD ISO : 旨在刻录到CD上。然后使用该CD启动计算机
Everything ISO : 对完整版安装盘的软件进行补充,集成所有软件
Minimal ISO : 只有命令行模式,没有图形管理界面。这个镜像只是一个非常基本的系统,具有一个功能系统所需的最少的软件包
-
在VMware中创建一个虚拟机
注意:在创建虚拟机时会让选择虚拟机的网络连接方式,这里有三种网络连接方式
- 桥连接:Linux相当于和主机是一个网段,Linux可以和网段内的其他主机相互通信,但是会造成ip地址冲突
- NAT(Net Address Transfer):网络地址转换方式,linux可以访问外网,但是其他主机不能访问linux,和其他主机不在一个网段,不会造成ip冲突
- 主机模式:linux相当于一个独立的主机,和外面的主机相互都不能通信
-
在虚拟机中使用Centos的镜像文件
注意将下载软件的镜像地址改为阿里等镜像地址
为了磁盘能够扩容,选择磁盘扩容技术
更改可用空间为最大
Centos Server
下载Centos镜像 http://mirrors.aliyun.com/centos/7/isos/x86_64/ 这里给出的是阿里的镜像源(温馨提示,使用迅雷下载会更快哦)
安装步骤 https://blog.csdn.net/qq_44714603/article/details/88829423
Linux顶层目录结构
目录 | 说明 |
---|---|
bin | 存放二进制可执行文件(ls , cat , mkdir 等) |
boot | 存放用于系统引导时使用的各种文件 |
dev | 用于存放设备文件 |
etc | 存放系统配置文件 |
home | 存放所有用户文件的根目录---比如创建一个用户,该目录下就会多一个用户的文件 |
lib | 存放跟文件系统中的程序运行所需要的共享库及内核模块 |
mnt | 系统管理员安装临时文件系统的安装点 |
opt | 额外安装的可选应用程序包所放置的位置 |
proc | 虚拟文件系统,存放当前内存的映射 |
root | 超级用户目录 |
sbin | 存放二进制可执行文件,只有 root 才能访问 |
tmp | 用于存放各种临时文件 |
usr | 用于存放系统应用程序,比较重要的目录 /usr/local 本地管理员软件安装目录 |
var | 用于存放运行时需要改变数据的文件 |
Linux关机和重启
命令 | 说明 |
---|---|
shutdown/poweroff/halt/init 0 | 关机 |
shutdown -h now/10 | 立即关机/10分钟后关机 |
reboot/init 6 | 重启 |
shutdown -r now/10 | 立即重启/10分钟之后重启 |
sync | 将内存的数据同步到磁盘 |
-h也就是halt停止的意思
注意:无论是重启还是关闭系统,首先运行sync命令把内存中的数据写到磁盘
Linux用户和组管理
Linux 操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰。
用户账户说明
- 普通用户: 普通用户在系统上的任务是进行普通操作
- 超级管理员: 管理员在系统上的任务是对普通用户和整个系统进行管理。对系统具有绝对的控制权,能够对系统进行一切操作。用 root 表示,root 用户在系统中拥有最高权限,默认下 Ubuntu 用户的 root 用户是不能登录的。
-
安装时创建的系统用户: 此用户创建时被添加到 admin 组中,在 Ubuntu 中,admin 组中的用户默认是可以使用
sudo
命令来执行只有管理员才能执行的命令的。如果不使用sudo
就是一个普通用户。
组账户说明
- 私有组: 当创建一个用户时没有指定属于哪个组,Linux 就会建立一个与用户同名的私有组,此私有组只含有该用户。
- 标准组: 当创建一个用户时可以选定一个标准组,如果一个用户同时属于多个组时,登录后所属的组为主组,其他的为附加组。
用户管理
添加用户
添加普通用户
useradd test //添加一个名为test的用户,并创建一个test同名的家目录,将test放入这个目录内
useradd -d /home/目录名 test //添加一个名为test的用户,并将其放入指定家目录
passwd test //修改用户test的密码
用户注销
logout
删除用户
userdel 用户名 //删除一个用户,但是保留家目录
userdel -r 用户名 //删除用户,并删除用户家目录
-r 也就是递归的意思
查询用户信息
id 用户名
切换用户
使用 Root 用户
在实际生产操作中,我们基本上都是使用超级管理员账户操作 Linux 系统,也就是 Root 用户,Linux 系统默认是关闭 Root 账户的,我们需要为 Root 用户设置一个初始密码以方便我们使用。
- 设置 Root 账户密码
sudo passwd root
- 切换到 Root
su
切换到普通用户
su 用户名
升级为管理员
找到用户管理文件,将用户添加到sudoers里面
vi etc/sudoers
找到 root ALL=(ALL) ALL
再后面添加 用户名 ALL=(ALL) ALL
然后su 用户名
转换为刚刚设置的用户
用户组管理
添加组
groupadd 组名 //添加一个组
删除组
groupdel 组名 //删除一个组
添加用户到指定组
useradd -g 用户组 用户名 //添加一个用户,并指定组
修改用户组
比如用户1在组1,现在要将用户1调整到组2
usermod -g 要转换的组名 用户名 //将用户添加到指定组内
用户和组管理文件
-
用户配置文件:
/etc/passwd
记录了用户的各种信息,每行的含义:用户名;口令;用户标识号;注释性描述;主目录;登录shell
-
组配置文件:
/ete/group
每行的含义:组名;口令;组标识号;组内用户列表
-
口令配置文件(密码和登录信息):
/etc/shadow
Linux文件系统
操作文件目录
命令 | 说明 | 语法 | 参数 | 参数说明 |
---|---|---|---|---|
ls | 显示文件和目录列表 | ls [-alrtAFR] [name...] | ||
-l | 列出文件的详细信息 | |||
-a | 列出当前目录所有文件,包含隐藏文件 | |||
mkdir | 创建目录 | mkdir [-p] dirName | ||
-p | 父目录不存在情况下先生成父目录,即创建多级目录 | |||
cd | 切换目录 | cd [dirName] | ||
touch | 生成一个空文件 | |||
echo | 生成一个带内容文件 | echo abcd > 1.txt,echo 1234 >> 1.txt | ||
cat | 显示文本文件内容 | cat [options] fileName(cat只能显示文件,不能修改文件,为了浏览方便,一般会带上 管道命令 |more,比如cat 文件名 | more 分页浏览) |
||
-n | 显示行号 | |||
cp | 复制文件或目录 | cp [options] 源文件 目的文件,比如将当前文件夹下的a.txt文件复制到当期目录的bbb这个目录下,cp a.txt bbb/ | ||
-r | 递归复制整个文件夹 | |||
rm | 删除文件 | rm [options] name... | ||
-f | 强制删除文件或目录 | |||
-r | 同时删除该目录下的所有文件 | |||
rmdir | 删除目录 | rmdir [options] 要删除的空目录(如果目录下有文件是无法删除的) | ||
mv | 移动文件或目录 | mv [options] source dest(可以用来重命名,比如 mv aa.txt cc.txt ) |
||
find | 在文件系统中查找指定的文件 | |||
-name | 文件名 | |||
grep | 在指定的文本文件中查找指定的字符串 | |||
tree | 用于以树状图列出目录的内容 | |||
pwd | 显示当前工作目录的绝对路径 | |||
ln | 建立硬链接 | ln [选项] [原文件或目录] [软连接名] | ||
-s | 建立软连接 | |||
more | 分页显示文本文件内容 | |||
less | 用来分屏查看文件内容,与more功能类似,但比more强大 | |||
head | 显示文件开头内容,默认显示前10行内容 | head -n 5(显示前5行内容,5可以是任意行) | ||
tail | 显示文件结尾内容,默认输出后10行内容 | tail [options] 文件 | ||
-n 行数 | 查看文件的后指定行数的内容 | |||
-f | 实时追踪文档的所有更新 | |||
echo | 输出内容到控制台,比如输出环境变量echo $PATH
|
echo [options] [输出内容] |
pwd指令
- 基本语法:pwd
- 功能描述:( present word directory )显示当前共工作目录的绝对路径
ls指令
-
基本语法:ls [选项] [目录或文件]
-
常用选项:
-a : 显示当前目录所有的文件或目录,包括隐藏的
? -l : 以列表的形式显示信息,一般简写为ll
-
应用实例:(list)查看当前目录的内容信息
cd指令
- 基本语法:cd 文件路径
- 功能描述:切换到指定目录
- 常用方式:
cd ~
或cd
回到自己家目录;cd..
回到上级目录
mkdir指令
-
基本语法:mkdir [选项] 要创建的目录
-
常用选项:
? -p : 创建多级目录,-p也就是-parent的意思
-
应用实例:
? mkdir /home/zf 创建单个目录
? mkdir -p /home/people/zf 创建多级目录
rmdir指令
- 基本语法: mkdir [选项] 指定空目录
- 功能说明:删除指定空目录,如果目录下有文件是无法删除的,需要使用
rm -rf 要删除目录
删除
touch指令
-
基本语法:touch 文件名称
-
功能说明:创建一个空文件
-
应用案例:
? touch a.txt,创建一个空文件
? touch a.txt b.txt :创建多个空文件
cp指令
-
基本语法:cp [选项] source dest
-
功能说明:拷贝文件到指定目录
-
常用选项:
? -r: 递归复制整个文件夹
-
应用实例:如果指定目录已经有文件,需要确认是否覆盖,如果不让提示,强制覆盖可以使用
\cp -r source dest
,Centos7等高版本已经自动强制覆盖
mv指令
- 基本语法:mv [选项] source dest
- 功能说明:移动文件到指定目录,也可用来对文件进行重命名如
mv a.txt c.txt
- 注意:其中源地址和目的地址可以使用相对路径或绝对路径,相对路径是相对当前目录的路径,比如当前目录用
./
表示,上一级目录用../
表示,绝对路径就要从根目录开始如/usr/local
rm指令
-
基本语法:rm [选项] 指定目录或文件
-
功能说明:删除指定目录
-
常用参数:
? -r: 递归删除
? -f: 强制删除不提示
cat指令
-
基本语法: cat [options] 文件名
-
功能说明:查看文本内容,但是不能编辑(cat只能显示文件,不能修改文件,为了浏览方便,一般会带上 管道命令 |more,比如
cat 文件名 | more
分页浏览) -
常用参数:
? -n : 显示行号
more指令
- 基本语法:more 文件名
- 功能说明:分页显示文本文件内容
- 常用操作:
- 空格键:代表向下翻一页
- 回车键:代表向下翻一行
- q:代表立刻离开more,不再显示该文件内容
- Ctrl+F:向下滚动一屏
- Ctrl+B:返回上一屏
- =:输出当前行号
- :f:输出文件名和当前的行号
less指令
- 基础语法:less 文件名
- 功能说明:和more指令类似,但是比more更强大,less指令在显示文件内容时,不是一次将整个文件加载之后再显示,而是根据需要加载内容,对于显示大型文件具有较高的效率
>
指令和>>指令
- 功能说明:>为输出重定向,可以将输出的内容覆盖写入指定文件,如果文件不存在则创建文件;>>为追加符,可以将输出内容追加到指定文件后
- 基本语法:
- ls -l > 文件 (将列表内容覆盖写入指定文件中)
- ls -al >> 文件 (将列表内容追加到文件末尾)
- cat 文件1 > 文件2 (将文件1的内容覆盖写入文件2)
- echo "hello,world" >> c.txt (将字符串直接追加到指定文件)
echo指令
- 基本语法:
echo [选项] 内容
- 功能说明:在控制台输出内容,比如输出
- 应用案例:
-
echo %PATH
,输出环境变量到控制台 -
echo "hello,world"
,输出字符串内容到控制台
-
head指令
- 基本语法:head [options] 文件
- 功能说明:输出文件的前几行,默认输出前10行
- 常用参数:
-n 行号
,可指定显示前多少行,比如head -n 5 文件名
,指定显示文件前5行
tail指令
-
基本语法:tail [options] 文件
-
功能说明:输出文件的后几行,默认输出后10行
-
常用参数:
-n 行号
,可指定显示前多少行,比如tail -n 5 文件名
,指定显示文件后5行-f,实时追踪文档的所有更新,如果有变化会马上显示
ln指令
- 基本语法:ln -s 源文件或目录 软连接名
- 功能说明:给源文件创建一个软链接,软连接也称为符号连接,也就相当于Windows里面的快捷方式,主要存放了链接其他文件的路径
- 应用案例:比如给/root指定一个软链接,
ln -s /root kk
,那么当前目录下就会多一个kk目录,进入kk文件夹就相当于进入了/root目录
history指令
- 基本语法:history
- 功能说明:查看已经执行过的历史命令
- 应用案例:
- history ,显示所有的历史指令
- history 10 ,显示最近执行的10个命令
- !5,执行历史编号为5的指令
压缩解压缩
tar指令
命令 | 语法 | 参数 | 参数说明 |
---|---|---|---|
tar | tar [-cxzjvf] 压缩打包文档的名称 欲打包目录 | ||
-c | 建立一个归档文件的参数指令 | ||
-x | 解开一个归档文件的参数指令 | ||
-z | 是否需要用 gzip 压缩 | ||
-j | 是否需要用 bzip2 压缩 | ||
-v | 压缩的过程中显示文件 | ||
-f | 使用档名,在 f 之后要立即接档名 | ||
-tf | 查看归档文件里面的文件 |
例子:
- 压缩文件夹:
tar -zcvf test.tar.gz test\
- 压缩多个文件:
tar -zxvf a.tar.gz a1.txt a2.txt
- 解压文件夹:
tar -zxvf test.tar.gz
- 解压文件到指定文件夹:
tar -zxvf test.tar.gz -C /opt/tmp
gzip/gunzip指令
gizp用于压缩文件,gunzip用于解压
命令 | 语法 | 参数 | 说明 |
---|---|---|---|
gzip | 压缩文件,只能将文件压缩为*.gz文件,压缩后文件不存在 | ||
gunzip | 解gzip形式的压缩文件 |
zip/unzip指令
zip用于压缩文件,unzip用于解压缩,这个在项目打包发布中很有用
命令 | 语法 | 参数 | 说明 |
---|---|---|---|
zip | zip [选项] xxx.zip 将要压缩的内容 | 压缩文件成zip形式的文件xxx.zip,压缩后原文件不会消失 | |
unzip | -r | 递归压缩,即压缩目录 | |
unzip | unzip [选项] xxx.zip | 解zip形式的压缩文件 | |
-d | 指定解压文件存放的目录 |
例子:
- 压缩/home目录所有文件:
zip -r homepackage.zip /home/*
- 将homepackage.zip解压到/opt/tmp目录下:
unzip -d /opt/tmp/ homepackage.zip
Linux 文件权限管理
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
文件/目录所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
查看文件和目录的权限
比如现在我创建了一个police组,并创建一个tom用户,将tom放到police组内,然后使用tom去创建一个ok.txt文件
groupadd police // 创建一个police组
useradd -g police tom // 将tom放到police组
touch ok.txt
查看方式
ls –alh
使用 ls 不带参数只显示文件名称,通过 ls –alh
可以显示文件或者目录的权限信息。
ls -l 文件名
显示信息包括:文件类型 (d
目录,-
普通文件,l
链接文件),文件权限,文件的硬链接数(如果是目录则是该目录下的子目录),文件的用户,文件的所属组,文件的大小,文件的创建时间,文件的名称
-rw-r--r--. 1 tom police 0 Dec 29 19:44 ok.txt
-
-
:普通文件 -
rw-
:说明用户tom有读写权限,没有运行权限 -
r--
:表示用户组 police 只有读权限,没有写和运行的权限 -
r--
:其他用户只有读权限,没有写权限和运行的权限
文档类型
-
d
表示目录 -
l
表示软连接 -
–
表示文件 -
c
表示串行端口字符设备文件,如鼠标、键盘等设备文件 -
b
表示可供存储的块设备文件 - 余下的字符 3 个字符为一组。
r
只读,w
可写,x
可执行,-
表示无此权限
rwx权限作用
rwx作用到文件
- r:代表可读,可以查看,读取
- w:代表可写,可修改,但是不能删除文件,删除文件的前提是是对文件所在目录有写权限
- x:代表可执行
rwx作用到目录
- r:代表可读,即使用ls查看目录内容
- w:代表可写,可以修改,在目录内创建+删除+重命名目录
- x:代表可执行,可以进入该目录
更改操作权限
chown修改文件所有者
chown是 change owner 的意思,主要作用就是改变文件或者目录所有者,所有者包含用户和用户组
chown [-R] 用户名称 文件或者目录
chown [-R] 用户名称 用户组名称 文件或目录
-R: 进行递归式的权限更改,将目录下的所有文件、子目录更新为指定用户组权限
比如使用root创建一个文件apple.txt,然后将所有者修改为tom
chown tom apple.txt
-rw-r--r--. 1 tom root 0 Dec 29 20:05 apple.txt
如果要修改整个目录下的文件,则需要使用-R递归修改
chown -R tom kkk/
chgrp修改文件所在组
chgrp是change group的意思,主要作用是修改文件所在组
chgrp 组名 文件名
比如将上面的apple.txt的所有组改为police组
chgrp police apple.txt
将目录下的所有文件所在组都改为同一个组,也需要使用-R递归修改
chgrp -R police kkk/
chmod更改文件或目录权限
改变访问权限
chmod [who] [+ | - | =] [mode] 文件名
应用案例
- 给一个组添加写权限,
chmod g+w cc.txt
- 给一个用户添加写权限,
chmod u+w cc.txt
- 给所有用户添加写权限,
chmod a+w cc.txt
- 直接分配权限,
chmod u=rwx,g=rw,o=r cc.txt
who
表示操作对象可以是以下字母的一个或者组合
- u:用户 user
- g:用户组 group
- o:表示其他用户
- a:表示所有用户是系统默认的
操作符号
- +:表示添加某个权限
- -:表示取消某个权限
- =:赋予给定的权限,取消文档以前的所有权限
mode
表示可执行的权限,可以是 r、w、x
数字设定法
数字设定法中数字表示的含义
- 0 表示没有任何权限
- 1 表示有可执行权限 =
x
- 2 表示有可写权限 =
w
- 4 表示有可读权限 =
r
也可以用数字来表示权限如 chmod 755 file\_name
r w x | r – x | r - x |
---|---|---|
4 2 1 | 4 - 1 | 4 - 1 |
user | group | others |
- 若要 rwx 属性则 4+2+1=7
- 若要 rw- 属性则 4+2=6
- 若要 r-x 属性则 4+1=5
lusifer@UbuntuBase:~$ chmod 777 test.txt
lusifer@UbuntuBase:~$ ls -al test.txt
-rwxrwxrwx 1 lusifer lusifer 6 Nov 2 21:47
Linux定时任务调度
任务调度是指系统在某个时间执行的特定的命令或程序
任务调度的分类:
- 系统工作:有些重要的工作需要周而复始的去执行
- 用户工作:个别用户希望某些程序能在固定时间点去执行,比如在一个时间点去备份Mysql数据库
crond任务调度
- 功能描述:crontab能够进行定时任务设置
- 基本语法:crontab [选项]
- 常用选项:
- -e:编辑crontab定时任务
- -l:查询crontab定时任务
- -r:删除当前用户的所有定时任务
应用实例:每隔1分钟将内容输出到指定文件
- 先执行命令crontab -e命令去编辑定时任务
- 在文件内输入调度任务如:
*/1 * * * * ls -l /home >> /home/cc.txt
(每一分钟将输出的内容写入cc.txt内)
5个占位符的说明
项目 | 含义 | 范围 |
---|---|---|
第一个* | 一个小时当中的第几分钟 | 0-59 |
第二个* | 一天当中的第几小时 | 0-23 |
第三个* | 一个月中的第几天 | 1-31 |
第四个* | 一年中的第几个月 | 1-12 |
第五个* | 一周中的星期几 | 0-7(0和7都代表星期天) |
特殊符号说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间,比如第一个*代表一小时中每分钟执行一次 |
, | 代表不连续的时间,比如“0 8,12,16 * * *”就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续时间范围,比如“0 5 * * 1-6”,代表周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次比如"*/10 * * * *",代表每隔10分钟执行一次 |
特定时间执行任务案例
特殊符号 | 含义 |
---|---|
45 22 * * * | 在22点45分执行命令 |
0 17 * * 1 | 每周一的17点0分执行命令 |
0 5 1,15 * * | 每月1号和15号凌晨执行命令 |
40 4 * * 1-5 | 周一到周五的凌晨4点50执行命令 |
*/10 4 * * * | 每天的凌晨4点,每隔10分钟执行一次 |
Linux网络配置
当我们的Linux系统安装好后,需要先配置一下网络,因为网络不通的话,远程登录、软件下载等功能都是无法使用的
Centos7网络配置
查看网卡情况
Centos7可以使用ip addr查看当前的ip地址(也可使用ifconfig查看ip,但是需要安装net-tools,但是前提还是要有网...)
查看结果如上图,可知 网卡ens33并没有相应的iinet属性即没有IP地址,也就无法通过IP连接虚拟机
Centos获取IP地址的方式有两种:一种是动态获取IP,另一种是设置静态IP,动态获取IP后每次重启系统IP地址会变化,这样不方便我们去连接(每次都需要知道更新后的IP),因此我们一般使用静态IP,防止重启系统后IP地址变化
配置静态IP前
在配置静态IP前,需要确定你的虚拟机是哪种网络连接方式,也就是你最开始创建虚拟机时选择的
在VMWare的虚拟机-->设置中
几种方式的区别:
- 桥接模式:Linux相当于和主机是一个网段,Linux可以和网段内的其他主机相互通信,但是会造成ip地址冲突
- NAT(Net Address Transfer):网络地址转换方式,linux可以访问外网,但是其他主机不能访问linux,和其他主机不在一个网段,不会造成ip冲突
- 主机模式:linux相当于一个独立的主机,和外面的主机相互都不能通信
NAT模式
比如我这里选择桥接模式,那么配置的IP地址需要和主机在一个网段内
配置静态IP
1.进入到配置文件目录: cd /etc/sysconfig/network-scripts/
,然后使用ls查看之前看到的网卡,比如我的是ens33
2.修改ifcfg-ens33文件,使用vi编辑器:vi ifcfg-ens33
注意:这里需要使用su提取权限后才能在配置文件中更改
由上图可以看出,Centos7默认是使用动态获取IP的方式且不启动网卡的( BOOTPROTO=dhcp,ONBOOT=no ),如果要配置动态IP则只需要将ONBOOT=no修改为ONBOOT=yes后重启网络即可。这里我们要设置静态IP,则需要将BOOTPROTO=dhcp,ONBOOT=no更改为BOOTPROTO=static,ONBOOT=yes,同时需要在后面添加上静态IP地址和DNS地址(有了DNS才能做域名解析)
其中关键内容:
- TYPE="Ethernet" # 网络类型为以太网
- BOOTPROTO="static" # 配置成静态ip
- NAME="ens33" # 网卡设备名,设备名一定要跟文件名一致
- DEVICE="ens33" # 网卡设备名,设备名一定要跟文件名一致
- ONBOOT="yes" # 该网卡是否随网络服务启动
- IPADDR="192.168.1.200" #静态ip地址
- GATEWAY="192.168.1.1" # 网关
- NETMASK="255.255.255.0" # 子网掩码
- DNS1="114.114.114.114" #DNS服务器地址
- DNS2="8.8.8.8" #DNS服务器地址2
3.重启网络:systemctl restart network
4.检查是否成功,再次使用ip addr查看IP地址设置,由下图可知已经设置成功
5.检查网络是否联通
使用ping+IP的方式去测试和其他主机是否能够通信,可以直接ping百度,下图说明能够连接到百度,因此能够上网了
如果ping的时候出现Destination host unreachable,先试试能不能ping通网关,如果也不能则可能是虚拟机配置的问题,点击编辑-->虚拟机编辑器看看桥接模式中是否还有其他网卡,将其他网卡去掉
如果使用NAT的网络连接方式,那么虚拟机的ip就可以不用和主机的ip在一个网段下了
1.先将虚拟机设置中的网络连接方式更改为NAT模式
2.然后点击编辑-->虚拟机网络编辑器,将VMnet改为NAT模式,并设置一个子网IP,点击NAT设置,设置一个网关
3.更改Linux的Ip为192.168.204.x网段,网关要和上述中NAT设置中的网关相同,然后重启网络
4.将主机中的VMnet8网卡中的IP地址改为与虚拟机设置的同一网段
防火墙设置
Centos7
命令 | 说明 |
---|---|
systemctl status firewalld | 查看防火墙服务状态 |
firewall-cmd --state | 查看firewall状态 |
service firewalld start/restart/stop | 开启/重启/关闭防火墙 |
firewall-cmd --list-all | 查看防火墙规则 |
远程登录
使用XShell进行远程登录,使用Xftp进行文件交互
首先需要打开服务器的远程登录服务器,即sshd服务
1.先查看系统是否有ssh服务( Secure Shell,专为远程登录会话和其他网络服务提供安全的协议)
rpm -qa | grep ssh
如果没有任何输出,则表示没有安装openssh-server,通过 yum install openssh-server
安装
2.配置ssh,vi /etc/ssh/sshd_config
打开配置文件
将文件中,关于监听端口,监听地址前的#号去除
允许远程root用户登录
保存文件,退出
3.开启sshd服务
service sshd start/systemctl sshd start
4.检查sshd服务是否开启
ps -e | grep sshd
或者输入netstat -an | grep 22 检查 22 号端口是否开启监听
5.设置开机启动ssh服务
systemctl enable sshd.service
现在,你就可以使用xshell等工具进行连接了
Linux实用命令
指定运行级别
Linux有7个运行级别
- 0:关机
- 1:单用户(找回丢失密码)
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:保留未使用
- 5:图形界面(也就是桌面)
- 6:系统重启
常用运行级别为3和5,系统的运行级别配置文件为/etc/inittab
,设置系统启动时的运行级别可以更改这个文件
Centos7已经不能这样设置了,需要使用systemctl set-default TARGET.target
来设置
如何找回root密码
思路:进入单用户模式,然后修改root密码,因为进入单用户模式root不用密码,然后再使用
passwd root
修改密码具体步骤:开机-->在引导时输入 回车键-->按照提示进入编辑行,输入1表示单用户模式--->再按提示输入b进入
如果将运行状态设置为0
那么系统将一启动就关机,想要改变这个情况还是需要进入单用户模式,然后将这个设置改过来
帮助指令
当我们对某个指令不熟悉时,可以使用Linux提供的帮助指令来里哦啊接这个指令的使用方法(其实直接百度可能更方便...)
-
man(manual手册):
基本语法:
man 命令或配置文件
获取到该命令的帮助信息,比如查看ls的帮助信息
man ls
-
help:
基本语法:
help 命令
(功能描述:获得shell内置命令的帮助信息),比如查看cd命令的帮助信息
时间日期类
data指令
- 功能描述:查看或修改当前日期
- 查看日期基本语法:
- date:显示当前日期
- date "+%Y":显示当前年份
- date “+%m” :显示当前月份
- date "+%d" :显示当前是哪一天
- date "+%Y-%m-%d %H:%M:%S"
- 设置日期基本语法:date -s 字符串时间,比如date -s "2020-12-28 17:05:00"
cal指令
- 功能描述:显示当前日历
- 基本语法:
cal [选项]
- 应用案例:
- cal,显示本月日历
- cal 2020,则显示2020年的日历
搜索查找类
find指令
-
基本语法:find [搜索范围] [选项]
-
功能说明:查找条件范围内的文件
-
选项说明:
-name <查询方式> ,按照指定文件名或正则表达查找文件
-user <用户名> ,查找属于指定用户名所有文件
-size <文件大小>,按照指定大小查找文件
-
应用实例:
- find /home -name cc.txt,在/home路径下查找cc.txt文件
- find / -name *.txt,查找系统中的txt文件
- find /opt -user root ,在/opt目录下查找root用户拥有的文件
- find / +20M,查找系统中超过20m的文件(+n大于,-n小于,n等于;单位可以改变)
locate指令
- 功能描述:可以快速定位文件路径,由于locate指令利用事先建立的系统所有文件名称及路径的locate数据库来实现快速定位文件,所以Locate无需遍历整个文件系统,查询速度快,为了保证查询的准确度,需要管理员定期更新locate时刻(特别说明:如果第一次运行locate,那么需要使用updatedb指令创建locate数据库)
- 基本语法:
locate 搜索文件
- 应用案例:使用locate快速定位hello.txt文件所在目录
- 注意:Centos7默认不会安装locate指令,需要使用
yum install mlocate
安装
grep指令和管道符号|
-
功能描述:grep为过滤查找;管道符号的作用是将前一个结果的输出传递给后面的命令
-
基本语法:grep [选项] 查找内容 源文件
-
常用选项:
? -n:显示匹配行及行号
? -i:忽略字母大小写
-
应用案例:在cc.txt文件中查找yes所在行,并显示行号
cat cc.txt | grep -n yes
网络类
检查某个端口是否监听telnet
功能描述:检查某个端口是否在监听,并且可以访问
基本语法:telnet ip 端口
比如telnet 192.168.1.200 22 查看22号端口是否开放
监控网络状态netstat
-
基本语法:
netstat [选项]
,一般为netstat -anp | more
-
常用参数:
? -a 所有
? -n 以数字的形式显示地址
? -p pid/程序名
? -t TCP协议
? -u UDP协议
-
应用案例:
- 查看服务名为sshd的服务信息
查看某个端口是否开放
- netstat -anp | grep 8080
- 查看
/etc/services
文件 - 远程监测
telnet
连接“需要测试准备的端口”
Linux系统管理
系统管理命令
命令 | 说明 |
---|---|
stat | 显示指定文件的相关信息,比 ls 命令显示内容更多 |
who | 显示在线登录用户 |
hostname | 显示主机名称 |
uname | 显示系统信息 |
top | 显示当前系统中耗费资源最多的进程 |
ps | 显示瞬间的进程状态 |
du | 显示指定的文件(目录)已使用的磁盘空间的总量 |
df | 显示文件系统磁盘空间的使用情况 |
free | 显示当前内存和交换空间的使用情况 |
ifconfig | 显示网络接口信息 |
ping | 测试网络的连通性 |
netstat | 显示网络状态信息 |
clear | 清屏 |
kill | 杀死一个进程 |
交换空间Swap
比如分配2个G的内存给服务器,交换空间2个G,当使用到内存溢出如2.4个G时,多出来的4个G由交换空间处理,但速度很慢,因为将交换空间的硬盘来充当内存,所以当内存满了时,响应会非常慢。
Linux磁盘分区和挂载
分区基本概念
分区即逻辑上分成不同的存储空间,也就是把一块大硬盘分成一块块硬盘,
分区有两种模式,一种是mbr分区,一种是gpt分区
Widows磁盘分区
Linux分区
Linux分区与Windows类似,也是将一块大硬盘分为一块块小硬盘,分区分为两种,主分区和扩展分区:
- 主分区:最多只能4个
- 扩展分区:本身不能存取数据,仅仅包含逻辑分区,扩展分区最多只能有一个,主分区加扩展分区最多4个
主分区为什么只能分4个
由硬盘结构来决定,整个硬盘分成一个个等大小的扇区,每个扇区512字节,448字节用来记录启动信息,64个字节用来进行分区表式,每16个字表示 一个分区,所以最多4个分区.
原理介绍
分区与目录关联
1)Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。
2)Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘说明
1)Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘
2)对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
3)对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样。
查看系统的分区与挂载情况
[root@centos-7 ~]# lsblk -f // 查看系统的分区与挂载情况 list-block device
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs b0a16cb1-a8da-4769-b60e-78217fc880c6 /boot
├─sda2 swap c872bea6-c1ef-4ff5-bcca-2e31fd53df05 [SWAP]
└─sda3 xfs 2d1487ec-c768-47a9-ac4a-7bb9656874dc /
sr0 iso9660 CentOS 7 x86_64 2020-11-03-14-55-29-00
[root@centos-7 ~]# lsblk // 查看分区大小
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.8G 0 part /
sr0 11:0 1 973M 0 rom
由系统可以看出有三个分区,并且分别对应三个挂载点(MOUNTPOINT)
挂载案例
比如现在Linux中新增一块硬盘,然后挂载到/home目录下的newdisk文件夹
如何增加一块硬盘:
- 虚拟机添加硬盘(比如添加一个2G的硬盘)
- 分区
- 格式化
- 挂载
1.虚拟机添加硬盘
比如添加一个2G的硬盘,然后进行重启,重新使用lsblk
查看磁盘情况,可以看到已经有了新的磁盘sdb
[root@centos-7 ~]# lsblk //查看磁盘情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.8G 0 part /
sdb 8:16 0 2G 0 disk
sr0 11:0 1 973M 0 rom
2.对磁盘进行分区
[root@centos-7 ~]# fdisk /dev/sdb //开始对sdb分区
开始对/sdb 分区
- m 显示命令列表
- p 显示磁盘分区 同 fdisk –l
- n 新增分区
- d 删除分区
- w 写入并退出
开始分区后输入 n,新增分区,然后选择 p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入 w 写入分区并退出,若不保存退出输入 q。
再次查看磁盘情况,已经有了sdb1
[root@centos-7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.8G 0 part /
sdb 8:16 0 2G 0 disk
└─sdb1 8:17 0 2G 0 part
sr0 11:0 1 973M 0 rom
3.格式化磁盘
在分好区后,分区里面是空的,为了能让操作系统能识别,需要向分区里写入相应格式的文件系统数据,比如windows的 FAT32,NTFS;Linux的ext2,ext3,ext4
mkfs -t ext4 /dev/sdb1 // 将db1格式化为ext4格式类型,mkfs也就是makeFileSystem
再来查看磁盘情况,可以发现已经写入了文件系统类型
[root@centos-7 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs b0a16cb1-a8da-4769-b60e-78217fc880c6 /boot
├─sda2 swap c872bea6-c1ef-4ff5-bcca-2e31fd53df05 [SWAP]
└─sda3 xfs 2d1487ec-c768-47a9-ac4a-7bb9656874dc /
sdb
└─sdb1 ext4 0b45bfa9-6c7c-4ba5-8ab2-6dce0d513df6
sr0 iso9660 CentOS 7 x86_64 2020-11-03-14-55-29-00
4.挂载
将分好的盘挂载到指定目录,因此需要创建指定目录,比如这里挂载到/home/newdisk,先创建
mkdir /home/newdisk
然后进行挂载,将/dev/sdb1挂载到/home/newdisk
[root@centos-7 newdisk]# mount /dev/sdb1 /home/newdisk/ //挂载
[root@centos-7 newdisk]# lsblk -f //再次查看磁盘状态
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs b0a16cb1-a8da-4769-b60e-78217fc880c6 /boot
├─sda2 swap c872bea6-c1ef-4ff5-bcca-2e31fd53df05 [SWAP]
└─sda3 xfs 2d1487ec-c768-47a9-ac4a-7bb9656874dc /
sdb
└─sdb1 ext4 0b45bfa9-6c7c-4ba5-8ab2-6dce0d513df6 /home/newdisk
sr0 iso9660 CentOS 7 x86_64 2020-11-03-14-55-29-00
[root@centos-7 newdisk]# ls /home/newdisk/
lost+found
由上可知,挂载已经成功,sdb1已经有了挂载点且/home/newdisk下面也有了文件
但是这是临时挂载,一旦重启就会失效,所以需要永久挂载,即重启后仍然能挂载到/home/newdisk,否则需要再次执行挂载命令
5.永久挂载
修改配置文件,/etc/fstab,然后将挂载信息添加进去
然后执行mount -a
即可生效
6.取消挂载
如果要取消磁盘挂载,则执行umount
命令取消挂载,然后去掉/etc/fstab
配置文件中的自动挂载
[root@centos-7 newdisk]# umount /dev/sdb1 //取消挂载
[root@centos-7 newdisk]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs b0a16cb1-a8da-4769-b60e-78217fc880c6 /boot
├─sda2 swap c872bea6-c1ef-4ff5-bcca-2e31fd53df05 [SWAP]
└─sda3 xfs 2d1487ec-c768-47a9-ac4a-7bb9656874dc /
sdb
└─sdb1 ext4 0b45bfa9-6c7c-4ba5-8ab2-6dce0d513df6
sr0 iso9660 CentOS 7 x86_64 2020-11-03-14-55-29-00
磁盘情况查询
查询系统整体磁盘使用情况
基本语法:df -h
,其中df为disk free,-h为human,表示以人类常见的方式显示
[root@centos-7 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda3 18G 1.7G 17G 10% /
/dev/sda1 197M 122M 76M 62% /boot
/dev/sdb1 2.0G 6.0M 1.9G 1% /home/newdisk
tmpfs 182M 0 182M 0% /run/user/0
查询指定目录的磁盘占用情况
基本语法:du -h /目录
常用参数:
查询指定目录的磁盘占用情况,默认为当前目录
- -s 指定目录占用大小汇总,即select
- -h 带计量单位,即human以人的方式显示
- -a 显示所有文件,包括隐藏
- --max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
应用实例: 查询 /home目录的磁盘占用情况,深度为 1
[root@centos-7 ~]# du -ach --max-depth=1 /home
16K /home/sirelly
24K /home/jack
12K /home/jerry
20K /home/newdisk
72K /home
72K total
工作使用指令
-
统计/home文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
,其中"^-"表示过滤以-开头的文件,wc表示统计[root@centos-7 home]# ll total 4 -rw-r--r--. 1 root root 0 Jan 2 23:27 cc.txt drwxr-x---. 2 1002 police 113 Dec 29 23:42 jack drwx------. 2 1003 police 62 Dec 29 22:05 jerry drwxr-xr-x. 3 root root 4096 Jan 1 00:14 newdisk drwx------. 2 sirelly sirelly 83 Dec 25 22:03 sirelly [root@centos-7 home]# ls -l /home | grep "^-" | wc -l 1
-
统计/home文件夹下目录的个数
[root@centos-7 home]# ls -l /home | grep "^d" | wc -l 4
-
统计/home文件夹下文件的个数,包括子文件夹的
注意:ls参数中,-R代表递归,-r代表逆序(reverse)
[root@centos-7 home]# ls -lR /home | grep "^-" | wc -l 2
-
统计/home文件夹下目录的个数,包括子文件夹的
[root@centos-7 home]# ls -lR /home | grep "^d" | wc -l 5
-
以树状显示目录结构
需要先安装tree软件,
yum install tree
[root@centos-7 home]# tree . ├── cc.txt ├── jack │ └── aa.txt ├── jerry ├── newdisk │ └── lost+found └── sirelly 5 directories, 2 files
Linux进程管理
进程基本概念
- 在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
- 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
查看进程
基本指令:ps
,即进程状态 Process Status
常用参数:
- -a:显示当前终端的所有进程信息
- -u:以用户的格式显示进程信息
- -x:显示后台进程运行参数
- -e:显示所有进程
- -f:全格式(-ef查看父进程)
ps -aux
可能显示的信息过多,那么就使用more去分页查看,ps -aux | more
[root@centos-7 ~]# ps -aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128056 6688 ? Ss 00:04 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 00:04 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 00:04 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 00:04 0:00 [kworker/u256:0]
root 6 0.0 0.0 0 0 ? S 00:04 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 00:04 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 00:04 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 00:04 0:01 [rcu_sched]
上述显示的进程信息分别为:用户名,进程ID,CPU占用,内存占用,使用的虚拟内存(单位KB),使用的物理内存(单位KB),使用的终端,进程状态(s:休眠,r:运行),启动时间,占用CPU总时间,进程执行的命令行
- STAT:?进程状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
应用实例:
-
比如要查看有没有sshd服务,
ps -aux | grep sshd
[root@centos-7 ~]# ps -aux | grep sshd root 871 0.0 0.2 112900 4284 ? Ss 00:04 0:00 /usr/sbin/sshd -D root 1749 0.0 0.3 158904 5600 ? Ss 00:35 0:00 sshd: root@pts/0
-
查看父进程,
ps -ef | more
[root@centos-7 ~]# ps -ef | more UID PID PPID C STIME TTY TIME CMD root 1 0 0 00:04 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 00:04 ? 00:00:00 [kthreadd] root 4 2 0 00:04 ? 00:00:00 [kworker/0:0H] root 5 2 0 00:04 ? 00:00:00 [kworker/u256:0] root 6 2 0 00:04 ? 00:00:00 [ksoftirqd/0] root 7 2 0 00:04 ? 00:00:00 [migration/0] root 8 2 0 00:04 ? 00:00:00 [rcu_bh] root 9 2 0 00:04 ? 00:00:01 [rcu_sched]
-
查看sshd服务的父进程,
ps -ef | grep sshd | more
终止进程
基本语法:
-
kill [选项] 进程号
(功能描述:通过进程号杀死进程 ) -
killall 进程名称
(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项:
- -9:表示强迫进程立即停止
- -15:操作系统发送一个信号通知进程主动关闭
kill -9和kill -15的区别
9和15都是信号编码,linux系统采用kill加信号编码的方式来关闭进程,比如
kill -9 PID
,可以使用kill -l
查看所有信号编码简单来说:
- kill -9 PID是操作系统从内核级别强制杀死一个进程;
- kill -15 PID 可以理解为操作一同发送一个通知告诉应用主动关闭
执行kill -15 PID后,操作系统会给该进程发送一个SIGTERM信号,该进程收到该信号后,一般会先释放自己的资源,然后再停止,但也有 程序可以在接受到信号量后,继续做其他一些事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出响应。也就是说,
15 SIGTERM
是可能被阻塞、被忽略的小结:在使用
kill -9
前,应该先使用kill -15
,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。
应用案例:
-
先查找到要杀死的进程ID,然后杀掉进程
[root@centos-7 ~]# ps -aux | grep sshd root 873 0.0 0.2 112900 4284 ? Ss 17:57 0:00 /usr/sbin/sshd -D root 1383 0.1 0.3 158904 5604 ? Ss 17:57 0:00 sshd: root@pts/0 root 1454 0.0 0.0 112812 964 pts/0 R+ 18:03 0:00 grep --color=auto sshd [root@centos-7 ~]# kill 1383
-
查看进程树
首先需要安装psmisc插件,
yum -y install psmisc
基本语法:pstree [ 选项]
常用参数:
- -p:以树状形式显示pid
- -u:以树状形式显示用户id
服务(Service)管理
? 服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等) ,在 CentOS7.0 后 不再使用 service ,而是 systemctl
Service管理命令
基本语法:service/systemctl 服务名 [start | stop | restart | reload | status]
应用案例:
- 比如启动sshd服务,systemctl start sshd
- 查看当前防火墙的状态,systemctl status firewalld
- 关闭防火墙:systrmctl stop firewalld
上面的方式只是临时生效,重启系统后,会恢复到之前的服务设置,可以chkdonfig永久设置
查看当前启动的服务
- 使用setup工具,
setup->系统服务
- /etc/init.d/服务名称,
ls -l /etc/init.d
(Centos7此方法不可用) -
systemctl list-unit-files
,Centos7查看方式(enabled是开机启动,disabled是开机不启动)
服务的运行级别
Linux 系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
查看和修改默认级别:vi /etc/inittab
运行级别 | 说明 |
---|---|
0 | 系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动 |
1 | 单用户工作状态,root 权限,用于系统维护,禁止远程登陆 |
2 | 多用户状态(没有 NFS),不支持网络 |
3 | 完全的多用户状态(有 NFS),登陆后进入控制台命令行模式 |
4 | 系统未使用,保留 |
5 | X11 控制台,登陆后进入图形 GUI 模式 |
6 | 系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动 |
chkconfig指令
通过chkconfig命令给各个运行界别设置启动/关闭
基本语法:
- 查看服务 chkconfig --list | grep xxx(Centos7变为 systemctl list-unit-files)
- chkconfig 服务名 --list
- chkconfig --level 5 服务名 on/off,(Centos7变为了systemctl list-dependencies 服务名)
动态监控进程
-
基本语法:
top
-
功能描述:监视系统性能,如CPU和内存消耗,与ps的区别在于,ps看到的是命令执行瞬间的进程信息,而top可以持续监视,类似Windows的任务管理器
-
常用参数:
- -d:表示秒数,指top指令每隔几秒更新,默认是3秒
- -i:让top不显示任何闲置或僵尸进程
- -p:通过指定监控进程ID来仅仅监控某个进程状态
-
交互操作:在使用top命令后可以使用一些命令进行交互
操作 说明 P 以CPU使用率排序,默认此项 M 以内存使用率排序 N 以PID排序 q 退出top -
应用案例:
-
监视特定用户
top:输入命令,按回车,查看执行的进程
u:然后输入u,回车,再输入用户名,即可监视指定用户进程信息
-
终止指定的进程
k:在top命令执行后,输入k,回车,然后输入要结束的进程ID
-
指定状态更新时间,比如10秒自动更新,
top -d 10
-
监控网络状态
netstat-------重要
-
基本语法:
netstat [选项]
,一般为netstat -anp | more
-
常用参数:
-an:按一定顺序排列输出
-p:显示哪个进程在调用
-
应用案例:
-
查看服务名为sshd的服务信息
netstat -anp | grep sshd
-
进程状态
状态 | 说明 |
---|---|
R(运行或就绪)状态 | running or runnable (on run queue) 正在执行或者就绪,此时进程位于执行队列中。 |
D(不可中断状态) | uninterruptible sleep (usually I/O) 不可中断阻塞,通常为 IO 阻塞。 |
S(可中断睡眠状态) | interruptible sleep (waiting for an event to complete) 可中断阻塞,此时进程正在等待某个事件完成。 |
Z(僵尸状态) | zombie (terminated but not reaped by its parent) 僵尸进程,进程已经终止但是尚未被其父进程获取信息。 |
T(停止或追踪状态) | stopped (either by a job control signal or because it is being traced) 结束,进程既可以被作业控制信号结束,也可能是正在被追踪。 |
进程终止 SIGCHLD
在一个进程终止或停止时,将SIGCHLD信号发送给父进程,按系统默认忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。
其中子进程发送SIGCHLD信号包含了子进程的信息,如进程ID、进程状态、进程使用CPU的时间等
在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程的信息,父进程通过wait()或waitid()来获得一个已经退出的子进程信息。
wait()
pid_t wait(int *status)
父进程调用wait()会一直阻塞,直到收到一个子进程退出的SIGHLD信号,之后wait()函数会销毁子进程并返回
如果成功,返回被收集的子进程ID,如果调用进程没有子进程,调用就会失败,此时返回-1
waitpid()
pid_t waitpid(pid_t pid, int *status, int options)
作用和wait()完全相同,但是多了两个可由用户控制的参数pid和options
- pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。
- options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。
僵尸进程与孤儿进程
在理解僵尸进程和孤儿进程之前,先要理解一下什么是父进程和子进程
父进程和子进程:子进程是父进程的一个副本,一个父进程能创建多个子进程,创建子进程能并发执行。一般来说,子进程先结束执行,然后父进程负责子进程的回收等善后工作
僵尸进程
一个进程使用fork创建子进程,如果子进程结束后,父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符
将保留在系统中,这种进程就称为僵尸进程
危害:如果进程不调用wait/waitpid的话,那么保留的那段信息就不会释放,其进程号就会被一直占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸,那么系统将会因为没有可用进程号而不能产生新的进程,这就是僵尸进程的危害。
孤儿进程
父进程结束运行,但子进程还在运行,这样的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变为孤儿进程的父进程,并由init进程对他们完成状态收集工作。(linux下,init是内核启动的一个用户级进程,init有许多重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤儿进程)
危害:孤儿进程最终将会被init进程(进程号为1)所收养,并由init进程对他们完成状态收集工作,而init进程会循环地wait()它的已经退出的子进程。
僵尸进程和孤儿进程产生的原因
让父进程可以知道子进程结束时的状态信息。
父进程为什么产生子进程,是因为需要子进程来完成任务,如果没有父进程获取子进程状态信息的机制,那么一个子进程结束就把他的所有资源和信息全部释放,那父进程就不知道子进程结束的状态信息了,所以父进程需要知道子进程的完成情况,如果子进程完成,则父进程就调用wait将子进程的状态信息清理掉,但是父进程不清理,就会让子进程的状态一直存在,形成了僵尸进程,这样就浪费了进程Id,而进程ID是有限的。
解决方法
-
杀掉僵尸进程的父进程(一般不用):当大量僵尸进程存在时,我们只需要杀死僵尸进程的父进程,那么僵尸进程就会变为孤儿进程,而孤儿进程会被init进程托管,并回收资源
注意:僵尸进程无法用kill直接杀死,如kill -9 3214,再用令去查看进程状态,发现3214进程还在。
-
父进程使用wait或waitpid去回收资源: 父进程通过wait或waitpid等函数去等待子进程结束,但是这样不好,会导致父进程一直被挂起。
-
通过信号机制,在处理函数中调用wait,回收资源:通过信号机制,子进程退出时向父进程发送SIGCHLD信号,父进程调用signal(SIGCHLD,sig_child)去处理SIGCHLD信号,在信号处理函数sig_child()函数中调用wait处理僵尸进程,什么时候得到子进程信号,什么时候处理,父进程可以去干其他事,不用阻塞等待(这相当于异步,有提示机制)
如何查找和定位僵尸进程
查看僵尸进程
-
使用ps指令,如果状态为Z(zombie)就是僵尸进程
-
使用top命令
定位僵尸进程
-
ps -aux | grep Z
-
ps -A -ostat,ppid,pid,cmd |grep -e ‘[1]‘
参数:
- -A:列出所有进程
- -o:自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令)
因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
守护进程
守护进程就是通常说的Daemon进程(精灵进程),是一个在后台运行
且不受任何终端控制
的进程。
不受任何终端控制意思是守护进程独立于所有终端,因此进程不会被任何终端所产生的终端信息打断并且在执行过程中的信息也不会在终端显示
比如我现在写了一个Web应用,然后想来启动他,让他一直在后台运行,如果是vue,那么我就使用npm run dev去启动他,启动后其他人就可以使用我的地址和端口去访问他了,但是你一退出命令行窗口,这个应用也就跟着退出了,怎么才能让他真正在后台运行,就是关掉命令行仍能在后台运行呢?这就需要把他变成守护进程(daemon)。
前台任务和后台任务
上面那样启动的任务,就是前台任务
,他会独占命令行窗口,只有运行完了或手动终止才能使用命令行窗口执行其他任务。要将进程变为守护进程的第一步就是把他变为后台任务
$ npm run dev &
只要在命令的尾部加上&,启动的进程就会变为“后台任务”,如果要将正在执行的前台任务变为后台任务,可以使用 ctrl + z
( 可以将一个正在前台执行的命令放到后台,并且暂停 ),然后执行bg
命令(让最近一个暂停的"后台任务"继续执行)
“后台任务”有两个特点:
- 继承当前session(对话)的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地显示在命令行下显示
- 不再继承当前session(对话)的标准输入(stdin),你无法再向这个任务输入指令了,如果使用标准输入,则会暂停执行(halt)
因此后台任务与前台任务的本质区别就是是否继承标准输入
,所以,执行后台任务的同时,用户还可以输入其他命令。
变为后台任务后,一个进程还不是守护进程,那么用户退出session后,后台任务还是否会继续执行
在Linux中
- 用户准备退出 session
- 系统向该 session 发出
SIGHUP
信号 - session 将
SIGHUP
信号发给所有子进程 - 子进程收到
SIGHUP
信号后,自动退出
这也是为什么前台任务会随session退出而退出,是因为受到了sighup信号,后台任务会不会收到呢,这取决于 huponexit 参数,这个参数默认关闭为off,所以后台任务不会收到sighup信号,也就不会随着session退出,但是通过这种方式启动守护进程并不保险, 因为有的系统的huponexit
参数可能是打开的(on
) ,因此需要更好的方法
查看后台进程
jobs
查看当前有多少在后台运行的命令jobs -l
选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
后台前台任务转换
- 把后台任务调到前台执行 fg
- 把停下的后台任务在后台执行起来 bg
后台进程与守护进程的区别
- 守护进程完全脱离终端控制台,而后台程序并未完全脱离(在终端关闭前还是会向中断输出结果)
- 守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要 以nohup command & 格式运行才能避免影响
- 守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变;
nohup 命令
使用nohup启动守护进程更加方便
$ nohup npm run dev &
nohup会对进程做三件事:
- 阻止SIGHUP信号发送到这个进程
- 关闭标准输入,该进程不能再接收任何输入,即使运行在前台
- 重定向标准输出和标准错误到文件nohup.out
nohup命令相当于把子进程和他所在的session分离了,但是nohup命令不会把前台任务转为后台任务,需要加上&符号
进程查看
- 守护进程:ps -x
- 普通进程:ps 或 带参数的其他ps命令
- 后台进程:jobs 或 前面的上述的那些命令
Linux 软件包管理
Centos和Ubuntu都有相应包管理工具
对比项 | rpm | yum | dpkg | apt |
---|---|---|---|---|
系列 | RedHat系 | RedHat系 | Debian系 | Debian系 |
区别 | 包安装工具 | 依赖管理工具 | 包安装工具 | 依赖管理工具 |
查询已安装 | rpm -qa | yum list installed | dpkg -l | apt list –installed |
安装 | rpm -i package.rpm 或 rpm –ivh http://www.xxx.net/package.rpm | yum install -y | dpkg -i package.deb | apt-get install package |
更新 | rpm –U software.rpm | yum update | apt upgrade | |
移除软件包 | rpm -e module1… | yum -remove | dpkg -r package | apt remove package |
Centos软件包管理
Centos使用rpm作为包管理工具,使用yum作为依赖管理工具
rpm包管理工具
它是一种用于互联网下载包的打包及安装工具,它生成具有.RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windows 的 setup.exe
rpm包的简单查询命令
-
查询已安装的rpm列表,
rpm -qa | more
,其中q为query,a为all -
查询是否安装某个应用,
rpm -qa | grep xxx
[root@centos-7 ~]# rpm -qa | grep net-tools net-tools-2.0-0.25.20131004git.el7.x86_64
-
查询软件安装信息,
rpm -qi xxx
-
查询软件包中的文件,
rpm -ql 软件包名
rpm -ql net-tools
-
查询文件所属的软件包,
rpm -qf 文件全路径名
rpm -qf /etc/passwd
卸载rpm包
- 基本语法:
rpm -e 包的名称
,其中e为erase擦除的意思 - 注意点:如果其他软件包依赖于要卸载的软件包,则在卸载是会出现错误信息,我们可以使用--nodeps去强制删除,但是不建议这样做,因为依赖于该软件包的程序可能无法运行
- 强制删除:rpm -e --nodeps xxx
安装rpm包
- 基本语法:
rpm -ivh 包路径名称
- 参数说明:
- -i:install安装
- -v:verbose提示
- -h:hash进度条
- 应用实例:
- 首先找到应用rpm安装包,
yum依赖管理工具
yum是一个Shell前端软件包管理器,基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,使用yum的前提是可以联网
yum基本指令
-
查询yum服务器是否有需要安装的软件,
yum list | grep xx
[root@centos-7 ~]# yum list | grep chrome chrome-gnome-shell.x86_64 10.1-4.el7 base xorg-x11-drv-openchrome.i686 0.5.0-3.el7.1 base xorg-x11-drv-openchrome.x86_64 0.5.0-3.el7.1 base xorg-x11-drv-openchrome-devel.i686 0.5.0-3.el7.1 base xorg-x11-drv-openchrome-devel.x86_64 0.5.0-3.el7.1 base
Ubuntu软件包管理
APT(Advanced Packaging Tool) 是 Debian/Ubuntu 类 Linux 系统中的软件包管理程序, 使用它可以找到想要的软件包, 而且安装、卸载、更新都很简便;也可以用来对 Ubuntu 进行升级; APT 的源文件为 /etc/apt/
目录下的 sources.list
文件。
修改数据源
由于国内的网络环境问题,我们需要将 Ubuntu 的数据源修改为国内数据源,操作步骤如下:
查看系统版本
lsb_release -a
# 输出如下
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
注意: Codename 为
bionic
,该名称为我们 Ubuntu 系统的名称,修改数据源需要用到该名称
编辑数据源
vi /etc/apt/sources.list
删除全部内容并修改为
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
更新数据源
apt-get update
常用 APT 命令
- 安装软件包:
apt-get install
- 删除软件包:
apt-get remove
- 更新软件包列表:
apt-get update
- 升级有可用更新的系统(慎用):
apt-get upgrade
- 搜索:
apt-cache search
- 获取包信息:
apt-cache show
- 删除包及配置文件:
apt-get remove --purge
- 了解使用依赖:
apt-cache depends
- 查看被哪些包依赖:
apt-cache rdepends
- 安装相关的编译环境:
apt-get build-dep
- 下载源代码:
apt-get source
- 清理无用的包:
apt-get clean && apt-get autoclean
- 检查是否有损坏的依赖:
apt-get check
自己安装软件在usr/local/目录下
Linux配置Java环境
为什么大多数服务器使用Linux
主要有以下几个原因
- 开放性:Linux是
开源免费
的 - 硬件需求低:Linux相对Windows的有硬件需求耕地
- 灵活性: Linux 是世界上最灵活的操作系统, 您可以根据需要
自定义系统
。总的来说,Linux 为您提供了对服务器的完全控制、掌控权利。 - 稳定
- 安全:相比于Windows更加安全
- 高效:
- 处理高并发
安装jdk
这里有两种方式,一种是离线方式,使用jdk安装包安装,一种是用使用yum在线安装
1.离线安装
-
首先使用xftp将jdk安装包导入到linux的/opt目录下
[root@centos-7 ~]# cd /opt/ [root@centos-7 opt]# ls jdk-8u152-linux-x64.tar.gz
-
对tar包进行解压,解压后会多出一个jdk目录
[root@centos-7 opt]# tar -zxvf jdk-8u152-linux-x64.tar.gz [root@centos-7 opt]# ls jdk1.8.0_152 jdk-8u152-linux-x64.tar.gz
-
配置环境变量,配置后才能在全局使用java命令
使用vim打开/etc/profile文件,该文件存放环境变量,
[root@centos-7 opt]# vim /etc/profile //打开文件 //在最后添加以下内容 JAVA_HOME=/opt/jdk1.8.0_152 //JAVA_HOME PATH=/opt/jdk1.8.0_152/bin:$PATH //路径 export JAVA_HOME PATH //输出变量,环境变量生效
-
注销用户,环境变量才能生效
此时使用java -version还不能生效,需要注销
[root@centos-7 opt]# logout
-
验证是否成功
[root@centos-7 ~]# java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
-
运行简单的java程序
[root@centos-7 opt]# javac Hello.java [root@centos-7 opt]# ls Hello.class Hello.java jdk1.8.0_152 jdk-8u152-linux-x64.tar.gz [root@centos-7 opt]# java Hello Hello,I am ci~
2.yum安装
此方法需要联网,好处是会自动配置环境变量
-
首先检查系统是否有open-jdk,如果没有信息则没有安装,如果有也可以使用
rpm -qa | grep java | xargs rpm -e --nodeps
批量卸载带有java的文件rpm -qa |grep java rpm -qa |grep jdk
-
检索能安装的java列表
yum list java*
查看能安装的1.8列表,
yum list java-1.8*
-
选择要安装的包,
yum install -y java-1.8.0-openjdk-devel.x86_64
-
测试是否安装成功,
java -version
安装tomcat
同样是两种方式
1.离线安装
-
使用tar.gz解压到/opt目录
[root@centos-7 opt]# tar -zxvf apache-tomcat-8.5.23.tar.gz [root@centos-7 opt]# ls apache-tomcat-8.5.23 apache-tomcat-8.5.23.tar.gz Hello.class Hello.java jdk1.8.0_152 jdk-8u152-linux-x64.tar.gz
-
启动tomcat,进入tomcat的bin目录,然后启动./startup.sh
[root@centos-7 bin]# ./startup.sh Using CATALINA_BASE: /opt/apache-tomcat-8.5.23 Using CATALINA_HOME: /opt/apache-tomcat-8.5.23 Using CATALINA_TMPDIR: /opt/apache-tomcat-8.5.23/temp Using JRE_HOME: /opt/jdk1.8.0_152 Using CLASSPATH: /opt/apache-tomcat-8.5.23/bin/bootstrap.jar:/opt/apache-tomcat-8.5.23/bin/tomcat-juli.jar Tomcat started.
-
让防火墙打开8080端口,这样外部才能访问这个端口
[root@centos-7 sysconfig]# firewall-cmd --zone=public --add-port=8080/tcp --permanent success [root@centos-7 sysconfig]# systemctl restart firewalld //重启防火墙
-
在主机*问虚拟机IP:8080看是否成功
常用工具
Linux Vim 编辑器
Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 Vim 则可以说是vi编辑器的升级版,具有代码高亮
一般系统都自带vi编辑器的,但最小系统是没有vim编辑器的,所以需要先安装vim编辑器,否则会出现找不到命令
安装vim, yum -y install vim*
使用vim 文件名
的方式打开文件,可以发现代码高亮了
而使用vi 文件名
代码是不会高亮的
我们可以使用命令ln -sf /usr/bin/vim /bin/vi
这样强制/bin下的vi命令软链接到/usr/bin/vim
-s代表符合链接。-f代表强制执行
再使用vi 文件名
的方式打开文件,就和vim打开一样了
Vim一般具有三种模式:
正常模式
在正常模式下,可以直接使用快捷键
运行模式
- 编辑模式:等待编辑命令输入
- 插入模式:编辑模式下,输入
i
进入插入模式,插入文本信息 - 命令模式:在编辑模式下,输入
:
进行命令模式 - 保存退出::,w写,q退出,!强制,:w!
- 改文件只读退出::x!
命令模式
-
:q
:直接退出vi -
:wq
:保存后退出vi ,并可以新建文件 -
:q!
:强制退出 -
:w file
:将当前内容保存成某个文件 -
/
:查找字符串 -
:set number
或set nu
: 在编辑文件显示行号 -
:set nonumber
或set nonu
:在编辑文件不显示行号 -
:set paste
:原样粘贴
Vim的其他相关命令
创建文件
vim 文件名
//创建一个新的文件并进入编辑模式
//如果文件存在,直接进入编辑模式
撤销和恢复操作
//在正常模式下
u //撤销刚刚的操作
ctrl+r //恢复刚刚撤销的动作
文本搜索
/要搜索的文本,如/o将会搜索出文本中所有的o
找到文本后通过n和N切换到上一个和下一个
:noh//取消着色标记,命令行模式
拷贝当前行
yy //拷贝光标处的当前行
5yy //拷贝当前行向下的5行
P //粘贴到光标的下一行
删除当前行
dd //删除光标处的当前行
5dd //删除光标处下面的5行
到达文本的开始或末尾
//正常模式下
gg //回到文本的开始
G //回到文本的末尾
移动到指定行
:set nu //1.显示行号
方式一
行号 //1.输入要到达的行号
shift+g //2.到达指定行号,其实就是将g变为G,所以可以直接用G
方式二
行号 G //1.行号+G到达指定行号
setuptool
setup工具,setup工具可以快捷的设置防火墙、网络、系统等参数
- 安装setuptool
# yum install setuptool - 安装防火墙设置
# yum install system-config-securitylevel-tui - 安装网络设置
# yum install system-config-network-tui - 安装系统服务管理
# yum install ntsysv y
net-tools
net-tools是Linux的一个网络工具箱,他提供 arp, hostname, ifconfig, netstat, rarp, route, plipconfig, slattach, mii-tool and iptunnel and ipmaddr等命令
其他命令解释
ll与ls的区别
ll不是命令,是ls -l的别名
ll 列出来的结果详细,有时间,是否可读写等信息
ls只列出文件名或目录名
Systemctl和service、chkconfig命令的关系
- systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器。
- service命令:可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
- chkconfig命令:是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 所以systemctl命令是service命令和chkconfig命令的集合和代替。
ifconfig和ip addr的区别
都能够查看系统的Ip信息,但是ifconfig在Centos7中需要安装net-tools
硬链接与软连接的区别
硬链接:指通过索引节点来进行连接。在Linux系统中,保存在磁盘上的文件都会有一个编号,称为索引节点号(Inode Index),在Linux系统中存在多个文件都在同一索引节点的情况是存在的,比如A是B的硬链接(A和B都是文件名),则A的索引节点号与B的索引节点号是相同的,即一个索引节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对系统是平等的,删除其中一个都不会影响另一个的访问
软连接:软连接又称为符号连接,有点类似于Windows系统中的快捷方式,软连接包含另一文件的位置信息,比如A是B的软连接,那么他们的节点索引号是不同的,但A的数据块存放的是B的路径名,如果B被删除了,A仍然存在,但指向的是一个无效的链接。
[root@centos-7 home]# ln apple.txt cc.txt // 给apple.txt创建一个硬链接文件cc.txt
[root@centos-7 home]# ln -s apple.txt ii //给apple.txt创建一个软连接文件ll
[root@centos-7 home]# ls -l
[root@centos-7 home]# ls -li //其中i显示索引节点信息
total 8
33649266 -rw-r--r--. 2 tom police 6 Dec 29 21:04 apple.txt
33649266 -rw-r--r--. 2 tom police 6 Dec 29 21:04 cc.txt
33574991 lrwxrwxrwx. 1 root root 9 Dec 29 21:18 ii -> apple.txt
17269286 drwxr-xr-x. 2 root root 20 Dec 28 19:51 kk
532563 drwx------. 2 sirelly sirelly 83 Dec 25 22:03 sirelly
33649227 drwx------. 2 tom police 97 Dec 29 20:04 tom
// 上面的apple.txt和硬链接文件cc.txt的索引节点号相同
[root@centos-7 home]# echo "hello" > apple.txt
[root@centos-7 home]# cat apple.txt
hello
[root@centos-7 home]# cat cc.txt
hello
[root@centos-7 home]# cat ii
hello
[root@centos-7 home]# rm -f apple.txt // 删除源文件
[root@centos-7 home]# cat cc.txt // 硬链接文件不受影响
hello
[root@centos-7 home]# cat ii // 软连接无效
cat: ii: No such file or directory
参考:
韩顺平Linux课程
软连接与硬链接
CS-Notes Linux
https://www.cnblogs.com/lvcisco/p/9836701.html
https://www.daixiaorui.com/read/271.html
http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
https://blog.csdn.net/zhujing16/article/details/88677253 (网络配置)
https://blog.csdn.net/qq_37960007/article/details/79680073 (NAT模式的图)
-
Zz ??