Linux
Linux文件系统的目录结构
Linux中一切皆文件。/是Linux的根目录。
bin:存入Linu的一些命令,实际存放在usr/bin,根目录下的bin是一个链接etc:存放系统管理所需要的一些配置文件。opt:系统提供给存放第三方资源的地方。
学习Linux常用:
1 | # 清空屏幕 |
系统管理
关机重启
- 关机
1 | # 默认一分钟后关机。(shutdown 3)3分钟后关机。(shutdown 15.28)15点28分钟关机。 |
- 重启
1 | reboot |
- 将数据由内存同步到硬盘中
1 | sync |
Linux中的进程和服务
计算机中,一个正在执行的程序或命令,叫做进程(process)。
启动之后一只存在、常驻内存的进程,一般被称做服务。
systemctl
基本语法:
start:启动服务
stop:关闭服务
restart:重启服务
status:查看服务状态
enable:开机自启动
disable:关闭开机自启动
1 | systemctl start|stop|restart|status|enable|disable 服务名 |
了解:
CenOS6是
service 服务名 start|stop|restart|status
- 关闭、开启防火墙开机自启动
1 | # 关闭 |
VIM编辑器
VI和VIM
VI是Unix 操作系统和类Unix操作系统中最通用的文本编辑器。
VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与VI编辑器完全兼容。
- 打开文件:
1 | vim 文件名 |
一般模式、编辑模式、命令模式
打开文件后都是一般模式,一般模式都是进行一些删除、复制、粘贴。按下a、i、o进入编辑模式。这个时候就可以输入内容。
进入编辑模式后,按esc退出编辑模式,进入一般模式。
一般模式下输入:进入命令模式。
一般模式
| 语法 | 说明 |
|---|---|
| yy | 复制光标当前一行 |
| y 数字 y | 复制一段,从光标当前行到后n行 |
| p | 在光标所在行的下一行进行粘贴 |
| u | 撤销上一步 |
| dd | 删除所在行 |
| d 数字 d | 删除光标含后n行 |
| x | 剪切一个字符 |
| v | 可视化,按下上面的按键后实现相应效果。配合y,d,x,p使用更好。 |
| gg | 跳到行头 |
| G(shift+g) | 跳到行尾 |
| 数字+G | 跳到指定行 |
命令模式
| 命令 | 说明 |
|---|---|
| :w | 保存 |
| :q | 退出。在修改完文件后,退出后,文件未保存更改,加!强制退出。:q! |
| :wq | 保存并退出。加!强制保并存退出。:wq! |
| :set nu | 文档显示行号。 |
| :set nonu | 文档不显示行号。 |
| /要查找的词 | 查找所有符合的词,光标跳转到第一个词的位置,n切换到下一个词N(shift+n)切换到上一个词 |
| :noh | 去掉高亮显示 |
| :s/old/new | 替换当前行匹配到的第一个old为new |
| :s/old/new/g | 替换当前行匹配到的所有old为new |
| :%s/old/new | 替换文档中每一行匹配到的第一个old为new |
| :%s/old/new/g | 替换文档中匹配到的所有old为new |
网络配置
- 查看网络:
1 | ip addr |
windows是ipconfig。
查看网络是否连通
查看本机是否和百度能连通
1 | ping www.baicu.com |
修改静态ip
- 修改配置文件
1 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
修改配置文件。将BOOTPROTO配置成static
1 | TYPE="Ethernet" |
- 重启网络服务
1 | service network restart |
- 测试网络是否连通
1 | ip addr |
修改主机名
- 查看当前主机的主机名
1 | hostname |
- 修改当前主机的主机名
1 | # 修改后重启后生效 |
- 添加ip地址和主机名的映射
1 | vim /etc/hosts |
1 | # 添加 |
远程登陆
1 | ssh root@linux100 |

