Linux
# Linux
# Linux 目录结构

/bin:是 Binary 的缩写,这个目录存放着最经常使用的命令/sbin:s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。/home:存放普通用户的主目录,在 Linux 中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/root:该目录为系统管理员,也称作超级权限者的用户主目录。/lib:系统开机所需要最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。/etc:所有的系统管理所需要的配置文件和子目录。/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里。/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。/srv:service 缩写,该目录存放一些服务启动之后需要提取的数据。/sys:这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。/tmp:这个目录是用来存放一些临时文件的。/dev:类似于 windows 的设备管理器,把所有的硬件用文件的形式存储。/media:linux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下。/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在 /mnt/ 上,然后进入该目录就可以查看里的内容了。/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个 mysql 数据库则就可以放到这个目录下。默认是空的。/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。/selinux:SELinux 是一种安全子系统,它能控制程序只能访问特定文件。
# 帮助命令
# man
man [命令或配置文件] (功能描述:获得帮助信息)
| 信息 | 功能 |
|---|---|
| NAME | 命令的名称和单行描述 |
| SYNOPSIS | 怎样使用命令 |
| DESCRIPTION | 命令功能的深入讨论 |
| EXAMPLES | 怎样使用命令的例子 |
| SEE ALSO | 相关主题(通常是手册页) |
如:
man ls
按 Q 退出
# help
针对内部命令帮助,help 命令获得 shell 内置命令的帮助信息
如:
help cd
同时我们也可以使用指定命令,带上 - help 参数来查看该命令内部的帮助文档
ls –help
# 文件目录类
# ls 列出目录的内容
ls:list 列出目录内容
列出当前目录中的文件和目录
ls [选项] [目录或是文件]
| 选项 | 功能 |
|---|---|
| -a | 全部的文件,连同隐藏档 (开头为。的文件) 一起列出来 (常用) |
| -l | 长数据串列出,包含文件的属性与权限等等数据;(常用) |
ls
ls -a # 显示所有文件和目录包括隐藏的
ls -l # 所有文件和隐藏文件的 详细信息 可以缩写为 ll
ll # 为ls -l缩写
2
3
4
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用 byte 来表示 建立或最近修改的时间 名字
[atguigu@hadoop101 ~]$ ls -al
总用量 44
drwx------. 5 atguigu atguigu 4096 5月 27 15:15 .
drwxr-xr-x. 3 root root 4096 5月 27 14:03 ..
drwxrwxrwx. 2 root root 4096 5月 27 14:14 hello
-rwxrw-r--. 1 atguigu atguigu 34 5月 27 14:20 test.txt
2
3
4
5
6
# pwd 显示当前工作目录的绝对路径
pwd:print working directory 打印工作目录
pwd (功能描述:显示当前工作目录的绝对路径)
pwd
# cd 切换目录
cd:Change Directory 切换路径
cd [参数]
| 参数 | 功能 |
|---|---|
| cd 绝对路径 | 切换路径 |
| cd 相对路径 | 切换路径 |
| cd ~ 或者 cd | 回到自己的家目录 |
| cd - | 回到上一次所在目录 |
| cd .. | 回到当前目录的上一级目录 |
| cd -P | 跳转到实际物理路径,而非快捷方式路径 |
cd / # 返回到root根目录
cd ../ # 返回上一级目录
cd - # 回到上一次所在目录
cd ~ # 返回家目录
2
3
4
# mkdir 创建一个新的目录
mkdir:Make directory 建立目录
mkdir [选项] 要创建的目录
| 选项 | 功能 |
|---|---|
| -p | 创建多层目录 |
mkdir a # 创建a目录
mkdir -p xiyou/dssz/meihouwang # 创建多级目录
2
# touch 创建空文件
touch 文件名 如:
touch test.txt
touch a{1..10}.txt # 创建 a1-a10的文件
stat 文件名 # 查看文件的详细信息
2
3
# rmdir 删除一个空的目录
rmdir:Remove directory 移动目录
rmdir 要删除的空目录
rmdir a
rmdir a/b/c -p # 删除多级目录
2
# rm 删除文件或目录
rm [选项] deleteFile (功能描述:递归删除目录中所有内容)
| 选项 | 功能 |
|---|---|
| -r | 递归删除目录中所有内容 |
| -f | 强制执行删除操作,而不提示用于进行确认。 |
| -v | 显示指令的详细执行过程 |
rm 目录名 -r # 层叠递归的询问方式删除目录
rm 目录名 -rf # 以递归删除并且不询问
2
# cp 复制文件或目录
cp [选项] source dest (功能描述:复制 source 文件到 dest)
| 选项 | 功能 |
|---|---|
| -r | 递归复制整个文件夹 |
cp 文件名 文件目录
cp 文件名 文件目录/重命名文件名 (如果不指定则为原名称)
cp xxx.txt ./home
cp -r /a /b # 复制该文件夹下的子目录和文件
2
3
4
# mv 移动文件与目录或重命名
mv oldNameFile newNameFile (功能描述:重命名)
mv (move) 文件名 目录
mv test.txt ./a
# 移动并重命名
mv 文件名 目录重命名名字
mv test.txt ../qaq.txt
# 重命名
mv 原文件名 重命名文件名
mv test.txt qaq
2
3
4
5
6
7
8
9
# cat 查看文件内容
查看文件内容,从第一行开始显示。
cat [选项] 要查看的文件
| 选项 | 功能描述 |
|---|---|
| -n | 显示所有行的行号,包括空行。 |
cat test.txt # 一次性显示所有内容
cat -n houge.txt # 查看文件内容并显示行号
2
# more 文件内容分屏查看器
more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明。
more 要查看的文件
| 操作 | 功能说明 |
|---|---|
| 空白键 (space) | 代表向下翻一页; |
| Enter | 代表向下翻『一行』; |
| q | 代表立刻离开 more ,不再显示该文件内容。 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
more test.txt # 当按下回车后展示下一行,按q退出,按空格展示下一屏
# less 分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less 要查看的文件
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页; |
| [pagedown] | 向下翻动一行 |
| [pageup] | 向上翻动一行; |
| / 字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找; |
| ? 字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找; |
| q | 离开 less 这个程序; |
less test.txt # 一页一页展示文本内容,用paup和padn进行翻页
# head 显示文件头部内容
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
head 文件 (功能描述:查看文件头 10 行内容)
head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)
| 选项 | 功能 |
|---|---|
| -n <行数> | 指定显示头部内容的行数 |
head 文件名 -n X # 只看该文件前面的X行
head test.txt -n 2 # 只看该文件前面的2行
2
# tail 输出文件尾部内容
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容
tail [选项] 文件 (功能描述:查看文件尾部 10 行内容)
| 选项 | 功能 |
|---|---|
| -n <行数> | 输出文件尾部 n 行内容 |
| -f | 显示文件最新追加的内容,监视文件变化 |
tail 文件名 -n X # 只看该文件最后的X行
tail test.txt -n 2 # 只看该文件最后的2行
tail 文件名 -f # 可以动态查看文件变化,实时追踪该文档的所有更新
2
3
# ln 软、硬连接
软链接也成为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名 /
查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向。
ln 源文件名 自定义名字 # 硬连接
ln -s 源文件名 自定义名字 # 加上-s参数 创建为软连接
2
# 清屏
clear 或者 ctrl+l
# echo 打印字符
echo 输出内容到控制台
echo [选项] [输出内容]
| 控制字符 | 作用 |
|---|---|
| \ | 输出 \ 本身 |
| -e | 支持反斜线控制的字符转换 |
| \n | 换行符 |
| \t | 制表符,也就是 Tab 键 |
echo “abc”
echo -e “abc \t cd\n” # 包含特殊字符 加上-e参数
2
# > 输出重定向和 >> 追加
- ls -l > 文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写))
- ls -al >> 文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
- cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)
- echo “内容” >> 文件
# 重定向 (覆盖文本中的内容)
echo “字符串” > 文件名(可写入文件) # 将字符串写入到文本中
ls -l>houge.txt # 将ls查看信息写入到文件中
2
# 追加
echo “字符串” > >文件名(可写入文件) # 将字符串插入到文本中
ls -l>>houge.txt # 将ls查看信息追加到文件中
2
cat 不存在的目录 &>> error.log 将命令的失败结果 追加到 error.log 中
# 文件权限类
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在 Linux 中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组。
从左到右的 10 个字符表示

