系统相关
首页 > 系统相关> > Linux从入门到入坑

Linux从入门到入坑

作者:互联网

Linux简介

Linux操作系统

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debianarchlinux,和基于商业开发的[Red Hat Enterprise Linux](https://baike.baidu.com/item/Red Hat Enterprise Linux/10770503)、SUSE、[Oracle Linux](https://baike.baidu.com/item/Oracle Linux/6876458)等

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

总结:

内核

  1. 什么是操作系统?
    操作系统是负责整个系统最基本功能和系统管理,包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件管理工具和系统工具。

用户界面是操作系统的外在表象,内核是操作系统的内在核心。

  1. 什么是内核?
    内核由一系列程序组成,包括负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理地址空间的内存管理程序、网络、进程间通信的系统服务程序等。

内核负责管理系统的硬件设备。

  1. 内核空间 VS 用户空间
    内核空间表示内核拥有的内存空间,用户空间表示用户程序执行时的内存空间。

内核拥有直接访问硬件设备的所有权限,用户程序不能直接访问硬件设备,因此用户程序通过系统调用和内核通信来运行。

Linux内核

​ 操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

主要的子程序

Linux内核的功能

1、进程管理

内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出)。不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外,调度器,控制进程如何共享CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个CPU 之上的抽象。

2、内存管理

计算机的内存是主要的资源,处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单的malloc/free对到更多更复杂的功能。

3、文件系统

Unix 在很大程度上基于文件系统的概念;几乎Unix中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准Linux的ext3文件系统,普遍使用的FAT 文件系统,或者其他几个文件系统。

4、设备控制

几乎每个系统操作终都映射到一个物理设备上。除了处理器,内存和非常少的别的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行,这些代码称为设备驱动.。内核中必须嵌入系统中出现的每个外设的驱动,,从硬盘驱动到键盘和磁带驱动器。内核功能的这个方面是本书中的我们主要感兴趣的地方。

5、网络

网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程:进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发。系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。

Linux的发展历程

https://www.linuxprobe.com/origin-of-linux.html

centos7 的安装

见博客:http://101.37.172.180:8848/archives/vmware虚拟机安装centos7

初识Shell

shell是系统的用户界面,提供了用户与内核进行交互的一种接口。它接收用户输入的命令并把它送到内核中去执行。实际上Shell是一个命令解释器,它解释用户输入的命令并把用户的意图传达给内核。(可以理解为用户和内核之间的翻译官角色)

Shell 分类

常见的Shell类型有sh, bash, csh, tcsh, ash,bash shell 是Linux默认的shell,

Shell 语法

命令:整条shell命令的主体部分

选项:会影响会微调命令的行为,通常以-或者--开头

参数: 命令作用的对象(长参数,短参数)

bash的基本特性

自动补全

[root@localhost ~]# yum install -y bash-completion.noarch 

快捷键

历史命令

[root@localhost ~]# history 

选项

# history [n] n为数字,列出最近的n条命令
[root@localhost ~]# history -w histfiles.txt 1 
[root@localhost ~]# history -c ! number 执行第几条命令 ! command 从最近的命令查到以 command 开头的命令执行 
!! 执行上一条

命令别名(alias)

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

设置别名

[root@localhost ~]# alias cathis='cat /root/.bash_history'
[root@localhost ~]# cathis

取消别名

[root@localhost ~]# unalias cathis='cat /root/.bash_history'

man手册

查看某个命令的 man手册

[root@localhost ~]# man ls

下载安装中文版的man手册

[root@localhost ~]# yum -y install man-pages-zh-CN.noarch
[root@localhost ~]# echo alias cman='man -M /usr/share/man/zh_CN' >> /root/.bashrc	
[root@localhost ~]# source .bashrc
[root@localhost ~]# cman ls

文件管理

文件系统目录结构

在Linux中,文件以树状图的形式表现出来。其中/ 为根目录 只有一个根目录 。所以也称之为单根文件系统

文件定位 路径

路径的作用:定位文件

绝对路径:从根目录下出发的路径称为绝对路径

相对路径:相对于当前目录下出发的路径称为相对路径

[root@localhost ~]# cd [路径]
#相对路径
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
#绝对路径
[root@localhost ~]# cd /root/test

文件管理 (文件操作)

文件(touch)

[root@localhost ~]# touch [fiile-name] # 无则创建,有则修改时间
[root@localhost ~]# touch file1 file2 file3
[root@localhost ~]# touch /home/{file4,file4}
[root@localhost ~]# touch test{1..1000}
# 创建test1-test1000 文件
[root@localhost ~]# touch test{1,10}
# 创建test1 和 test10

目录(mkdir)

[root@localhost ~]# mkdir dir
[root@localhost ~]# mkdir dir1 dir2 dir3
[root@localhost ~]# mkdir dir{1..5}
[root@localhost ~]# mkdir -p /dir/test/dir1
# 递归创建
选项:
	-v:将创建的结果打印出来
	-p:递归创建

拷贝(cp)

[root@localhost ~]# cp [目标file/目录] [目的file/目录]
[root@localhost ~]# cp /root/dir/test test1
参数
-a:相当于 -pdr 的意思,至于 pdr 请参考下列说明;(常用)

-d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

-l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

-r:递归持续复制,用于目录的复制行为;(常用)

-s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

移动(mv)

[root@localhost ~]# mv file1 /root/dir	# 将file1移动到/root/dir
[root@localhost ~]# mv file2 /root/dir/file20 
# 将file2 移动到 /root/dir 目录下, 并改名为 file20
[root@localhost ~]# mv file3 file4 
# 将file3改名为file4

删除(rm)

[root@localhost ~]# rm -f(强制删除) [file_name]
[root@localhost ~]# rm -r(递归删除) [file_name] # 删除目录
[root@localhost ~]# rm -i [file_name] # 交互模式删除
[root@localhost ~]# rm -rf [file_name]

查看(cat)

除此之外还有:tac less more tail tailf

cat:从上往下(正常顺序)打开

tac:从下网上打开

more:显示进度 (空格翻页、q退出)

head:默认从前面查看10行

tail:从后面查看

tailf:实时追踪

管道符、重定向于环境变量

重定向

[root@localhost ~]# cat > output <<EOF
> 123
> 456
> 678
> EOF
[root@localhost ~]# cat >> output <<EOF
> 789
> 456
> 123
> EOF
[root@localhost ~]# cat output 

管道符命令

通俗来说,把前一个命令原本要输出到屏幕上的内容当成后一个命令的数据 两个命令用 " | " 分隔开

[root@localhost ~]# 命令1 | 命令2 | 命令3
[root@localhost ~]#  grep "/sbin/nologin" /etc/passwd | wc -l
15

通过管道符重置用户密码

[root@localhost ~]# echo redhat | passwd --stdin root
Changing password for user root. 
passwd: all authentication tokens updated successfully. 

命令行的通配符

