Linux学习笔记

Linux

课程大纲

课程链接:【小白入门 通俗易懂】韩顺平 一周学会Linux_哔哩哔哩_bilibili

P3-P85 Linux基础篇

P86-P90 Java定制篇

P91-P107 大数据shell篇

P108-P115 python定制篇

P117-P141 Linux高级篇

P142-P153 面试题

Vi和Vim编辑器

vi和vim各个模式的切换

命令模式 -> 一般/正常模式 vim xxx

一般/正常模式 -> 编辑模式 i 或 a

编辑模式 -> 一般/正常模式 ESC

一般/正常模式 -> 命令模式 : 或 /

命令模式 -> 一般/正常模式 ESC

命令模式 -> 退出 在命令行下 :wq(保存退出) :q(退出) :q!(强制退出)
在这里插入图片描述

常用快捷键

  1. 拷贝当前行 , yy , 拷贝当前行向下的 5 行 5yy,并粘贴(输入 p)。

  2. 删除当前行 dd , 删除当前行向下的 5 行 5dd

  3. 在文件中查找某个单词 [命令行下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ]

  4. 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]

  5. 编辑 /etc/profile 文件,在一般模式下, 使用快捷键到该文档的最末行[G]和最首行[gg]

  6. 在一个文件中输入 “hello” ,在一般模式下, 然后又撤销这个动作 u

  7. 编辑 /etc/profile 文件,在一般模式下, 并将光标移动到 , 输入 20,再输入 shift+g

开机、重启和用户登录注销

关机、重启指令

把内存的数据同步到磁盘 sync

立该进行关机 shutdown –h now halt

1分钟后关机 shutdown –h 1

现在重新启动计算机 shutdown –r now reboot

  1. 不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中

  2. 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync

普通用户切换为管理员身份 su - root

注销用户,注:在图形运行级别无效,在运行级别 3 下有效 logout

修改用户密码 passwd 用户名

用户管理

添加用户 useradd 用户名

指定/修改密码 passwd 用户名

删除用户但是要保留家目录 userdel 用户名

删除用户以及用户主目录 userdel -r 用户名

查询用户信息 id 用户名

实用指令

指定运行级别

运行级别说明:

0 :关机

1 :单用户【找回丢失密码】

2:多用户状态没有网络服务

3:多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统重启

常用级别:3、5

命令 init 5

查看默认运行级别 systemctl get-default

指定运行级别为多用户 systemctl set-default multi-user.target

指定运行级别为图形界面 systemctl set-default graphical.target

开机流程示意图:

在这里插入图片描述

文件目录类

创建一个目录 mkdir /home/dog

创建多级目录 mkdir -p /home/animal/tiger

删除空目录 rmdir /home/dog

删除非空目录 rm -rf /home/animal

创建空文件 touch hello.txt

  • -r :递归复制整个文件夹

复制文件 cp hello.txt /home/bbb

复制整个文件夹 cp -r /home/bbb /opt

强制覆盖不提示复制文件夹 \cp -r /home/bbb /opt

  • -r :递归删除整个文件夹
  • -f : 强制删除不提示

删除文件 rm /home/hello.txt

删除整个文件夹且不带提示 rm -rf /home/bbb

重命名 mv oldNameFile newNameFile

移动文件 mv /temp/movefile /targetFolder

  • -n :显示行号

显示文件内容及行号 cat -n /etc/profile

显示文件内容[管道命令] cat -n /etc/profile | more

在这里插入图片描述

less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率

查看文件 less /opt/杂文.txt

获取主机名 echo $HOSTNAME

显示文件的开头部分内容(默认前10行) head /etc/profile

显示文件开头5行内容 head -n 5 /etc/profile

显示文件最后部分内容(默认后10行) tail /etc/profile

显示文件最后5行内容 tail -n 5 /etc/profile

实时监控文件变化 tail -f /home/mydate.txt

将 /home 目录下的文件列表 写入到 /home/info.txt 中, 覆盖写入[如果 info.txt 没有,则会创建]

ls -l /home > /home/info.txt

将当前日历信息追加到 /home/mycal 文件中 cal >> /home/mycal

给原文件创建一个软链接 ln -s /root /home/myroot

删除软连接 rm /home/myroot

显示所有的历史命令 history

显示最近使用过的 10 个指令 history 10

执行历史编号为 5 的指令 !5

时间日期类

date 指令

