关于linux命令
Published: 2024-01-09 07:57:47

@  :                分割符
~                   家目录 【当前目录的路径】
$                    普通用户权限
#                    管理员权限
sudo su         切换管理员权限
exit            回到普通用户权限

## ls命令

```
ls    查看当前目录下的所有文件或文件夹
ls -a    查看当前目录下的所有文件或文件夹，包括隐藏文件
ls 目录名   查看该目录下的所有文件
ls 文件名    把文件名这个字符串，进行打印
ls dir1/dir2    查看当前目录下的dir1下的dir2的所有文件及目录
ls dir1 -a    查看当前目录下的dir1的所有文件及目录，包括隐藏文件
ls -l        查看当前目录下的所有详细信息
ls -la        查看当前目录下的所有详细信息包括隐藏文件
ls -lh        查看当前目录下的所有详细信息，并以K M G 等为单位进行显示
ls -lha      查看当前目录下的所有详细信息，并以K M G 等为单位进行显示，包括引出那个文件
ls dir3/dir1 -lha            查看dir3下面的dir1目录的所有详细信息，以KMG等为单，包括隐藏文件
-alh：a,显示隐藏文件        h：文件的大小带单位的显示             l：详细信息
```

## 关于文件类型
shuai@ISS:~/01day$ ls -lh 02.cpp
-rw-r--r-- 1 shuai root 1.2K Nov 26 16:41 02.cpp 

```
-rw-r--r--：这部分是文件的权限设置。
-：这是一个普通文件。如果是目录，则此处会显示为 d。
rw-：文件所有者（在这个例子中是用户 shuai）的权限。r 表示可读，w 表示可写。没有 x，所以不可执行。
r--：所属组（在这个例子中是 root 组）的权限。组成员可以读取文件，但不能写入或执行。
r--：其他用户的权限。他们可以读取文件，但不能写入或执行。
1：这表示文件的硬链接数。硬链接是文件系统中的不同路径，它们指向同一个文件。

shuai：文件的所有者用户名。

root：文件所属的用户组。

1.2K：文件大小。-lh 选项使得大小以易读的格式显示，即以 K（千字节）、M（兆字节）等单位显示。在这里，文件大小是 1.2 千字节。

Nov 26 16:41：文件的最后修改时间。
```

02.cpp：文件名。
**bcd-lsp**

```
b：   块设备文件
c：   字符设备文件
d：   目录文件
-：   普通文件
l：   链接文件，软链接文件
s：   套接字文件    
p：   管道文件
```



## cd指令

```
cd dir3        进入到当前目录下的dir3目录
cd              直接回到家目录下
cd ~            直接回到家目录下
cd dir3/dir1    进入到当前目录下的dir3下的dir1目录
cd ..            进入到当前目录下的上一级目录
cd -             回到上一次操作的目录下，并打印绝对路径   
```

## cat指令

```
cat file1        查看文件中的内容
cat file1 -n      在查看文件中内容时，显示行号
```

## 底行模式

```
 **命令行模式**
【选中】y           随意复制
p                  粘贴（当选中复制时，粘贴在光标后）
【选中】 d          可以随意剪切 
gg                 光标移动到首行的第一个字符
G                  光标移动到尾行的第一个字符
ggyG               复制全文
gg=G               自动调整全文格式
=                  选中，自动调整格式
u                  撤回上一次操作
ctrl r             反撤回
w                保存
q                退出
wq               保存并退出
q!               不保存，并强制退出
/字符串            查找，并高亮显示
noh                取消高亮
%s/字符串1/字符串2/g    把全文字符串1替换为字符串2
set number/nu           显示行号
set nonumber/nonu       取消行号
```

## ps
ps -ajx  查看进程的信息

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfq9wtjojep2pw5wf0te.png)

## Linux下的软件包标准
oneko_1.2.sakura.6-13_amd64.deb       debian的软件包标准
oneko_1.2.sakura.6-13        _amd64.                deb
|       |         |              |                   |
软件名  主版本号  修订版本号     支持64位架构       debian的软件包标准
                            i386 ----->支持32位架构   rpm是redhat的软件包标准

## **head、tail**

```
head  文件名，默认显示文件的前10行，如果不足全部显示
head -n 文件名，显示文件的前n行

tail  文件名，默认显示文件的后10行，如果不足全部显示
tail -n 文件名，显示文件的后n行

```