[root@localhost ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Oct 18 07:32 /dev/sda
brw-rw----. 1 root disk 8, 1 Oct 18 07:32 /dev/sda1
brw-rw----. 1 root disk 8, 2 Oct 18 07:32 /dev/sda2
[root@localhost ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 Oct 18 07:32 /dev/sda1
brw-rw----. 1 root disk 8, 2 Oct 18 07:32 /dev/sda2
[root@localhost ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 Oct 18 07:32 /dev/sda1
brw-rw----. 1 root disk 8, 2 Oct 18 07:32 /dev/sda2

[root@localhost ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 Oct 18 07:32 /dev/sda1

重要的环境变量

​ 变量是计算机系统用于保存可变值的数据类型。在 Linux 系统中,变量名称一般都是大 写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。Linux 系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件 存放位置等。

变量名 作用
HOME 用户的主目录(及家目录)
SHELL 用户在使用的Shell解释器的名称
HISTSIZE 输出的历史命令条数
HISTFILESIZE 保持的历史命令条数
MAIL 邮件保存路径
LANG 系统语言,语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

我们可以自己定义变量,例如定义一个变量WORKDIR,方便直接到达用户工作的目录,如下:

[root@localhost ~]# useradd user1
[root@localhost ~]# echo 123 | passwd --stdin user1 
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# mkdir /home/user1/test
[root@localhost ~]# WORKDIR=/home/user1/test/
[root@localhost ~]# cd $WORKDIR
[root@localhost test]# pwd
/home/user1/test

但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户所使用。可以使用export命令将其提升为全局变量。

[root@localhost ~]# export WORKDIR

小工具

tr命令

[root@localhost ~]# tr [option] [set1] [set2]
常用选项
-d: 删除
案例1:
将/etc/passwd文件中的前5行的内容转换为大写后保存在/tmp/passwd.out中
[root@localhost ~]# head -n 5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passwd.out
[root@localhost ~]# cat /tmp/passwd.out 
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN

案例2:
[root@localhost ~]# who
root     pts/0        2021-10-18 17:51 (192.168.88.1)
[root@localhost ~]# who | tail -n 1 | tr 'a-z' 'A-Z' > /tmp/who.out
[root@localhost ~]# cat /tmp/who.out 
ROOT     PTS/0        2021-10-18 17:51 (192.168.88.1)

wc命令(统计)

常用选项:
-l: 显示行数
-w: 单词数
-c: 字符数

cut命令(切割命令)

常用选项:
-d: 指定分割符
-f: 指定字段

sort命令(排序文件)

常用选项:
-f: 忽略大小写
-r: 逆序
-t: 字段分割符
-k #: 以指定字段为标准排序
-n: 以数值进行排序
-u: 排序后去重

uniq命令(去重)

常用选项:
-c: 仅显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
案例:
[root@localhost ~]# cut -d: -f6-10 /etc/passwd | cut -f3 | sort -n | uniq -c      1 /bin:/sbin/nologin
      1 /home/user1:/bin/bash
      1 /root:/bin/bash
      1 /root:/sbin/nologin
      1 /sbin:/bin/sync
      4 /:/sbin/nologin
      1 /sbin:/sbin/halt
      1 /sbin:/sbin/nologin
      1 /sbin:/sbin/shutdown
      1 /usr/games:/sbin/nologin
      1 /var/adm:/sbin/nologin
      1 /var/empty/sshd:/sbin/nologin
      1 /var/ftp:/sbin/nologin
      1 /var/lib/chrony:/sbin/nologin
      1 /var/spool/lpd:/sbin/nologin
      1 /var/spool/mail:/sbin/nologin
      1 /var/spool/postfix:/sbin/nologin

文本编辑器

Linux上也有图形化的文本编辑器,类似windows的记事本,但是很多时候我们也只能用命令行来管理Linux操作系统,所以必须要掌握命令行的文本编辑器软件。

目前常见的文本编辑器有:

目前vim是使用最多的,也是比较推荐的Linux文本编辑器

什么是vim

​ Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中 被广泛使用。

​ 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是 程序开发者的一项很好用的工具。

​ 连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

​ vim是一个纯命令行文本编辑器,很多文本编辑的功能都是通过键盘快捷键的方式完成,所以我们需要记住常 用的键位,在vim官方网站上我们可以找到vim键盘图的完整版,不过对于初学者来说,我们只需要知道常用 的就可以了。

vi/vim的使用

基本上vi/vim共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和末行模式 (Last line mode)。 这三种模式的作用分别是:

命令模式

刚刚启动vim的时候就进入了命令模式

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下 i ,并不会输入一个字符, i 被当作了一个命令。

以下是常用的几个命令:

若想要编辑文本:启动Vim,进入了命令模式,按下 i、a、o ,切换到输入模式

命令模式只有一些最基本的命令,因此需要末行模式在输入更多的命令。

输入模式

进入输入模式的命令上面讲到

在输入模式中,可以使用以下按键:

末行模式

在命令模式下按下:(英文冒号) 就可以进入末行模式,在末行模式下可用的命令非常多。基本命令有:

详细用法

h 或 向左 箭头键 (←) 光标向左移动一个字符
j 或 向下 箭头键(↓) 光标向下移动一个字符
k 或 向上 箭头键(↑) 光标向上移动一个字符
l 或 向右 箭头键 (→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n+空格 或者 nl/nh 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。 例如 20 则光标会向后面移动 20 个字符距离。
0 或功能 键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能 键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个文件的最后一行(常用
nG n 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个文件的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
/word 向光标之下寻找一个名称为 word 的字符串。 (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串 取代为 word2 (常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取 代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』
dd 删除/剪切光标所在的那一整行(常用)
ndd n 为数字。删除/剪切光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行 开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10c ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了 (常用)
i, I 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格 符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在 行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一 行; O 为在目前光标所在的上一行处输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文 字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)
:w 将编辑的数据写入硬盘中(常用)
:w! 若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的权 限有关
:q 离开 vi (常用)
:q! 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
:x 效果等同于(保存并退出)
:X 大写的X,用于加密文件
ZQ 不保存,强制退出。效果等同于:q!。
:w [filename] 将编辑的数据储存成另一个文件(类似文件另存为)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到光标所在 行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到bash命令行下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中 察看 /home 底下以 ls 输出的文件信息!

vim环境变量

root@localhost ~]# vim .vimrc	# 当前用户生效
root@localhost ~]# vim /etc/vimrc	# 全局生效
# 行号
显示:set number,简写为set nu
取消显示:set nonumber,简写为set nonu
# 括号匹配
匹配:set showmatch,简写为set sm
取消:set nosm
# 自动缩进
启用:set ai
禁用:set noai
# 高亮搜索
启用:set hlsearch
禁用:set nohlsearch
# 语法高亮
启用:syntax on
禁用:syntax off
# 忽略字符的大小写
启用:set ic
不忽略:set noic
# 获取帮助
: help

文件基本属性与文件查找

文件属性

文件时间

​ 任何一个操作系统都有时间的概念,时间的概念主要用于对文件和系统中发生的时间进行记录,在Linux中, 可以使用stat查看Linux系统中文件的时间

stat

用于显示文件时间和inode内容

stat [选项]... 文件...

实例

root@localhost ~]# export LANG="en_US.UTF-8"
# 改回中文是LANG="zh_CN.UTF-8"
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1241 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574979 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2021-04-04 17:54:09.700844151 +0800
Modify: 2021-04-04 16:53:30.524854041 +0800
Change: 2021-04-04 16:53:30.524854041 +0800
Birth: -

文件类型

​ Linux系统和Windows系统有很大的区别,Windows系统查看文件的后缀名就可以知道这个是什么类型的文 件,比如: test.jpg 这个是一个图片,如果你在windows上双击打开,就会使用支持查看图片的软件打 开。

Linux系统就根本不看文件的后缀名,你认为这个是什么文件,你就使用什么工具打开这个文件,如果打开错 误,就会报错,看下面的案例

root@localhost ~]# cat file
cat: file: Is a directory

​ 当你以为file是个文件,使用cat命令查看的时候,cat会提示你这个是个文件夹,你才反应过来,应该使用cd 命令打开。 所以在Linux中,我们需要使用和windows不一样的方法来判断这个文件的类型。

方法一:ls

​ 使用ls可以查看当前目录下有哪些文件,我们会发现文件夹和文件的颜色并不一样,所以我们可以简单的通过 颜色来进行判断,不过这种判断的方式并不准确,因为不同的Linux发行套件颜色的标准并不一样,不同的远 程管理工具对颜色的理解也有偏差,比如可能把蓝色显示为淡蓝色,而淡蓝色又显示成其他颜色。所以最推荐 的做法是通过 ls -l 查看第一个字母:

[root@localhost ~]# type ll
ll 是 `ls -l --color=auto' 的别名
[root@localhost ~]# ll -d /etc/hosts /bin/ls /home /dev/sda /dev/tty1
/etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /bin/ls
srw-rw-rw-. 1 root root 0 4月 4 16:54 /dev/log
brw-rw----. 1 root disk 8, 0 4月 4 16:54 /dev/sda
crw--w----. 1 root tty 4, 1 4月 4 16:56 /dev/tty1
lrwxrwxrwx. 1 root root 22 4月 4 16:49 /etc/grub2.cfg ->
../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 6月 7 2013 /etc/hosts
drwxr-xr-x. 2 root root 6 4月 11 2018 /home
prw-------. 1 root root 0 4月 4 16:54 /run/dmeventd-client

方法二:file

file是专门用来查看文件类型的命令

[root@localhost ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@localhost ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
[root@localhost ~]# file /dev/sda
/dev/sda: block special
[root@localhost ~]# file /dev/tty1
/dev/tty1: character special
[root@localhost ~]# file /etc/grub2.cfg
/etc/grub2.cfg: symbolic link to `../boot/grub2/grub.cfg'
[root@localhost ~]# file /home
/home: directory
[root@localhost ~]# file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)

文件查找

which

用于查找文件

which命令会在环境变量$PATH设置的目录里查找符合条件的文件

[root@localhost ~]# which [filename...]

实例

[root@localhost ~]# which ls
lias ls='ls --color=auto'
/usr/bin/ls
# which会先告诉你ls其实是一个别名
# 然后显示出来ls所在的具体位置

小知识:我们在执行ls的时候,其实执行的是ls -color=auto 这条命令,在显示文件的时候使用不同的颜色表示不同的文件类型,如果我们想执行ls本体,而不想执行别名,我们可以输入\ls就可以了,这样就不会就不同颜色的文件类型了。

[root@localhost ~]# which poweroff
/usr/sbin/poweroff

locate

用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或者目录

在centos7的最小安装中,并没有自带locate命令,需要输入如下命令进行安装

[root@localhost ~]# yum -y install mlocate

locate命令的使用方式如下

[root@localhost ~]# locate [选项]...[范本样式]...

在使用locate之前,需要更新一下数据库,因为locate只会在数据库中查找文件所在的位置,所以locate查找 速度极快,缺点就是数据库更新并不是实时的,更新数据库有两种方式:

选项

实例

root@localhost ~]# updatedb
# 更新数据库并不是每次查找都需要,但是建议更新数据库来保证数据是最新的
[root@localhost ~]# locate passwd
[root@localhost ~]# locate -r ens33$
/etc/sysconfig/network-scripts/ifcfg-ens33
# $在正则表达式中表示以什么结尾,所以ens33$表示的是以ens33结尾的文件

find

实时查找工具,通过遍历指定路径下的文件系统来完成文件的查找

工作特点:

使用方法如下

find [选项] [路径] [查找条件 + 处理动作]
# 查找路径:指定具体目录路径,默认是当前文件夹
# 查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件
# 处理动作:对符合条件的文件做什么操作,默认输出屏幕

查找条件

root@localhost ~]# find /etc -name "ifcfg-ens33"
[root@localhost ~]# find /etc -iname "ifcfg-ens33" # 忽略大小写
[root@localhost ~]# find /etc -iname "ifcfg*"
[root@localhost ~]# find /etc -size +5M # 大于5M
[root@localhost ~]# find /etc -size 5M # 等于5M
[root@localhost ~]# find /etc -size -5M # 小于5M
[root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls
[root@localhost ~]# find / -maxdepth 3 -a -name "ifcfg-ens33" # 最大查找深度
# -a是同时满足,-o是或
[root@localhost ~]# find / -mindepth 3 -a -name "ifcfg-ens33" # 最小查找深度
root@localhost ~]# find /etc -mtime +5 # 修改时间超过5天
[root@localhost ~]# find /etc -mtime 5 # 修改时间等于5天
[root@localhost ~]# find /etc -mtime -5 # 修改时间5天以内

atime: 文件访问时间

ctime: 文件状态修改时间

mtime: 文件内容修改时间

[root@localhost ~]# find /home -user atopos # 属主是atopos的文件
[root@localhost ~]# find /home -group atopos
[root@localhost ~]# find /home -user atopos -group atopos
[root@localhost ~]# find /home -user atopos -a -group root
[root@localhost ~]# find /home -user atopos -o -group root
[root@localhost ~]# find /home -nouser # 没有属主的文件
[root@localhost ~]# find /home -nogroup # 没有属组的文件

其中-a是和,-o是或

root@localhost ~]# find /dev -type d
root@localhost ~]# find / -perm 644 -ls
[root@localhost ~]# find / -perm -644 -ls # 权限小于644的
[root@localhost ~]# find / -perm 4000 -ls
[root@localhost ~]# find / -perm -4000 -ls
[root@localhost ~]# find /etc -regex '.*ifcfg-ens[0-9][0-9]'
# .* 任意多个字符
# [0-9] 任意一个数字