基本语法

  1. date (功能描述:显示当前时间)

  2. date +%Y(功能描述:显示当前年份)

  3. date +%m(功能描述:显示当前月份)

  4. date +%d (功能描述:显示当前是哪一天)

  5. date "+%Y-%m-%d %H:%M:%S"(功能描述:显示年月日时分秒)

设置系统当前时间 date -s "2020-11-03 20:02:10"

cal 指令

显示当月日历 cal

显示某年日历 cal 年份

搜索查找类

find 指令
在这里插入图片描述

按文件名查找 find / Hello.java

按拥有者查找 find /opt -user nobody

按文件大小查找 find / -size +200M 单位:k,M,G

以人类可读的方式显示当前目录中的文件和目录大小 ls -lh

locate 指令

locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速

定位给定的文件。

  1. 创建 locate 数据库 updatedb
  2. 快速定位文件所在目录 locate Hello.java

which 指令

可以查看某个指令在哪个目录下

查看 ls 指令在哪个目录 which ls

grep 指令

  • -n:显示匹配行及行号
  • -i:忽略字母大小写

在 hello.txt 文件中,查找 “yes” 所在行

不显示行号 cat /home/hello.txt | grep "yes"

显示行号

cat /home/hello.txt | grep -n "yes"

grep -n "yes" /home/hello.txt

压缩解压类

gzip/gunzip 指令

gzip 用于压缩文件, gunzip 用于解压 (原文件不存在)

gzip 压缩 gzip /home/hello.txt

gunzip 解压缩 gunzip /home/hello.txt.gz

zip/unzip 指令

zip 用于压缩文件, unzip 用于解压,常用于项目打包发布 (原文件存在)

zip:

  • -r:递归压缩,即压缩目录

压缩文件/文件夹 zip -r myhome.zip /home/

unzip

  • -d<目录> :指定解压后文件的存放目录

解压缩到指定目录 mkdir /opt/tmp unzip -d /opt/tmp /home/myhome.zip

tar 指令

tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件
在这里插入图片描述

压缩文件夹 tar -zcvf myhome.tar.gz /home/

压缩多个文件 tar -zcvf pc.tar.gz /home/temp/pig.txt /home/temp/cat.txt

解压到当前目录 tar -zxvf pc.tar.gz

解压到指定目录 tar -zxvf /home/myhome.tar.gz -C /opt/tmp2

组管理和权限管理

组管理

查看文件的所有者 ls –ahl

修改文件所有者 chown tom hello.txt

创建组 monster groupadd monster

删除组 groupdel 组名

将用户放入该组 useradd -g monster fox

修改文件/目录所在组 chgrp fruit orange.txt

改变用户所在组

usermod –g 新组名 用户名

usermod –d 目录名 用户名 改变该用户登录的初始目录 **特别说明:**用户需要又进入新目录的权限

权限管理

权限的基本介绍

ls -l 中显示的内容如下:

-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

0-9 位说明

第 0 位确定文件类型(d, - , l , c , b)

l 是链接,相当于 windows 的快捷方式

d 是目录,相当于 windows 的文件夹

c 是字符设备文件,鼠标,键盘

b 是块设备,比如硬盘

第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限。—User

第 4-6 位确定所属组(同用户组的)拥有该文件的权限,—Group

第 7-9 位确定其他用户拥有该文件的权限 —Other

rwx 作用到文件

  1. [ r ]代表可读(read): 可以读取,查看

  2. [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.

  3. [ x ]代表可执行(execute):可以被执行

rwx 作用到目录

  1. [ r ]代表可读(read): 可以读取,ls 查看目录内容

  2. [ w ]代表可写(write): 可以修改, 对目录内创建+删除+重命名目录

  3. [ x ]代表可执行(execute):可以进入该目录

可用数字表示为: r=4,w=2,x=1 因此 rwx=4+2+1=7 , 数字可以进行组合

1文件:硬连接数 或 目录:子目录数
root用户
root
1213文件大小(字节),如果是文件夹,显示 4096 字节
Feb 2 09:39最后修改日期
abc文件名

修改权限

  1. 通过 + 、-、= 变更权限

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)

  1. 给 abc 文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。 chmod u=rwx,g=rx,o=rx abc

  2. 给 abc 文件的所有者除去执行的权限,增加组写的权限chmod u-x,g+w abc

  3. 给 abc 文件的所有用户添加读的权限 chmod a+r abc

  1. 通过数字变更权限

