Linux学习笔记

Posted 黄 坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记相关的知识,希望对你有一定的参考价值。

目录

1、Linux基本篇

1、Linux目录结构



2、vi和vim

2.1 基本介绍

所有的linux系统都会内建vi文本编辑器

vim具有程序编辑neglect,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译和错误跳转等方便变成的功能特别丰富,在程序员中被广泛使用。

2.2 常见的三种模式及转换

2.3练习案例

# 1、练习复制、粘贴
进入一般模式 -> 复制几行就选几yy -> 按pp粘贴

# 2、练习删除
进入一般模式 -> 删除几行就选几dd

# 3、查找
进入命令模式 -> 输入/ -> 输入查找内容 ->得到第一个匹配位置 -> 输入n -> 下一个匹配位置

# 4、设置和取消行号
进入命令模式 -> 输入:nu -> 行号显示 -> 输入:nonu ->行号消失

# 5、光标调转到首行或尾行
进入正常模式 -> 输入gg -> 跳转到首行 -> 输入G -> 跳转到尾行

# 6、撤销动作
进入正常模式 -> 输入u -> 刚刚输入的内容被撤销

# 7、跳转到指定行
进入正常模式 -> 输入:set nu(也可以不显示行号) -> 输入想要跳转的行 -> shift + g -> 跳转成功

3、开机、重启、登录、注销

4、用户管理

linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

linux的用户至少要属于一个组

4.1 添加用户

# 添加用户
useradd [-d:指定目录] 用户名

# 指定密码
passwd 用户名

4.2 删除用户

# 只删除用户
userdel 用户名

# 删除用户及目录
userdel -r 用户名

在删除用户时,一般不将目录删除

4.3 查询用户信息

# 查询用户信息
id 用户名

4.4 切换用户

# 切换用户
su 用户名

从权限高的用户切换到权限低的用户,不需要输入密码。反之,则要。

4.5 用户组

# 添加组
groupadd 组名

# 删除组
groupdel 组名

# 添加用户的时候添加组
useradd -g 组名 用户名

# 修改用户的组
usermod -g 新组名 用户名

5、实用指令

5.1 指定运行级别

常用的运行级别是3和5,要修改默认的运行级别可改文件/etc/inittab 的id:5:initdefault:这一行中的数字

# 切换运行级别
init [012356]

5.2 例子:如何找回root密码

思路:进入单用户模式,然后修改root密码


注意:该种方式重置密码必须要到实体机上操作,不能远程操作。

5.3 帮助指令

# 外部命令使用
man

# 内部命令使用
help 

5.4 文件目录类

1、pwd

# 显示当前目录的绝对路径
pwd

2、ls

# 显示当前文件和目录
ls [-a:显示所有] [-l:以列表形式显示]

3、cd

# 回到家目录
cd ~

# 返回上一级
cd ..

4、mkdir

# 创建目录
mkdir 目录名

# 创建多级目录
mkdir -p 目录名

# 删除目录(目录下为空)
rmdir 目录名

# 如果删除非空目录
rm -rf 

5、touch

# 创建文件
touch 文件名1,文件名2...

6、cp

# 拷贝文件
[\\:强制覆盖]cp [-r:递归复制整个文件夹] 原文件 目标目录

7、rm

# 删除文件或目录
rm [-r:递归删除整个文件夹] [-f:强制删除不提示]

8、mv

# 移动文件
mv 文件名路径 文件夹路径

# 重命名
mv 文件名 新文件名

9、cat

# 查看文件内容
cat [-n:显示行号] 文件名

# 分页查看文件内容(按空格查看下一页)
cat 文件名 | more 


10、>和>>

“>” : 输出重定向

“>>” : 追加

# 将列表的内容写入到文件中(覆盖写)
ls -l > 文件

# 将列表的内容写到文件中(追加)
ls -l >> 文件

# 将文件1的内容覆盖到文件2
cat 文件1 > 文件2

# 将内容追加到文件中
echo "内容" >> 文件

11、echo

# 输出内容到控制台
echo "内容"

#例子:输出环境变量
echo $PATH

12、head

# 输出文件前面10行内容(默认查看10条)
head 文件名

# 输出文件的前5行
head -n 5 文件名

13 、tail

# 输出文件后面10行的内容(默认查看10条)
tail 文件名

# 数据文件后面5行
tail -n 5 文件名

# 实时追踪该文档的所有更新
tail -f 文件名

14、ln

软链接也叫符号链接,类似于windows里的快捷方式,主要存放链接其他文件的路径

当我们使用pwd指令查看目录时,仍然看到的是软链接所在的目录

# 创建软连接
ln -s 文件 软链接名

# 删除软链接
rm -rf 软链接名

15、history

# 查看所有执行过的命令
history

# 查看最近使用过的5条命令
history 5

# 执行历史命令中的第5条命令
!5

