Linux基础
1. 目录结构
bin:指令
sbin:高级用户能使用的指令
dev:管理外围设备,如光驱、打印机等
etc:配置文件
lib:动态连接共享库,如C、C++的库文件等
media:挂载媒体设备,如软盘和光盘、U盘(可移动存储设备)
opt:需要安装的软件(第三方软件包)
root:root用户的文件
boot:该目录存放系统核心文件和启动时必须读取的文件
selinux:安全相关
home:存放普通用户的目录
lost-found:一般为空,非法关机后会存放一些文件
usr:用户安装的软件之类,类似program file
tmp:临时文件
mnt:临时挂在别的文件系统
var:不断变化的文件。类似日志
proc:进程信息,包含系统进程相关信息。是一个虚拟文件系统,包含正在运行进程信息。内核相关,不占用磁盘空间,不要动
srv:包含服务器特定服务相关的数据,内核相关,不要动
sys:内核相关,不要动
2. 常用指令
2.1 vim指令
拷贝当前行:yy
拷贝当前行向下5行:5yy
粘贴:p
删除当前行:dd
删除当前行向下5行:5dd
到文档最底行/最首行:G/gg
撤销输入的文本:u
将光标移到20行:先按20,然后按shift+g
显示/取消显示文件行行号:命令行下,:set nu / :set nonu
yy 5yy dd 5dd p是粘贴,u是撤销,移动光标shift+g
不管是重启还是关闭系统,要先运行sync,防止数据丢失
shutdown -h now 立刻进行关机
shutdown -h 1 1分钟后关机
shutdown -r now 立刻重启计算机
halt 立刻关机
reboot 立刻重启计算机
sync 把内存的数据同步到磁盘
2.2 用户和用户组
用户组:类似于角色
增加组:groupadd 组名
删除组:groupdel 组名
注销用户:logout
添加用户:useradd 【选项】 用户名
或 useradd -d 目录 用户名
或 useradd -g 用户组 用户名
设置密码:passwd 用户名
删除用户保留家目录:userdel 用户名
删除用户删除家目录:userdel -r 用户名
查询用户信息:id 用户名
高权限用户到低权限用户不用输密码,反之需要
当需要返回原来用户时,用exit
添加用户:useradd -d /home/admin -p admin admin
修改用户组:usermod -g 用户组 用户名
2.3 用户和组的相关文件
2.3.1 /etc/passwd文件
记录用户各种信息,中间用:分割
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|
| 用户名 | 口令 | 用户标识号 | 组标识号 | 注释性描述 | 主目录 | 登录Shell |
用户名:用户标识号:组标识号:注释性描述:主目录:登录Shell
2.3.2 /etc/shadow文件
口令的配置文件,中间用:分割
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|
| 登录名 | 加密口令 | 最后一次修改时间 | 最小时间间隔 | 最大时间间隔 | 警告时间 | 不活动时间 | 失效时间 | 标识 |
2.3.3 /etc/group文件
组(group)配置文件,记录Linux包含组的信息,中间用:分割
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| 组名 | 口令 | 组标识号 | 组内用户列表 |
2.4 文件操作指令
帮助命令:man 命令,help 命令
创建目录:mkdir 目录结构
创建多级目录:mkdir -p 目录结构
删除空目录:rmdir
删除非空目录:rm -rf
创建空文件:touch
拷贝文件:cp 源 目标(可以带路径,可以改名)
拷贝文件夹(递归拷贝):cp -r 源 目标
强制拷贝(覆盖):\cp
查看默认权限:umask
删除整个文件夹:rm -r
强制删除不提示:rm -rf
文件重命名:在文件当前目录 mv 文件名 新文件名
移动文件:mv 文件路径 新路径
浏览文件(只能看,不能改):cat 文件名 ;
显示行号 cat -n ;
分页 cat -n 文件名 | more (按空格下翻)
more指令:浏览文本,空格:向下翻一页;
回车:向下一行;
q:立刻离开;
Ctrl+F向下滚动一屏;
Ctrl+B:向上滚动一屏;
=:输出当前行号;
:f:输出文件名和当前行号
less指令:也是分页浏览文件指令,但是不会直接加载整个文件
当前日历:cal 2020年日历:cal 2020
输出文本到控制台:echo
head指令:显示文件头,默认显示前10行。
head -n 5 显示前5行
tail指令:tail 文件 默认显示后10行;
tail -n 5 显示后5行;
tail -f 实时追踪改文档更新
sed指令:sed -n '4,10p' a.txt 显示4到10行
sed 是流式编辑器,主要用来对文件做增删改操作。sed命令语法:sed 'pattern 命令' 文件名
软连接(类似快捷方式):ln -s 目录 连接名
删除软连接:rm -rf
history:显示执行命令行历史;history 5 显示倒数5行; !行号 执行第几行命令
date指令:
date:显示时间
date +%Y显示年份
date "+%Y-%m-%d %H:%M:%S"
设置系统日期:date -s "日期"
find指令:find 【范围】 【选项】
find /home -name hello.txt
find /home -user root 查找数据root的文件
find /home -size +20M 或-20M 或 20M(大于、小于、等于)
find /home -mtime +10 查找10天前的数据
locate指令:快速定位文件
一般需要安装:yum install -y mlocate
updatedb
locate hello.txt
du -m 文件名:查看文件大小h(G),m(M),k(KB),b(B)
2.5 find指令
匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。
动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。
find 命令中用于时间的参数如下:
-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。
+n:查找比 n 天前更早的文件或目录。
-n:查找在 n 天内更改过属性的文件或目录。
n:查找在 n 天前(指定那一天)更改过属性的文件或目录。
-rw-r--r--. 1 root root 25528 Dec 31 2022 a.txt
drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
1:链接数
root:文件拥有者
root:所属群组
25528:文件大小
May 6 00:14:文件最后被修改的时间
a.txt:文件名
常见的文件类型及其含义有:
d:目录
-:文件
l:链接文件
2.6 grep、 |、xargs、awk
grep命令和管道符 |
grep:过滤查找 -n显示行号 -i忽略大小写
管道符:将前一个命令得处理结果交给后面的指令处理
cat hello.txt | grep -ni yes
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
-v 过滤掉某个文件
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -c number pattern files :显示匹配文本的总行数
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
2,xargs配合grep查找
xargs命令:
1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行
2.将多行输入转换为单行 (特殊功效)
# f是指普通文件
find -type f -name '*.php'|xargs grep 'GroupRecord'
find . -type f -name "*.log" -print0 | xargs -0 rm -f
-print0选项的作用是将文件名以空字符(null character)分隔,而不是默认的空格或换行符
xargs -0 将 \0 作为定界符。
3.awk
awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理
-F:指定分隔符,默认是空格、制表符
awk会根据分隔符将行分成若干个字段,$0为整行,$1为第一个字段,$2 为第2个字段,依此类推…
为打印一个字段或所有字段,使用print命令。这是一个awk动作
2.7 压缩和解压
1、gzip/gunzip:只能压缩成.gz文件(压缩完文件之后,源文件不保留),只能压缩文件,不能压缩目录
gzip 1.txt ,压缩之后为1.txt.gz ,
gunzip 1.txt.gz ,解压之后为1.txt
# 压缩文件
gzip filename
# 解压缩文件
gzip -d filename.gz
或
gunzip filename.gz
# 压缩并保留原文件
gzip -k filename
2、zip/unzip:zip 选项 文件
zip a.zip a.txt :压缩文件
zip -r a.zip a.txt :压缩目录(包含目录里文件),不写-r只会压缩空目录
unzip -d 路径 文件:解压到指定路径(不写-d就解压到当前路径)
3、tar指令:打包指令,可以与其他压缩方式结合使用
-c:创建一个新的归档文件。
-x:从归档文件中提取文件。
-f:指定归档文件的名称。
-v:显示详细信息。
-z:通过 gzip 压缩或解压缩。
-j:通过 bzip2 压缩或解压缩。
-J:通过 xz 压缩或解压缩。
举例:tar -zcvf a.tar.gz 1.txt 2.txt
tar -zcvf a.tar.gz /home
tar -zxvf a.tar.gz -C /opt
2.8 组管理和权限管理
文件有:所有者、所在组、其他组
查看所有者:ls -ahl
修改文件所有者:chown 用户名 文件名
修改文件所在组:chgrp 组名 文件名
改变用户所在组:usermod -g 组名 用户名
改变用户登录初始目录:usermod -d 目录名 用户名