处理动作

实例

[root@localhost ~]# find /var -user root -a -group mail
[root@localhost ~]# find /usr -not -user root -not -user bin -not -user Hadoop(centos)
[root@localhost ~]# find /usr -not \(-user root -user bin -user Hadoop\)
[root@localhost ~]# find /etc -mtime -7
[root@localhost ~]# find / \(-nouser -o -nogroup\) -a -atime -7
[root@localhost ~]# find /etc -size +1M -a -type f
[root@localhost ~]# find /etc -not -perm -222
[root@localhost ~]# find /etc -not -perm 111
[root@localhost ~]# find /etc/init.d -perm -113

用户权限管理

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须向管理员申请一个账号,然后输入这个账号的身份进入系统。

为了更加方便的管理多个用户,就出现了用户组的相关概念,关于用户和用户组:

实现用户账号的管理,主要完成的工作有以下的几个方面:

用户和用户组的查看

id

现实用户的ID,以及所属群组的ID

id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID

[root@localhost ~]# id [OPTION]... [USER]

uid的约定

Linux系统会依赖用户的uid数值来判定这个用户的角色,分别如下:

关于root用户

实例

[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境
=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 09:06 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:06 0:01 [ksoftirqd/0]
root 4 0.1 0.0 0 0 ? R 09:06 0:09 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 09:06 0:00 [kworker/0:0H]

相关的文件

Linux一切皆文件,所以用户和用户组相关的信息也都是保存在文本文件中的

passwd文件

用于保存用户信息,一般第一行是root用户,下面都是其他用户

[root@localhost ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 这个格式为用户名:密码:uid:gid:描述:家目录:登陆后执行的命令

shadow文件

格式中密码占位置太长了,所以用x来代替,Linux系统会到shadow文件中查找x部分的密码内容

[root@localhost ~]# head -n 1 /etc/shadow
root:$6$frokclXSnQa8EbKs$pWElbjPlmxjYh30tr8qLsTQVOhuPg7GmW9Sanm2yXAK8TNMgje1gyc
/vwPgqvmSMf6VaoEvveM0gFvtETmXy/.::0:99999:7:::
# 这个格式为用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的
警告天数:密码过期后的宽限时间:账号失效时间:保留字段

密码在 passwd 文件中会使用加密算法加密,所以别想知道我的密码是什么,加密算法默认是 $6 ,这个类 型6的加密算法是sha-512。

group文件

用户和组的对应关系,会保存在group这个文件中

[root@localhost ~]# head -n 1 /etc/group
root:x:0:
# 这个格式是组名:口令:组标识号:组内用户列表

用户组管理

groupadd 添加用户组

groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中

[root@localhost ~]# groupadd [选项] 组名

选项

实例

[root@localhost ~]# groupadd hr -g 1000
[root@localhost ~]# groupadd sale -g 2000
[root@localhost ~]# groupadd it -g 3000
[root@localhost ~]# groupadd fd -g 4000
[root@localhost ~]# tail -n 4 /etc/group
hr:x:1000:
sale:x:2000:
it:x:3000:
fd:x:4000:

groupmod 修改用户组

groupmod命令用于更改用户组识别码或者名称

[root@localhost ~]# groupmod [选项] 名称

选项

实例

[root@localhost ~]# groupmod -n finance fd
[root@localhost ~]# tail -n 1 /etc/group
finance:x:4000:

groupdel:删除用户组

groupdel命令用于删除群组

需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用 户,则必须先删除这些用户后,方能删除群组。

[root@localhost ~]# groupdel 组名

实例

[root@localhost ~]# groupadd test
[root@localhost ~]# groupdel test

gpasswd:用户组成员管理

gpasswd 是 Linux 下工作组文件 /etc/group 和 /etc/gshadow 管理工具,用于将一个用户添加到组或者从组 中删除

[root@localhost ~]# gpasswd [选项] 组名

选项

实例

[root@localhost ~]# useradd test
[root@localhost ~]# gpasswd -a test it
正在将用户“test”加入到“it”组中
[root@localhost ~]# cat /etc/group |grep it:
it:x:3000:test
# 在组文件中,可以看到这个组的成员
[root@localhost ~]# id test
uid=6667(test) gid=6667(test) 组=6667(test),3000(it)
# 在用户的信息中,可以看到这个用户的所属组

用户管理

useradd:添加用户

uaeradd可以用来添加新的用户

[root@localhost ~]# useradd [选项] 用户名

新建用户home目录下的bash开头的文件时从/etc/skel/中复制过去的

如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的 Primary Group

选项

实例

[root@localhost ~]# useradd test1
[root@localhost ~]# useradd -g root test2
[root@localhost ~]# useradd -m /home/test3 test3
[root@localhost ~]# useradd -s /sbin/nologin test4

usermod:修改用户信息

usermod用于修改用户的的各类设定

[root@localhost ~]# usermod [选项] 用户名

选项

实例

[root@localhost ~]# useradd user01
[root@localhost ~]# usermod -d /home user01
[root@localhost ~]# su - user01
-bash-4.2$ pwd
/home
[root@localhost ~]# usermod -u 6666 user01

userdel:删除用户

userdel命令用于删除用户账号

userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件

[root@localhost ~]# userdel [-r] 用户账号

选项

passwd文件中的shell

查看/etc/passwd文件会发现每一行的最后面是我们登录成功以后执行的命令,其中有两种命令使用最为频繁

cat一下/etc/passwd文件

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

新建一个用户,给他自定义命令

[root@localhost ~]# useradd -s /bin/vi test
[root@localhost ~]# tail -n 1 /etc/passwd
test:x:1000:1000::/home/test:/bin/vi

我们切换到test用户就会发现用户默认进入vi编辑页面

login.defs

useradd参照文件

创建用户时对用户的一些限制,对root用户无效

[root@atopos ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
CREATE_HOME yes
ENCRYPT_METHOD SHA512
[root@atopos ~]# vim /etc/default/useradd
SHELL=/bin/bash

chage

[root@localhost ~]# chage [选项] 用户

选项

实例

[root@atopos ~]# useradd user01
[root@atopos ~]# echo 123456 |passwd --stdin user01
更改用户 user01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@atopos ~]# chage -d 0 user01 # 强制用户在下次登录的时候换密码

用户密码管理

root用户可以直接设置普通用户密码,普通用户必须要提供原密码,才可以修改自己密码。

passwd命令

[root@localhost ~]# passwd [选项...] 账号名称

选项

实例

[root@localhost ~]# echo "123456" | passwd --stdin username

sudo:提权

以root用户的身份授权普通用户

文件权限

基本权限 UGO

文件权限时控制某个用户或者用户组访问某个文件的方式

UGO设置基本权限

权限对象

U:属主

G:属组

O:其他人

权限类型

r:读 数字:4

w:写 数字:2

x:执行 数字:1

权限管理

chown:更改文件的属组和属主

[root@localhost ~]# chown user01:user01 file
# 更改属主和属组
[root@localhost ~]# chown :user01 file
# 只更改属组
[root@localhost ~]# chown user01 file
# 只更爱属主

chmod:更改文件权限

对象:u g o a

赋值符号:+ - =

权限类型:r w x 也可以用数字

[root@localhost ~]# chown u+x file	# 属主增加执行全新啊
[root@localhost ~]# chown a=rwx	file	# 所有用户赋予rwx权限
[root@localhost ~]# chown ug=rw,o=r	file	# 属主属组赋予读写,其他人只读

# 使用数字
[root@localhost ~]# chown 644 file	# 属主拥有读写权限,属组和其他用户只读

chown:改变某个文件的属主属组

chmod:改变某个文件自身的权限

r,w,x权限对文件和目录的意义区别

权限 对文件的影响 对目录的影响
r(读取) 可以读取文件的内容 可以列出目录的内容,可以使用ls相关命令
w(写入) 可以更改文件的内容 可以创建或删除目录中的文件,可以使用touch,rm等相关命令
x(执行) 可以执行可执行文件 可以访问目录里面的内容,可以使用cd等相关命令

目录权限跟文件权限无关

ACL设置基本权限(r,w,x)

UGO设置基本权限:只能一个用户或者一个组或者其他人

ACL的基本用法

[root@localhost ~]# setfacl [选项] 文件/目录

选项

实例

[root@atopos ~]# ll file1
-rw-r--r--. 1 centos it 0 9月 4 11:03 file1
[root@atopos ~]# getfacl file1
# file: file1
# owner: centos
# group: it
user::rwgroup::r--
other::r--
[root@atopos ~]# setfacl -m u:centos:rw file1 # 增加用户权限
[root@atopos ~]# setfacl -m u:user05:- file1 # 增加用户权限
[root@atopos ~]# setfacl -m o::rw file1 # 修改其他人权限
[root@atopos ~]# ll file1
-rw-rw-rw-+ 1 centos it 0 9月 4 11:03 file1
[root@xwz ~]# getfacl file1
# file: file1
# owner: centos
# group: it
user::rwuser:centos:rwuser:user05:---
group::r--
mask::rwother::rw-
[root@xwz ~]# setfacl -m g:hr:r file1 # 增加组权限
[root@xwz ~]# setfacl -x g:hr file1 # 删除组权限
[root@xwz ~]# setfacl -b file1 # 删除所有acl权限

mask

mask决定了用户对文件的的最高权限,说白了,mask和acl共同控制用户对文件的权限,如果mask权限为r--,acl权限为rwx,则最后的权限只能时r--

mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

设置mask权限

[root@atopos ~]# setfacl -m m::--- file1
[root@atopos ~]# getfacl file1
# file: file1
# owner: centos
# group: it
user::rwgroup::r-- 		#effective:---
mask::---
other::---

default

一般正对访问目录,默认权限独立与该目录本身的权限,规定了在该目录中创建文件的默认acl权限

default可以指定在目录中创建的新文件的初始acl权限

实例

用户centos能够对/home以及以后再/home下创建的文件具有读写执行权限

[root@atopos ~]# setfacl -m u:centos:rwx /home
[root@atopos ~]# setfacl -m d:u:centos:rwx /home
[root@atopos ~]# getfacl /home
getfacl: Removing leading '/' from absolute path names
# file: home
# owner: root
# group: root
user::rwx
user:centos:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:centos:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

特殊权限

文件除了上述的r,w,x基本权限,还有三个特殊权限:suid,sgid,sbit(sticky)

suid

suid 属性只能运用在可执行文件上,含义是开放文件所有者的权限给其他用户,即当用户执行该执行文件 时,会拥有该执行文件所有者的权限。如果给一个非二进制文件文件附加 suid 权限,则会显示大写S,属于无效。

普通用户能够执行 passwd 命令修改自己的密码,修改密码其实就是修改 /etc/shadow 这个文件,查 看 /etc/passwd 这个文件的权限,发现除了 root 其他人没有写权限,但是普通用户能够成功执行 passwd ,其原因就在于 passwd 这个命令的权限是 rwsrw---- ,其中 s 的作用就是让执行命令的人具有和 该命令拥有者相同的权限。

[root@atopos ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

实例

[root@localhost ~]# su - user1
[user1@localhost ~]$ passwd
更改用户 user1 的密码 。
为 user1 更改 STRESS 密码。
(当前)UNIX 密码:
[root@localhost ~]# ps -aux |grep passwd
root 7521 0.0 0.1 170760 2052 pts/0 S+ 10:24 0:00 passwd
chmod u+s file
chmod 4765 file

sgid

sgid 属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行 该执行文件时,会拥有该执行文件所属组用户的权限。如果给一个非二进制文件文件附加 sgid 权限,则会 显示大写S,属于无效。

运用在目录上的含义是,在该目录下所有用户创建的文件或者目录的所属组都和其一样。即如 果 /home/user1 目录具有 sgid 权限,且所属组是 user1 ,则任何用户在 /home/user1 下创建的子目录 或者文件的所属组都是 user1 。

实例

[root@atopos ~]# mkdir workdir
[root@atopos ~]# chmod g+s workdir/
[root@atopos ~]# cd workdir/
[root@atopos workdir]# touch file2
[root@atopos workdir]# ll
total 0
-rw-r--r--. 1 root root   0 Jan 13 07:04 file
-rw-r--r--. 1 root worker 0 Jan 13 07:05 file2

sbit(sticky)

sticky 权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777 或者其他。一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件(仅对目录有效)

实例

[root@localhost ~]# chmod 777 /workdir/
[root@localhost ~]# chmod o+t /workdir/
[root@localhost ~]# su - user1
[user1@localhost ~]$ cd /workdir/
[user1@localhost workdir]$ touch user1file
[user1@localhost workdir]$ exit
登出
[root@localhost ~]# su - user2
[user2@localhost ~]$ cd /workdir/
[user2@localhost workdir]$ touch user2file
[user2@localhost workdir]$ rm -rf user1file # 不给删除别人的文件
rm: 无法删除"user1file": 不允许的操作
[user2@localhost workdir]$ rm -rf user2file # 只能删除自己的文件
[user2@localhost workdir]$ ll
总用量 0
-rw-rw----+ 1 user1 worker 0 4月 14 11:11 user1file

chattr文件属性

chattr命令用来改变文件的属性

这项指令可以改变存放在文件或者目录属性,这些属性共有一下8种模式:

[root@localhost ~]# chattr [-RV][+/-/=<属性>][文件或目录...

选项

实例

[root@localhost ~]# chattr +i /etc/resolv.conf
[root@localhost ~]# lsattr /etc/resolv.conf
----i----------- /etc/resolv.conf
[root@localhost ~]# echo test >> /etc/resolv.conf
-bash: /etc/resolv.conf: 权限不够
[root@localhost ~]# chattr +a /var/log/messages
[root@localhost ~]# lsattr /var/log/messages
-----a---------- /var/log/messages
[root@localhost ~]# echo > /var/log/messages # 不允许清空日志
-bash: /var/log/messages: 不允许的操作

umask

umask命令指定在建立文件时预设的权限掩码,进程 新建文件、目录的默认权限会收到umask的影响, umask表示要减掉得到权限。

umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后, 即可产生建立文件时预设的权限。

[root@localhost ~]# umask [选项][权限掩码]

选项

实例

[user01@atopos ~]$ umask
0002
[user01@atopos ~]$ umask -S
u=rwx,g=rwx,o=rx
[user01@atopos ~]$ umask 0000
[user01@atopos ~]$ mkdir dir1
[user01@atopos ~]$ ll
total 0
drwxrwxrwx. 2 user01 user01 6 Jan 13 07:28 dir1
[root@localhost ~]# vim /etc/profile
--------------
59 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
60 umask 002
61 else
62 umask 022
63 fi
---------------
[root@localhost ~]# source /etc/profile # 立即在当前shell中生效
[root@localhost ~]# vim /etc/login.defs
-----------------
61 # The permission mask is initialized to this value. If not specified,
62 # the permission mask will be initialized to 022.
63 UMASK 077
------------------

进程process

什么是进程

进程是cpu进行资源分配的最小单位,是一个在系统中运行的程序

进程是已启动的可执行程序的运行实例,进程有一下部分组成:

进程:程序运行的过程,动态,有生命周期及运行状态

进程类型

守护进程:在系统引导启动过程中启动的进程,跟终端无关

前台进程:跟终端相关,通过终端启动的进程

进程的生命周期

父进程复制自己的地址空间(fork)创建一个新的子进程结构,每个新进程分配一个唯一的进程ID(PID),满足跟踪安全之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进 程都是第一个系统进程的后代:

centos5/6:init

centos7: systemd

进程状态:

子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代 码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。 当子进程完成时发出(exit)信息请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之 为僵尸(zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的 程序代码。

进程状态

在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。在进程运行时,它对 CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。

R:运行状态(runing): 表明进程要么在运行中要么在运行队列里,并不意味着进程一定在运行中。

S:睡眠状态(sleeping):意味着进程在等待事件的完成(这里的睡眠有时候也叫做可中断睡眠)

D:磁盘睡眠状态(Disk sleep): 有时候也叫做不可中断睡眠,在这个状态的进程通常会等待IO的结束

T:停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过 发送SIGCNT信号让进程继续运行。

Z:僵尸状态(zombie):通知父进程回收所有的资源

X:死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

查看进程

ps命令

静态查看进程ps 注: ps -aux 不同于 ps aux

常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程;
x:与终端无关的进程;
~]# ps -uax
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
用户 进程ID CPU占用 内存占用
VSZ:Virtual memory SiZe 虚拟内存集
RSS:ReSident Size 常驻内存集———其他的都可以放入交换内存中
STAT:进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
START:启动时间
TIME:运行占据cpu的累积时长
COMMAND:由哪个命令来启动的相关进程
常用组合:ps -ef
-e:显示所有进程
-f:显示完整格式程序信息
常用组合:ps -eFH
-F:显示完成格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组合:eo,axo
自定义想要查询的字段值
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
-axo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wcha n:14,comm
ni:nice值
pri:priority,优先级
psr:processor,CPU
rtprio:实时优先级
[root@atopos ~]# ps aux |less
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193720  6768 ?        Ss   05:38   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    05:38   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    05:38   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   05:38   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    05:38   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    05:38   0:00 [rcu_bh]

USER:运行进程的用户

PID:进程ID

%CPU:CPU占用率

%MEM:内存占用率

VSZ:占用虚拟内存

RSS:占用实际内存 驻留内存

TTY:程序运行的终端

STAT:进程状态 man ps(/STATE)

START:进程的启动时间

TIME:进程占用CPU的总时间

COMMAND:进程文件,进程名

[root@atopos ~]# ps aux --sort %cpu |less # 按照CPU使用率排序
[root@atopos ~]# ps aux --sort -%cpu |less
[root@atopos ~]# ps aux --sort rss |less
[root@atopos ~]# ps aux --sort -rss |less
[root@atopos ~]# yum -y install httpd
[root@atopos ~]# systemctl start httpd
[root@atopos ~]# ps auxf |grep httpd # 按照父子进程层级显示
root 29276 0.0 0.0 112724 988 pts/1 S+ 14:25 0:00
\_ grep --color=auto httpd
root 29267 0.2 0.2 230408 5192 ? Ss 14:24 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29268 0.0 0.1 232492 3160 ? S 14:25 0:00 \_
/usr/sbin/httpd -DFOREGROUND
apache 29269 0.0 0.1 232492 3160 ? S 14:25 0:00 \_
/usr/sbin/httpd -DFOREGROUND
apache 29270 0.0 0.1 232492 3160 ? S 14:25 0:00 \_
/usr/sbin/httpd -DFOREGROUND
apache 29271 0.0 0.1 232492 3160 ? S 14:25 0:00 \_
/usr/sbin/httpd -DFOREGROUND
apache 29272 0.0 0.1 232492 3160 ? S 14:25 0:00 \_
/usr/sbin/httpd -DFOREGROUND
[root@xwz ~]# ps -ef # 精简显示

自定义显示字段

[root@atopos ~]# cat /run/sshd.pid
[root@atopos ~]# ps aux |grep sshd
[root@atopos ~]# pgrep -l sshd
[root@atopos ~]# pidof sshd

查看进程树(需要安装pstree)

[root@atopos ~]# pstree

top命令

动态显示系统相关资源的管理器,有点类似于windows当中的任务管理器

[root@atopos ~]# top
[root@atopos ~]# top -d 1 # 一秒钟刷新一次
[root@atopos ~]# top -d 1 -p 6995 # 查看指定PID
[root@atopos ~]# top -d 1 -p 6995,1 # 查看多个PID进程
[root@atopos ~]# top -d 1 -u apache # 查看指定用户的进程
[root@atopos ~]# top -d 1 -b -n 2 > top.txt # 将2次top信息写入到文件

第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平 均值,数值越小意味着负载越低)。

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源 百分比等。

第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。(buffer和cache之间的区 别,cache是提高cpu和内存之间的数据交换速度,buffer是io设备和存储设备之间的缓冲区)

第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

进程信息:

信号控制进程

[root@atopos ~]# 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

常用信号

信号 信号名 作用
1 SIGHUP 重新加载配置
2 SIGINT 键盘中断^C
3 SIGQUIT 键盘退出
9 SIGKILL 强制终止
15 SIGTERM 终止(正常结束),缺省信号
18 SIGCONT 继续
19 SIGSTOP 停止
20 SIGTSTP 暂停
[root@atopos ~]# ps aux |grep sshd
root 6995 0.0 0.2 112756 4356 ? Ss 9月09 0:00
/usr/sbin/sshd -D
root 31872 5.0 0.2 160844 5620 ? Ss 18:56 0:00 sshd:
root@pts/1
root 31917 0.0 0.0 112728 988 pts/1 S+ 18:56 0:00 grep --
color=auto sshd
[root@atopos ~]# kill -1 6995 # 重新加载配置文件

实例

测试信号9和信号15

[root@atopos ~]# touch file1 file2
[root@atopos ~]# tty
/dev/pts/1
[root@atopos ~]# vim file1
[root@atopos ~]# tty
/dev/pts/2
[root@atopos ~]# vim file2
[root@atopos ~]# ps aux |grep vim
root 32072 0.2 0.2 151532 5064 pts/1 S+ 19:09 0:00 vim file1
root 32127 0.1 0.2 151532 5080 pts/2 S+ 19:09 0:00 vim file2
root 32176 0.0 0.0 112728 988 pts/3 S+ 19:09 0:00 grep --
color=auto vim
[root@atopos ~]# kill 32072
[root@atopos ~]# kill -9 32127
[root@atopos ~]# killall vim # 杀死所有vim进程

测试信号18和信号19

[root@atopos ~]# ps aux |grep httpd
root 29267 0.0 0.2 230408 5192 ? Ss 14:24 0:01
/usr/sbin/httpd -DFOREGROUND
apache 29268 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29269 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29270 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29271 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29272 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
root 32229 0.0 0.0 112724 988 pts/3 S+ 19:14 0:00 grep --
color=auto httpd
[root@atopos ~]# kill -19 29267
[root@atopos ~]# ps aux |grep httpd
root 29267 0.0 0.2 230408 5192 ? Ts 14:24 0:01
/usr/sbin/httpd -DFOREGROUND
apache 29268 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29269 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29270 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29271 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29272 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
root 32231 0.0 0.0 112724 984 pts/3 S+ 19:15 0:00 grep --
color=auto httpd
[root@atopos ~]# kill -18 29267
[root@atopos ~]# ps aux |grep httpd
root 29267 0.0 0.2 230408 5192 ? Ss 14:24 0:01
/usr/sbin/httpd -DFOREGROUND
apache 29268 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29269 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29270 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29271 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
apache 29272 0.0 0.1 232492 3160 ? S 14:25 0:00
/usr/sbin/httpd -DFOREGROUND
root 32233 0.0 0.0 112724 984 pts/3 S+ 19:15 0:00 grep --
color=auto httpd

踢出远程登录用户

[root@atopos ~]# w
19:21:16 up 1 day, 6:26, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 四11 ?xdm? 2:05m 0.50s
/usr/libexec/gnome-se
root pts/0 :0 四11 5days 1.36s 0.36s -bash
root pts/1 192.168.222.1 18:56 4.00s 0.14s 0.02s w
centos pts/2 192.168.222.1 19:21 3.00s 0.04s 0.04s -bash
[root@atopos ~]# pkill -u centos
[root@atopos ~]# pkill -t pts/2 # 终止pts/2上所有进程
[root@atopos ~]# pkill -9 -t pts/2 # 终止pts/2上所有进程,并结束pts/2

进程优先级 nice

Linux进程调度及多任务

每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程 (和线程数)可以超出实际可用的CPU及核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速 切换,从而给用户多个进程在同时运行的假象。(并发)

相对优先级

由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常 规系统上运行的大多数进程所使用的的调度策略为SCHED_OTHER(也称为SCHED_NORMAL),但还有其他 一些调度策略用于不同的目的。SCHED_OTHER调度策略运行的进程的相对优先级称为进程的nice值, 可以有40种不同级别的nice值。

进程优先级 0-99:实时优先级,数字越小,优先级越低

00-139:静态优先级,数字越小,优先级越高

进程默认启动时nice为0,优先级为120

nice值越高表示优先级越低,例如+19,该进程容易将CPU使用量让给其他进程

nice值越低表示优先级越高,例如-20,该进程更倾向于不让出CPU

查看进程的nice级别

使用ps查看

[root@atopos ~]# ps axo pid,command,nice --sort=nice
[root@atopos ~]# ps axo pid,command,nice,cls --sort=-nice

TS表示该进程使用的调度策略为SCHED_OTHER

使用top查看

NI:实际nice级别

PR:将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

启动具有不同nice级别的进程

启动进程的时候为进程指定nice值

启动进程时,通常会继承父进程的nice级别,默认为0

[root@atopos ~]# nice -n -5 sleep 6000 &
[root@atopos ~]# ps axo command,pid,nice |grep sleep
[root@atopos ~]# nice -n -20 systemctl start httpd
[root@atopos ~]# ps axo pid,command,nice,cls |grep httpd
10146 /usr/sbin/httpd -DFOREGROUN 0 TS
10161 /usr/sbin/httpd -DFOREGROUN 0 TS
10162 /usr/sbin/httpd -DFOREGROUN 0 TS
10163 /usr/sbin/httpd -DFOREGROUN 0 TS
10164 /usr/sbin/httpd -DFOREGROUN 0 TS
10165 /usr/sbin/httpd -DFOREGROUN 0 TS
10167 grep --color=auto httpd 0 TS

更改现有进程的nice级别

r 调整进程的优先级(Nice Level) (-20高) - - - 0 - - - (19低)

[root@atopos ~]# sleep 7000 &
[2] 10267
[root@atopos ~]# renice -20 10267
10267 (进程 ID) 旧优先级为 0,新优先级为 -20

存储管理

磁盘管理

认识Linux上的磁盘

从工作原理区分

机械硬盘HDD

固态硬盘SSD

从磁盘尺寸区分

SATA

HDD

从磁盘主要接口区分

SATA(Serial ATA)

SAS(Serial Attached SCSI)

磁盘设备的命名

物理磁盘:/dev/sd[a-z]

KVM虚拟化:/dev/vd[a-z]/dev/sd[a-z]

设备命名:

IDE:/dev/hd

SCSI,SATA,SAS,USB:/dev/sb

不同设备上:[a-z]

同一设备上:[1,2,3,,]

分区方式的区别

MBR <2TB fdisk 4个主分区,扩展分区,逻辑分区

GPT >2TB gdisk 128个分区

MBR: 使用32位表示扇区数,分区不超过2T ,按柱面进行分区,4个主分区;3主分区+1扩展(N个逻辑分 区)。

GPT:支持128个分区,使用64位,使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT 分区 表自动备份在头和尾两份

注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失

存储结构与磁盘划分

Linux上的目录结构前面有详细的结束,可以看前面的内容

物理设备的命名规则

常见的硬件设备及其文件名称

硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0

文件系统与数据资料

文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。

文件系统 解释
Ext3 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据 的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分 之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便 在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4 Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批 量分配block块,从而极大地提高了读写效率。
XFS 是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意 外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费 极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需 求。

格式化后发生的事情

计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘 结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口, 这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。

mount 挂载硬件设备

[root@atopos ~]# mount 设备名 挂载点

选项

-a:挂载所有在/etc/fstab中定义的磁盘设备

-t:指定文件系统的类型

直接使用mount,只是临时挂载,必须将分区信息写入/etc/fstab中,在使用mount -a挂载信息文件中的设备

第一个字段:挂载的设备

第二个字段:挂载的目录

第三个字段:格式类型

第四个字段:权限选项

第五个字段:是否备份

第六个字段:是否自检

umount 撤销挂载

撤销已经挂载的设备文件 umount [挂载点/设备文件]

[root@atopos ~]# umount /dev/sdb1

添加磁盘设备

fdisk 管理磁盘分区

[root@atopos ~]# fdisk [磁盘名称]
选项
挂载磁盘的步骤
1. 添加一块磁盘
2. 使用fdisk创建分区
3. 使用mkfs.ext4进行文件系统格式化
4. 使用mount挂载分区

du 查看文件数据的占用量

[root@atopos ~]# du [选项] [文件]
[root@atopos ~]# du -sh /*
0	/app
0	/bin
113M	/boot
0	/dev
35M	/etc
0	/home
0	/lib
0	/lib64
0	/media
0	/mnt
0	/opt
du: cannot access ‘/proc/20259/task/20259/fd/4’: No such file or directory
du: cannot access ‘/proc/20259/task/20259/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/20259/fd/4’: No such file or directory
du: cannot access ‘/proc/20259/fdinfo/4’: No such file or directory
0	/proc
44K	/root
9.6M	/run
0	/sbin
0	/srv
0	/sys
0	/tmp
1.4G	/usr
368M	/var
选项

df 查看文件系统占用情况

pass

添加交换分区

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时 存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术

在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍

[root@atopos ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=494ce424-6f8e-4dc7-a1f7-7df45da24928
[root@atopos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        195M        1.1G        9.5M        469M        1.3G
Swap:          2.0G          0B        2.0G
[root@atopos ~]# sw
swaplabel    swapoff      swapon       switch_root  
[root@atopos ~]# swapon /dev/sdb1 
[root@atopos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        200M        1.1G        9.5M        469M        1.3G
Swap:          7.0G          0B        7.0G

命令

mkswap [磁盘路径]	# 格式化swap
swapon [磁盘路径]	# 挂载swap分区
swapoff [磁盘路径]	# 卸载swap分区
参数:
-a:全部

磁盘容量配额

实例

描述:

准备磁盘
[root@atopos ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x29af810b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
[root@atopos ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    2G  0 part 
sr0              11:0    1 1024M  0 rom  
[root@atopos ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 
[root@atopos ~]# mkdir /mnt/mountpoint1
[root@atopos ~]# mount /dev/sdb
sdb   sdb1  
[root@atopos ~]# mount /dev/sdb1 /mnt/mountpoint1/
[root@atopos ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  2.2G   15G  13% /
devtmpfs                devtmpfs  898M     0  898M   0% /dev
tmpfs                   tmpfs     910M     0  910M   0% /dev/shm
tmpfs                   tmpfs     910M  9.7M  901M   2% /run
tmpfs                   tmpfs     910M     0  910M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  146M  869M  15% /boot
tmpfs                   tmpfs     182M     0  182M   0% /run/user/0
overlay                 overlay    17G  2.2G   15G  13% /var/lib/docker/overlay2/ea6bd330b5a7154860e3e7b90affaf8b12673a6f71ff35665ecea39a47e3bce0/merged
/dev/sdb1               ext4      2.0G  6.0M  1.8G   1% /mnt/mountpoint1
准备用户
[root@atopos ~]# setenforce 0
# 临时关闭SELinux
[root@atopos ~]# getenforce 
Permissive
[root@atopos ~]# groupadd usergrp
[root@atopos ~]# for i in {1..5}; do useradd -g usergrp -b /mnt/mountpoint1 user$i; done
确保文件系统支持
[root@atopos ~]#  mount | grep mountpoint1
/dev/sdb1 on /mnt/mountpoint1 type ext4 (rw,relatime,seclabel,data=ordered)
[root@atopos ~]#  mount -o remount,usrquota,grpquota /mnt/mountpoint1/
[root@atopos ~]#  mount | grep mountpoint1
/dev/sdb1 on /mnt/mountpoint1 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)
[root@atopos ~]# 

安装 quota

quotacheck主要参数

[root@atopos ~]# yum install -y quota
开启 quota
[root@atopos ~]# quotacheck -avug
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdb1 [/mnt/mountpoint1] done
quotacheck: Cannot stat old user quota file /mnt/mountpoint1/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/mountpoint1/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file /mnt/mountpoint1/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/mountpoint1/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 8 directories and 15 files
quotacheck: Old file not found.
quotacheck: Old file not found.
[root@atopos ~]# quotaon -avug
/dev/sdb1 [/mnt/mountpoint1]: group quotas turned on
/dev/sdb1 [/mnt/mountpoint1]: user quotas turned on
编辑配额配置
[root@atopos ~]# edquota -u user1

[root@atopos ~]# edquota -p user1 -u user2
[root@atopos ~]# repquota -as
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0       
user1     --     16K    245M    293M              4     0     0       
user2     --     16K    245M    293M              4     0     0       
user3     --     16K      0K      0K              4     0     0       
user4     --     16K      0K      0K              4     0     0       
user5     --     16K      0K      0K              4     0     0      
测试
[user1@atopos ~]$ dd if=/dev/zero of=bigfile bs=10M count=50
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: 写入"bigfile" 出错: 超出磁盘限额
记录了30+0 的读入
记录了29+0 的写出
307183616字节(307 MB)已复制,1.96853 秒,156 MB/秒
[user1@atopos ~]$ du -sh *
293M bigfile
[user1@atopos ~]$

quota 命令

Linux quota命令用于显示磁盘已使用的空间与限制。

执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间

选项:

ln 链接

[root@atopos ~]# ln [选项] 源文件 目标文件

选项

链接方式

在Linux系统中存在硬链接和软连接两种文件

软链接和硬链接的区别

硬链接的特点

软链接的特点

实例

软链接

[root@localhost ~]# echo "hello" > test
[root@localhost ~]# ln -s test test123
[root@localhost ~]# cat test123
hello
[root@localhost ~]# ls -l test
-rw-r--r--. 1 root root 6 Apr 12 06:10 test
[root@localhost ~]# rm -f test
[root@localhost ~]# cat test123
cat: test123: No such file or directory

硬链接

[root@localhost ~]# echo "hello" > test
[root@localhost ~]# ln test test123
[root@localhost ~]# cat test123
hello
[root@localhost ~]# ls -l test
-rw-r--r--. 2 root root 6 Apr 12 06:12 test
[root@localhost ~]# rm -f test
[root@localhost ~]# cat test123
hello

RAID(独立冗余磁盘阵列)

LVM(逻辑卷管理器)

软件包管理

软件包的类型

常见的二进制包

rpm 包管理

[root@atopos ~]# rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm
- httpd:包名
- 2:主版本号
- 4:次版本号
- 6:修订次数,指的是第几次修改bug
- 93:release(第几次发布,指的是简单的修改参数)
- e17:操作系统版本
- x86_64:64位操作系统
[root@atopos ~]# rpm [选项] 软件包

选项

安装:

查询:

卸载:

升级:

实例:安装

[root@atopos ~]# rpm -ivh
http://centos.ustc.edu.cn/centos/7/os/x86_64/Packages/httpd-2.4.6-
93.el7.centos.x86_64.rpm
[root@localhost ~]# rpm -ivh vim-enhanced-7.4.629-6.el7.x86_64.rpm
警告:vim-enhanced-7.4.629-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID
f4a80eb5: NOKEY
错误:依赖检测失败:
libgpm.so.2()(64bit) 被 vim-enhanced-2:7.4.629-6.el7.x86_64 需要
libperl.so()(64bit) 被 vim-enhanced-2:7.4.629-6.el7.x86_64 需要
perl(:MODULE_COMPAT_5.16.3) 被 vim-enhanced-2:7.4.629-6.el7.x86_64 需要
vim-common = 2:7.4.629-6.el7 被 vim-enhanced-2:7.4.629-6.el7.x86_64 需要
# 需要自己手动解决依赖关系
# 额外安装选项
# --nosignature 不检验软件包的签名
# --force 强制安装软件包
# --nodeps 忽略依赖关系

实例:查询

[root@atopos ~]# rpm -q vim-enhanced
vim-enhanced-7.4.629-8.el7_9.x86_64
[root@atopos ~]# rpm -qa |grep vim-enhanced
vim-enhanced-7.4.629-8.el7_9.x86_64
[root@atopos ~]# rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
[root@atopos ~]# rpm -qc openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
[root@atopos ~]# 

实例:卸载

[root@atopos ~]# rpm -e tree

源码包管理

源码包安装三绝招

./configure 
#可以指定安装路径,启用或者禁用功能等,最终生成makefile
make 
#按Makefile文件编译
make install
#按Makefile定义的文件路径安装
make clean
#清除上一次make命令所产生的object文件,要重新执行
configure时,需要执行make clean。

实例

[root@localhost ~]# yum -y install ncurses* gcc gcc-c++
[root@localhost ~]# tar xf cmatrix-1.2a.tar.gz
[root@localhost ~]# cd cmatrix-1.2a
[root@localhost cmatrix-1.2a]# ./configure
[root@localhost cmatrix-1.2a]# make
[root@localhost cmatrix-1.2a]# make install
[root@localhost cmatrix-1.2a]# cmatrix

yum 包管理

yum 介绍

本地源文件解释

# 路径
[root@atopos ~]# ls /etc/yum.repos.d/
name=centos		#源的描述信息
baseurl=https://xxxx.xxx.xxx/xx		# 仓库地址
enabled=1		#启动yum,0为不启用
gpgcheck=0		#不使用使用公钥检验rpm的正确性,1为使用。

yum 换源

下载阿里云
[root@localhost ~]# wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

yum 常用命令

yum install -y httpd #安装软件包
yum update httpd #升级软件包,改变软件设置和系统设置,系统版本内核都升级
yum install upgrade #升级软件包,不改变软件设置和系统设置,系统版本内核都升级
yum info httpd #查询包
yum provides /usr/bin/find #查询命令属于哪一个包
yum remove -y httpd #卸载
yum search httpd #按关键字搜索包
yum clan all #清除缓存
yum makecache #生成缓存
yum repolist #查看可用的yum源
yum grouplist #列出可用组

Linux网络设置

配置网络服务

nmtui 图形化配置工具

[root@atopos ~]# nmtui

通过网卡配置文件修改

[root@atopos ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7cb2fd3e-61dd-4856-87fa-c6db7ec0169b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.91.128
PREFIX=24
GATEWAY=192.168.91.2
DNS1=114.114.114.114
DNS2=114.114.115.115
解释 参数
设备类型 TYPE=Ethernet
地址分配模式 BOOTPROTO=static(静态)/dhcp
网卡名称 NAME=ens33
是否开机自动启动 ONBOOT=yes
IP地址 IPADDR=192.168.91.128
子网掩码 NETMASK=255.255.255.0
前缀长度 PREFIX=24
网关地址 GATEWAY=192.168.91.2
DNS地址 DNS1=114.114.114.114
[root@atopos ~]# systemctl restart network

nmcli 工具详解

nmcli命令是redhat7或者centos7之后的命令,该命令可以完成网卡上所有的配置工作,并且可以写入 配置文件,永久生效

[root@atopos ~]# nmcli device status 
DEVICE   TYPE      STATE      CONNECTION         
ens33    ethernet  connected  ens33              
ens37    ethernet  connected  Wired connection 1 
docker0  bridge    connected  docker0            
lo       loopback  unmanaged  --  
[root@atopos ~]# nmcli connection show
NAME                UUID                                  TYPE      DEVICE  
docker0             ca6db5d5-a1a1-478d-8592-112d5283069d  bridge    docker0 
ens33               122f2554-8762-40c0-8fb7-f92275a6b358  ethernet  ens33   
Wired connection 1  1099d5fd-29be-3f24-92d3-5f47c981fbae  ethernet  ens37   
[root@atopos ~]# nmcli connection up ens33
[root@atopos ~]# nmcli connection down ens33
[root@atopos ~]# nmcli connection add type ethernet con-name dhcp_ens33
ifname ens33
[root@atopos ~]# nmcli connection delete dhcp_ens33
成功删除连接 'dhcp_ens33'(37adadf4-419d-47f0-a0f6-af849160a4f7)。

net-tools

默认路由:
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.2

标签:文件,入门,--,到入,用户,Linux,atopos,root,localhost
来源: https://www.cnblogs.com/echoooo/p/15796472.html