# Linux 基础 2

Linux中一切皆文件
Linux运行全局

# 查看指令所在的位置

which pwd

# 查看环境变量

[root@ecs-39448704 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 命令行补充

快捷键功能备注
Ctrl+p显示输入的 上一个历史命令从输入的最后一个命令往 前倒 ,也可以使用 ↑键
Ctrl+n显示输入的下一个历史命令也可以使用 ↓键
Ctrl+a光标 移动命命令行首也可以使用 Home 键
Ctrl+e光标移动命命令行尾也可以使用 End 键
Ctrl+u删除 光标前 的部分字符串
Ctrl+k删除光标后的部分字符串
Backspace/Delete删除光标前 / 后的一个字符

# 双目录

[root@ecs-39448704 ~]# cd ../../
[root@ecs-39448704 /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  patch  proc  root  run  sbin  srv  sys  titan  tmp  usr  var  www

# 输出文件

//ll输出文件信息, -F是否还有子目录加/,h文件以文件大小形式输出,a总大小
[root@ecs-39448704 /]# ll -Fha
total 84K

# 文件类型

  • -: 普通的文件,在 Linux 终端中 没有 执行权限的为 白色压缩包红色可执行程序绿色 字体
  • d: 目录 (directory), 在 Linux 终端中为 蓝色 字体,如果目录的所有权限都是开放的,有绿色的背景色
  • l: 软链接 文件 (link), 相当于 windows 中的 快捷方式 ,在 Linux 终端中为 淡蓝色 (青色) 字体
  • c: 字符设备 (char), 在 Linux 终端中为 黄色 字体
  • b: 设备 (block), 在 Linux 终端中为 黄色
  • p: 管道 文件 (pipe), 在 Linux 终端中为 棕黄色 字体
  • s: 本地 套接字文件 (socket), 在 Linux 终端中为 粉色 字体

# 用户类型

文件类型包含: 文件所有者文件所属组用户其他人
rwx 执行 - execute
没有权限 -

  • 一个字母文件 类型
  • 个文件所有者,第 个为 文件所属组用户 ,第三为 其他人
[root@ecs-39448704 /]# ll
total 72
            别名个数 所有权用户  目录磁盘空间大小(不代表内部)
lrwxrwxrwx.   1 root root     7 Dec 18  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 Jun 28  2022 boot
drwxr-xr-x   20 root root  3140 Apr 11 07:45 dev

# 删除

rm :可以 直接删除 文件
rm -r 删除目录,参数 - r 是 递归(recursion)
-i 删除时给提示
-f 删除时 没有任何 提示

# 拷贝

cp 对 文件 可以直接拷贝
目录 拷贝要加参数 -r

# 修改文件权限

# 代码法

chmod

chmod who [+|-|=] mod 文件名
who: 
	- u :user ->文件所有者
	- g :group ->文件所属组用户
	- o: other ->其他
	- a: all,以上三类人 u+g+o
mod:权限
	r: 读
	w: 写
	x:执行
	- : 没有权限
对权限的操作
	+:添加权限
	-:去除权限
	=:覆盖权限

# 数字法

chmod [+|-|=] mod 文件名
- mod 权限描述 所有权限都放开时 7
- 4 read ,r
- 2 write,w
- 1 execute ,x
- 0:没有权限
#分解:chmod 0567 a.txt
0:八进制
5:文件所有者 r+x
6: 文件所属用户  r + w
7 其他人 r+w+x

# 修改文件所有者

sudo chown 新的所有者:新的组名 文件名

# 修改文件所属组

只修改 文件所属的组 ,普通用户没有这个权限,借助 管理与安全线

sudo chgrp 新的组 文件名

# 创建文件

mkdir 创建目录
touch 文件 //创建文件,存在更新时间,不存在创建
cat 文件   //查看文件内容
which 	//查看命令所在位置

# 重定向

将内容快速叠加到文件当中,修改输出数据的文字
> 将文件内容写入到指定文件中,如果文件中 已有数据 ,则会使用新数据覆盖原数据
>> 将输出的内容追加到指定的文件尾部

# 添加新用户

//第一种
sudo adduser 用户名
//第二种
//cenos
sudo useradd 用户名
//ubuntu  
sudo useradd -m -s /bin/bash 用户名

# 删除用户

使用 userdel 命令删除系统中用户 ID 和所属组 ID 等相关信息,但是在某些 Linux 版本中虽然被删除了,但是 家目录 却没有被删除,需要手动将其删除

//-r 一并把用户的家目录页删除,不加不删除
sudo userdel 用户名 -r

# 添加删除用户组

使用 groupadd 添加用户组,使用 groupdel 删除用户组
验证成功,查看 /etc/group 文件,里面用户相关信息以及用户组 ID

# 修改密码

passwd :修改当前用户
//修改非当前用户密码
sudo passwd 用户名

# 压缩命令

# 压缩 tar

x:释放压缩文件内容,解压
c:创建压缩文件
z:使用gzip方式进行文件压缩.tar.gz
j:使用bzip2的方式进行文件压缩.tar.bz2
v:压缩过程中显示压缩信息,可以省略不写
f:指定压缩包的名字
# 语法
tar 参数 生成压缩包的名字 要压缩的文件(文件或目录)
# 压缩名字
	- 压缩使用gzip方式,标准后缀为.tar.gz
	- 压缩使用bzip2方式,标准后缀为.tar.bz2
	-
  • tar 解压
tar 参数 压缩包名 -c 解压目录
tar xzv 名称 -c 目录
  • zip 解压

使用 zip 压缩目录,必须添加参数 -r ,这样才能将子目录中的文件一并压缩。zi 压缩会 自动生成文件后缀.zip

zip [-r] 压缩包名 要压缩的文件
  • rar

安装

wget https://www.rarlab.com/rar/rarlinux-x64-6.0.0.tar.gz
tar -zxvf rarlinux-x64-6.0.0.tar.gz 
mv ./rar /opt
ln -s /opt/rar/rar /usr/local/bin/rar
ln -s /opt/rar/unrar /usr/local/bin/unrar

使用,文件压缩,需要使用参数 a ,压缩包会自动添加后缀.rar
如果压缩了目录,需要加参数 - r

rar a 压缩包名 要压缩的文件 [-r]

解压缩

#解压参数 x,默认加压到当前目录中
rar/unrar x 压缩包名字
# 解压到指定目录
rar/unrar x 压缩包姓名 解压目录

# xz 文件

  • 压缩

创建文件,首先将需要压缩的文件大宝 tar cvf xxx.tar files 然后对大宝文件进行压缩 xz -z xxx.tar 。这样就可以得到一个大包之后的压缩文件
使用 xz 工具压缩文件需要添加参数 -z

  • 解压缩
# 压缩包解压缩,得到 xxx.tar
xz -d xxx.tar.xz
# 第二步,将 xxx.tar 中的文件释放到当前目录
tar xvf.xxx.tar

# 文件搜索

# find

主要功能时根据文件的属性,查找对应的磁盘文件 ( 文件名文件类型文件大小文件的目录深度 )。模糊查询必须要使用对应的通配符, * , 其中 * 可以匹配 个或者 个字符 用于匹配 个字符。

  • -name
# 语法格式:根据文件名搜搜
find 搜索的路径 -name 要搜索的文件名
  • -type
文件类型类型的字符描述
本地套接字类型s
普通文件类型f
目录类型d
软连接类型l
字符设备类型c
块设备类型b
管道类型p
#语法格式:
find 搜索的路径 -type 文件类型
  • -size

根据文件大小进行搜搜,需要使用参数 -size 常见的分别有 K (小写),M (大写),G (大写)。

#找到大约 4M 的
[root@ecs-39448704 bin]# find ./ -size +4M
./cpack
./gdb
./ld.gold
./ctest
  • 基于目录层级

-maxdepth :最多搜索到第多少层目录
-mindepth :至少从第几层开始搜索

sudo find / -maxdepth 5 -name "*.txt"
  • exec ( ok 与此相同)

exec 是 find 的参数,可以在 exec参数后添加其他需要执行的shell命令 find添加了exec参数之后,命令的部需要添加一个后缀 {} ; ,注 {} ` 中间有 空格

find 路径 参数 参数值 -exec shell 命令2 {} \;
  • xargs

可以在 find 命令后直接使用 管道 完成前后命令的 数据传递

find 路径 参数 参数值 | xargs shell 命令2

区别:
-exec : 将 find 查询的结果逐条传递给后边的 shell 命令
-xargs :将 find 查询的结果一次性传递给后边的 shell 命令

  • grap
  • -r:如果需要搜索目录中的文件内容,需要进行递归操作,必须指定该参数
  • -i:对应要搜索的关键字,忽略字符大小写的差别
  • -n:在显示符号样式那一行之前,标示出该行的列数编号
grep "搜索的内容" 搜索的路径/文件 参数

# locate

locate 是一个 化版的 find , 可以根据 文件名 搜索本地的 磁盘文 件,本地数据库 Linux 系统 每天自动 更新一次,为避免的不及时性,在运行之前,先使用 updatedb 命令, 手动更新数据库

# 更新本地数据库磁盘文件
updatedb
# 搜索所有目录下以 test 开头的文件
locate test;
# 搜索指定目录下以某个关键字 test 开头的文件
locate /home/foryouos/test
# 搜索文件,忽略文件名的大小写使用参数 - i
locate TEST -i
# 列出前 N 个匹配的文件名称或路径名称,使用参数 - n
locate test -n 5
# 基于正则表达式
locate -r "\.cpp$"

正则表达式:
1, 在正则表达式中 . 可以匹配任何一个非 \n 的单字符
2,上边的命令中使用转译字符 \ 对特殊字符 . 转译,就得到了普通的字符 .
3, 在正则表达式中 $ 放到字符尾部,表示字符串必须以这个字符结尾,上边的命令中修饰的是字符 p
4, 正则表达式中的字符 c 和后边的字符 p 需要进行字节匹配,没有特殊含义

# vim

vim 帮助文档 vimtutor

安装

sudo apt install vim
sudo yum install vim
vim --version

# vim 的模式

  • 命令 模式: 查看文件内容修改文件关键的搜索
  • 末行 模式:在该模式下主要对文件内容 进行修改和内容添加
  • 编辑 模式: 执行Linux命令保存文件跳转窗口分屏

注:编辑模式和末行模式之间直接切换
vim模式切换

# 打开文件
vim 文件名

# 命令模式

# 代码格式化

//若没有对齐,通过该命令进行对齐
gg=G

# 光标移动

在 vim 中移动光标出了使用箭头方向键,通知也可使用 h 左,j 下,k 上,L 右

快捷键功能备注
0光标移动到行首
$光标移动到行尾部选按两个键: shift + 4
gg光标移动到文件头第一行的开始
G光标移动到文件尾部最后一行的开始
nG行跳转n 代表要跳转到哪一行
n + 回车相对跳转 n 行从光标所在当前行往下跳 n 行,n 对应的是一个整数

# 删除命令

快捷键功能备注
x (小写)删除光标后边的字符vim 中的光标比较宽会盖住后边的字符
X (大写)删除光标前边的字符
dw删除单词要先把光标移动到单词的第一个字母上再删除,否则单词只能被删除一部分
d0删除光标前的字符串从字符串开头到光标当前位置的字符串被删除了
d$(D)删除光标后的字符串从光标当前位置到字符串尾部的字符串被删除了,使用 D 也行
dd删除光标所在行
ndd删除 n 行从光标所在行开始删除 n 行,n 对应的是一个整数

# 撤销与反撤销

撤销豫反侧小对应 windows 中的 ctrl+zctrl + y

快捷键功能备注相当于 window
u撤销ctrl+z
ctrl+r反撤销ctrl+y

# 复制与粘贴

快捷键功能备注
p粘贴到光标所在行的下边小写 p
P粘贴到光标所在行的上边大写 P
yy复制光标所在行
nyy从光标所在行向下复制 n 行n 是要复制的行数,代表 一个整数

# 可视模式

在编辑文件中需要删除或者辅助数据不是一整行,而是一行某一部分,可以使用可视模式,使用快捷键对所选中的数据进行复制或者删除操作

  • v : 文本选择以字符为单位
  • V :文本选择以行为单位
  • ctrl-v : 选择一个矩形内的文本
快捷键功能备注
h光标向左移动移动光标用于可视模式下的数据块选择
j光标向下移动移动光标用于可视模式下的数据块选择
k光标向上移动移动光标用于可视模式下的数据块选择
l光标向右移动移动光标用于可视模式下的数据块选择
d删除 (剪切)删除可视模式下选中的数据块
y复制复制可视模式下选中的数据块
p (小写)数据粘贴到光标的后边粘贴在可视模式下复制或者剪切的数据块
P (大写)数据粘贴到光标的前边粘贴在可视模式下复制或者剪切的数据块

# 代码注释

  • ctrl+v 进入可视模式
  • 通过光标 上移k 或者 下移j 选中多个代码行的开头
  • 写的 I 键 输入要插入的注释符
  • 按 ESC 保存进入命令模式

# 查找

image-20230421151523902

# 查看 man 文档

  • 找到要查看的函数,然后将 光标 放到该函数上
  • 在键盘上依次输入: 章节号( 可选)+ K``(shift+k) ( 写的 K),就会 自动 调整到 man 文档中

# 编辑模式

快捷键功能
i从标签前边开始输入
a从光标的后边开始输入
o在光标下边创建新行,在新行中输入
s删除光标后边的字符 (盖住的字符),从删除的字符位置开始输入
I (大写的 i)从当前行行首开始输入
A从当前行行尾开始输入
O在光标上创建新行,在新行中输入
S删除当前行,在当前行开始输入

# 末行模式

从命令模式切换到末行模式只需要在键盘上输入一个 : , 同时这个符号也会出现在窗口的最下端,这时候我们就可以在最后一行输入我们执行的命令

# 保存退出

末行模式输入命令功能
q退出,如果退出的时候没有保存,vim 会提示是否要保存
q!直接退出不保存
w保存不退出
wq保存退出
x保存退出

# 替换

末行模式的替换强大,指定将什么样的内容替换为什么样的内容,可以 指定替换 某一行或者某几行或者全文替换。替换对应的命令是 s 并且可以给定 指定参数 ,默认情况下只替换相关行的 第一个 满足条件的 关键字 ,如果需要整行替换需要加参数 /g .

末行模式下的替换命令说明
s / 被替换的关键字 / 新的关键字 /g只对光标 所在 进行替换
行号 1,行号 2s / 被替换的关键字 / 新的关键字 /g[行号1,行号2] 是一个从小到大的范围,对 这个范围 替换
% s / 被替换的关键字 / 新的关键字 /g% 代表对 所有行 进行替换

# 分屏

分屏可将当前屏幕中的窗口以水平或垂直方式拆成几个

末行模式快捷键说明备注
sp水平分屏,多个窗口垂直排列多个窗口中显示同一个文件里的内容
vsp垂直分屏,多个窗口水平排列多个窗口中显示同一个文件里的内容
ctrl+w+w光标在打开的屏幕之间切换快捷键操作 (按住 ctrl 然后按两次 w)
qall同时退出多个屏幕
wqall同时保存退出多个屏幕
sp 文件名分屏的同时指定打开的文件的名字在新窗口中指定的文件的内容
vsp 文件名分屏的同时指定打开的文件的名字在新窗口中显示指定的文件内容

# 行跳转

不仅可以在命令模式下进行跳转,也可以在末行模式下进行跳转

:行号    # 输入完行号之后回车

# 执行 shell 命令

在使用 vim 中可以在末行模式下执行 需要的shell 命令,在执行 shell 命令之前需要加一个叹号 !

:!shell命令
# 举例
:!ls