关于Linux的基础总结
前言
这学期学习了Linux课程,对Linux的常用命令写个总结。
一、为什么Linux如此流行?
1.原因
作为目前世界上最受欢迎的系统,近乎世界超级计算机Top10中全是Linux系统的身影。
Linux流行的背后,原因是什么呢?:
1、Linux稳定且有效率。
2、Linux开源且免费,有强大的社区支持。
3、Linux拥有更加安全的用户与文件权限策略。
4、Linux易于维护,拥有超强的定制性
当然,个人认为,Linux流行的关键原因在于开源且免费,强大的社区支持。
2.Linux系统的版本
Linux的发行版本有很多,主要流行的如下:
1.Red Hat Linux
2.CentOs,与RedHat企业版完全兼容
3、Ubuntu、Debian、Kali
4、国内的OpenEuler、OpenAnolis
二、Linux的基础命令
1.目录结构
Linux的目录结构如上,/etc存放着系统配置文件的目录,/home是除root外的其它用户的目录,/dev存放设备文件,dev存放设备文件,boot存启动文件,tmp是临时目录,usr存放库文件,文档,命令,用户数据等,var存放变化的文件,如日志文件等,
目录名 | 解析 |
---|---|
bin | 存放普通用户可执行命令 |
etc | 系统的配置文件 |
root | 超级用户目录 |
dev | 系统的一些设备文件,驱动等 |
boot | 系统的启动文件 |
tmp | 临时文件存放目录 |
usr | 存放用户的应用程序和文件 |
var | 存放一些变化的文件,如程序日志等 |
home | 普通用户的目录 |
run | 存放进程产生的临时文件 |
mnt | 临时的挂载文件系统 |
sbin | 存放系统管理员才能执行的命令 |
2.文件命令
1.ls
列出该目录下的子目录与文件,常用参数:
-a 以.开头的隐藏项目也列出
-l 列出目录的详细信息,可直接使用ll
2.pwd
显示当前所处目录
3.cd
切换工作的目录,可使用相对路径与绝对路径,相对路径切换多个目录可以使用../..这种格式
4.touch、mkdir
touch是不存在文件则创建文件,存在则修改文件时间。
mkdir是创建目录
5.cat、tail、head、tail、od、tee、more、less
- cat 直接输出文件的全部内容
- head 输出文件开头的内容、-n 指定行数
- tail 输出文件末尾的内容,-n输出尾n行
- more 按页显示文本文件内容,只允许向前浏览
- less 与more类似,允许向前向后浏览
- tee 将文件的输出复制到另一个文件
od 将文件内容以指定的禁止显示,-t指定进制
6.rm、cp、mv
- rm删除某个文件,常用rm -r 用于删除目录
- cp复制文件,-r可以复制目录
mv移动文件
7.find、grep、xargs
- find 搜索文件命令,可通过通配符搜索某个文件
- grep,以正则表达式进程全局查找匹配行
命令传递参数的过滤器,可将管道或标准输入数据转换成命令行参数,也可从文件中读取数据
三者合一、可用于搜索文件的内容8.tar、zip、uzip、gzip
1.tar将文件打包或压缩或解包,压缩文件后缀有gz、bz、xz,常用参数 -c产生.tar打包文件,-x解包、-zjJ分别以gz、bz2、xz打包或解包文件。
2.zip将文件打包,常用-r递归打包目录
3.uzip将文件解包
4.gzip压缩命令,只能压缩文件,不能压缩目录9.ln
创建软或硬连接,可以理解为相当于创建快捷方式,硬连接的链接文件和被链接文件必须在同一目录且不能建立指向目录的硬连接,链接的源文件消失,链接即失效。常用参数:-s 创建符号链接即软连接,-P,创建直接指向符号链接的硬链接,-f删除已存在的目标文件。
10.lsattr和chattr
chattr 与 lsattr 分别用于改变和显示文件属性,与 chmod 命令相比,chmod 只改变文件的读写、执行权限,更底层的属性控制是由 chattr 来改变。
chattr主要常用的参数有:-R 递归改变指定目录下的文件属性,+在原有的参数设定基础上、追加参数,-在原有的参数设定基础上、移除参数。
lsattr常用参数:-R 递归显示目录和文件属性、-a 显示所有隐藏文件属性、
chattr可以改变的文件属性有:
属性 | 含义 |
---|---|
a | 只允许向文件追加数据,不允许删除和修改文件内容。如果目录有具有这个属性,系统将只允许在目录下简历和修改文件,不允许删除任何文件。只有root才能设置该属性 |
c | 自动将文件压缩,在读取时自动解压缩 |
d | 在进行文件系统备份时,dump指令忽略此文件 |
e | 在ext文件系统中,表示该文件使用区段(extents)映射磁盘上的块 |
i | 不允许对文件进行任何的修改。对于目录而言,只能修改目录之下的文件,不允许建立和删除文件。只有root能设置此属性 |
j | 设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效 |
s | 系统在删除文件时,使用0填充文件所在的区域 |
t | 文件拥有t属性时,与其它文件合并时末端不会存在局部块碎片 |
u | 与s相反,删除文件时,文件内容其实还存在磁盘中,以便以后能够恢复删除的文件 |
A | 不能修改文件的最后访问时间 |
D | 如果一个目录设置了D属性,任何改变将同步到磁盘;这等价于mount命令中的dirsync选项,同步目录 |
S | Sync,一旦应用程序对文件执行了写操作,则立刻将改动同步到磁盘 |
T | 目录设置T属性,Orlov块分配器将该目录视为目录层次结构的顶部,提示块分配器该目录下的子目录是无关的,将被分散的分配 |
11.Linux重定向与管道
linux执行命令行即shell命令时会有三种标准文件:
- 标准输入文件即0,使用<或<<
- 标准输出文件即代码1,使用>或>>
- 标准错误输出文件即代码2,使用2>或2>>
注:双符号表示追加
管道:
- | 将上一次的输出作为下一次的输入
- || 当左边命令为假,右边命令才会执行
- & 表示任务在后台执行
- &&前一条命令执行成功才会执行后门的命令
- ;隔开命令,从左到右执行
3.Vim编辑器
一个强大的文本编辑器,常用的操作如下
命令 | 操作 |
---|---|
k/j | 向上或下查找 |
gg | 移动到文件的第一行 |
G | 移动到文件的最后一行 |
/word | 搜索某个字符串,n表示到下一个 |
n | 光标向下移动n行 |
0或$ | 移动到当前行首字符或尾字符 |
dd/ggdG | 删除当前行,ndd表示连续删除后n行,ggdG表示删除全部 |
yy | 复制当前行,nyy表示复制下面n行 |
p/P | 将复制内容在下一行粘贴上/在上一行粘贴上 |
u | 还原上一次操作 |
ctrl+r | 重复上一次动作 |
i | 光标前插入文本 |
x | 删除光标字符 |
R+word | 连续替换多个字符 |
:%s/old/new/g | 有$替换整个文档的内容,无%替换该行全部,去掉g表示替换首个 |
set number | 显示行数 |
vim编辑器异常退出会产生.swp临时文件,需要删除掉
4.关于Linux用户
linux的用户账号的基本信息主要存放在/etc/passwd中,存放方式为
字段1:用户帐号的名称(euler)
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号(用户ID,1000)
字段4:所属基本组帐号的GID号(组ID,1000)
字段5:用户全名(euler)
字段6:宿主目录(/home/euler)
字段7:登录Shell信息(/bin/bash)
一般密码文件存放在/etc/shadow中,进行了hash加密
组账号信息一般存放在/etc/group中,存放形式为
字段1:组名。
字段2:组密码:组密码,用x占位。
字段3:组标识符:简称GID,唯一标识一个组。
字段4:组内用户列表:属于这个组的所有用户的列表
其中上两张图的0都表示超级用户或超级用户所在组。
1.添加删除用户/组
- useradd:添加用户
- usedel:删除用户,常用-r删除用户和主目录
- usermod:将用户添加到某个组
- groupadd:增加某个组
- groupdel:删除某个组
注:以上操作皆要通过root用户完成。
2.关于文件权限(chmod、chown)
- r 表示读权限,数字4
- w 表示写权限,数字2
- x 表示执行权限,数字1
图中-rw-r--r--的解析:
- -表示普通文件
- rw-表示文件拥有者权限
- r-- 表示文件所属组成员权限
- r--表示其它用户的权限
权限赋予命令:chmod
- 可通过数字直接赋予 chmod 数字 文件名
可通过对用户权限直接赋予 chmod u/g/o/a +/- /r/w/x 文件名
字母 解析 u 所有者 g 组成员 o 其他成员 a 所有人
更改文件和目录所有者和所属组:chown 需要root用户执行,命令格式:
chown [-R] user
5.进程与系统管理
1.进程管理
一般linux启动一个进程后,会在proc/PID创建一个文件夹,用于进程的管理
- 常用查看进程的命令,ps aux,a表示显示所有进程,u表示面向用户格式,x表示显示后台进程信息。
字符 | 解析 |
---|---|
USER | 表示进程所属用户 |
PID | 进程唯一标识号 |
%CPU | CPU的占用率 |
%MEM | 内存的占用率 |
VSZ | 虚拟内容的占用大小 |
RSS | 实际内存占用大小 |
TTY | 终端类型 |
Stat | 进程状态 |
START | 进程启动时刻 |
TIME | 进程运行时长 |
- top或者htop命令也可用于查看进程的情况,会每隔一段时间进行更新,htop要相对简单一些
- 终止进程命令:kill PID即可终止进程,-9参数表示强制终止
- 命令行终止:Ctrl+C与Ctrl+Z,区别在于前者是中断正在执行的命令,后者是将进程挂起,调入后台并停止执行,可通过jobs命令查看后台,或直接fg +序号将后台终止进程恢复
2.定时任务
一般linux的定时任务都会存放在/etc/crontab中,不同的系统会有微笑的不同,日、月、小时任务都分别有不同的文件夹,如cron.daily、cron.hourly等
- linux可通过crontab设置定时任务,常用参数-e 设置任务,-l 查看任务计划
设置任务的时间格式为:
分钟 小时 日期 月份 星期 命令
![在这里插入图片描述](http://www.aiwin.fun/usr/uploads/2024/01/3243682666.png)表示周一到周五的早上6点输出wakeup,* *代表通配符,表示该范围的任意时间。
3.一些其它命令
- free 查看内存使用情况
- df 查看磁盘使用情况
- du 显示指定目录或文件所占用的磁盘空间
- alias 设置别名,支队当前中断生效,要永久使用,需要写入到~/.bashrc中并保存,然后执行 source ~/.bashrc
4.关于环境变量
linux系统与windows系统一样,根据环境变量去寻找命令的执行命令,一直往下找,找不到即报错,找到即执行。
linux的环境变量以:为分割符,可以知道我们命令执行的诸如ls等命令都在/usr/bin目录中,在/usr/bin目录找到原文件进而进行命令行的命令执行。
关于环境变量的设置:利用命令export在原有环境变量上:目录即可,同样要永久生效,需要写入~/.bashrc中
5.Linux防火墙(ufw、iptables)
不同的linux系统一般会使用不同的防火墙工具,如Openeuler/centos会使用firewalld、ubuntu使用ufw等,也可以直接使用iptables进行规则的配置,iptables配置要较为复杂,一般执行有关防火墙的操作都需要sudo权限。
ufw常用命令如下:
命令 | 解析 |
---|---|
ufw status | 查看防火墙状态 |
ufw enable | 开启ufw防火墙 |
ufw disable | 关闭ufw防火墙 |
ufw default allow | 默认通过 |
ufw allow port | 允许某个端口 |
ufw deny port | 拒绝某个端口 |
ufw allow from IP | 允许某个IP地址访问本机全部端口 |
ufw delete allow port | 删除一条规则 |
ufw allow from IP to any port PORT | 允许特定的IP/端口组合 |
关于iptables:
iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机,一般来说,会一层一层的匹配,若上免的规则明确表示阻止或通过,则不会再匹配下面的规则,配置一般采用先精细后粗犷的规则。
iptables包含了四表五链,分别是:
Filter表:过滤数据包
NAT表:用于网络地址转换(IP、端口)
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表:决定数据包是否被状态跟踪机制处理INPUT链 :处理输入数据包。
OUTPUT链 :处理输出数据包。 FORWARD链 :处理转发数据包。PREROUTING链 :用于目标地址转换(DNAT)。 POSTOUTING链 :用于源地址转换(SNAT)。
不同的链路存放着用户设置的规则,这些规则根据功能不同被存放到不同的表中,会按照表的优先级取出对应的规则,进行匹配,表的优先级是 raw->mangle->nat->filter。
各链对应的表如下:
链名 | 表名 |
---|---|
PREROUTING | rao、mangle、nat |
FORWARD | mangle、filter |
INPUT | manle、filter |
OUPUT | raw、mangle、nat、filter |
POSTROUTING | mangle、nat |
一般数据库进入网卡的处理流程 :
1、首先匹配PREROUTING链,系统根据数据包的目的地址判断接下来的数据过程,可能有三种情况:
(1)数据包目的地址是本机,发往INPUT链,匹配INPUT链规则,通过则发给相应本地处理,没有则丢弃。
(2)数据包目的地址不是本机,包被发往FORWARD链,匹配规则,通过则发往相应本地处理,没有则丢弃。
(3)数据包是本地产生的,则发往OUPUT链,匹配OUPUT链的规则,通过则发往相应本地处理,没有则丢弃。
iptables常用命令:
- iptables -A INPUT -p tcp --dport 80 -j ACCPET 追加规则开放80或某端口
- iptables -I INPUT -p icmp -j ACCEPT 根据协议插入一条记录
- iptables -D INPUT number 删除INPUT链中第number条记录
- iptables --list 查看所有规则
- iptables -nL -t 表名 查看某个表名的规则
iptables中包含了可以查看ufw防火墙设置的规则信息。
6.一些基本的系统信息、日志查询
- last:查看用户最近登录信息,主要存放在/var/log/wtmp|btmp|utmp中,wtmp存储登录成功信息、btml存储登录失败
- lastb,查看显示用户错误的登录列表
- lscpu,查看cpu的相关信息,包括型号,内核
- uname -a,查看关于操作系统的信息
- cat /proc/version,查看操作系统版本
- lsmod,查看所有载入系统的模块信息
- netstat,查看端口的开放和连接信息
6.磁盘管理
关于磁盘的设备一般存储再/dev/或者/snap/文件夹中。
- 查看磁盘信息常用命令:lsblk、fdisk
sr0是光驱设备即光盘,也成为cdrom,只支持读,不支持写入操作
- 磁盘分区
磁盘分区可以将硬盘驱动器划分多个逻辑存储单元,单元称为分区。磁盘分区的好处:
(1)限制应用或用户可用空间
(2)将操作系统和程序文件与用户文件分隔
(3)创建用于操作系统虚拟内存交换的单独区域
(4)允许同一磁盘不同操作系统启动
关于分区的命名规则:
分区的方案: MPT分区中: SCSI接口硬盘最多有16个分区,主分区最多4个,逻辑分区最多12个。
IDE接口硬盘最多只能有63个分区,主分区最多4个,逻辑分区最多60个 分区最大2T。GPT分区中: 由LBA规划,每个硬盘前面有34个LBA,后门有33个LBA用于前面的备份。
LBA0用于兼容MBR,不能修改,LBA1称为GPT表头记录,用于记录备份的对应关系和记录表本身的大小,LBA2-LBA33用于记录实际分区信息。
每一个LBA可用记录4个分区表,一共4*32=128个分区表。
每个硬盘最多128个分区(不分类型),GPT逻辑块地址分配64位,最大支持18EB分区大小。
磁盘分区操作:
首先,增加虚拟磁盘,VMvare操作如下:
命令 | 解析 |
---|---|
parted /磁盘目录 | 对磁盘进行分区 |
mklabel+类型 | 创建新的分区表 |
mkpart +name+start+end | 创建分区 |
rm+number | 删除分区 |
quit | 退出 |
磁盘挂载
命令 解析 mkfs -t +类型+目录 创建磁盘挂载 mount +目录+挂载点 将磁盘挂载(临时,重启即消失) umount +挂载点 取消磁盘挂载 blkid +磁盘目录 查看磁盘的信息,包括UUID /etc/fstab 永久挂载磁盘,要将挂载目录等写入该文件
- 非交互式磁盘
简单说,就是交互式需要进入parted的命令行进行操作,非交互式就是不用进去就能操作,加个--script,后面命令跟parted里面的一样即可,如:
sudo parted --script 目录 mklabel gpt,创建gpt分区
sudo parted --script 目录 +命令 - 关于逻辑卷
LVM-逻辑卷管理是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,用于提高磁盘分区管理的灵活性,主要有以下概念:
逻辑卷的划分:
常用命令
命令 | 解释 |
---|---|
pvcreate /DEV | 创建物理卷 |
pvs | 查看物理卷 |
pvremove /DEV | 删除物理卷 |
vgcreate VGNAME /DEV | 创建卷组 |
vgextend /DEV | 扩展卷组 |
vgreduce VGNAME /DEV | 收缩卷组 |
vgremove VGNAME | 删除卷组 |
lvcreate -L 10G -n LVNAME VGNAME | 创建指定逻辑卷大小和逻辑卷名称的名称 |
lvs | 查看逻辑卷 |
lvextend -L +10G /DEV | 增加10G逻辑卷大小 |
lvremove /DEV/VGNAME/LVNAME | 删除逻辑卷 |
7.下载软件包命令
linux下载软件包的命令很多,根据Linux系统的不同会使用不同的命令。
OpenEuler:dnf、rpm。
Ubuntu:apt、yum。
Centos:rpm、yum。
Debian:apt。
常用的命令如下:
命令 | 作用 |
---|---|
apt-get update/apt update | 更新软件包列表 |
yum/dnf check-update | 更新软件包列表 |
apt-get/apt upgrade | 更新已安装的包 |
yum/dnf upgrade | 更新已安装的包 |
apt/yum/dnf search | 搜索某个包 |
apt show package | 显示包的安装状态 |
yum info/deplist package | 列出包依赖 |
dnf info package | 列出包依赖 |
dnf repoquery --requires package | 列出包依赖 |
apt/yum/dnf/pkg install package | 安装包 |
apt/yum remove package | 删除包 |
dnf erase package | 删除包 |
rpm -ivh | 可视化安装进度安装软件包 |
rpm -qa | 查询所有已安装软件包 |
rmp -e | 卸载指定软件包 |
三、Linux的Shell编程开发
1.符号变量
符号 | 介绍 |
---|---|
# | 注释符 |
$ | 变量符 |
'' | 单引号字符,全部普通字符 |
"" | 双引号字符,可以包括特殊字符如反引号`,变量符$ |
$? | 返回上一个变量返回值 |
$# | 传送给shell程序位置参数的数量 |
$0 | 当前执行的进程名 |
$! | 后台运行的最后一个进程号 |
$$ | 当前进程的进程号 |
$n | 第n个参数 |
$@、 $* | 全部位置参数做列表,*做变量 |
$() | 获取命令输出结果 |
`` | 获取命令输出结果 |
$(()) | 算数拓展运算符 |
-eq、-ne、-lt、le、-gt、-ge | 表示相等、不等于、小于、小于或等于、大于、大于或等于 |
[] | 条件表达式 |
-d | 是否是目录,如 if [-f a.sh] |
-f | 是否是普通文件,如if [-d a.txt] |
-a、-o | 逻辑和与逻辑或 |
2.常用方法
命令 | 解析 |
---|---|
set | 查看环境变量 |
env | 查看全局变量 |
declare | 定义变量 |
unset | 删除变量 |
export | 定义环境变量 |
~/.bashrc | 用户级环境 |
四、关于git
- git是分布式的版本控制系统,说白了,就是一种代码管理工具,能够方便程序员在编写代码,未完成时候能够保存但却不影响项目的运行。
git的流程:
git的常用命令:
命令 | 解释 |
---|---|
git init | 初始化git仓库 |
git config user.name name | 设置目标用户名 |
git config user.email email | 设置目标邮箱 |
git config --list | 查看配置信息 |
git add 文件名 | 将文件添加到暂存区 |
git checkout | 暂存区内容恢复到工作区 |
git commit -m "提交说明" | 将文件从暂存区添加到仓库区 |
git log | 查看提交日志 |
git reset --hard 版本号 | 将代码恢复到已经提交的某一个版本 |
git branch 分支名 | 创建分支 |
git checkout -b 分支名称 | 切换分支 |
git branch -d 分支名称 | 删除分支 |
git push URL master | 将缓存区内容提交到远程仓库 |
git pull | 将远程代码下载到本地 |
git remote add 仓库别名 仓库地址 | 为远程仓库添加别名 |
git push -u 别名 分支 | 将缓存区内容提交到仓库 |
具体操作如提交到Github:
- 先在github创建仓库,然后在Settings->develop settings->Personal Access token->Generate new token创建一个提交的token
- 然后就可以在Linux中通过命令行提交。
这里输入的用户名和密码就是刚才生成Token的用户名和token。
文章标题:关于Linux的基础总结
文章链接:https://aiwin.fun/index.php/archives/3053/
最后编辑:2024 年 1 月 4 日 16:53 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
博主真是太厉害了!!!