如果没有权限,就会出现减号 [-] 而已。从左至右用 0-9 这些数字来表示:
- 0 首位表示类型,在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等
- - 代表文件
- d 代表目录
- l 链接文档 (link file);
- 第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。---User
- 第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限,---Group
- 第 7-9 位确定其他用户拥有该文件的权限 ---Other
rxw 作用文件和目录的不同解释
作用到文件:
- [r] 代表可读(read): 可以读取,查看
- [w] 代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
- [x] 代表可执行(execute): 可以被系统执行
作用到目录:
- [r] 代表可读(read): 可以读取,ls 查看目录内容
- [w] 代表可写(write): 可以修改,目录内创建 + 删除 + 重命名目录
- [x] 代表可执行(execute): 可以进入该目录

# chmod 改变权限
chown 用户名 文件名 更改文件拥有者
chown 用户名:用户组 文件名 更改文件拥有者和用户组
chmod 用户组操作权限文件

用户组:u g o a u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体 (group) 者,o 表示其他以外的人,a 表示这三者皆是。
操作: + - = + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
权限:r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
如 chmod u-rw aa
chmod 可以使用数字代替 chmod abc aa
如 chmod 777 aa 代表 u rwx g rwx o rwx
其中 a,b,c 各为一个数字,分别表示 User、Group、及 Other 的权限。
r=4,w=2,x=1
- 若要 rwx 属性则 4+2+1=7;
- 若要 rw- 属性则 4+2=6;
- 若要 r-x 属性则 4+1=5。
chmod [{ugoa}{+-=}{rwx}] 文件或目录 # 字母权限
chmod [mode=421 ] [文件或目录] # 数字权限
2
# chown 改变所有者(所属用户,所属主)
chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
| 选项 | 功能 |
|---|---|
| -R | 递归操作 |
chown atguigu houge.txt # 修改文件所有者
chown -R atguigu:atguigu xiyou/ # 递归改变文件所有者和所有组
2
# chgrp 改变所属组
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
chgrp root houge.txt # 修改文件的所属组
# cat 命令
# cat > 重定向 (覆盖写入)
cat > 1.txt <<EOF
> 1
>
> EOF
# 再执行一次
cat > 1.txt <<EOF
> 2
> EOF
# 查看1.txt
cat 1.txt
2
2
3
4
5
6
7
8
9
10
11
12
13
cat>>file<<eof 重定向用于创建文件或在文件内追加内容,主要用于分行写入文件,结束时需要写个 eof
EOF 为结束的标记,可以自定义如
# cat >> 追加写入
cat >> 1.txt <<END
> 3
> 4
> end
> END
# 查看1.txt
cat 1.txt
2
3
4
end
2
3
4
5
6
7
8
9
10
11
12
# 用 cat -A 命令显示所有不可显字符
$ cat -A /tmp/testing.txt
testing$
^I^Itesting^L^H$
more testing$
^I^@^K^@even more testing$
^I^I^I$
2
3
4
5
6
# 用 cat -T 命令显示 TAB 键的字符 ^I
$ cat -T /tmp/testing.txt
testing
^I^Itesting
more testing
^I
even more testing
^I^I^I
2
3
4
5
6
7
8
9
10
11
12
13
14
# 用 cat -E 命令显示行尾的结束字符 $
$ cat -E /tmp/testing.txt
testing$
testing
$
more testing$
even more testing$
$
2
3
4
5
6
7
8
9
10
11
12
13
# 用户管理命令
# 用户管理
useradd 用户名 # 添加新用户
useradd -g 组名 用户名 # 添加新用户到某个组
passwd 新用户名 # 为新用户添加密码
id 用户名 # 查看指定用户是否存在
cat /etc/passwd #查看该centos中所有用户和组
su 用户名 # 切换用户
su - 用户名 # 切换用户并进入该用户家目录
userdel 用户名 # 删除该用户
userdel 用户名 -r # 删除该用户和该用户家目录
whoaimi # 显示自身用户名称
who am i # 显示登录用户的用户名
logname # 当前登录用户信息
sudo #临时 设置普通用户具有root权限
usermod -l 新用户名 老用户名 # 改变用户名
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同。
如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。
groupadd (选项) 用户组名 # 创建用户组
groupmod (选项) 用户组名 # 修改用户组
groupmod -n 新组名 老组名 # 指定工作组的新组名
grops 用户名 # 查询用户所属组
gropdel 用户组名 # 删除用户组
gpasswd (选项) 组名 # 管理指定组的用户
gpasswd -a 用户名 用户组 # 将用户加入指定组
usermod -g root(欲要加入的组) 用户名 # 修改用户组
2
3
4
5
6
7
8
# history 历史命令
history # 查看已经执行过的历史命令
# 日期
date [OPTION]... [+FORMAT]
| 选项 | 功能 |
|---|---|
| -d <时间字符串> | 显示指定的 “时间字符串” 表示的时间,而非当前时间 |
| -s <日期时间> | 设置系统日期时间 |
| 参数 | 功能 |
|---|---|
| <+ 日期时间格式> | 指定显示时使用的日期时间格式 |
timedatectl # 根据时区校正时间
timedatectl list-timezones # 查看当前国家下的时区
timedatectl set-timezone "Asia/Shanghai" # 设置指定时区
timedatectl set-ntp true # 关闭ntp同步时间
2
3
4
# date 显示当前时间
date # 显示当前时间
date +%Y 年 # 显示当前年份
date +%m 月 # 显示当前月份
date +%d 日 # 显示当前是哪一天
date +%Y-%m-%d 年月日 # 显示年月日时分秒
date +%H 时 M分 S秒 # 显示年月日时分秒
2
3
4
5
6
# date 显示非当前时间
date -d '1 days ago' # 显示前一天时间
date -d '-1 days ago' # 显示明天时间
2
# date 设置系统时间
date -s "2021-04-19" # 更改系统时间
# cal 查看日历
cal [选项] (功能描述:不加选项,显示本月日历)
| 选项 | 功能 |
|---|---|
| 具体某一年 | 显示这一年的日历 |
cal # 当月日历
cal 2021 # 当前年日历
2
# VIM
vim 文件名 + 指定行数 进入 vim 并光标在指定行数 如:
vim a.txt +5
# 一般模式
以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
| 语法 | 功能描述 |
|---|---|
| yy | 复制光标当前一行 |
| y 数字 y | 复制一段(从光标当前行到后 n 行) |
| p | 箭头移动到目的行粘贴 |
| u | 撤销上一步 |
| dd | 删除光标当前行 |
| d 数字 d | 删除光标(含)后多少行 |
| x | 剪切一个字母 (当前光标),相当于 del |
| X | 剪切一个字母 (当前光标的前一个),相当于 Backspace |
| yw | 复制一个词 |
| dw | 删除一个词 |
| shift+6(^) | 移动到行头 |
| shift+4($) | 移动到行尾 |
| 1+shift+g | 移动到页头,数字 |
| shift+g | 移动到页尾 |
| 数字 N+shift+g | 移动到目标行 |

