Linux文件系统的目录结构 Linux中一切皆文件。/
是Linux的根目录。
bin
:存入Linu的一些命令,实际存放在usr/bin
,根目录下的bin是一个链接
etc
:存放系统管理所需要的一些配置文件。
opt
:系统提供给存放第三方资源的地方。
学习Linux常用:
系统管理 关机重启
1 2 3 4 5 6 7 8 shutdown shutdown -c shutdown now shutdown -r now
Linux中的进程和服务 计算机中,一个正在执行的程序或命令,叫做进程(process)。
启动之后一只存在、常驻内存的进程,一般被称做服务。
systemctl
基本语法:
start:启动服务
stop:关闭服务
restart:重启服务
status:查看服务状态
enable:开机自启动
disable:关闭开机自启动
1 systemctl start|stop|restart|status|enable |disable 服务名
了解:
CenOS6是service 服务名 start|stop|restart|status
1 2 3 4 systemctl disable firewalld systemctl enable firewalld
VIM编辑器 VI和VIM VI是Unix 操作系统和类Unix操作系统中最通用的文本编辑器。 VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性 ,方便程序设计。VIM 与VI编辑器完全兼容。
一般模式、编辑模式、命令模式 打开文件后都是一般模式,一般模式都是进行一些删除、复制、粘贴。按下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
网络配置
windows是ipconfig。
修改静态ip
1 vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改配置文件。将BOOTPROTO
配置成static
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 TYPE ="Ethernet" PROXY_METHOD ="none" BROWSER_ONLY ="no" BOOTPROTO ="static" 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 ="a0bc396a-a1a4-4687-9de2-12dd6d1ddb9f" DEVICE ="ens33" ONBOOT ="yes" IPADDR =192.168.200.100 GATEWAY =192.168.200.2 DNS1 =192.168.200.2
1 2 3 ip addr ping www.baidu.com ping PC主机地址
修改主机名
1 2 3 4 vim /etc/hostname hostnamectl set-hostname linux100
1 2 192.168.200.100 linux100
远程登陆
常用命令 帮助命令
1 2 sudo yum install man-pages-zh-CN
pwd 打印当前的工作目录的绝对路径
cd 切换当前的工作目录
1 2 3 4 5 6 7 cd /etccd ../cd -cd 或 cd ~
ls 列出目录内容
选项
说明
-a
列出所有文件,包括隐藏文件
-l
长数据串列出,包括文件的属性与权限等数据;缩写ll
-h
与-l一起使用-lh
,以方便阅读的形式显示文件大小
mkdir 创建文件夹
1 2 3 4 5 6 mkdir amkdir /opt/bmkdir -p /opt/a/b/c
rmdir 删除文件夹
1 2 3 4 5 rmdir armdir /opt/brmdir -p /a/b/c
touch
vim也可以创建一个文件,wq保存出来即可
cp 复制文件或目录
如果是覆盖文件。cp会进行提示,如果不想要提示,可以在cp前面加个反斜杠\cp
rm 删除文件或目录
选项
说明
-r
递归删除目录中所有内容
-f
强制执行删除操作,而不用进行确认
-v
显示指令的详细执行过程
慎用!!!! :rm -rf /*
mv 移动目录或者文件,也可进行重命名。
1 2 3 4 mv /opt/a.txt /mv /opt/a.txt /b.txt
cat 查看文件内容。
对于特别大的文件可以用less 文件名
echo 输出内容到控制台。
>
输出重定向和>>
追加1 2 3 4 ls -l > a.txtls -l >> a.txt
1 echo -e "hello\nworld" >> a.txt
head和tail head:显示文件前n行。默认n=10
tail:显示末尾后n行。默认n=10
1 2 3 4 head a.txthead -n 20 a.txt
ln 添加一个软链接。类似与windows里面的快捷方式。
时间日期类 基本语法:
选项
-d:显示指定时间的“时间字符串”表示的时间,而非当前时间。
-s:设置系统日期时间。
参数:
date +%s:显示当前日期的时间戳
非当前时间 1 2 3 4 5 6 date -d '1 days ago' date -d '-1 days ago' date -d '-1 hours ago'
查看日历
用户管理 用户管理命令 useradd 添加用户
1 2 3 4 5 6 useradd 用户名 useradd -d /home/dave david useradd -g 组名 用户名
passwd 设置密码
id 判断用户是否存在
su 切换用户
sudo 设置普通用户具有用户权限 1 2 3 4 5 6 7 8 vim /etc/sudoers root ALL=(ALL) ALL tony ALL=(ALL) ALL sudo ls /root
userdel 删除用户 1 2 3 4 userdel tony userdel -r david
usermod 修改用户
用户组管理命令 每个用户都有一个用户组,系统可以对一个用户组中所有用户进行集中管理。不同的Linux系统对用户组的规定有所不同。
如Linux下的用户属于与它同名的组,这个用户组在创建用户时同时创建。
groupadd 新增组
groupmod 修改组 1 2 groupmod -n haircut meifa
groupdel 删除组
查看所有组
文件权限类 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保证系统安全性,Linux系统对不同的用户访问同一个文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以用ls -l
命令来显示一个文件的属性及文件所属的用户和组。
rwx,如果没有权限用-
表示。
文件类型中d
表示目录,-
表示文件,l
表示链接
文件权限后面的1
如果查看到的是文件:则指的是硬链接的个数。
如果查看的是文件夹:则指的是子文件夹的个数。
chmod 改变权限
u:所有者,g:所有组,o:其他人,a:所有人
1 2 3 4 5 6 chmod [{u|g|o|a}{+|-|=}{rwx}] 文件或目录chmod u+rwx a.txtchmod a+rwx a.txtchmod ugo+rwx a.txt
r占比4
,w占比2
,x占比1
。
1 2 3 4 chmod 550 a.txtchmod 777 a.txt
修改整个文件夹下面的所有文件的方式
-R
:递归方式
chown改变所有者
chgrp 改变所属组
搜索查找类 find 查找文件或目录
选项
说明
-name<查询方式>
安装指定的文件名查找文件
-user<用户名>
查找指定用户名所有文件
-size<文件大小>
安装指定的文件大小查找文件,单位为: b——块(512个字节) c——字节 w——字(2字节) k——千字节 M——兆字节
1 2 3 4 find /root -name *.txt find /root -size +10M
locate快速定位文件路径 由于locate指令是基于数据库进行查询,第一次运行前,必须使用updatedb
指令创建locate数据库。
grep 过滤及|
管道符 管道符|
,表示将前面命令的处理结果交给后面的命令处理。
压缩和解压 gzip/gunzip压缩(了解)
缺点:
只能压缩文件,不能压缩目录
不保留原来文件
同时多个文件或产生多个压缩包
zip/unzip压缩
zip选项
-r
:压缩目录
unzip
-d
:指定安装后的目录
1 2 zip [选项] 压缩后的文件名.zip 要压缩的内容 unzip [选项] xxx.zip
1 2 3 zip -r myroot /root unzip myroot -d /opt/a
tar 打包
1 tar [选项] XXX.tar.gz 要打包的内容
选项
功能
-c
产生.tar打包文件
-v
显示详细信息
-f
压缩后的文件名
-z
打包同时压缩
-x
解压.tar文件
-C
解压到指定目录
1 2 tar -zcvf temp.tar.gz a.txt b.txt
1 2 tar -zxvf temp.tar.gz -C /tmp
磁盘管理 du 查看文件和目录占用磁盘情况
选项
功能
-h
以人们更加容易阅读的方式文件大小。
-a
不仅查看子目录大小,还包括文件
-c
显示所有的文件和子目录大小后,显示总和
-s
只显示总和
–max-depth=n
指定统计子目录的深度为第n层
df 查看磁盘空间使用情况
lsblk 查看设备的挂载情况
基本语法:
-f
:查看详细的设备挂载情况,显示文件系统信息。
mount/unmount 挂载和卸载 Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做**“挂载”**的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录连接起来,要载入的那个分区将它的存储空间在这个目录下获得。
1 2 mount [-t 文件系统类型] [-o 选项] 挂载的设备 挂载的目录(挂载点) umount 设备名或挂载点
示例:
1 2 mount /dev/cdrom /mnt/cdrom umount /mnt/cdrom
fdisk 分区
进程管理 计算机中,一个正在执行的程序或命令,叫做进程 。
启动之后一直存在、常驻内存的进程,一般被称作服务 。
ps 查看当前系统进程状态
1 2 3 4 ps aux | grep xxx ps -ef | grep xxx
选项
说明
a
列出带有终端的所有用户进程
x
列出当前用户的所有进程,包括没有终端的进程
u
面向用户友好的显示风格
-e
列出所有进程
-u
列出某个用户关联的所有进程
-f
显示完整格式的进程列表
ps aux信息说明
PID:进程的ID
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分百,占用越高,进程越耗费资源;
如果想要查看进程的CPU占用率和内存占用率,可以使用aux。
如果想要查看进程的父子进程ID可以使用ef。(父进程PID,子进程PPID)
kill 终止进程 1 2 3 kill [选项] 进程号(PID)killall 进程名称
慎用killall
top实时监控系统进程状态
选项
说明
-d 秒数
指定top命令每隔几秒中刷新。默认是3秒钟
-i
使top不显示任何闲置或僵死进程。
-p
通过指定监控进程ID来仅仅监控某个进程的状态。
操作
功能
P
以CPU使用率排序,默认就是此项。
M
以内存的使用率排序
N
以PID排序
q
退出top
查看网络状态
1 2 3 4 netstat -anp | grep 进程号 netstat -nlp | grep 端口号
选项
功能
-a
显示所有正在监听和未监听的套接字。
-n
拒绝显示的别名,能显示数字的全部转化成数字。
-l
仅列出在监听的服务状态
-p
表示显示那个进程在调用
系统定时任务和软件包管理 定时任务
选项
功能
-e
编辑crontab定时任务
-l
查询crontab任务
-r
删除当前用户所有的crontab定时任务
参数说明:
进入编辑页面后,会打开vim编辑你的工作。格式:
示例
软件包管理 RPM
1 2 3 rpm -e 软件包 rpm -e --nodeps 软件包
安装
-i
:安装
-v
:显示详细信息
-h
:进度条
--nodeps
:安装前不检查依赖关系
YUM 基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需频繁地一次次下载、安装。
选项:
参数
Sheel编程 Sheel是一个命令行解释器
,它接收应用程序/用户命令,然后调用系统内核。
入门
脚本以#!/bin/bash开头
(指定解析器)
运行脚本
采用bash
或sh
加上脚本的相对路径或绝对路径来执行。
1 2 #!/bin/bash echo "hello world"
通过给文件加上可执行权限(x
),然后通过文件的相对路径 或绝对路径 来执行。
1 2 chmod +x hello.sh ./hello.sh
在脚本的路径前加上.
或者source
。在修改完配置文件后,配置不生效,可以用source命令使配置生效。
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容执行结束,则子shell关闭,回到父shell中。
第三种,也就是在脚本路径前面加上.
或source
的方式,可以使脚本内容在当前shell中执行,无需打开子shell。这就是我们修改完/etc/profile文件后要source一下的原因。
开子shell和不开子shell的区别就是,环境变量的继承关系,如在子shell中设置当前变量,父shell中是不可见的。
变量 系统预定义变量
$HOME,$PWD,$SHELL,$USER
1 2 3 4 5 6 echo $HOME set BASH=/bin/bash BASH=()
自定义变量
定义变量:变量名=变量值,注意,=
号前后不能有空格
撤销变量:unset 变量名
声明静态变量(只读变量): readonly变量。注意:不能unset
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a=2 echo $a my_var='hello world' echo $my_var export my_varbash echo $my_var exit unset aunset my_myvar
定义变量名规则
变量名可以以字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写 。
等号两边不能有空格
在bash中默认类型都是字符串,无法直接进行数值计算 。
如果变量的值有空格,需要用双引号或单引号括起来。
特殊变量 $n n
为数字 ,$0
为该脚本的名称,$1
为第一个参数,$2为第二个参数,如果超过10个参数,大于10以上的参数要用{}括起来,则用${10}
表示。
1 2 3 4 5 6 #!/bin/bash echo "====$0 =====" echo "hello,$1 " ./hello.sh xiaoming
$# 获取我们所有输入参数的个数 ,常用于循环,判断参数个数是否正确,加强脚本健壮性。
$*、$@ $*:这个变量代表命令行中所有的参数,$把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$? 最后一次执行的命令返回状态 ,如果这个变量值为0,证明上一个命令正确执行;如果这个变量为非0,则证明上一个命令执行不正确。
运算符
$((运算式))
或$[运算式]
1 2 echo $[5*2]echo $((5 *2 ))
1 2 3 4 5 6 a=$[5*2] a=$(expr 5 \* 2) a=`expr 5 \* 2` echo $a
条件判断
基本语法
test condition
[ condition ]
。[]前后需要有空格
两个数之间的判断
格式
说明
-eq
等于
-ne
不等于
-gt
大于
-lt
小于
-ge
大于等于
-lt
小于等于
格式
说明
-r
有读的权限
-w
有写的权限
-x
有可执行的权限
格式
说明
-e
文件存在
-f
文件存在,并且是一个常规文件。file
-d
文件存在,并且是一个目录,directory
1 2 3 4 5 6 7 8 9 10 a=hello [ $a = hello ] echo $?[ 2 -ge 3] echo $?[ -r ./hello.sh] echo $?
多条件判断
&&表示上一条命令执行成功后才执行下一条命令
||表示上一条命令执行失败后才执行下一条命令
1 [ ] || echo OK || echo Not OK
如果在同一个中括号中,与用-a,或用-o
1 if [ $a -ge 25 -a $a -le 35 ]; then echo OK; fi
流程控制 if 判断
1 2 3 4 5 6 7 8 if [ 条件判断式 ];then 程序 fi if [ 条件判断式 ]then 程序 fi
1 2 3 4 5 6 7 8 9 if [ 条件判断式 ]then 程序 elif [ 条件判断式 ]then 程序 else 程序 fi
示例:
1 2 3 4 5 6 7 #!/bin/bash if [ $1 = atguigu ]then echo OK else echo Not OK fi
1 2 3 chmod +x ./streq.sha=atguigu ./streq.sh $a
case语句
1 2 3 4 5 6 7 8 9 10 11 case $变量名 in "值1" ) 如果变量的值=1,则执行程序1 ;; "值2" ) 如果变量的值=2,则执行程序2 ;; *) 如果变量的值都不是以上值,则执行该程序 ;; esac
for循环
1 2 3 4 for ((初始值;循环控制条件;变量变化))do 程序 done
1 2 3 4 5 6 7 8 #!/bin/bash sum =0for ((i=0 ;i<100 ;i++))do sum =$[ $sum + $i ] done echo $sum
1 2 3 4 for 变量 in 值1 值2 值3...do 程序 done
1 for i in {1..100};do sum =$[$sum +$i ];done ; echo $sum
while 循环
1 2 3 4 while [ 条件判断式 ]do 程序 done
read 读取控制台输入 read (选项) (参数)
选项:
-p
:指定读取值时的提示符。
-t
:指定读取值时等待的时间(秒)如果-t
不加表示一直等待。
参数:
变量:指定读取值的变量名
1 2 3 4 5 6 7 #!/bin/bash read -t 10 -p "请输入您的芳名:" nameecho "welcome,$name " ./read_test.sh
函数 系统函数 basename
1 basename [string/pathname] [suffix]
basename命令会删掉所有前缀包括最后一个/
的字符,然后将字符串显示出来。
basename可以理解为取路径里的文件名称出来。
选项:
suffix为后缀,如果后缀指定了,会把文件名的后缀也去掉
1 2 3 4 basename /home/par.shbasename /home/par.sh .sh
dirname dirname:文件的绝对路径。从给定的包含绝对路径的文件名中除去文件名部分,返回路径目录部分 。
1 2 3 4 basename /home/par.shbasename ../par.sh
1 echo script name: $(cd $(dirname $0 ); pwd )
自定义函数
1 2 3 4 5 6 [function ] funname[()] { 程序 [return int;] }
练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash dir ="/mysql/dump/" separator="/" year="$(date "+%Y" ) $separator " month="$(date "+%m" ) $separator " days="$(date "+%d" ) $separator " oldYear="$(date -d "61 days ago" "+%Y" ) $separator " oldMonth="$(date -d "61 days ago" "+%m" ) $separator " oldDays="$(date -d "61 days ago" "+%d" ) $separator " if [ ! -d $dir $year$month$days ]then mkdir -p $dir $year$month$days fi if [ -d $dir $oldYear$oldMonth$oldDays ]then rm -rf $dir $oldYear$oldMonth$oldDays fi