Linux

概述📚

一个OS,最底层的软件,是跟Windows和macOS并驾齐驱的一个OS。Linus Torvalds基于开源的Minux上面做改进,最后发现不如重写一个—Linux,并且公开源代码。

Unix(早期开源,后来商业化后不开源) -> Minix(Unix的变种 开源) -> Linux

Unix诞生后,由于用汇编开发过于麻烦,Unix创造者又要发明高级语言,第一次B语言,效果不好失败了,然后又发明new B(大神的乐趣),取名C语言

GNU/Linux🐱‍🏍

简要介绍 Linux 内核、Linux 系统和 GNU 工具。

  1. Linux 内核:
    • Linux 内核是操作系统的核心组件,它是一个开源的、免费的、可移植的操作系统内核。它由芬兰计算机科学家 Linus Torvalds 在 1991 年创建,并在全球范围内得到了广泛的开发和贡献。
    • Linux 内核负责管理计算机的硬件资源,如处理器、内存、设备驱动程序和文件系统等。它提供了一个稳定的、安全的和高性能的运行环境,让应用程序和用户能够与计算机系统进行交互。
    • Linux 内核采用了模块化的设计,可以根据需要加载和卸载不同的模块,从而支持广泛的硬件设备和功能。
  2. Linux 系统:
    • Linux 系统指的是基于 Linux 内核的操作系统。它是一个完整的操作系统,包括了 Linux 内核和其他一系列的软件和工具,以提供完整的计算机操作环境。
    • Linux 系统提供了许多功能和特性,如多任务处理、多用户支持、网络通信、文件管理和安全性等。它也支持各种应用程序和开发工具,可以运行服务器、个人计算机、嵌入式设备和移动设备等不同类型的硬件平台。
  3. GNU 工具:
    • GNU 是一个自由软件项目,旨在开发一套完全自由的操作系统。GNU 代表 “GNU’s Not Unix”,它的目标是创建一个类似于 Unix 的操作系统,但完全由自由软件组成。
    • GNU 工具是 GNU 项目开发的一套软件工具集,包括编译器、调试器、文本编辑器、Shell 等。这些工具为 Linux 系统提供了基本的用户界面和开发环境。
    • GNU 工具中最著名的组件是 GCC(GNU Compiler Collection),它是一个功能强大的编译器套件,支持多种编程语言,如 C、C++、Fortran 和 Ada 等。

综上所述,Linux 包括了 Linux 内核和 GNU 工具,它们共同构成了一个功能强大的、免费的、开源的操作系统。Linux 内核负责管理硬件和提供核心功能,而 GNU 工具提供了用户界面、开发环境和其他实用工具。这使得 Linux 成为一种受欢迎的操作系统,并被广泛用于各种计算机和设备。

用处🐱‍🏍

学习Linux可以做运维工程师(系统运维、应用运维、DBA)、开发工程师(内核/驱动开发、基于linux的软件开发、嵌入式开发(偏底层,用C/C++)),从行业上来讲,后台开发如java开发、数据库开发,物联网开发、架构师都要懂linux,大数据、云计算这种面对服务器集群的行业更需要。可以认为是高级程序员必备技能

我们安装的都是广义的linux,多了命令解释层和外围应用层

客户端Android系统,国产操作系统deepin也可作了解

linux和windows区别🐱‍🏍

安装步骤👔

先比较一下centos和ubuntu

  1. centOS下载地址https://centos.org/download/
  2. 下载7.9版本,使用阿里云镜像https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
  3. 选择标准版
  4. 使用VMware创建虚拟机,也可买个单机装、双系统、WSL、docker…

文件与目录结构🏂

Linux文件🏄‍♂️

Linux系统中一切届文件

挂载点🏄‍♂️

假设你有一个 USB 存储设备(如闪存驱动器或移动硬盘),你想要在 Linux 中访问该设备上的文件。首先,你需要找到一个目录,作为该设备的挂载点。你可以选择一个现有的目录,如 /mnt/media,或者创建一个新的目录,如 /mnt/usb

然后,通过执行挂载命令,将该 USB 设备与挂载点关联起来。例如,使用以下命令将 /dev/sdb1(USB 设备的第一个分区)挂载到 /mnt/usb 目录:

mount /dev/sdb1 /mnt/usb

执行此命令后,USB 设备上的文件和文件夹就可以通过 /mnt/usb 目录进行访问了。你可以在终端中浏览该目录,查看和操作 USB 设备上的文件。

当你完成使用 USB 设备后,可以使用 umount 命令卸载挂载点,断开设备与文件系统之间的连接:

umount /mnt/usb

这样,USB 设备就会从挂载点上卸载,不再与文件系统关联。

总而言之,挂载点是将存储设备或分区与文件系统层次结构中的特定目录连接起来的过程。通过挂载,设备上的文件和文件夹可以在指定的目录下进行访问和操作。

Linux的目录也叫作虚拟目录(不管底层到底存在哪,逻辑上有映射关系就行)

Linux目录结构🏄‍♂️

👉/bin: Binary的缩写。存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行。
👉/boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
👉/dev: Device的缩写。该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
👉/etc: Etcetera的缩写。这个目录用来存放所有的系统管理所需要的配置文件和子目录。
👉/home: 用户的(普通用户超级用户在/root下)主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
👉/lib: Library的缩写。这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
👉/lib64: 64位相关的库会放在这。
👉/media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
👉/mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
👉/opt: optional的缩写。这是给主机额外安装软件所摆放的目录(第三方软件都可以放到这个目录下)。
👉/proc: Processes的缩写。/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里
👉**/root:** 该目录为系统管理员,也称作超级权限者的用户主目录
👉/run: 运行目录
👉/sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
👉/srv: service的缩写,该目录存放一些服务启动之后需要提取的数据。
👉/sys: system的缩写,虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息
👉/tmp: temporary的缩写这个目录是用来存放一些临时文件的。
👉/usr: unix system resources缩写。用于存储系统软件资源。
👉/var: 用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件

上述目录结构介绍引用自该博客

vi/vim编辑器🎫

vi和vim都是多模式编辑器,区别在于:vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vi使用于文本编辑,但是vim更适用于coding。

vim(编辑器之神) emacs(神之编辑器)

一般(普通)模式🏌️‍♂️

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

以下是普通模式常用的几个命令:

快捷键 功能
i 切换到输入模式,在光标当前位置开始输入文本
x 剪切当前光标所在处的字符(从左往后)
X 剪切当前光标所在处的字符(从右往左)
: 切换到底线命令模式,以在最底一行输入命令
a 进入插入模式,在光标下一个位置开始输入文本
o 在当前行的下方插入一个新行,并进入插入模式
w 跳转到当前光标指向单词的下一个单词
r 替换当前光标所在的字符 (如r+1 把r替换成1)
R 进入替换模式(可看作特殊的插入模式)
O 在当前行的上方插入一个新行,并进入插入模式
dd 删除当前行 3 + dd 删除3行
yy 复制当前行 8 + yy 复制8行
y$ 复制光标之后的所有内容
y^ 复制光标之前的所有内容
y+w 复制当前光标所在的单词(w是word)
d+w 删除当前光标所在的单词(w是word)
p (小写) 粘贴剪贴板内容到光标下方 5+p复制5行
P (大写) 粘贴剪贴板内容到光标上方
u 撤销上一次操作
Ctrl + r 重做上一次撤销的操作
:w 保存文件
:q 退出 Vim 编辑器
:q! 强制退出 Vim 编辑器,不保存修改
shit + ^ 移动到行首
shift + $ 移动到行尾
gg 移动到第一行的行首
GG 移动到最后一行的行首
数字+G 移动到指定行行首

vim关于永久行号的配置=>看此博客介绍

编辑模式🏌️‍♂️

快捷键 功能
i 从当前光标处进入插入模式
I 进入插入模式,并置光标于行首
a 追加模式,置光标于当前光标之后
A 追加模式,置光标于行末
o 在当前行之下新加一行,并进入插入模式
O 在当前行之上新加一行,并进入插入模式
Esc 退出插入模式

命令模式🏌️‍♂️

可以看作一般模式下的特殊操作