r=4,w=2,x=1 -> 1=x,2=w,3=wx,4=r,5=rx,6=rw,7=rwx

将文件权限修改为 rWxr-xr-chmod 755 /home/temp/pig.txt

定时任务调度

crond 任务调度

-e编辑crontab定时任务
-l查询crontab任务
-r删除当前用户所有的crontab任务

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Linux 磁盘分区、挂载

查询系统整体磁盘使用情况 df -h

统计/opt 文件夹下文件的个数 ls -l /opt | grep "^-" | wc -l

统计/opt 文件夹下目录的个数 ls -l /opt | grep "^d" | wc -l

统计/opt 文件夹下文件的个数,包括子文件夹里的 ls -lR /opt | grep "^-" | wc -l

统计/opt 文件夹下目录的个数,包括子文件夹里的 ls -lR /opt | grep "^d" | wc -l

以树状显示目录结构 tree 目录

  1. 安装tree yum install tree
  2. 以树状显示目录结构 tree /home/

进程管理

  • -e 显示所有进程
  • -f 全格式

以全格式显示当前所有的进程 ps -ef|grep sshd

信息详解:

  • UID:用户 ID

  • PID:进程 ID

  • PPID:父进程 ID

  • C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表

  • 明进程是 I/O 密集型运算,执行优先级会提高

  • STIME:进程启动的时间

  • TTY:完整的终端名称

  • TIME:CPU 时间

  • CMD:启动进程所用的命令和参数

  • -9 :表示强迫进程立即停止

通过进程号杀死/终止进程 kill [选项] 进程号

通过进程名称杀死进程,也支持通配符 killall 进程名称

以树状的形式显示进程的 pid pstree -p

以树状的形式进程的用户 pstree -u