# 编辑模式
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。
注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
| 按键 | 功能 |
|---|---|
| i | 当前光标前 |
| a | 当前光标后 |
| o | 当前光标行的下一行 |
| I | 光标所在行最前 |
| A | 光标所在行最后 |
| O | 当前光标行的上一行 |
# 指令模式
在一般模式当中,输入『 : / ?』3 个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!
| 命令 | 功能 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :! | 强制执行 |
| / 要查找的词 | n 查找下一个,N 往上查找 |
| :noh | 取消高亮显示 |
| :set nu | 显示行号 |
| :set nonu | 关闭行号 |
| :%s/old/new/g | 替换内容 /g global 替换匹配到的所有内容 |

# iptables
netstat -tnl #查看服务器目前开放端口
iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口
iptables -L -n -v #查看已添加的iptables规则 查询编号id
iptables -D INPUT 编号id #删除指定编码的规则
iptables -F #一键清空所有规则
iptables -A INPUT -p tcp --dport 80 -j DROP #封指定的端口
2
3
4
5
6
7
8
9
10
11
12
# 网络配置和系统管理操作
# ifconfig 配置网络接口
ifconfig :network interfaces configuring 网络接口配置,ifconfig(功能描述:显示所有网络接口的配置信息)
ifconfig
# 修改 IP 地址
vim /etc/udev/rules.d/70-persistent-ipoib.rules # 修改mac
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #一般为ens33 修改ip地址
2
#修改内容
BOOTPROTO="static" #IP的配置方法[none|static|bootp|dhcp](引导时不 使用协议|静态分配IP|BOOTP协议|DHCP协议)
ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no)
#添加内容
#IP地址
IPADDR=192.168.10.100
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=114.114.114.114
DNS2=8.8.8.8
2
3
4
5
6
7
8
9
10
11
12
修改完成后需要重启网络
systemctl restart network
# 配置主机名
hostname # 查看主机名
hostname 主机名:修改主机名 # 重启后恢复 临时更改 如:hostname admin
2
如要永久修改需要 更改 /etc/sysconfig/network 文件
vim /etc/sysconfig/network # 修改主机名称
vim /etc/hostname # 修改主机名
2
# 修改 hosts 映射文件
vim /etc/hosts
# systemctl
systemctl start | stop | restart | status 服务名
查看服务的方法
ls /usr/lib/systemd/system
案例
systemctl status firewalld # 查看网络服务的状态
systemctl stop firewalld # 停止网络服务
systemctl start firewalld # 启动网络服务
systemctl restart firewalld # 重启网络服务
systemctl list-unit-files # 查看服务开机启动状态
systemctl disable 服务名 # 关掉指定服务的自动启动
systemctl enable 服务名 # 开启指定服务的自动启动
systemctl is-enabled 服务名 # 查看服务是否允许开机自启
2
3
4
5
6
7
8
9
# 开放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
# 命令含义:
--zone #作用域
--add-port=1935/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
#重启
firewall-cmd --reload
2
3
4
5
6
7
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload #ubuntu 重启
service iptables stop #停止
2
3
4
5
6
7
8
9
开放所有端口
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables-save
#建议删除 iptables
sudoapt-get remove iptables
2
3
4
5
6
7
# 防火墙
service iptables status # 防火墙状态
service iptables stop # 关闭防火墙
service iptables start # 启动防火墙
chkconfig iptables off # 禁止防火墙自启
netstat -nltp # 查看聆听的端口
2
3
4
5
6
# 关机重启命令
正确的关机流程为:sync > shutdown、reboot 、halt
- sync:将数据由内存同步到硬盘中
- halt:关闭系统,等同于 shutdown -h now 和 poweroff
- reboot:就是重启,等同于 shutdown -r now
- shutdown [选项] 时间
- -h:-h=halt 关机
- -r:-r=reboot 重启
- now:立刻关机
- 时间:等待多久后关机(时间单位是分钟)。
Linux 系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写” 操作方式。当用户保存文件时,Linux 核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。但是,也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。使用 sync 指令可以立即将缓冲区的数据写入磁盘。
sync # 将数据由内存同步到硬盘中
reboot
2
# 查看系统版本
getconf LONG_BIT
# 后台运行
nohup 命令 用途:执行命令,忽略挂起指令,可用于后台运行,关闭 shell 不受影响 语法: nohup COMMAND [ARG]
nohup 运行文件名/命令名 &
# 磁盘分区类
# df 查看磁盘空间使用情况
df: disk free 空余硬盘
df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
| 选项 | 功能 |
|---|---|
| -h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
df -h # 查看磁盘使用情况
# du 文件和目录的磁盘使用空间
du 目录 / 文件(功能描述:显示每个目录 / 文件的磁盘使用空间)
| 选项 | 功能 |
|---|---|
| -a | 显示当前目录下所有的文件目录及子目录大小 |
| -h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
du -a jinyong
du -h
2
# fdisk 查看分区
fdisk -l (功能描述:查看磁盘分区详情)
| 选项 | 功能 |
|---|---|
| -l | 显示所有硬盘的分区列表 |
Linux 分区
- Device:分区序列
- Boot:引导
- Start:从 X 磁柱开始
- End:到 Y 磁柱结束
- Blocks:容量
- Id:分区类型 ID
- System:分区类型
fdisk -l # 查看系统分区情况
# lsblk 查看设备挂载情况
lsblk (功能描述:查看设备挂载情况)
| 选项 | 功能 |
|---|---|
| -f | 查看详细的设备挂载情况,显示文件系统信息 |
lsblk -f
# mount/umount 挂载 / 卸载
对于 Linux 用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。
Linux 中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做 “挂载” 的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。
mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
umount 设备文件名或挂载点 (功能描述:卸载设备)
| 参数 | 功能 |
|---|---|
| -t vfstype | 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 光盘或光盘镜像:iso9660 DOS fat16 文件系统:msdos Windows (opens new window) 9x fat32 文件系统:vfat Windows NT ntfs 文件系统:ntfs Mount Windows 文件网络 (opens new window)共享:smbfs UNIX (opens new window) (LINUX) 文件网络共享:nfs |
| -o options | 主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 |
| device | 要挂接 (mount) 的设备 |
| dir | 设备在系统上的挂接点 (mount point) |
mount -t iso9660 /dev/cdrom /mnt/cdrom/ # 设备/dev/cdrom挂载到 挂载点:/mnt/cdrom中
umount /mnt/cdrom # 卸载光盘镜像文件
2
# 添加新的硬盘并挂载
我将使用 VM 来进行模拟
先使用 df 看下我的电脑硬盘信息:
df -h