5.5 时间日期类

1、date

# 显示当前时间
date

# 分别显示当前年月日,时分秒
date "+%Y"
date "+%m"
date "+%d"
date "+%H"
date "+%M"
date "+%S"

# 显示当前时间
date "+%Y年%m月%d %H时%M分%S秒"

# 设置当前系统时间为2018-10-10 11:22:22
date -s "2018-10-10 11:22:22"

2、cal

# 显示当前日历
cal

# 显示2020年日历
cal 2020

5.6 搜索查找类

1、find

find指令将从指定的目录下向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端

# 按文件名查找
find 目录 -name 文件名
例:查找/下后缀为.txt的文件
find / -name *.txt

# 按拥有者来查找
find 目录 -user 用户名

# 按文件的大小来查找
find 目录 -size [+大于 -小于 null等于]指定大小和单位
例:在/下查找大于20M的文件
find / -size +20M

2、locate

#1、安装mlocate
yum install mlocate

#2、创建locate数据库
updatedb

#3、查询
locate 文件名

3、grep指令和“|”

-- 查找文件中配置的值
cat 文件名 | grep [-n:显示行号] [-i:忽略大小写] 查找的值

5.7 压缩和解压缩

1、gzip/gunzip

# 压缩(压缩的文件不保存)
gzip 文件名

# 解压 
gunzip 文件名 

2、zip/unzip

# 压缩
zip [-r:递归压缩,即压缩目录] 压缩后的文件名 压缩目录

# 解压
unzip [-d:指定解压目录] 文件名

3、tar

# 压缩
tar -zcvf 压缩名.tar.gz 压缩文件1,2...

# 解压
tar -zxvf 文件名

# 解压到指定目录(目录要存在)
tar -zxvf 文件名 -C 目录名

5、组管理和权限管理

1、查看文件所有者

# 查看文件所有者
ls -ahl

2、修改文件所有者

# 修改文件所有者(组不会发生变化)
chown 用户名 文件名

3、修改文件所在的组

# 修改文件所在的组
chgrp 组名 文件名

4、修改用户所在的组

# 修改用户所在组
usermod -g 组名 用户名

5、权限基本介绍



6、修改文件或目录的权限

# 举例:
#1、给abc.txt 文件的所有者添加读写的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rw,g=x,o=r abc.txt

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

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

6、磁盘管理

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

# 查询自动目录磁盘使用情况
du -h [-s:指定目录占用大小汇总] [-h:带计量单位] [-as:含文件] [--masx-depth=1:子目录深度] /目录

#统计指定目录下有多少个文件(不包括文件夹中的)
ls -l /home | grep "^-" | wc -l

#统计指定目录下有多少个目录(不包括文件夹中的)
ls -l /home | grep "^d" | wc -l

#统计指定目录下有多少个文件(包括文件夹中的)
ls -lR /home | grep "^-" | wc -l

#统计指定目录下有多少个目录(包括文件夹中的)
ls -lR /home | grep "^d" | wc -l

#以树形显示文件结构
yum instal tree
tree

7、网络配置原理

linux网络环境配置

第一种方式(自动获取): 登录后,通过界面来设置自动获取ip

​ 特点:linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样

第二种方式(指定固定的ip)

​ 说明:直接修改配置文件来指定ip,并可以链接到外网,编辑/etc/sysconfig/network-scripts/ifcfg-eth0

​ 要求:将ip地址配置为静态的,ip地址为192.168.183.130

8、进程管理

1、显示系统执行的进程

# 查看父进程
ps -ef 

# 查看指定进程的父进程
ps -ef | grep 进程名

# 查看进程树
pstree [-p:显示进程的pid] [-u:显示进程的所属用户] 

2、杀进程

# 杀进程
kill [-9:强制进程立即停止] 进程号

# 杀所有的进程(支持通配符)
killall 进程名称
# 案例1 踢掉某个非法登录用户
# 查找到用户的pid
ps -aux | grep 进程名
kill 进程号

# 案例2 终止远程登录服务sshd,在适当的时候再次重启sshd服务
kill 进程号

# 案例3 终止多个gedit编辑器
kill gedit

# 案例4 强制杀掉一个终端
kill -9 进程号

3、服务管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixFuzg6Z-1620961371093)(C:\\Users\\22846\\AppData\\Roaming\\Typora\\typora-user-images\\image-20210508121158391.png)]

# 查看防火墙的状态,关闭防火墙和重启防火墙
service iptables status
service iptables stop
service ipdatbles start
# telnet指令检查linux的某个端口是否在监听,并且可以访问
telnet ip 端口
# 查看有哪些服务可用
ls -l /etc/init.d/

4、运行级别的开启和关闭

#通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
#查看服务
chkconfig --list | grep 服务名
chkconfig 服务名 --list