常用命令
帮助命令
- man
1 | # 内嵌命令需要加-f,(man -f 命令名称) |
1 | # 使用man查看命令文档时用中文显示 |
- help
1 | # 内置命令 |
- 查看命令是否是内嵌命令
1 | type cd |
pwd
打印当前的工作目录的绝对路径
1 | pwd |
cd
切换当前的工作目录
1 | cd /etc |
ls
列出目录内容
- 基本语法
1 | ls [选项] [目录或文件] |
| 选项 | 说明 |
|---|---|
| -a | 列出所有文件,包括隐藏文件 |
| -l | 长数据串列出,包括文件的属性与权限等数据;缩写ll |
| -h | 与-l一起使用-lh,以方便阅读的形式显示文件大小 |
mkdir
创建文件夹
1 | # 创建一个文件夹a |
rmdir
删除文件夹
1 | rmdir a |
touch
1 | # 创建一个空文件 |
vim也可以创建一个文件,wq保存出来即可
cp
复制文件或目录
- 基本语法:
1 | cp [选项] 源文件 目标文件 |
选项:
-r:递归复制整个文件夹。
如果是覆盖文件。cp会进行提示,如果不想要提示,可以在cp前面加个反斜杠\cp
rm
删除文件或目录
- 基本语法:
1 | rm [选项] 目标文件或目录 |
- 选项
| 选项 | 说明 |
|---|---|
| -r | 递归删除目录中所有内容 |
| -f | 强制执行删除操作,而不用进行确认 |
| -v | 显示指令的详细执行过程 |
慎用!!!!:
rm -rf /*
mv
移动目录或者文件,也可进行重命名。
1 | # 把/opt/a.txt文件移动到/下面 |
cat
查看文件内容。
选项
-n:显示所有行行号,包括空行。
1 | cat /opt/a.txt |
对于特别大的文件可以用less 文件名
echo
输出内容到控制台。
1 | # -e支持转义 |
>输出重定向和>>追加
1 | # 列表内容写入到文件中(覆盖写) |
1 | echo -e "hello\nworld" >> a.txt |
head和tail
head:显示文件前n行。默认n=10
tail:显示末尾后n行。默认n=10
1 | # 显示前10行 |
1 | # tail有个-f,表示实时跟踪,显示文件最新追加的内容,监视文件变化。 |
ln
添加一个软链接。类似与windows里面的快捷方式。
1 | ln -s /opt myetc |
时间日期类
基本语法:
1 | date [选项] [参数] |
1 | # 显示当前时间 |
选项
- -d:显示指定时间的“时间字符串”表示的时间,而非当前时间。
- -s:设置系统日期时间。
参数:
date:显示当前时间date +%Y:显示当前年份date +%m:显示当前月份date +%d:显示当前是那一天date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒
date +%s:显示当前日期的时间戳
非当前时间
1 | # 显示前一天的时间 |
查看日历
1 | # 查看当前月份日历 |
用户管理
用户管理命令
useradd 添加用户
- 基本语法
1 | # 添加一个用户,默认主目录名称是用户名 |
passwd 设置密码
- 基本语法
1 | # 设置用户密码 |
id 判断用户是否存在
- 基本语法
1 | # 查看用户是否存在 |
- 查看创建了那些用户
1 | cat /etc/passwd |
su 切换用户
1 | # 切换用户 |
sudo 设置普通用户具有用户权限
1 | # 修改配置,让tony临时具有管理员权限 |
userdel 删除用户
1 | # 删除用户 |
usermod 修改用户
1 | # 修改用户所属的组 |
用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中所有用户进行集中管理。不同的Linux系统对用户组的规定有所不同。
如Linux下的用户属于与它同名的组,这个用户组在创建用户时同时创建。
groupadd 新增组
1 | # 添加一个组 |
groupmod 修改组
1 | # 修改组名 |
groupdel 删除组
1 | groupdel tony |
查看所有组
1 | cat /etc/passwd |
文件权限类
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保证系统安全性,Linux系统对不同的用户访问同一个文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以用ls -l命令来显示一个文件的属性及文件所属的用户和组。
rwx,如果没有权限用
-表示。文件类型中
d表示目录,-表示文件,l表示链接

文件权限后面的1
- 如果查看到的是文件:则指的是硬链接的个数。
- 如果查看的是文件夹:则指的是子文件夹的个数。
chmod 改变权限
u:所有者,g:所有组,o:其他人,a:所有人
- 方式一:
1 | chmod [{u|g|o|a}{+|-|=}{rwx}] 文件或目录 |
- 方式二:
r占比4,w占比2,x占比1。
1 | # 给a.txt的属主,属组添加rx权限 |
修改整个文件夹下面的所有文件的方式
-R:递归方式
1 | chmod -R 777 xiyou/ |
chown改变所有者
基本语法:
-R:递归方式
1 | chwon 属主 文件名 |
chgrp 改变所属组
基本语法:
-R:递归方式
1 | charp 属组 文件名 |
搜索查找类
find 查找文件或目录
- 基本语法:
1 | find [搜索范围] [选项] |
| 选项 | 说明 |
|---|---|
| -name<查询方式> | 安装指定的文件名查找文件 |
| -user<用户名> | 查找指定用户名所有文件 |
| -size<文件大小> | 安装指定的文件大小查找文件,单位为: b——块(512个字节) c——字节 w——字(2字节) k——千字节 M——兆字节 |
1 | # 按文件名 |
locate快速定位文件路径
由于locate指令是基于数据库进行查询,第一次运行前,必须使用updatedb指令创建locate数据库。
1 | locate 搜索文件 |
1 | updatedb |
grep 过滤及|管道符
管道符|,表示将前面命令的处理结果交给后面的命令处理。
1 | ls -l | grep test |
压缩和解压
gzip/gunzip压缩(了解)
1 | # 将文件压缩为*.gz文件 |
缺点:
- 只能压缩文件,不能压缩目录
- 不保留原来文件
- 同时多个文件或产生多个压缩包
zip/unzip压缩
zip选项
-r:压缩目录unzip
-d:指定安装后的目录
1 | zip [选项] 压缩后的文件名.zip 要压缩的内容 |
1 | # 示例 |
tar 打包
- 基本语法
1 | tar [选项] XXX.tar.gz 要打包的内容 |
| 选项 | 功能 |
|---|---|
| -c | 产生.tar打包文件 |
| -v | 显示详细信息 |
| -f | 压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 解压.tar文件 |
| -C | 解压到指定目录 |
1 | # 压缩 |
1 | # 解压 |
磁盘管理
du 查看文件和目录占用磁盘情况
- 基本语法:
1 | du [选项] 目录/文件 |
| 选项 | 功能 |
|---|---|
| -h | 以人们更加容易阅读的方式文件大小。 |
| -a | 不仅查看子目录大小,还包括文件 |
| -c | 显示所有的文件和子目录大小后,显示总和 |
| -s | 只显示总和 |
| –max-depth=n | 指定统计子目录的深度为第n层 |
1 | # 示例 |
df 查看磁盘空间使用情况
基本语法:
-h:以人们较易阅读的方式显示大小。
1 | df 选项 |
lsblk 查看设备的挂载情况
基本语法:
-f:查看详细的设备挂载情况,显示文件系统信息。
1 | lsblk 查看设备挂载情况 |
mount/unmount 挂载和卸载
Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做**“挂载”**的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录连接起来,要载入的那个分区将它的存储空间在这个目录下获得。
- 基本语法
1 | mount [-t 文件系统类型] [-o 选项] 挂载的设备 挂载的目录(挂载点) |

示例:
1 | mount /dev/cdrom /mnt/cdrom |
fdisk 分区
- 查看分区
1 | fdisk -l |
- 对新硬盘进行分区
1 | fdisk 硬盘设备名 |
进程管理
计算机中,一个正在执行的程序或命令,叫做进程。
启动之后一直存在、常驻内存的进程,一般被称作服务。
ps 查看当前系统进程状态
- 基本语法
1 | # 查看系统中所有进程 |
| 选项 | 说明 |
|---|---|
| a | 列出带有终端的所有用户进程 |
| x | 列出当前用户的所有进程,包括没有终端的进程 |
| u | 面向用户友好的显示风格 |
| -e | 列出所有进程 |
| -u | 列出某个用户关联的所有进程 |
| -f | 显示完整格式的进程列表 |
ps aux信息说明

PID:进程的ID
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分百,占用越高,进程越耗费资源;

如果想要查看进程的CPU占用率和内存占用率,可以使用aux。
如果想要查看进程的父子进程ID可以使用ef。(父进程PID,子进程PPID)
kill 终止进程
1 | # -9:表示强制进程立刻关闭 |
慎用killall
top实时监控系统进程状态
- 基本命令
1 | top [选项] |
| 选项 | 说明 |
|---|---|
| -d 秒数 | 指定top命令每隔几秒中刷新。默认是3秒钟 |
| -i | 使top不显示任何闲置或僵死进程。 |
| -p | 通过指定监控进程ID来仅仅监控某个进程的状态。 |
- 操作说明
| 操作 | 功能 |
|---|---|
| P | 以CPU使用率排序,默认就是此项。 |
| M | 以内存的使用率排序 |
| N | 以PID排序 |
| q | 退出top |
查看网络状态
- 基本语法
1 | # 查看该进程网络信息 |
| 选项 | 功能 |
|---|---|
| -a | 显示所有正在监听和未监听的套接字。 |
| -n | 拒绝显示的别名,能显示数字的全部转化成数字。 |
| -l | 仅列出在监听的服务状态 |
| -p | 表示显示那个进程在调用 |
系统定时任务和软件包管理
定时任务
- 重新启动crond服务
1 | systemctl restart crond |
- 基本语法
1 | crontab [选项] |
| 选项 | 功能 |
|---|---|
| -e | 编辑crontab定时任务 |
| -l | 查询crontab任务 |
| -r | 删除当前用户所有的crontab定时任务 |
参数说明:
1 | crontab -e |
进入编辑页面后,会打开vim编辑你的工作。格式:
1 | * * * * * 要执行的任务 |
- 参数描述

- 特殊符号

示例

软件包管理
RPM
- 查询命令
1 | # 查询所有安装的软件包 |
- 卸载
1 | rpm -e 软件包 |
安装
-i:安装-v:显示详细信息-h:进度条--nodeps:安装前不检查依赖关系
1 | # 选项 |
YUM
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需频繁地一次次下载、安装。
- 基本语法
1 | yum [选项] 参数 |
选项:
- -y:对所有提问都回答“yes”
参数
list:查看所有软件包
install:安装rpm软件包
update:更新rmp软件包
check-update:检查是否有可用的更新rmp软件包
remove:删除指定的软件包
Sheel编程
Sheel是一个命令行解释器,它接收应用程序/用户命令,然后调用系统内核。
入门
- 脚本格式
脚本以#!/bin/bash开头(指定解析器)
运行脚本
- 方式一
采用bash或sh加上脚本的相对路径或绝对路径来执行。
1 |
|
1 | # 执行命令运行脚本 |
- 方式二
通过给文件加上可执行权限(x),然后通过文件的相对路径或绝对路径来执行。
1 | chmod +x hello.sh |
- 方式三
在脚本的路径前加上.或者source。在修改完配置文件后,配置不生效,可以用source命令使配置生效。
1 | source ./hello |
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容执行结束,则子shell关闭,回到父shell中。
第三种,也就是在脚本路径前面加上.或source的方式,可以使脚本内容在当前shell中执行,无需打开子shell。这就是我们修改完/etc/profile文件后要source一下的原因。
开子shell和不开子shell的区别就是,环境变量的继承关系,如在子shell中设置当前变量,父shell中是不可见的。
变量
系统预定义变量
- 常用系统变量
$HOME,$PWD,$SHELL,$USER
1 | # 查看系统变量的值 |
自定义变量
- 基本语法
定义变量:变量名=变量值,注意,=号前后不能有空格
撤销变量:unset 变量名
声明静态变量(只读变量): readonly变量。注意:不能unset
1 | a=2 |
- 定义变量名规则
- 变量名可以以字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两边不能有空格
- 在bash中默认类型都是字符串,无法直接进行数值计算。
- 如果变量的值有空格,需要用双引号或单引号括起来。
特殊变量
$n
n为数字,$0为该脚本的名称,$1为第一个参数,$2为第二个参数,如果超过10个参数,大于10以上的参数要用{}括起来,则用${10}表示。
1 |
|
$#
获取我们所有输入参数的个数,常用于循环,判断参数个数是否正确,加强脚本健壮性。
$*、$@
$*:这个变量代表命令行中所有的参数,$把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$?
最后一次执行的命令返回状态,如果这个变量值为0,证明上一个命令正确执行;如果这个变量为非0,则证明上一个命令执行不正确。
1 | ./hello.sh |
运算符
- 基本语法
$((运算式))或$[运算式]
1 | echo $[5*2] |
1 | # 三种方式赋值给变量a |
条件判断
基本语法
- test condition
[ condition ]。[]前后需要有空格
两个数之间的判断
| 格式 | 说明 |
|---|---|
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -lt | 小于 |
| -ge | 大于等于 |
| -lt | 小于等于 |
- 按文件权限进行判断
| 格式 | 说明 |
|---|---|
| -r | 有读的权限 |
| -w | 有写的权限 |
| -x | 有可执行的权限 |
- 按文件类型进行判断
| 格式 | 说明 |
|---|---|
| -e | 文件存在 |
| -f | 文件存在,并且是一个常规文件。file |
| -d | 文件存在,并且是一个目录,directory |
1 | # 字符串的比较 |
多条件判断
&&表示上一条命令执行成功后才执行下一条命令
||表示上一条命令执行失败后才执行下一条命令
1 [ ] || echo OK || echo Not OK如果在同一个中括号中,与用-a,或用-o
1 if [ $a -ge 25 -a $a -le 35 ]; then echo OK; fi
流程控制
if 判断
- 单分支
1 | if [ 条件判断式 ];then |
- 多分支
1 | if [ 条件判断式 ] |
示例:
1 |
|
1 | chmod +x ./streq.sh |
case语句
- 基本语法
1 | case $变量名 in |
for循环
- 基本语法1
1 | for((初始值;循环控制条件;变量变化)) |
1 |
|
- 语法二
1 | for 变量 in 值1 值2 值3... |
1 | for i in {1..100};do sum=$[$sum+$i];done; echo $sum |
while 循环
- 基本语法
1 | while [ 条件判断式 ] |
read 读取控制台输入
read (选项) (参数)
选项:
-p:指定读取值时的提示符。
-t:指定读取值时等待的时间(秒)如果-t不加表示一直等待。
参数:
变量:指定读取值的变量名
1 |
|
函数
系统函数
basename
- 基本语法
1 | basename [string/pathname] [suffix] |
basename命令会删掉所有前缀包括最后一个/的字符,然后将字符串显示出来。
basename可以理解为取路径里的文件名称出来。
选项:
suffix为后缀,如果后缀指定了,会把文件名的后缀也去掉
1 | basename /home/par.sh |
dirname
dirname:文件的绝对路径。从给定的包含绝对路径的文件名中除去文件名部分,返回路径目录部分。
1 | basename /home/par.sh |
1 | echo script name: $(cd $(dirname $0); pwd) |
自定义函数
- 基本语法
1 | # 参数列表 |
练习
1 |
|