可以看到只有一个 sda1 分区装载 /boot , 还有一个扩展分区
查看 dev 下的硬盘:

只有一个硬盘(两个分区)
注意:
如果你是 IDE 接 口 硬 盘 :/dev/dh [a-z],这里的硬盘名字应该是 dh [a-z] 开头
如果你是 SCSI 接 口 硬 盘 : /dev/[a -z], 这里的硬盘名字应该是 sd [a-z] 开头
接下来将进行另一块硬盘的安装:
1. 将硬盘装在电脑上,重启电脑,后查看 /dev/ 下有没多了一块硬盘

ls /dev/sd

2. 用 fdisk 对这块硬盘分区
fdisk /dev/sdb

按下 m 显示菜单:

因为要新建分区选择 n

这里是问你是要建立主分区还是扩展分区,这里是第一次建立选择主分区 p

因为是 MBR 分区只能有 4 个分区,这里建立第一个分区,输入 1

这里问你个分区的起始扇区,这里直接回车(默认),相当于输入了 2048

这里问你的结束扇区,这里不需要计算,直接输入 + 1G 加号后面为这个分区的大小

此时第一个分区已经建立,但还是在内存中并没有写到硬盘 sdb 中,所以直接输入 w
注意这里可以继续创建分区,完了再输入 w,我这里只建立一个分区