命令 说明
:w 保存当前文件
:w! 强制保存当前文件,即使是只读文件
:q 退出 Vim 编辑器
:q! 强制退出 Vim 编辑器,丢弃修改
:wq 保存并退出 Vim 编辑器
ZZ 等同于 :wq,保存并退出 Vim 编辑器
ZQ 等同于 :q!,强制退出 Vim 编辑器
:w [文件名] 将编辑的数据保存到另一个文件
:r [文件名] 在当前行后插入指定文件的内容
:n1,n2 w [文件名] 将 n1 到 n2 行的内容保存到指定文件
:!命令 在指令行模式下执行命令,并显示结果
:set nu 显示行号
:set nonu 取消显示行号
:noh 取消高亮显示当前搜索的匹配项
/ + 你想要搜索的stirng 搜索后会高亮显示,n向下找,N向上找
:s/old/new 替换当前行第一个匹配到的 old 为 new
:s/old/new/g 替换当前行所有匹配到的 old 为 new
:%s/old/new 替换整个文档中每一行第一个匹配到的 old 为 new
:%s/old/new/g 替换整个文档中所有匹配到的 old 为 new

网络配置🤖

先了解一下网络吧 一篇全文让你彻底理清IP地址、子网掩码、网关子网掩码的介绍IPv6和IPv4的主要区别?子网掩码,二进制转化,地址分类,头部,安全有什么不同?小白成神之路,网络知识看这一期足矣!软路由 桥接 端口转发 旁路由 单臂路由 IPv4 IPv6 DDNS走出这个视频时,你也可以【懂一点电脑】

远程登录👩‍🏫

本地远程登录linux,以ssh为例

ssh root@ip或者hostname

例如 ssh root@jzx,就是用root用户登录主机名为jzx的服务器中。

若遇到permission denied等问题,去查解决方案。

主流的一些工具,如Xshell,Finalshell都是用ssh免密登录的

系统管理📚

Linux中的进程和服务🤹‍♂️

进程(process): 计算机中一个正在执行的程序或命令

服务(service): 启动之后一直存在、常驻内存的进程

守护进程(daemon): 执行系统服务的进程

注意:有些以d结尾的服务,都是守护进程;在linux中,守护进程就是系统服务

远程登录👩‍🏫

本地远程登录linux,以ssh为例

ssh root@ip或者hostname

例如 ssh root@jzx,就是用root用户登录主机名为jzx的服务器中。

若遇到permission denied等问题,去查解决方案。

主流的一些工具,如Xshell,Finalshell都是用ssh免密登录的

系统管理📚

Linux中的进程和服务🤹‍♂️

进程(process): 计算机中一个正在执行的程序或命令

服务(service): 启动之后一直存在、常驻内存的进程

守护进程(daemon): 执行系统服务的进程

注意:有些以d结尾的服务,都是守护进程;在linux中,守护进程就是系统服务

常用基本命令☝

shell可以看作一个命令解释器,我们输入给终端控制台的命令,通过shell进行解释并最终交给内核执行。

Bash(全称Bourne-Again SHell)是GNU 开发的一个Shell。 Bash 是目前绝大多数Linux 发行版的默认Shell

帮助命令👈

1.man : 获得外部命令帮助信息 ,如man ls

2.help : 获得shell内置命令的帮助信息,如help cd

help看参数用法更方便,但是只能看内嵌命令的

不过有个对于外部命令看起来更方便的,如ls –help。

但是想看最全的还得是man

提示 : 可以用type 命令判断是哪种

shell中常用快捷键:

常用快捷键 功能
ctrl + c 停止进程
ctrl + l 清屏,等同于clear;彻底清屏是: reset
善于用tab键 提示(更重要的是可以防止敲错)
上下键 查找执行过的命令

文件目录类👈

cd /: 在Linux 系统中斜杠“/”表示的是根目录。cd / ,即进入根目录.
cd ~命令是,进入用户在该系统的home目录,例如xz用户,则进入/root/xz目录

cd - 回到上一个文件夹,可以在两个目录里反复横跳

./ 代表当前目录下的文件或者文件夹; ../ 代表当前目录的上一级目录中的文件或者文件夹。可以发现ls -a的话,.和..也会显示;linux中的隐藏文件or隐藏文件夹都以.开头

单个cd 回到主目录