使用 service 指令,查看,关闭,启动 network [

service network status

service network stop

service network start

查看服务名 setup 输入tab可切换至"确定"、“取消”

在这里插入图片描述

查看服务 chkconfig --list

通过 chkconfig 命令可以给服务的各个运行级别设置自 启动/关闭

把 network 在 3 运行级别,关闭/开启自启动

chkconfig --level 3 network off

chkconfig --level 3 network on

systemctl 管理指令

基本语法: systemctl [start | stop | restart | status] 服务名

查看服务开机启动状态, grep 可以进行过滤 systemctl list-unit-files [ | grep 服务名]

设置服务开机启动 systemctl enable 服务名

关闭服务开机启动 systemctl disable 服务名

查询某个服务是否是自启动的 systemctl is-enabled 服务名

  1. 打开端口: firewall-cmd --permanent --add-port=端口号/协议
  1. 关闭端口: firewall-cmd --permanent --remove-port=端口号/协议

  2. 打开/关闭后重新载入,才能生效 : firewall-cmd --reload

  3. 查询端口是否开放: firewall-cmd --query-port=端口/协议

动态监控进程

top 与 ps 命令很相似。它们都用来显示正在执行的进程。

Top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的的进程
在这里插入图片描述

在这里插入图片描述

监控 tom 用户

  1. 输入 top 查看执行的进程
  2. 输入 u 再输入用户名,即可

结束 tom 登录

  1. 监控tom用户
  2. 输入k,再输入要结束的进程 ID 号
  3. 输入 9 强制执行

RPM 与 YUM

查询已安装的 rpm 列表 rpm -qa|grep firefox

Shell 编程

创建一个 Shell 脚本,输出 hello world!

vim hello.sh
#!/bin/bash
echo "hello,world~"

脚本的常用执行方式

  1. 使用 sh hello.sh 运行脚本
  2. 输入脚本的绝对路径或相对路径

​ 首先使用命令 ll 查看文件是否有x权限。若无,则使用 chmod u+x hello.sh 增加

​ 使用相对路径 ./hello.sh 或绝对路径 /home/temp/hello.sh 运行脚本

脚本变量

#!/bin/bash
#案例1:定义变量A
A=100
echo A=$A
#案例2:撤销变量A
unset A
echo "A=$A"
#案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"
#unset B
#将指令返回的结果赋给变量
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"

位置参数变量

$*把所有的参数看成一个整体

$@把每个参数区分对待

#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"

运行脚本 sh position.sh 100 200

显示结果

0=position.sh 1=100 2=200
所有的参数=100 200
100 200
参数的个数=2

预定义变量

#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取他的进程号
/root/shcode/hello.sh &
echo "最后一次后台方式执行的进程 id=$!"
echo "执行的结果=$?"

运算符

  1. “$((运算式))”或“$[运算式]”或者 expr m + n //expression 表达式

  2. 注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 ``

  3. expr m - n

  4. expr *, /, %

乘,除,取余

#!/bin/bash
#案例1:计算(2+3)X4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "res1=$RES1"
#使用第二种方式,推荐使用
RES2=$[(2+3)*4]
echo "res2=$RES2"
#使用第三种方式expr
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res4=$RES4"
#案例2:请求出命令行的两个参数[整数]的和20 50
SUM=$[$1+$2]
echo "sum=$SUM"

XShell在vim编辑器中无法使用小键盘的解决方法_xshell vim中无法编辑-CSDN博客

条件判断

常用判断条件

  1. = 字符串比较

  2. 两个整数的比较

-lt 小于

-le 小于等于 little equal

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

  1. 按照文件权限进行判断

-r 有读的权限

-w 有写的权限

-x 有执行的权限

  1. 按照文件类型进行判断

-f 文件存在并且是一个常规的文件

-e 文件存在

-d 文件存在并是一个目录

#!/bin/bash
#案例1:"ok"是否等于"ok"
#判断语句:使用 =
if [ "ok" = "ok"  ]
then
	echo "equal"
fi
#案例2:23是否大于等于22
#判断语句:使用 -ge
if [ 23 -ge 22 ]
then
	echo "大于"
fi
#案例3:/root/shcode/aaa.txt 目录中的文件是否存在
#判断语句: 使用 -f 
if [ -f /home/shcode/ifdemo.sh ]
then
	echo "存在"
fi

if [ xyz ]
then 
	echo "xyz"
fi

流程控制

  1. if 判断
#!/bin/bash
#如果输入的参数,大于等于 60,则输出 "及格了",如果小于 60,则输出 "不及格"
if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then
	echo "不及格"
fi
  1. case 语句
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac
  1. for 循环

基本语法 1

for 变量 in 值 1 值 2 值 3…

do

程序/代码

done
#!/bin/bash
#案例1:打印命令行输入的参数【这里可以看出$*和$@的区别】
#注意$*是把输入的参数,当做一个整体,所以,只会输出一句
for i in "$*"
do
	echo "num is $i"
done
echo "============================="
#使用$@来获取输入的参数,注意,这时是分别对待
for j in "$@"
do
	echo "num is $j"
done

基本语法 2

for (( 初始值;循环控制条件;变量变化 ))

do

程序/代码

done
SUM=0
for(( i=1;i<=$1;i++ ))
do
	SUM=$[ $SUM+$i ]
done
echo "SUM=$SUM"

while 循环

#!/bin/bash
#命令行输入一个数n,统计从1+..+n的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "执行结果SUM=$SUM"

read 读取控制台输入

选项:

  • -p:指定读取值时的提示符;

  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

#!/bin/bash
#读取控制台输入一个NUM1值
read -p "请输入一个数 NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10秒内输入。
read -t 10 -p "请10s内输入一个数 NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

函数

  1. 系统函数

basename 基本语法

功能:返回完整路径最后 / 的部分,常用于获取文件名

basename [pathname] [suffix]

basename [string] [suffix]

(功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

选项:

suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

  1. 自定义函数

基本语法

[ function ] funname[()]

{

Action;

[return int;]

}

调用直接写函数名:funname [值]

#!/bin/bash
#计算输入两个参数的和(动态的获取), getSum
#定义函数 getSum
function getSum(){
	SUM=$[$1+$2]
	echo "SUM=$SUM"
}

#输入两个值
read -p "请输入一个数 n1=" n1
read -p "请输入一个数 n2=" n2
#调用自定义函数
getSum $1 $2

Shell 编程综合案例

  1. 每天凌晨 2:30 备份 数据库 hspedu 到 /data/backup/db

  2. 备份开始和备份结束能够给出相应的提示信息

  3. 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2021-03-12_230201.tar.gz

  4. 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。

/home/temp/mysql_db_backup.sh

#!/bin/bash
#备份目录
BACKUP=/home/temp/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#备份的数据库名
DATABASE=mydatabase

#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}

#删除10 天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf{} \;
echo "备份数据库${DATABASE}成功~"

设置定时任务 crontab -e

30 2 * * * /home/temp/mysql_db_backup.sh
  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值