【Linux】常用命令大全
【Linux】命令大全
- 【一】文件
- 【1】文件基本属性
- (1)ll或者ls –l查看文件的属性以及文件所属的用户和组
- 【2】文件属主和属组
- 【3】更改文件属性
- (1)chgrp:更改文件属组
- (2)chown:更改文件所有者(owner),也可以同时更改文件所属组。
- (3)chmod:更改文件9个属性
- (4)符号类型改变文件权限
- 【4】文件编辑命令vi/vim
- 【4】更多命令案例
- 【二】文件及目录管理
- 【1】绝对路径和相对路径
- 【2】处理目录的常用命令
- (1)ls (列出目录)
- (2)cd (切换目录)
- (3)pwd (显示目前所在的目录)
- (4)mkdir (创建新目录)
- (5)rmdir (删除空的目录)
- (6)cp (复制文件或目录)
- (7)rm (移除文件或目录)
- (8)mv (移动文件与目录,或修改名称)
- (9)文件内容查看(查看日志)
- (1)命令
- (2)cat(由第一行开始显示文件内容)
- (3)tail(取出文件后面几行)
- (10)find(文件查找)
- (11)grep
- 【三】压缩包管理
- 【1】tar
- (1)语法
- (2)参数
- (3)实例
- (4)指定压缩格式
- 【2】zip和unzip
- (1)zip压缩文件
- (2)unzip解压缩文件
- 【3】gzip
- 【4】压缩和解压jar包
- 【5】java替换jar包中的class文件
- 【四】用户和用户组管理
- 【1】Linux系统用户账号的管理
- (1)useradd:添加新的用户账号
- (2)删除帐号
- (3)修改帐号
- (4)用户口令的管理
- 【五】磁盘管理
- 【六】网络管理
- 【1】端口被占用的解决方案
- 【2】Linux虚拟机克隆之后使用ip addr无法获取ip地址
- 【七】光标管理
- 【1】基本光标控制
- 【2】单词级别的移动
- 【3】高效的删除技巧
- 【4】粘贴与历史命令导航
- 【5】其他有用的快捷键
- 【八】环境搭建
- 【1】全程离线安装jdk/mysql/nginx/redis/nacos/xxl-job/elasticsearch等
【一】文件
【1】文件基本属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
(1)chown (change owner) : 修改所属用户与组。
(2)chmod (change mode) : 修改用户的权限。
下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。
(1)ll或者ls –l查看文件的属性以及文件所属的用户和组
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@www /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
……
实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。
(1)第一个字符
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
(1)当为 d 则是目录
(2)当为 - 则是文件;
(3)若是 l 则表示为链接文档(link file);
(4)若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
(5)若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
(2)剩下的字符
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
(3)总结
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
【2】文件属主和属组
[root@www /]# ls -l
total 64
drwxr-xr-x 2 root root 4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21 2014 mysql
……
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所属组的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。
对于 root 用户来说,一般情况下,文件的权限对其不起作用。
【3】更改文件属性
(1)chgrp:更改文件属组
chgrp [-R] 属组名 文件名
参数选项:
(1)-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。
案例:
(2)chown:更改文件所有者(owner),也可以同时更改文件所属组。
(1)语法
chown [–R] 所有者 文件名
chown [-R] 所有者:属组名 文件名
(2)进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
(3)将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
(3)chmod:更改文件9个属性
(1)权限类型
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
(2)字符形式
先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
(3)数字形式
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
(4)使用案例
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:
chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
举例来说,如果要将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:
[root@www ~]# ls -al .bashrc
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
那如果要将权限变成 -rwxr-xr-- 呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754。
(4)符号类型改变文件权限
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
user:用户
group:组
others:其他
那么我们就可以使用 u, g, o 来代表三种身份的权限。
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
# chmod a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
【4】文件编辑命令vi/vim
【4】更多命令案例
【二】文件及目录管理
【1】绝对路径和相对路径
我们知道 Linux 的目录结构为树状结构,最顶级的目录为根目录 /。
其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。
在开始本教程前我们需要先知道什么是绝对路径与相对路径。
(1)绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
(2)相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法。
【2】处理目录的常用命令
(1)ls (列出目录)
(1)语法
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
[root@www ~]# ls [--color={never,auto,always}] 目录名称
[root@www ~]# ls [--full-time] 目录名称
(2)选项与参数
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
(3)过滤展示
ll | grep ‘damp’
ll /home/damp/dampind
(2)cd (切换目录)
cd是Change Directory的缩写,这是用来变换工作目录的命令。
(1)语法:
(1)cd [相对路径或绝对路径]
(2)使用 . 表示当前目录
#使用 mkdir 命令创建 runoob 目录
[root@www ~]# mkdir runoob
#使用绝对路径切换到 runoob 目录
[root@www ~]# cd /root/runoob/
#使用相对路径切换到 runoob 目录
[root@www ~]# cd ./runoob/
# 表示回到自己的家目录,亦即是 /root 这个目录
[root@www runoob]# cd ~
# 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;
[root@www ~]# cd ..
[root@www ~]# cd ../../parent/directory
(2)切换到用户的主目录
cd
cd ~
cd ~/Documents
(3)切换到绝对路径的目录
# 切换到绝对路径的目录
cd /path/to/directory
(4)切换到相对路径的目录
# 切换到相对路径的目录
cd relative/path/to/directory
(5)列出目录堆栈中的所有目录
可以使用-l选项来以列表形式显示它们
dirs
dirs -l
(6)pushd 和 popd 命令
pushd命令用于将目录添加到堆栈,并切换到新的目录。popd命令用于从堆栈中弹出目录并切换回它。
pushd /path/to/directory
popd
(7)使用 . 表示当前目录
在Linux中, . 表示当前目录。这对于执行当前目录中的脚本或程序非常有用。
cd .
(8)使用 cd - 返回上次访问的目录
cd - 命令可用于返回上次访问的目录。这在两个目录之间频繁切换时非常方便。
cd /path/to/first/directory
cd /path/to/second/directory
cd -
# 返回到 /path/to/first/directory
(9)⭐️使用通配符
cd 命令也支持通配符,可以在切换目录时更加灵活。
使用 * 匹配任意字符
cd /path/to/di* # 进入第一个以 "di" 开头的目录
cd /usr/*/bin # 进入 /usr 下的任意一个子目录下的 bin 目录
使用 ? 匹配单个字符
cd /etc/?? # 进入 /etc 下任意两字符长度的目录
(10)脚本中的 cd 命令
在Shell脚本中,cd 命令经常用于导航到特定目录执行操作。
#!/bin/bash
# 进入脚本所在目录
cd "$(dirname "$0")"
# 执行一些操作
echo "Running script in $(pwd)"
(3)pwd (显示目前所在的目录)
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。
(4)mkdir (创建新目录)
(1)语法:
mkdir [-mp] 目录名称
(2)选项与参数:
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
(3)创建实例:
[root@www ~]# cd /tmp
[root@www tmp]# mkdir test <==创建一名为 test 的新目录
[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory <== 没办法直接创建此目录啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4
加了这个 -p 的选项,可以自行帮你创建多层目录!
(4)创建带权限的实例:
实例:创建权限为 rwx–x–x 的目录。
[root@www tmp]# mkdir -m 711 test2
[root@www tmp]# ls -l
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。
如果我们使用 -m ,如上例我们给予 -m 711 来给予新的目录 drwx–x–x 的权限。
(5)rmdir (删除空的目录)
(1)语法
rmdir [-p] 目录名称
(2)选项与参数:
-p :从该目录起,一次删除多级空目录
(3)删除 runoob 目录
[root@www tmp]# rmdir runoob/
(4)将 mkdir 实例中创建的目录(/tmp 底下)删除掉
[root@www tmp]# ls -l <==看看有多少目录存在?
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
[root@www tmp]# rmdir test <==可直接删除掉,没问题
[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了!
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。
不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。
(6)cp (复制文件或目录)
(1)语法
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
(2)选项和参数
⭐️-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d:若来源档为链接档的属性(link file),则复制链接档属性而非文件本身;
⭐️-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
⭐️-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式链接(hard link)的链接档创建,而非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
⭐️-r:递归持续复制,用於目录的复制行为;(常用)
-s:复制成为符号链接档 (symbolic link),亦即『捷径』文件;
-u:若 destination 比 source 旧才升级 destination !
(3)用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖
(4)复制文件
[root@nie linux]# ls
1.txt linux.txt word
[root@nie linux]# ls word/
[root@nie linux]# cp 1.txt 2.txt 复制到当前目录并重命名
[root@nie linux]# ls
1.txt 2.txt linux.txt word
[root@nie linux]# cp 1.txt word/ 复制到word目录下
[root@nie linux]# ls word/
1.txt
[root@nie linux]# cp 1.txt word/2.txt 复制到word目录下并重命名
[root@nie linux]# ls word
1.txt 2.txt
(5)⭐️复制多个文件
[root@nie linux]# ls
1.txt 2.txt linux.txt word
[root@nie linux]# cp 1.txt 2.txt linux.txt word/
[root@nie linux]# ls word/
1.txt 2.txt linux.txt
或:使用通配符*
[root@nie linux]# cp *.txt word/
[root@nie linux]# ls word/
1.txt 2.txt linux.txt
(6)复制目录
复制目录一定要加“-r”参数递归目录下的所有内容,否则会出现错误
[root@nie linux]# ls
1.txt 2.txt a linux.txt word
[root@nie linux]# cp a word/
cp: 未指定 -r;略过目录'a'
[root@nie linux]# cp -r a word/
[root@nie linux]# ls word/
1.txt 2.txt a linux.txt
(7)rm (移除文件或目录)
(1)语法
rm [-fir] 文件或目录
(2)参数
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
(3)实例
[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
(8)mv (移动文件与目录,或修改名称)
(1)语法
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
(2)参数
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
(3)实例
复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest
将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2
(9)文件内容查看(查看日志)
(1)命令
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
(2)cat(由第一行开始显示文件内容)
cat [-AbEnTv]
-A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字节 $ 显示出来;
-n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
(3)tail(取出文件后面几行)
tail [-n number] 文件
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config
[root@www ~]# tail -f /etc/man.config | grep 'aaa'
(10)find(文件查找)
find 命令用于在指定目录下查找文件和目录。它可以使用不同的选项来过滤和限制查找的结果。
(1)语法
find [路径] [匹配条件] [动作]
(2)路径
是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
(3)expression 是可选参数
用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。
(4)动作
可选的,用于对匹配到的文件执行操作,比如删除、复制等。
(5)时间参数
find 命令中用于时间的参数如下:
-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。
在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。
正数应该表示时间之前,负数表示时间之内。
例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。
关于时间 n 参数的说明:
+n:查找比 n 天前更早的文件或目录。
-n:查找在 n 天内更改过属性的文件或目录。
n:查找在 n 天前(指定那一天)更改过属性的文件或目录。
(6)实例
查找当前目录下名为 file.txt 的文件:
find . -name file.txt
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
# find . -type f
查找 /home 目录下大于 1MB 的文件:
find /home -size +1M
查找 /var/log 目录下在 7 天前修改过的文件:
find /var/log -mtime +7
查找过去 7 天内被访问的文件:
find /path/to/search -atime -7
在当前目录下查找最近 20 天内状态发生改变的文件和目录:
# find . -ctime 20
将当前目录及其子目录下所有 20 天前及更早更新过的文件列出:
# find . -ctime +20
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
# find /var/log -type f -mtime +7 -ok rm {} \;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
# find . -type f -perm 644 -exec ls -l {} \;
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
# find / -type f -size 0 -exec ls -l {} \;
找并执行操作(例如删除):
find /path/to/search -name "pattern" -exec rm {} \;
(11)grep
【三】压缩包管理
【1】tar
tar(英文全拼:tape archive )命令用于备份文件。
tar 本身不压缩文件,但可以与压缩工具(如 gzip 或 bzip2)结合使用,创建压缩的归档文件(如 .tar.gz 或 .tar.bz2)。
(1)语法
tar [options] -f archive.tar [files...]
# -f archive.tar:指定归档文件的名称。
# [files...]:要打包的文件和目录。
(2)参数
(1)基本操作选项
-c:创建一个新的归档文件。
-x:解压归档文件。
-t:列出归档文件的内容。
-r:向现有归档文件中追加文件。
-u:仅追加比归档文件中已有文件更新的文件。
-d:找到归档文件中与文件系统不同步的差异。
-A:将一个 .tar 文件追加到另一个 .tar 文件中。
(2)文件选择和排除
-f <file>:指定归档文件的名称(必须放在选项列表的最后)。
-C <directory>:切换到指定目录进行操作。
--exclude=<pattern>:排除匹配指定模式的文件。
--exclude-from=<file>:从指定文件读取要排除的模式。
--exclude-caches:排除目录中的缓存文件。
--exclude-backups:排除以 ~ 结尾的备份文件。
--exclude-vcs:排除版本控制系统生成的文件(如 .git、.svn 等)。
(3)压缩和解压选项
-z:使用 gzip 压缩归档文件。
-j:使用 bzip2 压缩归档文件。
-J:使用 xz 压缩归档文件。
--lzip:使用 lzip 压缩归档文件。
--lzma:使用 lzma 压缩归档文件。
--lzop:使用 lzop 压缩归档文件。
--zstd:使用 zstd 压缩归档文件。
-a:自动选择压缩方式(基于归档文件的扩展名,如 .tar.gz、.tar.bz2 等)。
-I <command>:使用指定的压缩程序进行压缩或解压。
(4)输出和交互选项
-v:显示详细操作过程(verbose)。
--progress:显示进度条(与 -v 一起使用时)。
-w 或 --interactive:在每次操作前询问用户确认。
--checkpoint:在处理每个文件后显示一个检查点。
--checkpoint-action=<action>:在检查点执行指定的动作,如 echo、dot 等。
--totals:在操作结束后显示处理的总字节数。
--verbose:详细显示处理的信息。
--quiet:尽可能少的输出信息。
(5)文件和权限相关选项
-p:保留文件的原始权限(解压时)。
--same-owner:尝试将解压的文件设为原始所有者(需超级用户权限)。
--no-same-owner:不设置文件所有者。
--same-permissions:保留文件的原始权限(与 -p 相同)。
--no-same-permissions:不保留原始权限,使用当前用户的 umask 设置权限。
-m:在解压时不恢复文件的修改时间,而使用当前时间。
(6)归档管理选项
-k 或 --keep-old-files:解压时保留已有文件,不覆盖。
--overwrite:解压时强制覆盖已有文件。
--remove-files:归档成功后删除原始文件。
--delete:从归档文件中删除指定文件(仅限 gnu tar)。
--keep-newer-files:解压时保留比归档中较新的文件。
--listed-incremental=<file>:创建增量备份或从增量备份恢复。
(7)文件系统和设备选项
-L <N>:分割大于 N 字节的归档文件(对于磁带机)。
--tape-length=<number>:指定磁带长度(对于磁带机)。
--multi-volume:创建或恢复多卷归档文件。
-M:与 --multi-volume 一起使用,处理多卷归档文件。
--use-compress-program=<prog>:使用指定的压缩程序。
(8)其他实用选项
--transform=<expression>:重命名归档中的文件。
--strip-components=<number>:解压时剥离指定数量的路径组件。
--ignore-failed-read:忽略读取错误并继续操作。
--occurrence=<number>:在归档中选择第 number 个出现的文件。
-S:处理稀疏文件(仅归档实际使用的块)。
--no-recursion:不递归进入目录。
-h 或 --dereference:归档符号链接指向的文件而非链接本身。
(3)实例
(1)⭐️创建归档文件:将文件 file1、file2 和 directory 打包到一个名为 archive.tar 的归档文件中。
tar -cvf archive.tar file1 file2 directory
-c: 创建新的归档文件
-v: 显示详细输出,列出被添加到归档中的文件
-f: 指定归档文件的名称
(2)⭐️解压归档文件:解压名为 archive.tar 的归档文件,还原其中包含的文件和目录。
# 解压,去掉了-z选项,因为.tar文件通常没有经过压缩
tar -xvf archive.tar
# 没有经过压缩,你可以使用以下命令解压缩到指定文件夹
tar -xvf 文件名.tar -C 目标文件夹路径
# 名为example.tar的文件,想要将其解压缩到/path/to/target_folder文件夹
tar -xvf example.tar -C /path/to/target_folder
-x: 解压归档文件
-v: 显示详细输出,列出被解压的文件
-f: 指定要解压的归档文件的名称
(3)⭐️压缩归档文件:将名为 directory 的目录打包成一个归档文件,然后使用 gzip 进行压缩,生成名为 archive.tar.gz 的文件。
-c: 创建新的归档文件
-z: 使用 gzip 压缩归档文件
-v: 显示详细输出,列出被添加到归档中的文件
-f: 指定归档文件的名称
(4)列出归档文件中的内容:列出名为 archive.tar 的归档文件中包含的所有文件和目录。
tar -tvf archive.tar
-t: 列出归档文件中的内容
-v: 显示详细输出,列出归档文件中的所有文件和目录
-f: 指定要列出内容的归档文件的名称
(5)追加文件到已存在的归档中:将名为 newfile 的文件添加到已存在的名为 archive.tar 的归档文件中。
tar -rvf archive.tar newfile
-r: 向已存在的归档中追加文件
-v: 显示详细输出,列出被添加到归档中的文件
-f: 指定已存在的归档文件的名称
(6)创建一个经过 gzip 压缩的归档文件:打包 directory 目录下的所有文件和子目录,并使用 gzip 压缩,生成名为 archive.tar.gz 的归档文件。
tar -zcvf archive.tar.gz directory
-z: 表示要使用 gzip 进行压缩。
-c: 表示创建新的归档文件。
-v: 表示详细输出,列出被添加到归档中的文件。
-f archive.tar.gz: 指定归档文件的名称为 archive.tar.gz。
(7)⭐️解压一个已经被 gzip 压缩的归档文件
解压 example.tar.gz 文件,并在当前目录下恢复其中包含的文件和目录。
# 解压tar.gz的压缩包
tar -zxvf example.tar.gz
# 使用tar命令,并指定-C参数来指定目标文件夹
tar -xzvf 文件名.tar.gz -C 目标文件夹路径
# 如果你有一个名为example.tar.gz的文件,想要将其解压缩到/path/to/target_folder文件夹中
tar -xzvf example.tar.gz -C /path/to/target_folder
-z: 表示要使用 gzip 解压归档文件。
-x: 表示解压操作。
-v: 表示详细输出,列出被解压的文件。
-f example.tar.gz: 指定要解压的归档文件的名称为 example.tar.gz。
-C: 后接指定的目标文件夹路径
(4)指定压缩格式
tar 可以结合不同的压缩程序来创建和解压压缩归档文件。
(1)⭐️z : 使用 gzip 压缩。
tar -czvf archive.tar.gz directory
tar -xzvf archive.tar.gz
(2)j: 使用 bzip2 压缩。
tar -cjvf archive.tar.bz2 directory
tar -xjvf archive.tar.bz2
(3)J: 使用 xz 压缩。
tar -cJvf archive.tar.xz directory
tar -xJvf archive.tar.xz
【2】zip和unzip
(1)zip压缩文件
zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。
与 gzip 或 bzip2 不同,zip 可以压缩多个文件或整个目录,并保留文件的目录结构。
(1)语法
zip [options] output.zip file1 file2 ...
# output.zip:生成的压缩文件名。
# file1 file2 ...:要压缩的文件或目录。
(2)参数选项
-r:递归压缩目录及其子目录中的所有文件。
-e:为压缩文件设置密码保护。
-q:静默模式,不显示压缩过程。
-v:显示详细的压缩过程。
-x:排除某些文件或目录,不进行压缩。
-m:压缩后删除原始文件。
-0 到 -9:指定压缩级别,-0 表示存储不压缩,-9 表示最高压缩率,默认是 -6。
(3)⭐️压缩单个文件
zip archive.zip example.txt
此命令会将 example.txt 压缩为 archive.zip。
(4)⭐️压缩多个文件
zip archive.zip file1.txt file2.txt file3.txt
此命令会将 file1.txt、file2.txt 和 file3.txt 压缩到 archive.zip 中。
(5)⭐️递归压缩目录
zip -r archive.zip directory/
此命令会递归压缩 directory 目录及其子目录中的所有文件,并保留目录结构。
(6)⭐️压缩并设置密码保护
zip -e archive.zip file.txt
此命令会压缩 file.txt 并设置密码保护,解压时需要输入密码。
(7)⭐️排除特定文件
zip -r archive.zip directory/ -x "*.log"
此命令会压缩 directory/ 目录下的所有文件,但排除所有 .log 文件。
(8)⭐️压缩后删除原始文件
zip -m archive.zip file.txt
此命令会将 file.txt 压缩为 archive.zip,并删除原始文件 file.txt。
(9)⭐️解压缩文件
使用 unzip 命令来解压缩 .zip 文件:
unzip archive.zip
(2)unzip解压缩文件
unzip 命令用于解压缩 .zip 格式的压缩文件。
unzip 工具能够解压缩包含多个文件和目录的 .zip 文件,并且广泛用于处理跨平台压缩文件。
(1)语法
unzip [options] file.zip
# file.zip:要解压缩的 .zip 文件。
(2)参数
-d <directory>:将解压缩的文件放入指定的目录。
-l:⭐️列出 .zip 文件中的内容,但不解压。
-v:显示详细信息,包括 .zip 文件的结构和压缩率等信息。
-t:测试 .zip 文件的完整性,但不解压。
-n:解压时不覆盖已存在的文件。
-o:解压时覆盖已存在的文件,而不提示。
-x <pattern>:解压时排除指定的文件或目录。
-j:解压时不保留目录结构,将所有文件解压到当前目录中。
(3)⭐️解压缩 .zip 文件
unzip archive.zip
此命令会将 archive.zip 中的内容解压缩到当前目录。
(4)⭐️解压到指定目录
unzip archive.zip -d /path/to/directory
此命令会将 archive.zip 中的内容解压缩到指定的 /path/to/directory 目录中。
(5)⭐️列出 .zip 文件的内容,但是不解压
unzip -l archive.zip
此命令会列出 archive.zip 中的所有文件和目录,但不会实际解压。
(6)测试 .zip 文件的完整性
unzip -t archive.zip
此命令会测试 archive.zip 文件的完整性,以确保文件没有损坏。
(7)解压时排除特定文件
unzip archive.zip -x "*.log"
此命令会解压 archive.zip,但排除所有 .log 文件。
(8)⭐️解压时不覆盖已存在的文件
unzip -n archive.zip
此命令会解压 archive.zip 中的文件,但如果目标目录中已经存在同名文件,则跳过该文件,不进行覆盖。
(9)⭐️解压缩文件并覆盖已存在的文件
unzip -o archive.zip
此命令会在解压 archive.zip 时覆盖目标目录中已存在的同名文件,而不会提示用户。
(10)解压缩时不保留目录结构
unzip -j archive.zip
此命令会解压 archive.zip 中的所有文件到当前目录,而不会保留原始的目录结构。
【3】gzip
【4】压缩和解压jar包
使用jar包运行项目,稍微改下java文件就需要传整个包到服务器,jar包较大流量不够用的,就在服务器解压jar包只修改需要修改的文件再压缩回去即可。
(1)方法一
#(1)解压jar包
unzip myapp.jar -d myapp
cd myapp
#(2)这里修改文件,之后在myapp目录下运行命令
jar cvfm0 myapp.jar META-INF/MANIFEST.MF .
#(3)之后把文件传到原来路径下重新启动即可
mv myapp.jar ..
(2)方法二
首先使用sftp工具把class文件传到jar包所在目录,然后Linux下替换jar包里面的class文件总共分为4步:
#(1)使用jar tvf jar名称 | grep 目标文件名 查询出目标文件在war包中的目录
jar tvf cbam-monitor-task-0.0.1-SNAPSHOT.jar | grep LinuxSystemOperateServiceImpl.class
#(2)使用jar xvf jar名称 目标文件名(copy上面查出的全路径) 将目标文件及所在war包中的目录解压到当前路径
jar -xvf cbam-monitor-task-0.0.1-SNAPSHOT.jar BOOT-INF/classes/com/cuai/cbam/monitor/service/impl/LinuxSystemOperateServiceImpl.class
#(3)修改目标文件的内容,或者将要新的目标文件替换掉提取出来的目标文件
cp LinuxSystemOperateServiceImpl.class BOOT-INF/classes/com/cuai/cbam/monitor/service/impl/LinuxSystemOperateServiceImpl.class
#(4)使用jar uvf jar名称 目标文件名(和步骤(2)中的目标文件名相同) 将新目标文件替换到 jar包中
jar -uvf cbam-monitor-task-0.0.1-SNAPSHOT.jar BOOT-INF/classes/com/cuai/cbam/monitor/service/impl/LinuxSystemOperateServiceImpl.class
注:如果只是改配置文件直接vim命令打开jar包然后命令行模式输入/application.yml搜索文件名,然后按enter键进入文件,编辑后输入:wq保存即可。
【5】java替换jar包中的class文件
在调整java代码过程中会遇到需要改jar包中的class文件的情况,改了如何替换呢?
获取jdk的路径:
(1)找到需要修改class文件的路径
jar -tvf xx.jar | grep xx.class
(2)解压需要替换的文件
在服务器上执行,注意是在jar目录中执行解压
jar -xvf xx.jar xx.class
(3)上传编译后的class文件
将编译好的class文件上传到服务器上,上传目录为1中获取的路径。覆盖原始的class文件。
(4)重新压缩
重新把替换后的class文件压缩到jar中。
jar -uvf xx.jar class路径/xx.class
#class路径就是com包的路径
如果需要替换多个class文件,命令改成即可
jar -uvf xx.jar class路径/
【四】用户和用户组管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
(1)用户账号的添加、删除与修改。
(2)用户口令的管理。
(3)用户组的管理。
【1】Linux系统用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
(1)useradd:添加新的用户账号
(1)语法
添加新的用户账号使用useradd命令,其语法如下
useradd 选项 用户名
(2)参数
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
(3)实例1
创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)。
useradd –d /home/sam -m sam
(4)实例2
新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
useradd -s /bin/sh -g group –G adm,root gem
这里可能新建组:#groupadd group及groupadd adm
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
(2)删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
userdel -r sam
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
(3)修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
# usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
(4)用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
# passwd -d sam
此命令将用户 sam 的口令删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了。
passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
# passwd -l sam
【五】磁盘管理
【六】网络管理
【1】端口被占用的解决方案
端口被占用的解决方案
【2】Linux虚拟机克隆之后使用ip addr无法获取ip地址
Linux虚拟机克隆之后使用ip addr无法获取ip地址
【七】光标管理
【1】基本光标控制
Ctrl + A 或 Home 键:将光标快速移动到命令行的开头。
Ctrl + E 或 End 键:将光标快速移动到命令行的结尾。
【2】单词级别的移动
当需要在较长的命令行中编辑时,单词级别的移动特别有用:
Alt + B:光标向左移动一个单词。
Alt + F:光标向右移动一个单词。
【3】高效的删除技巧
在命令行中快速删除文本可以极大提升效率:
Ctrl + K:删除从光标位置到行尾的所有内容。
Ctrl + U:删除从光标位置到行首的所有内容。
Alt + D:删除从光标位置开始的单词末尾。
Ctrl + W:删除从光标位置到单词开头的内容。
【4】粘贴与历史命令导航
复制粘贴操作和历史命令的快速导航是命令行的另一高级功能:
Ctrl + Y:粘贴最近一次使用Ctrl + K或Ctrl + U删除的内容。
Ctrl + P:浏览历史命令中的上一个命令。
Ctrl + N:浏览历史命令中的下一个命令。
Ctrl + R:开始反向搜索历史命令,可以快速找到之前输入的命令
【5】其他有用的快捷键
Ctrl + L:清屏,等同于输入clear命令。
Ctrl + C:中断当前运行的命令。
Ctrl + D:发送EOF(文件结束符),在输入行为空时可用来关闭终端。
【八】环境搭建
【1】全程离线安装jdk/mysql/nginx/redis/nacos/xxl-job/elasticsearch等
全程离线安装jdk/mysql/nginx/redis/nacos/xxl-job/elasticsearch等