r=4 w=2 x=1
文件类型:-:普通文件;d:目录;l:软连接;c:字符设备(键盘、鼠标);b:块文件(硬盘)
chmod 755 文件名:

2.9 定时任务:crontab
-e 编辑
-l 查询
-r 删除当前用户定时任务
cron表达式占位符说明:共5位
分钟 小时 天 月 星期
特殊符号:
*:通配符
,:代表不连续的时间
-:范围时间
*/n:代表每隔多久执行一次
重启任务调度:service crond restart
2.10 系统运行级别(7种)
3.分区基础知识





-c:列出明细同时,增加汇总值
查询一个目录下文件的个数
ls -l /home | grep "^-" | wc -l
查询一个目录下文件的个数(包括子文件夹)
ls -lr /home | grep "^-" | wc -l
4.网络配置
/etc/sysconfig/network-scripts/ifcfg-eth0


4.1 配置固定ip地址
# 5.修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="f17ed393-95ad-4bdd-ab43-4228af6a64c3"
DEVICE="enp0s3"
ONBOOT="yes"
IPADDR="192.168.56.101"
4.2 进程管理
1、每个执行的程序都叫做一个进程,有一个进程号
2、每个进程都有一个父进程,父进程可以复制多个子进程
3、每个进程都可能以两种方式存在,前台和后台
4、一般系统的服务都是以后台进程的形式存在,一般都常驻在系统中,直到关机才结束
4.2.1 ps指令
查看父进程id: ps -ef
终止进程:kill 【进程号】、killall 【进程名】(可以用通配符)
-9:强制杀死
pstree:数状显示进程信息
-p:显示进程id
-u:显示所属用户