## **|   管道符**
把前一条指令的输出，用作后一条指令的输入。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/65cro3tqsm1egtyxmr68.png)

## find -----> 查找文件
find 查找路径 -name 查找的文件名
如果文件在当前路径下  find -name 文件名

## file ----> 查看文件的信息
file 文件名

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2le2191tn9cualcqsvv.png)

```
ELF: ---->可执行文件
64-bit LSB shared object  :  ---->支持64位操作系统小端存储
x86-64, :  ---->架构
version 1 (SYSV), :  ---->版本
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2 ---->链接到的库
for GNU/Linux 3.2.0 ---->编译器版本
BuildID[sha1]=d031a0c1247ceeac5de8f8fc0d143d9040676355,:  ---->动态ID
not stripped:  ---->没有压缩
```

## grep --->查找字符串

grep 要查找的字符串 从哪个文件中找

```
-n:回显行号
-R:在目录下递归搜索
-i:不区分大小写
-w:按单词查找
参数的位置可以任意
grep "^ubuntu" /etc/passwd  在/etc/passwd中查找，以Ubuntu为开头的字符串
grep "ubuntu$" /etc/passwd  在/etc/passwd中查找，以Ubuntu为结尾的字符串
grep "^ubuntu$" /etc/passwd 在/etc/passwd中查找，既以Ubuntu为开头也为结尾的字符串，查找，/etc/passwd中只有Ubuntu的一行 
```

## cut -----> 截取字符串
cut -d "分隔符" -f "要截取的域" 截取的字符串

截取出Ubuntu用户在/etc/passwd中的哪一行
grep "ubuntu" /etc/passwd -n | cut -d ":" -f "1"
要截取的域，如果是多个可以以逗号作为分隔，
如果是一个范围，可以使用1-3

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8eyno6qcqp1k820vjhz.png)

## 压缩/解压缩 ----> 针对文件

```
**压缩**
gz:  gzip 要压缩的文件 -----> 文件名.gz
bzip: bzip2 要压缩的文件 -----> 文件名.bz2
xz:  xz 要压缩的文件 -----> 文件名.xz
**解压缩**
gz:  gunzip  文件名.gz
bzip: bunzip2 文件名.bz2 
xz:  unxz 文件名.xz 
```
压缩效率：xz>bzip2>gz
压缩时间：xz>bzip2>gz
xz一般用于，需要把文件归档。
gz一般用于，临时需要的文件传输。

## 归档和拆包  tar  ****
tar可以将文件进行归档和拆包，归档和拆包后源文件仍然存在。

```
**归档并压缩**
tar -cvf 归档要生成的文件名.tar  要归档的文件
-c:归档
-v:显示过程
-f:后面一定要接文件名
tar -jcf 归档要生成的文件名.tar.bz2  要归档压缩的文件---->使用bzip2工具进行压缩
tar -Jcf 归档要生成的文件名.tar.xz  要归档压缩的文件---->使用xz工具进行压缩
tar -zcf 归档要生成的文件名.tar.gz  要归档压缩的文件---->使用gz工具进行压缩
**拆包**
tar -xvf 要拆包的文件名.tar
-x:拆包的参数

万能的拆包并解压缩指令
tar -xf  要拆包解压缩的文件.tar.gz/xz/bz2
如果想要使用对应格式的工具，gz -xzf ,bz2 -xjf ,xz -Jxf
```

## wc ----> (word count)

```
wc 文件名 ---->回显文件名，单词个数，行数
wc -l 文件名 ----->回显行号
wc -w 文件名 ----->回显单词个数
wc -c 文件名 ----->回显字符个数
```

## 文件权限相关的操作

chmod：
rw-                    rw-                r--
|                       |                 |
文件所属用户u        文件所属组用户g    其他用户o       
所有用户 a
**1、字母表示法修改文件权限**
给组用户添加可执行权限，给其他用户添加可读权限
chmod o+r 
chmod g+x
**2、八进制表示法**
r：4            w：2            x：1
chmod 3 1.c    把1.c的其他用户权限赋成了可写可执行，所属和组用户，权限都是0
chmod 0775 1.c

## 修改文件的所属组----->chgrp
sudo chgrp root 02.cpp ---->把02.cpp的组用户改成了root