#设置开启或关闭
chkconfig --level 5 服务名  on/off
# 应用案例
#1 请显示当前系统所有服务的各个运行级别
chkconfig --list

#2 请查看sshd服务的运行状态
service sshd status

#3 将sshd服务在运行级别5下设置为不自动启动,看看有什么效果
chkconfig --level 5 sshd no

#4 当运行级别为5时,关闭防火墙
chkconfig --level 5 iptables off

#5 在所有的运行级别下,关闭防火墙
chkconfig iptables off

#6 在所有的运行级别下,开启防火墙
chkconfig iptables on

5、动态监控

1、查看系统状态


#举例
# 1、监视特定用户
输入top -> 按u ,输入用户名

# 2、终止指定的进程
输入top -> 按k ,输入进程号

# 3、指定系统状态更新时间(每隔10秒自动更新,默认是3秒)
top -d 10

2、查看网络状态

netstat [-an:按一定顺序排列输出] [-p:显示哪个进程在调用]
# 查看系统所有的网络信息
netstat -anp | more

# 查看服务名为sshd的服务的信息
netstat -anp | grep sshd

9、rpm 和yum

1、rpm

# 查询已经安装的rpm列表
rpm -qa | grep xx 
# 卸载rpm包
rpm -e xxx

# 安装rpm包
rpm -rvh

2、yum

# 查看软件列表
yum list

# 安装指定的yum包
yum install xx

10、shell编程

1、hello world

# 创建一个shell脚本,输出hello world!
vim myShell.sh

# myShell.sh中放入下面内容
#!/bin/bash

# 在执行之前要加权限
chmod 744 myShell.sh

# 两种方式执行(绝对路径和相对路径)
./myShell.sh
/opt/myShell.sh

# 也可以不加执行权限,但是要加sh才能执行
sh ./myShell.sh
sh /opt/myShell.sh

2、shell变量的介绍

shell中的变量可以分为:系统变量和用户自定义变量

系统变量: H O M E 、 HOME 、 HOMEPWD 、 S H E L L 、 SHELL 、 SHELLUSER

echo "PATH=$PATH"
echo "user=$USER"

自定义变量:

(1) 定义变量 :变量 = 值

(2) 撤销变量 : unset 变量

(3) 声明静态变量 : readonly 变量,注意;不能unset

3、定义变量的规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头

(2)等号两侧不能用空格

(3)变量名称一般习惯为大写

将命令的返回值赋给变量

A=`ls -la` 反引号,运行里面的命令,并把结构返回给变量A
A=$(ls -la)等价于反引号

4、设置环境变量

4.1 基本语法

export 变量名=变量值(将shell变量输出为环境变量)

source 配置文件(让修改后的配置信息立即生效)

echo $变量名 (查询环境变量的值)

4.2 多行注释

5、 位置参数变量

6、 预定义变量


7、 运算符的使用

# 计算(2+3)* 4的值
$(((2+3)*4))

$[(2+3)*4]

TEMP=`expr 2 + 3`
RESULT `expr $TEMP \\* 4`
echo "result=$RESULT"

# 请求出命令行的两个参数[整数]的和
SUM=$[$1+$2]
echo "SUM=$SUM"

8、 if-else

# 案例1 "ok" 是否为"ok"
if [ "ok" = "ok"]
then 
	echo "equal"
fi

# 案例2 23是否大于22
if [ 23 -gt 22]
then 
	echo "大于",
fi

# 案例3 、/root/shell/aaa.txt目录中的文件是否存在
if [ -e /root/shell/aaa.txt ]
then
	echo "存在"
fi

9、for

第一种方式:

for 变量 in 值1 值2 值3

do

​ 程序

done

# 打印命令行输入的参数
for i in "$*"
do
	echo "the num is $i"
done

第二种方式

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

do

​ 程序

done

# 从1加到100的值输出显示
SUM=0
for ((i=1;i<=100;i++))
do
	SUM = $[$SUM+$i]
done
echo "sum=$SUM"

10、while

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

11、read读取控制台的输入

# 读取控制台输入的num值
read -p "请输入值:" NUM1
echo "您输入的值是num1=$NUM1"

# 读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入值:" NUM1
echo "您输入的值是num1=$NUM1"

12、函数

12.1 basename

12.2 dirname

12.3 自定义函数

# 计算两个参数的和(read),getSum
function getSum()
	SUM=$[$n1+$n2]
	echo "和是$SUM"


# 调用方式
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2
getSum $n1 $n2

11、综合案例


然后执行定时任务

crontab -e

10 2 * * * /usr/sbin/mysql_db_backup.sh

以上是关于Linux学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Kali学习笔记5:TCPDUMP详细使用方法

Linux第二周学习笔记

Linux学习笔记组管理和权限管理

Linux学习笔记组管理和权限管理

Linux第二周学习笔记(12)

Linux学习笔记:sed