5.服务管理
CentOS7以前关闭防火墙:
进入家目录:cd ~
关闭虚拟机防火墙:
关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
1 关闭防火墙-----service iptables stop
2 启动防火墙-----service iptables start
3 重启防火墙-----service iptables restart
4 查看防火墙状态--service iptables status
5 永久关闭防火墙--chkconfig iptables off
6 永久关闭后启用--chkconfig iptables on
查看linux有哪些服务
查看/etc/init.d/
5.1 服务运行级别
0:关机
1:单用户【可以用来找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用,保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5
修改默认运行级别文件:/etc/inittab/
系统启动时,init进程会读取/etc/inittab/文件
命令:init[0123456]
如何找回密码:切换到单用户模式(不用输入密码),然后修改root用户密码

5.2 chkconfig指令
此命令可以给服务的各个运行级别设置是否自启动
查看服务:chkconfig --list | grep xxx
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
6.进程监控
6.1 top指令
动态监控:top 【选项】
-d:秒数,指定top每几秒更新,默认3秒
-i:不显示任何闲置或者僵死进程
-p:通过指定进程id来监控某个进程的状态
交互操作说明:
P:按CPU使用率排序,默认就是这个
M:按内存使用率排序
N:按PID排序
q:退出top
输入u:然后输入用户名,只查这个用户的进程
输入k:代表要杀死哪个进程id
7.网络服务
7.1 netstat指令
-an:按照一定顺序输出
-p:显示哪个进程在调用
netstat -a:显示所有的网络连接,包括监听中的和非监听中的。
netstat -t:显示所有 TCP 连接。
netstat -u:显示所有 UDP 连接。
netstat -n:以数字形式显示地址和端口号,而不是以名称和服务形式。
netstat -p:显示进程标识符和进程名称。
netstat -r:显示路由表。
netstat -s:显示统计信息,如错误的数据包、传输失败等。
8.RPM和YUM
RPM:一种包的管理标准
查询已经安装的rpm列表:rpm -qa | grep xx
安装:rpm -ivh test.rpm
卸载:rpm -e test
升级:rpm -Uvh test.rpm
卸载rpm包:rpm -e 包名称
强制删除:rpm -e --nodeps 包名称(不推荐)
安装:rpm ivh 包全路径名称
i:installanzh
v:verbos提示
h:hash进度条