## 修改文件的所属用户---->chown
sudo ---->因为现在Ubuntu中只有root和Ubuntu(我的是改名为shuai)涉及到超级用户，需要添加权限
sudo chown root 1.c  ----> 把1.c的所属用户改成了root
sudo chown ubuntu: 1.c ----->把1.c的所属用户和所属组用户都改成了Ubuntu
sudo chown :root  1.c ---->把1.c的上所属组用户改成了root
sudo chown ubuntu:root 1.c ---->把1.c的所属用改成了Ubuntu把1.c的所属组用户改成了root

## 创建链接文件
**1、创建软链接文件**
ln -s 被链接文件的绝对路径  链接文件的绝对路径

1、windows下不支持软链接文件，linux下的压缩包要到Linux中解压
2、软链接文件可以理解为快捷方式
3、软链接文件和被链接文件任意一个被修改，都会影响到另一个
4、当被链接文件被删除时，软链接文件会变成红色，链接失效，
如果再创建一个同路径下同名的文件，软链接文件会重新链接，变成蓝色
5、软链接文件的文件类型是l
6、软链接文件在创建时用绝对路径

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdzaro9k4g0sfum5yrkn.png)
**创建硬链接文件**
ln 被链接文件的绝对路径  链接文件的绝对路径
ln 2 3   给当前路径下的文件2创建了一个链接文件3

1、硬链接文件可以理解为复制
2、硬链接文件和源文件有相同的inode号(是文件的唯一标识)
3、如果源文件被删除了，硬链接文件仍然存在，硬链接文件会增加文件描述中链接文件的个数
只有链接文件个数为0，文件才被删除
4、硬链接文件和被链接文件任意一个被修改，都会影响到另一个

## 关于关机、重启指令
【关机】
shutdown 10:08   ---->Ubuntu会在10：08分关机
shutdown +10     ---->Ubuntu会在10分钟后关机
shutdown now     ---->Ubuntu立即关机
【重启】
shutdown -r 10:08   ---->Ubuntu会在10：08分关机
shutdown -r +10     ---->Ubuntu会在10分钟后关机
shutdown -r now     ---->Ubuntu立即关机
sudo reboot   ----->立即重启(常用)

## 关于用户一些指令
【1】查看当前用户
whoami
【2】查看用户id
id 用户名
【3】创建用户
sudo adduser 用户名  ----->一定要加sudo，因为涉及到对于根目录下文件访问
注：
1、/etc/skel：所有用户都需要的配置信息，模板目录
2、/etc/passwd：用户的详细信息
ubuntu:        x:    1000:1000:guoq:/home/ubuntu:/bin/bash
|            |      |       |         |            |        |
用户名     加密过   uid    gid     描述信息   家目录    用户使用的shell解析器
3、/etc/shadow：用户的密码，里面存放的是加密过的密码
4、/etc/group：所有组的信息
【4】给新用户添加sudo权限
新用户默认没有sudo权限，需要手动添加
sudo vim /etc/sudoers 
【5】删除用户
userdel 用户名:默认不删除家目录
userdel -r 用户名:删除用户同时删除家目录
deluser 用户名:默认不删除家目录
可以手动的删除用户家目录
【6】usermod  ---->修改用户信息
sudo usermod -c 描述信息 用户名  ---->修改用户的描述信息，描述信息是图形化界面可以看到的部分，比如开机时
#去/etc/passwd中查看现象
sudo usermod -l 新的用户名 用户名 ---->修改用户名
#去/etc/passwd中查看现象
sudo usermod -m -d 新的家目录位置 用户名  ---->修改用户家目录
-m --MOVE -d --USER_DIR
sudo usermod -g 目标组 用户名  ---->修改用户的所属组，要保证目标组存在
查看已有的组
sudo vim /etc/group

## 磁盘相关的指令
【1】查看磁盘使用率
df -h
也可以查看到U盘的挂载点
对于自动挂载的挂载点，如何取消挂载：
sudo umount /media/ubuntu/2F9944A53E2BB9B6
【2】磁盘分区
sudo fdisk /dev/sdb
m：打印帮助
n：新建分区
d：删除分区
p：打印分区
w：保存修改
q：退出
【3】磁盘格式化
sudo mkfs.ntfs
mkfs.按两下table键，可以显示所有能够格式化的文件格式
ntfs在windows下用的，ext4在Ubuntu下用的
【4】磁盘挂载
sudo mount /dev/sdb1  ~/udisk
#把/dev/sdb1分区挂载再~/udisk下
挂载成功后，对于挂载点的操作就是对U盘的操作
取消挂载要写
sudo umount /dev/sdb1