经过以上步骤后分区的建立已经完成,但是此时系统还无法识别分区表
3. 内核重新读取分区表
partprobe /dev/sdb

注意:这里是整个磁盘 sdb,不是磁盘分区 sdb1
4. 创建文件系统(格式化分区)
Linux 中的主流的文件系统有:ext4 和 xfsd 等

这里我建立 ext4 文件系统
mkfs.ext4 /dev/sdb1
注意:这里是磁盘分区 sdb1,不是整个磁盘 sdb

5. 挂载
在挂载之前你需要确定挂载的目录,我这里是 /mnt/sdb1-zhi , 没有目录的自己 mkdir, 这里目录最好建立在 /mnt 下,这个目录是专门挂载的,可以任意。
将来这个分区就会与这个 /mnt/sdb1-zhi 目录建立联系
手动挂载
mount /dev/sdb1 /mnt/sdb1-zhi/

df 一下:

这里已经挂载成功,但是这只是一次性的,重启后就会消失
永久挂载:
要对 /etc/fstab 文件编辑
vim /etc/fstab

比如第一行中
硬盘路径 文件路径(挂载点) 文件系统类型 设备的自定义选项 是否转存 fsck的顺序
/dev/mapper/CentOS-root / xfs defaults 0 0
UUID=e4ef36e1-0840-4a58-a4f7-c26f52ead6f1 /boot xfs defaults 0 0
我们要在最后一行写入自己的分区与文件路径,可以仿照上面的写
/dev/sdb1 /mnt/sdb1-zhi ext4 defaults 0 0