yum
是一个shell前端软件包管理器,能从指定服务器自动下载包,并自动处理依赖关系。
yum list | grep xxx
yum install xxx
开放8080端口:vim /etc/sysconfig/iptables
9.shell编程
应用程序 > shell > linux内核 > 硬件
1.脚本以#!/bin/bash开头
2.linux shell变量分为:系统变量和用户自定义变量
系统变量:$HOME $PWD $SHELL $USER等;显示当前所有系统变量:set
3.shell变量的定义
定义变量:变量=值
撤销变量:unset=值
声明静态变量:readonly变量,不能unset
4.定义变量的规则
1、变量名称可以由字母、数组、下划线组成。但不能以数字开头
2、等号两侧不能有空格
3、变量名称一般习惯大写
5.将命令的返回值赋给变量
1、A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
2、A=$(ls -la)等价于反引号
设置环境变量
1.在/etc/profile中定义变量,比如:export TEST=1
2.source /etc/profile 使其生效
多行注释:
:<<!
!
位置参数变量(在脚本中获取命令行的参数)
1.基本语法:
1、$n(n为数字,$0代表命令本身,$1-$9代表第一到九个参数,十以上的参数需要用大括号,如${10})
2、$*(代表命令行所有参数,把所有的参数看成一个整体)
3、$@(也代表命令行所有参数,不过每个参数区别对待)
4、$#(代表所有参数的个数)
预定义变量
$$:当前进程号PID
$!:后台运行的最后一个进程号
$?:最后一次命令执行状态,如果是0则成功,如果非0(自己指定)则失败
运算符
基本语法
1):$((运算式)) 或 $[运算式] RESULT=$(((2+3)*4)) RESULT=$[(2+3)*4]
2):expr m + n (运算符中间要有空格 TEMP=expr `2 + 3`)
3):expr m - n
4):expr *,/,% 乘,除,取余
let命令,可以用于计算,变量前面不用加$,只支持整数运算,用于shell脚本中
举例:
let "A= 1 + 1"
echo "A=$A"
9.1 条件判断
基本语法:
[ condition ] (条件前后有空格,非空返回true)
#!/bin/bash
#判断文件是否存在
if [ -e /root/a.txt ]
then
echo "存在"
fi
常用判断
1.两个整数比较
-lt 小于
-le 小于等于
-eq 等于(=也可以)
-gt 大于
-ge 大于等于
-ne 不等于
例子:[ a -lt b ]
2.字符串比较
=
3.按照文件权限进行判断
-r 有读权限
-w 有写权限
-x 有执行权限
4.按照文件类型判断
-f 文件存在并是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
举例:判断文件是否存在
#!/bin/bash
if [ -f $1 ]
then
echo "存在"
fi
9.2 流程控制
1.if判断:
if [ 条件判断式 ];then
程序
else
程序
fi
或
if [ 条件判断式 ] || [ 条件判断 ]
then
程序
elif [ 条件判断式 ] && [ 条件 ]
then
程序
else
程序
fi
2.case控制
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
in后面有没有空格都行
3.for循环
1.
for 变量 in 值1 值2 值3...
do
程序
done
2.
for((初始值;循环控制条件;变量变化))
do
程序
done
4.while循环
while [ 条件判断式 ]
do
程序
done
5.read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取时等待时间(秒)
参数:
变量:指定读取值的变量名
6.函数
系统函数:
1、basename
功能:返回完整路径最后/的部分,常用于获取文件名
语法:basename[pathname][suffix],带上suffix,就是去掉对应后缀名
2、dirname
功能:返回完整路径最后/的前面部分,常用于获取文件路径
语法:dirname[pathname]
自定义函数:
基本语法:(不写function也行)
[ function ] funname[()]
{
Action;
[return int;]
}
#!/bin/bash
for i in "$*"
do
echo "the num is $i"
done
#################################
for i in "$@"
do
echo "the num is $i"
done
##################################
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM + $i]
done
echo "the num is $SUM"
##################################
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "the num is $SUM"
##################################
read -t 10 -p "请输入一个值NUM=" NUM 一定要有空格
echo "你输入的NUM=$NUM"
#自定义函数,计算两数之和
function getSum(){
SUM=$[$n1 + $n2]
echo "和="$SUM
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2
#调用getSum
getSum $n1 $n2
#!/bin/bash
# 定义一个名为greet的函数
greet() {
echo "Hello, $1!"
}
# 调用函数并传递参数
greet "World"
# 另一个例子,计算两个数的和
add_numbers() {
local sum=$(( $1 + $2 ))
echo "Sum: $sum"
}
# 调用函数并传递参数
add_numbers 5 3
9.3 综合案例
需求分析:
-
每天凌晨2:10备份数据库cb_loan到/data/backup/db。
-
备份开始和结束能给出相应提示信息。
-
备份后文件要以备份时间为文件名,并打包成.tat.gz形式。
-
在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
#!/bin/bash
# 设置数据库名称和备份目录
DB_NAME="cb_loan"
BACKUP_DIR="/data/backup/db"
# 获取当前日期,用于命名备份文件
CURRENT_DATE=$(date +%Y-%m-%d)
# 创建备份文件名
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$CURRENT_DATE.sql"
#如果文件夹路径不存在就创建
if [ ! -d $BACKUP_DIR ];then
mkdir -p /data
else
echo "文件夹已经存在"
fi
# 提示备份开始
echo "Backup of database $DB_NAME started at $(date)"
# 执行数据库备份命令
mysqldump -u root -pYourPassword $DB_NAME > $BACKUP_FILE
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "Database backup successful."
else
echo "Error in database backup."
exit 1
fi
# 打包备份文件为.tar.gz格式
tar -czf ${BACKUP_FILE}.tar.gz $BACKUP_FILE
# 删除原始的.sql备份文件
rm $BACKUP_FILE
# 提示备份结束
echo "Backup of database $DB_NAME completed at $(date)"
# 查找并删除10天前的备份文件
# {} 是 find 命令的一个占位符,代表当前找到的文件名。\; 是 -exec 选项的结束标志
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +10 -exec rm {} \;
(find 路径 -mtime +10 -name "*.tar.gz" | xargs rm -rf;)
echo "Old backups older than 10 days have been deleted."
经典linux指令组合
find ./ -name '*.txt' | xargs -I @ cp @ ./opt
awk -F : '{ print $1 }' /etc/passwd
awk -F ':' 'BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"}' /etc/passwd
#清空10天前的文件内容to
find /path/to/directory -name "*.log" -mtime +10 -exec truncate --size=0 {} \;
10.常用linux指令
# 1.查看linux内核版本
uname -r
# 2.CentOS7查看服务是否开机自启
systemctl list-unit-files | grep firewalld
# 3.设置服务开机自启
systemctl enable firewalld
# 4.查看centos版本
cat /etc/centos-release
# 6.看文件大小
du -m 文件名 h(G),m(M),k(KB),b(B)
# 7.查看磁盘剩余空间
df -h
# 8.查看系统内存使用情况
free -h
11.centos6指令
1、防火墙命令
进入家目录:cd ~
关闭虚拟机防火墙:
关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
1 关闭防火墙-----service iptables stop
2 启动防火墙-----service iptables start
3 重启防火墙-----service iptables restart
4 查看防火墙状态--service iptables status
5 永久关闭防火墙--chkconfig iptables off
6 永久关闭后启用--chkconfig iptables on
linux同步服务器时间
## centOS
## * cn.pool.ntp.org是ntp网络授时组织的中国授时源
yum install -y ntp
ntpdate -u cn.pool.ntp.org
如果想每隔一定时间自动校时,只需将上面的命令加入至Cron就行了:
1 00 12 * * * /sbin/ntpdate -u cn.pool.ntp.org

浙公网安备 33010602011771号