快捷键 功能
pwd 显示当前工作目录的绝对路径 ; pwd -P显示实际物理路径
ls ls:列出目录内容 ls -a(all):全部的文件,连同隐藏档(以.开头)一起列出来 ls -l 长数据串列出,包含文件的属性与权限等等数据;(常用)等价于”ll” ;也可以并一起写ls -al
mkdir 创建文件夹mkdir -p最常用**,若没父目录,直接也给创建了 如mkdir -p /g/h/i
rmdir 删除文件夹;rmdir -p 删除指定的空目录,及其内的子空目录:
touch 创建空文件:touch + 文件名称 ;注意:vim也可以创建一个空文件,不过得保存才行,不然就没有,这是和touch的一个区别
cp 复制文件或目录;cp [选项] source(源文件) dest(目的地); cp - r:(recusive 递归地):使用-r选项,cp指令会递归地复制目录及其内容,包括子目录和文件。
rm 递归删除目录中所有内容;rm [选项] deleteFile;**-f**:强制执行删除 ; -r:递归删除目录中所有内容; -v ; rm-rf很强大,rm -rf /* 删库跑路
mv mv oldNameFile newNameFile(功能描述:重命名); mv /temp/movefile/targetFolder(功能描述:移动文件)
cat 查看文件内容; cat
more more [选项] 要查看的文件。more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
less less [参数] 文件 ;less 与 more 类似,但使用 less 可以随意浏览文件,而且 less 在查看之前不会加载整个文件。显示方面,显示内容方式不是输出到窗口,而是类似vi打开的文件一样,退出按q。
echo 输出内容到控制台‘’;echo [选项] [输出内容] ; -e:支持反斜线控制的字符转换
>和>> > 输出重定向** 和 >>追加 ; 如ls -l > 文件(功能描述:列表的内容写入a.txt中(覆盖写)) ;如 echo “hello linux” >> test.c:把hello linux追加到test.c后面;
head head [OPTIONS] FILES ;(功能描述:输出文本前面部分)
tail tail [OPTIONS] FILES;(功能描述:输出文本后面部分(默认查看文件尾部后10行)); tail -n 5 fileName (查看文件尾部5行) ; tail -f fileName(功能描述:实时追踪该文档的所有更新) 注意:如果用vim加的化,得用tail -F
ln 软链接 ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接) 创建后可通过ls -l可以查看详细信息; 删除软链接: rm -rf软链接名,而不是rm -rf 软链接名/,如果使用rm -rf 软链接名/ ,会把软链接对应的真实目录下内容删掉 ;重要硬链接和软链接的区别 ;实际应用基本都是软链接
history 查看历史命令

时间日期类👈

基本语法:date [OPTION]…[+FORMAT]

选项 功能
-d<时间字符串> 显示指定的”时间字符串”表示的时间,而非当前时间
-s<日期时间> 设置系统日期时间

具体用法见:date各种用法

还有cal 日历类等等

用户管理类👈

用户🧍‍♂️

命令 功能
useradd useradd 用户名:添加新用户; useradd + g 组名 用户名:添加新用户到某个组
cat /ect/passwd 查看创建了哪些用户,文档中很多没见过的用户都是系统单独创建出来运行系统服务的,不需要改。以contigo为例 第一个1001是uid,第二个1001是gid,/home/contigo是家目录,/bin/sh指此用户与系统交互的进程
su 切换用户(switch user);su 用户名称(切换用户,只能获得用户的执行权限,不能获得环境变量) su - 用户名称(切换到用户并获得该用户的环境变量及执行权限)
who am i/whoami 前者是显示最原始的进来时的用户,后者是当前用户
sudo 设置用户具有root权限 ; 修改配置文件 vim /ect/sudoers 在root下添加需要添加的用户和对应的权限
userdel 删除用户 ,但是不会删除文件夹,只是删除用户 ; userdel -r david 会把用户连同目录文件一起删
id id + 用户名称: 查看用户信息

用户组🧍‍♂️

linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建

所有用户组的信息都在 /ect/group

命令 快捷键
groupadd groupadd + 组名 新增用户组
usermod -g usermod -g 用户组 用户名 修改用户
groupmod - n groupmod -n newName oldName : 给用户组改名
groupdel groupdel + 组名 : 删除用户组

文件权限类👈

文件属性和权限📒

有了很多用户组,想要区别他们,就得给不同的用户组不同的操作权限。

在linux中ll / ls -l 可以显示一个文件的属性及其文件所属的用户和组

363003_1227493859FdXT

当为 d 则是目录

当为 - 则是文件;

若是 l 则表示为链接文档(link file);

若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

从左至右用 0-9 这些数字来表示。

0 位确定文件类型,第 1-3 位确定属主(该文件的所有者 即user)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;

2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

注意:删除文件一个文件需要的不是对该文件是否有写权限,而是对该文件所在的目录有写权限)

更改文件权限📒

img

chmod 改变权限:📃

第一种方式变更权限

chmod [{ugoa} {+-=} {rwx}] 文件或目录

例 chmod u+x fileName,让属主添加能执行该文件的权限

​ chmod a=rw fileName 让文件的ugo权限都可读可写

第二种方式变更权限(更直接 更简单)

chmod [mode=421] [文件或目录]

技巧

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

r=4 w=2 x=1 rwx=4+2+1=7 (用图中的二进制去理解),如 chmod 777 file

菜鸟教程有更细的

修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可度可写可执行权限。

chmod -R 777 xiyou/

chown 改变所有者📃

chown [选项] [最终用户] [文件或目录] (功能描述: 改变文件或者目录的所有者)

chown -R:递归操作

chgrp 改变所有组📃

搜索查找类👈

find📓

find [搜索范围] [选项]

选项 功能
-name<查找方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件,单位为:b 一 块 c 一 字节,w 一 字(2字节),k 一 千字节,M 一 兆字节 , G 一 吉字节

locate📓

grep📓

管道符,“ | ”,表示将前一个命令的处理结果输出传递给后面的命令处理

grep 选项 查找内容 源文件(在源文件中查找内容)

-n 显示匹配

与管道符经常一起用,如ls | grep .c ,查找后缀为.c的文件

补充 : wc命令

显示 行数,单词数量,字节数, 文件名

压缩解压类👈

gzip/gunzip 压缩📔

gzip 文件 (压缩文件,只能将文件压缩为*.gz文件)

gunzip 文件.gz(解压缩文件命令)

技巧

(1)只能压缩文件不能压缩目录

(2)不保留原来的文件

(3)同时多个文件会产生多个压缩包

zip/unzip压缩📔

zip 选项 -r 压缩目录

unzip 选项 -d 指定解压后文件的存放目录

tar打包📔

tar [选项] XXX.tar.gz 将要打包进去的内容 (打包目录,压缩后的文件格式.tar.gz)

tar -zcvf 打包

tar -zxvf解包

选项

选项 功能
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
-C 解压到指定目录

磁盘分区类👈

du 查看文件和目录占用的磁盘空间🎇

du:即disk usage 磁盘占用情况

du 目录/文件 (显示目录下每个子目录的磁盘使用情况)

选项 功能
-h 以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;
-a 不仅查看子目录大小,还要包括文件
-c 显示所有的文件和子目录大小后,显示总和
-s 只显示总和
–max-depth=n 指定统计子目录的深度为第n层

df 查看磁盘空间使用情况🎇

df:disk free 空余磁盘

df 选项 (列出文件系统的整体磁盘使用量,检查文件系统的磁盘占用情况)

df -h 以人们较易阅读的GBytes,MBytes,KbYTES等格式自行显示

了解一些特殊的文件目录可以去查一些资料

lsblk 查看设备挂载情况🎇

进程管理类👈

ps 查看当前系统进程状态🕹

ps:process status 进程状态

ps aux | grep xxx (查看系统中所有进程) (官方文档不推荐这种写法)

ps -ef | grep xxx (可以查看子父进程之间的关系)

选项 功能
a 列出带有终端的所有用户的进程
x 列出当前用户的所有进程,包括没有终端的进程
u 面向用户友好的显示风格
-e 列出所有进程
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表

软件包管理👈

RPM🧥

概述

rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

RPM查询命令

克隆虚拟机👈

链接

Shell编程🥽

见菜鸟教程https://www.runoob.com/linux/linux-shell.html

概述🖋

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

变量🖋

附录