这里第一列也可以写入 UUID
UUID 的查询:
blkid

转存:0 不转存,不备份 1 转存,备份
fsck:开机检查磁盘的顺序 0 表示不检查 1234.... 为检查顺序
以上步骤完成后,还需要判断是否正确
mount -a

如果没有其他信息出现,表示你插入的正确,否则错误。
如果错误且没有检查,开机后将进入紧急模式,无法开机
最后开机重启后 df 一下,看看是否正常

最后总结一下
1.fdisk /dev/sdb
2.partprobe /dev/sdb
\3. mkfs.ext4 /dev/sdb1
4. 挂载 mount /dev/sdb1 /mnt/sdb1-zhi
vim /etc/fstab
5.mount -a
# 搜索
# find 查找文件或者目录
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。
find [搜索范围] [选项]
| 选项 | 功能 |
|---|---|
| -name <查询方式> | 按照指定的文件名查找模式查找文件 |
| -user <查询方式> | 查找属于指定用户名所有文件 |
| -size <文件大小> | 按照指定的文件大小查找文件,单位为: b —— 块(512 字节) c —— 字节 w —— 字(2 字节) k —— 千字节 M —— 兆字节 G —— 吉字节 |
| -ctime | 文件时间 |
# 查询指定文件:
find -name 文件名
find -name 文件名* # (匹配包含此名字的文件)
# 文件大小
find -size +1k # (大于1k的文件)
find -size -1k # (小于1k的文件)
find -size 1k # 等于1k的文件
2
3
4
5
6
7
8
# locate 快速定位文件路径
locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻,注意 locate 这个命令不能搜索 /tmp 目录下的文件。
locate 搜索文件,由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
updatedb # 创建locate数据库初始化
locate 文件名
2
# grep 过滤查找及 “|” 管道符
管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep 选项 查找内容 源文件
- -n (显示指定行号可省略)
- --color 高亮显示关键字
- -An 显示后面的 n 行
- -Bn 显示前面的 n 行
- -c 统计个数
- -v 查询不包含该关键字的
- -i 忽略大小写
grep - n 123 abc.txt
管道符 | 将前一个命令的结果传递给后一个命令
如:
ll | grep ini # (会根据ll的结果查找指定内容)
# 压缩和解压类
# gzip/gunzip 压缩
gzip 文件 (功能描述:压缩文件,只能将文件压缩为 *.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
只能压缩文件不能压缩目录,不保留原来的文件
gzip 文件名
gunzip 文件名.gz # 解压gz文件
gzip -dv 压缩文件 # 解压gz文件
2
3
# zip/unzip 压缩
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
| zip 选项 | 功能 |
|---|---|
| -r | 压缩目录 |
unzip [选项] XXX.zip (功能描述:解压缩文件)
| unzip 选项 | 功能 |
|---|---|
| -d <目录> | 指定解压后文件的存放目录 |
zip 压缩命令在 window/linux 都通用,可以压缩目录且保留源文件。
zip -r 文件名.zip 要压缩的内容 # 压缩zip文件
unzip -d 压缩文件.zip # 解压zip文件
unzip -l 压缩文件.zip # 查看zip里面的文件
2
3
# tar 打包
tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
- -c 产生.tar 打包文件
- -v 显示详情信息
- -f 指定压缩后的文件名
- -z 打包同时压缩
- -x 解包.tar 文件
- -C 解包目录
tar -cvf xxx.tar ./* # 打包:
tar -zcvf xxx.tar.gz ./* # 打包并压缩:
tar -ztvf xxx.gz # 查看压缩包的文件
tar -xvf xxx.tar # 解压
tar -zxvf xxx.tar.gz -C ./* # 解压到指定路径
2
3
4
5
备份 /home, /etc ,但不要 /home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
在 /home 当中,比 2010/06/01 新的文件才备份
tar -N '2010/06/01' -zcvf home.tar.gz /home
# bzip2
bzip2 文件 # 压缩成.bz2文件 并删除原来的文件
bunzip2 -v 文件.bz2 # 解压
2
# 进程线程类
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
# ps 查看当前系统进程状态
ps:process status 进程状态
ps -aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
| 选项 | 功能 |
|---|---|
| -a | 选择所有进程 |
| -u | 显示所有用户的所有进程 |
| -x | 显示没有终端的进程 |
ps -aux # 查看所有进程
- USER:该进程是由哪个用户产生的
- PID:进程的 ID 号
- % CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
- % MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
- VSZ:该进程占用虚拟内存的大小,单位 KB;
- RSS:该进程占用实际物理内存的大小,单位 KB;
- TTY:该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端,tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端。
- STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
- START:该进程的启动时间
- TIME:该进程占用 CPU 的运算时间,注意不是系统时间
- COMMAND:产生此进程的命令名
ps -ef
- UID:用户 ID
- PID:进程 ID
- PPID:父进程 ID
- C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
- STIME:进程启动的时间
- TTY:完整的终端名称
- TIME:CPU 时间
- CMD:启动进程所用的命令和参数
# kill 终止进程
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
| 选项 | 功能 |
|---|---|
| -9 | 表示强迫进程立即停止 |
kill -9 进程号 # 强制结束进程
killall 进程名 # 结束多个相同名称进程
2
# pstree 查看进程树
pstree [选项]
| 选项 | 功能 |
|---|---|
| -p | 显示进程的 PID |
| -u | 显示进程的所属用户 |
pstree -p # 显示进程pid
pstree -u # 显示进程所属用户
2
# top 查看系统健康状态
top [选项]
| 选项 | 功能 |
|---|---|
| -d 秒数 | 指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令: |
| -i | 使 top 不显示任何闲置或者僵死进程。 |
| -p | 通过指定监控进程 ID 来仅仅监控某个进程的状态。 |
在 top 命令执行完后我们可以按以下按键执行以下功能
| 操作 | 功能 |
|---|---|
| P | 以 CPU 使用率排序,默认就是此项 |
| M | 以内存的使用率排序 |
| N | 以 PID 排序 |
| q | 退出 top |
top # 显示所有进程信息
top -c # 显示进程的详细路径
top -p PID # 显示指定的进程信息
2
3
第一行信息为任务队列信息
| 内容 | 说明 |
|---|---|
| 12:26:46 | 系统当前时间 |
| up 1 day, 13:32 | 系统的运行时间,本机已经运行 1 天 13 小时 32 分钟 |
| 2 users | 当前登录了两个用户 |
| load average: 0.00, 0.00, 0.00 | 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于 1,系统已经超出负荷。 |
第二行为进程信息
| Tasks: 95 total | 系统中的进程总数 |
|---|---|
| 1 running | 正在运行的进程数 |
| 94 sleeping | 睡眠的进程 |
| 0 stopped | 正在停止的进程 |
| 0 zombie | 僵尸进程。如果不是 0,需要手工检查僵尸进程 |
第三行为 CPU 信息
| Cpu(s): 0.1%us | 用户模式占用的 CPU 百分比 |
|---|---|
| 0.1%sy | 系统模式占用的 CPU 百分比 |
| 0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
| 99.7%id | 空闲 CPU 的 CPU 百分比 |
| 0.1%wa | 等待输入 / 输出的进程的占用 CPU 百分比 |
| 0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
| 0.1%si | 软中断请求服务占用的 CPU 百分比 |
| 0.0%st | st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比。 |
第四行为物理内存信息
| Mem: 625344k total | 物理内存的总量,单位 KB |
|---|---|
| 571504k used | 已经使用的物理内存数量 |
| 53840k free | 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了 628MB 内存,所以只有 53MB 的空闲内存了 |
| 65800k buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息
| Swap: 524280k total | 交换分区(虚拟内存)的总大小 |
|---|---|
| 0k used | 已经使用的交互分区的大小 |
| 524280k free | 空闲交换分区的大小 |
| 409280k cached | 作为缓存的交互分区的大小 |
# netstat 显示网络统计信息和端口占用情况
netstat -anp |grep 进程号 (功能描述:查看该进程网络信息)
netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
| 选项 | 功能 |
|---|---|
| -n | 拒绝显示别名,能显示数字的全部转化成数字 |
| -l | 仅列出有在 listen(监听)的服务状态 |
| -p | 表示显示哪个进程在调用 |
netstat -anp | grep 3115 # 通过进程号查看该进程的网络信息
netstat -nlp | grep 20670 # 查看某端口号是否被占用
2
# crontab 系统定时任务
# crond 启动定时服务
service crond restart # 重新启动
systemctl start crond # 启动
systemctl status crond # 查看状态
2
3
# crontab
crontab [选项]
| 选项 | 功能 |
|---|---|
| -e | 编辑 crontab 定时任务 |
| -l | 查询 crontab 任务 |
| -r | 删除当前用户所有的 crontab 任务 |
crontab -e # 编辑定时任务
crontab -l # 查询任务
crontab -r # 删除当前用户所有任务
2
3
# * * * * * 执行的任务
进入 crontab 编辑界面。会打开 vim 编辑你的工作。
crontab -e

- * 一小时当中的第几分钟 0-59
- * 小时 0-23
- * 当月第几天 1-31
- * 几月 1-12
- * 星期几 0-7 (0 和 7 代表星期日)
* 代表任何时间。如第一个星则为 每分钟执行
, 代表不连续时间 0 8,12,16 * * * 代表每天 8 点 12 点 16 点执行一次
- 代表连续时间 0 5 * * 1-6 代表周一到周六 5 点执行
*/x 代表每隔多久执行一次 */10 * * * * 代表每隔 10 分钟执行一次
30 * * * * /root/qb.sh > /dev/null 2>& &
# 安装软件
# rpm
RPM(RedHat Package Manager),RedHat 软件包管理工具,类似 windows 里面的 setup.exe
是 Linux 这系列操作系统里面的打包安装工具,它虽然是 RedHat 的标志,但理念是通用的。
RPM 包的名称格式
Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
- “1.3.23-11” 软件的版本号,主版本和此版本
- “i386” 是软件所运行的硬件平台,Intel 32 位微处理器的统称
- “rpm” 文件扩展名,代表 RPM 包
# 查询
rpm -qa # 查询所有rpm软件包
rpm -qa | grep rmp软件包 # 查看指定软件是否安装
2
# 卸载
rpm -e rpm软件包 # 卸载指定软件包
rpm -e --nodeps 软件包 # 卸载rpm时不检测依赖
2
# 安装
rpm -ivh RPM 包全名
| 选项 | 功能 |
|---|---|
| -i | -i=install,安装 |
| -v | -v=verbose,显示详细信息 |
| -h | -h=hash,进度条 |
| --nodeps | --nodeps,不检测依赖进度 |
rpm -ivh 软件包名
# yum
YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum [选项] [参数]
选项: -y 对所有提问都回答 yes
| 参数 | 功能 |
|---|---|
| install | 安装 rpm 软件包 |
| update | 更新 rpm 软件包 |
| check-update | 检查是否有可用的更新 rpm 软件包 |
| remove | 删除指定的 rpm 软件包 |
| list | 显示软件包信息 |
| clean all | 清理 yum 过期的缓存 |
| makecache | 将当前 yum 源里的 rpm 包列表缓存到本地 |
| deplist | 显示 yum 软件包的所有依赖关系 |
如安装 mysql:
- 检测是否安装了 mysql:rpm -qa | grep mysql
- 下载 mysql 的 repo 源 wget http..... 下载地址
- rpm -ivh mysql 软件包名
- yum install 软件
# centos7 跳过首次登陆创建普通用户步骤
安装完成 centos7 之后总会提示新增普通用户,如何跳过:
首先 ctrl+alt+f2 进入命令行界面
yum remove gnome-initial-setup.x86_64
init 3
init 5
2
3
执行完成后
再 ctrl+alt+f1 进入图形化界面就会跳过此步骤
# 找回 root 密码
重启 Linux,见到下图,通过键盘上下方向键选择第一个

按 e,出现如下的界面

定位到 LANG=zh_CN.UTF-8,后面追加 init=/bin/sh

键盘 ctrl+x 进行引导启动,进入如下界面

挂载根目录

选择要修改密码的用户名,passwd root,然后输入两次一致的密码,依次回车。 注意:输入密码不显示,一定要确认输入正确。

更新系统信息 touch /.autorelabel

最后输入 exec /sbin/init 命令重启系统即可
