Linux简介

Linux是一个计算机操作系统,类似于Windows,不同之处是Linux是一套开放源代码的程序系统,完全免费。并且还可以获取源码根据自己的需求定制独属于自己的操作系统。它主要被用作于服务器端。

根目录下的文件

拿到一台linux服务器后,进入根目录后使用ls命令查看文件接口如下:

bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
Linux入门 - 图1

:::info 详解:

/bin:二进制文件目录,存放系统命令,包含了许多常用的命令,如ls、cp等等。这些命令通常是系统启动时就需要的。

/boot:系统启动目录,包含了启动Linux所需要的文件,如内核文件、引导程序、配置文件等等。这些文件通常在安装Linux时就已经被放置在该目录下。

/dev:设备文件目录,包含了所有设备的文件。在Linux中,一切皆文件,设备也不例外。每一个硬件设备都对应着一个文件,通过访问这个文件就可以和设备进行交互。

/etc:系统配置文件目录,包含了系统的各种配置文件。这些文件通常由管理员进行修改,用于配置系统的各种行为,如网络配置、用户管理、安全设置等等。

/home:用户主目录,每个用户在该目录下都有一个自己的子目录,用于存储用户的个人文件

/lib:共享库文件目录,包含了许多常用的共享库文件。共享库是一种常用的代码重用方式,多个程序可以共享同一个库文件,从而节约系统资源。

/media:可移动设备挂载点目录,包含了可移动设备(如光盘、U盘等等)的挂载点。当用户将可移动设备插入系统后,系统会将设备挂载到该目录下。

/mnt:临时挂载点目录,包含了临时挂载的文件系统。通常在系统管理中需要对外部存储设备进行挂载时,会将文件系统挂载到该目录下。

/opt:可选应用程序目录,包含了一些可选的应用程序。这些程序通常是由第三方开发者提供的,不包含在系统安装中

/proc:进程和系统信息目录,包含了系统和进程的信息。这些信息是虚拟的,不是真正的文件,但它们可以被读取和修改。

/root:管理员主目录,是管理员的个人主目录

/run:运行时文件目录,包含了系统运行时所需要的文件,如进程ID文件、套接字文件等等。

/sbin:系统二进制文件目录,包含了一些用于系统管理的命令,如系统配置、网络管理等等。

/srv:服务数据目录,包含了一些服务程序所需要的数据文件。这些数据文件是服务程序的核心组成部分,如Web服务器的网页文件等等。

/sys:系统文件目录,包含了许多系统设备和内核的信息。这些信息通常是由内核提供的,包括硬件设备信息、驱动程序信息、系统配置信息等等。

/tmp:临时文件目录,用于存储临时文件。这些文件通常是由系统和应用程序创建的,不需要长期存储。

/usr:Unix软件资源目录,包含了系统的大部分应用程序和文件。该目录下的子目录包括bin、lib、share等等,用于存储不同类型的文件。

/var:可变文件目录,包含了系统运行过程中可变的文件。这些文件通常是由系统和应用程序创建的,包括日志文件、数据库文件、缓存文件等等。

:::

绝对路径和相对路径

文件存储那么就涉及到路径,我们需要知道linux路径规则。

什么是路径,可以简单理解为文件存放的位置,可以通过存放的路径找到对应的文件。

指明一个文件存放的位置,有 2 种方法

  • 使用绝对路径
  • 相对路径。
绝对路径:是以根目录 / 开始的,一层一层的往下找
  1. [root@C20230307141161 ~]# cd bin
  2. -bash: cd: bin: No such file or directory # 可以看到如果直接cd 文件名会破抛错
  3. [root@C20230307141161 bin]# cd /usr/bin/

相对路径:相对路径不是从根目录 / 开始写起,而是从当前所在的工作目录开始写起。使用相对路径表明某文件的存储位置时,经常会用到前面讲到的 2 个特殊目录,即当前目录(用 . 表示)和父目录(用 .. 表示)

  1. [chen@C20230307141161 ~]$ cd ~
  2. # 绝对路径
  3. [chen@C20230307141161 ~]$ cd /home/chen/test-file/
  4. [chen@C20230307141161 test-file]$ ls
  5. [chen@C20230307141161 test-file]$ cd ~
  6. # 相对路径
  7. [chen@C20230307141161 ~]$ cd ./test-file/
  8. [chen@C20230307141161 test-file]$ ls
  9. [chen@C20230307141161 test-file]$ pwd
  10. /home/chen/test-file
  11. [chen@C20230307141161 test-file]$

文件&目录的命名规则

  1. 除了字符**<font style="color:#DF2A3F;">/</font>**之外,所有的字符都可以使用,但注意,在目录名或文件名中,使用某些特殊字符并不是明智之举。例如,在命名时应避免使用 <、>、?、* 和非打印字符等。如果一个文件名中包含了特殊字符,例如空格,那么在访问这个文件时就需要使用引号将文件名括起来。
  2. 目录名或文件名的长度不能超过 255 个字符。
  3. 目录名或文件名是区分大小写的。如 DOG、dog、Dog 和 DOg ,是互不相同的目录名或文件名,但使用字符大小写来区分不同的文件或目录,也是不明智的。
  4. 与 Windows 操作系统不同,文件的扩展名对 Linux 操作系统没有特殊的含义,换句话说,Linux 系统并不以文件的扩展名开分区文件类型。例如,dog.exe 只是一个文件,其扩展名 .exe 并不代表此文件就一定是可执行文件。

系统常识

当我们登录到服务器,第一眼看到的内容是:

  1. [root@C20230307141161 ~]#
这是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?
  • []:这是提示符的分隔符号,没有特殊含义
  • root:显示的是当前的登录用户,现在使用的是 root 用户登录
  • @:分隔符号,没有特殊含义
  • C20230307141161:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
  • #:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。
家目录(又称主目录)是什么? Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家:
  • 超级用户的家目录:/root。
  • 普通用户的家目录:/home/用户名。
用户在自己的家目录中拥有完整权限,所以我们也建议操作实验可以放在家目录中进行。我们切换一下用户所在目录,看看有什么效果。

文件挂载

Linux 系统中一切皆文件,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。 因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为挂载。如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。 挂载:指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件 纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录

:::info

例子:通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。 —- 图 1 中可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。
—- 我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图 2 所示。

:::

画板

总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

命令基本格式

  1. [root@chen ~]# 命令[选项][参数]

:::info 💡Tips:命令的选项用于调整命令功能,而命令的参数是这个命令的操作对象

:::

常用命令

Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令 外部命令

  • 所谓 Shell 内置命令,就是 Shell 自带的命令,这些命令是没有执行文件的;
  • 外部命令就是由程序员单独开发的,所以会有命令的执行文件。

Linux 中的绝大多数命令是外部命令,而 cd 命令是一个典型的 Shell 内置命令,所以 cd 命令没有执行文件所在路径。

cd

cd 命令,是 <font style="color:rgb(68, 68, 68);">Change Directory</font> 的缩写,用来切换工作目录。

语法:

  1. [root@chen ~]# cd [相对路径或绝对路径]
特殊符号 作 用
~ 代表当前登录用户的主目录
~用户名 表示切换至指定用户的主目录
- 代表上次所在目录
. 代表当前目录
.. 代表上级目录

使用案例

  1. [root@chen ~]# pwd
  2. /root
  3. #表示回到自己的主目录,对于 root 用户,其主目录为 /root
  4. [root@chen ~]# cd ~
  5. #没有加上任何路径,也代表回到当前登录用户的主目录
  6. [root@chen xiaochen]# cd
  7. [root@chen ~]#
  8. #代表切换到 xiaochen 这个用户的主目录,亦即 /home/xiaochen
  9. [root@chen ~]# cd ~xiaochen/
  10. #切换到目前的上一级目录
  11. [root@chen xiaochen]# cd ..
  12. #切换到当前目录
  13. [root@chen home]# cd .
  14. [root@chen home]# cd xiaochen/
  15. # 切换到代表上次所在目录
  16. [root@chen xiaochen]# cd -
  17. /home
  18. [root@chen home]#

pwd

pwd命令,是 Print Working Directory (打印工作目录)的缩写,显示当前所在目录的路径

  1. [root@chen ~]# pwd
  2. /root

ls

ls 命令,list 的缩写,最常见的目录操作命令,功能是显示当前目录下的内容。此命令的基本格式为:

  1. [root@chen ~]# ls [选项] 目录名称
选项 功能
-a 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
-A 显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。
-d 仅列出目录本身,而不是列出目录内的文件数据。
-f ls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。
-F 在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket
文件,
代表 FIFO 文件。
-h 以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。
-i 显示 inode 节点信息。
-l 使用长格式列出文件和目录信息。
-n 以 UID 和 GID 分别代替文件用户名和群组名显示出来。
-r 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
-R 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。
-S 以文件容量大小排序,而不是以文件名排序。
-t 以时间排序,而不是以文件名排序。
ls 命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)。

ls -l查看当前目录的文件信息。

  1. [xiaochen@chen test-file]$ ls -l
  2. total 16
  3. -rw-r--r--. 1 xiaochen xiaochen 11 Mar 8 19:55 log.txt
  4. drwxr-xr-x. 3 xiaochen xiaochen 4096 Mar 8 19:56 test1.txt
  5. drwxr-xr-x. 2 xiaochen xiaochen 4096 Mar 8 02:57 test2.txt
  6. drwxr-xr-x. 2 xiaochen xiaochen 4096 Mar 8 02:57 test3.txt
  1. 第一列:规定了不同的用户对文件所拥有的权限,具体权限的含义将在后续章节中讲解。
  2. 第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
  3. 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
  4. 第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
  5. 第五列:大小,默认单位是字节。
  6. 第六列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
  7. 第七列:文件名或目录名。

<font style="color:rgb(68, 68, 68);">ls -l</font> 显示的文件大小是字节,如何使千字节用 KB 显示,兆字节用 MB 显示,而 <font style="color:rgb(68, 68, 68);">-h</font> 选项就是按照人们习惯的单位显示文件大小的,例如:

  1. [xiaochen@chen test-file]$ ls -l -h
  2. total 16K
  3. -rw-r--r--. 1 xiaochen xiaochen 11 Mar 8 19:55 log.txt
  4. drwxr-xr-x. 3 xiaochen xiaochen 4.0K Mar 8 19:56 test1.txt
  5. drwxr-xr-x. 2 xiaochen xiaochen 4.0K Mar 8 02:57 test2.txt
  6. drwxr-xr-x. 2 xiaochen xiaochen 4.0K Mar 8 02:57 test3.txt
  7. [xiaochen@chen test-file]$ ls -lh #缩写
  8. total 16K
  9. -rw-r--r--. 1 xiaochen xiaochen 11 Mar 8 19:55 log.txt
  10. drwxr-xr-x. 3 xiaochen xiaochen 4.0K Mar 8 19:56 test1.txt
  11. drwxr-xr-x. 2 xiaochen xiaochen 4.0K Mar 8 02:57 test2.txt
  12. drwxr-xr-x. 2 xiaochen xiaochen 4.0K Mar 8 02:57 test3.txt

mkdir

mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。
语法: powershell [root@chen ~]# mkdir [-mp] 目录名 + -m 选项用于手动配置所创建目录的权限,而不再使用默认权限。 + -p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。
  1. # 不加-p参数,无法递归创建目录
  2. [xiaochen@chen test-file]$ mkdir ./mkdirTest/xiaochen/test1
  3. mkdir: cannot create directory ‘./mkdirTest/xiaochen/test1’: File exists
  4. # 加上-p参数
  5. [xiaochen@chen test-file]$ mkdir -p ./mkdirTest/xiaochen/test1
  6. [xiaochen@chen test-file]$ ls
  7. log.txt mkdirTest test1.txt test2.txt test3.txt test4.txt
  8. [xiaochen@chen test-file]$ ls -l mkdirTest/
  9. total 4
  10. drwxr-xr-x. 3 xiaochen xiaochen 4096 Mar 8 20:06 xiaochen
  11. [xiaochen@chen test-file]$ ls -l mkdirTest/xiaochen/
  12. total 4
  13. drwxr-xr-x. 2 xiaochen xiaochen 4096 Mar 8 20:06 test1
  14. [xiaochen@chen test-file]$ ls -l mkdirTest/xiaochen/test1/

rmdir

rmdir和mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为:
  1. [root@chen ~]# rmdir [-p] 目录名
-p 选项用于递归删除空目录。

rmdir基本使用

  1. [xiaochen@chen test-file]$ rmdir test5/
  2. [xiaochen@chen test-file]$ ls
  3. log.txt mkdirTest test1.txt test2.txt test3.txt test4.txt

rmdir -p

  1. [xiaochen@chen test-file]$ rmdir ./mkdirTest/xiaochen/test1
  2. [xiaochen@chen test-file]$ ls mkdirTest/xiaochen/ # 已经查不到了
  3. [xiaochen@chen test-file]$ ls
rmdir 命令的作用十分有限,因为只能刪除空目录,所以一旦目录中有内容,就会报错。
  1. # test5下面有个目录test6
  2. [xiaochen@chen xiaochen]$ rmdir test5/
  3. rmdir: failed to remove 'test5/': Directory not empty

touch

作用:创建文件

注意:touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数)。
语法:

  1. [root@chen ~]# touch [选项] 文件名
选项:
  • -a:只修改文件的访问时间;
  • -c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
  • -d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
  • -m:只修改文件的数据修改时间。
  • -t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm
Linux 系统中,每个文件主要拥有 3 个时间参数(通过 stat 命令进行查看),分别是文件的访问时间、数据修改时间以及状态修改时间:
  • 访问时间(Access Time,简称 atime):只要文件的内容被读取,访问时间就会更新。例如,使用 cat 命令可以查看文件的内容,此时文件的访问时间就会发生改变。
  • 数据修改时间(Modify Time,简称 mtime):当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变。
  • 状态修改时间(Change Time,简称 ctime):当文件的状态发生变化,就会相应改变这个时间。比如说,如果文件的权限或者属性发生改变,此时间就会相应改变。

ln

ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:
  • 软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。
  • 硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。

语法:

  1. [root@chen ~]# ln [选项] 源文件 目标文件

硬链接创建

  1. [xiaochen@chen touch-test]$ ln /home/xiaochen/touch-test/link temp
  2. [xiaochen@chen touch-test]$ ls
  3. books link temp
  4. [xiaochen@chen touch-test]$ vi link
  5. [xiaochen@chen touch-test]$ vi temp
  6. # vi link 和vi temp打开的是同一个文件

软连接创建

  1. [xiaochen@chen touch-test]$ ln -s /home/xiaochen/touch-test/link temp1
  2. [xiaochen@chen touch-test]$ ls
  3. books link temp temp1
这里需要注意的是,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。

前置知识:http://c.biancheng.net/view/6313.html

cp

用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。
语法: powershell [root@localhost ~]# cp [选项] 源文件 目标文件 源文件可以有多个,但这种情况下,目标文件必须是目录才可以。
  1. -a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
  2. -d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
  3. -p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
  4. -r:递归复制,用于复制目录;
  5. -i:询问,如果目标文件已经存在,则会询问是否覆盖;
  6. -l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
  7. -s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
  8. -u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用
  1. [xiaochen@chen ~]$ mkdir cp-test
  2. [xiaochen@chen ~]$ ls
  3. cp-test test-file touch-test
  4. [xiaochen@chen ~]$ cd cp-test/
  5. [xiaochen@chen cp-test]$ mkdir copy-file
  6. [xiaochen@chen cp-test]$ mkdir copy-file1
  7. [xiaochen@chen cp-test]$ mkdir copy-file2
  8. [xiaochen@chen cp-test]$ touch copy.txt
  9. [xiaochen@chen cp-test]$ touch copy1.txt
  10. [xiaochen@chen cp-test]$ touch copy2.txt
  11. [xiaochen@chen cp-test]$ ls
  12. copy1.txt copy2.txt copy-file copy-file1 copy.txt
  13. # 把copy.txt复制到copy-file目录中
  14. [xiaochen@chen cp-test]$ cp copy.txt copy-file
  15. [xiaochen@chen cp-test]$ ls copy-file
  16. copy.txt
  17. # 复制改名
  18. [xiaochen@chen cp-test]$ cp copy1.txt ../test-file/copy111.txt
  19. [xiaochen@chen cp-test]$ ls ../test-file/
  20. copy111.txt
  21. # 复制目录只需使用“-r”选项即可
  22. [xiaochen@chen cp-test]$ cp -r copy-file1/ copy-file

rm

rm 是强大的删除命令,它可以永久性地删除文件系统中指定的文件或目录。在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息。此命令的基本格式为:
  1. [root@chen ~]# rm[选项] 文件或目录
选项:
  • -f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。
  • -i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。
  • -r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。

注意:

  • rm一旦删除文件则无法回复,一定要小心使用

基本使用

  1. [xiaochen@chen test-file]$ rm copy111.txt

删除目录

删除目录,则需要使用”-r”选项
  1. [xiaochen@chen test-file]$ rm rm-test/
  2. rm: cannot remove 'rm-test/': Is a directory
  3. [xiaochen@chen test-file]$ rm -r rm-test/

强制删除

如果要删除的目录中有 1 万个子目录或子文件,那么普通的 rm 删除最少需要确认 1 万次。所以,在真正删除文件的时候,我们会选择强制删除
  1. [xiaochen@chen ~]$ rm -rf rm/

mv

mv 命令(move 的缩写),既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。该命令的基本格式如下
  1. [root@chen ~]# mv 【选项】 源文件 目标文件
选项:
  • -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
  • -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
  • -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
  • -v:显示文件或目录的移动过程;
  • -u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级

环境变量

什么是环境变量,Linux环境变量及作用

打包和压缩

打包(归档)指的是将多个文件和目录集中存储在一个文件中;而压缩则指的是利用算法对文件进行处理,从而达到缩减占用磁盘空间的目的。

打包(归档)和压缩(包含两者的区别)

打包tar

Linux 系统中,最常用的归档(打包)命令就是 tar,该命令可以将许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此,该命令还可以从归档文件中还原所需文件,也就是打包的反过程,称为解打包。 使用 tar 命令归档的包通常称为 tar 包(tar 包文件都是以“.tar”结尾)。
  1. [root@localhost ~]#tar [选项] 源文件或目录
此命令常用的选项及各自的含义如下在使用 tar 命令指定选项时可以不在选项前面输入“-”。例如,使用“cvf”选项和 “-cvf”起到的作用一样。
选项 含义
-c 将多个文件或目录进行打包。
-A 追加 tar 文件到归档文件。
-f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v 显示打包文件过程;
  1. # 说明:根目录下有一个tar-test目录,文件夹下有四个测试文件 tar-file-test-1 ~ tar-file-test-4
  2. # 打包文件和目录
  3. # - 文件
  4. [xiaochen@chen tar-test]$ tar -cvf tar-file-test-1.tar tar-file-test-1
  5. [xiaochen@chen tar-test]$ ls
  6. tar-file-test-1 tar-file-test-1.tar tar-file-test-2 tar-file-test-3 tar-file-test-4
  7. # - 目录
  8. [xiaochen@chen ~]$ tar cvf tar-test.tar tar-test/
  9. tar-test/
  10. tar-test/tar-file-test-1.tar
  11. tar-test/tar-file-test-3
  12. tar-test/tar-file-test-4
  13. tar-test/tar-file-test-2
  14. tar-test/tar-file-test-1
  15. [xiaochen@chen ~]$ ls
  16. mv-test tar-test tar-test.tar test-file touch-test
  17. # tar命令也可以打包多个文件或目录,只要用空格分开即可
  18. [xiaochen@chen tar-test]$ tar cvf test234.tar tar-file-test-2 tar-file-test-3 tar-file-test-4
  19. tar-file-test-2
  20. tar-file-test-3
  21. tar-file-test-4
  22. [xiaochen@chen tar-test]$ ls
  23. tar-file-test-1 tar-file-test-1.tar tar-file-test-2 tar-file-test-3 tar-file-test-4 test234.tar

压缩目录

压缩命令不能直接压缩目录,必须先用 tar 命令将目录打包,然后才能用 gzip 命令或 bzip2 命令对打包文件进行压缩
  1. [xiaochen@chen tar-test]$ gzip test234.tar
  2. [xiaochen@chen tar-test]$ ls
  3. tar-file-test-1 tar-file-test-1.tar tar-file-test-2 tar-file-test-3 tar-file-test-4 test234.tar.gz
  4. #gzip命令会把test234.tar压缩成test234.tar.gz

tar解打包操作

语法

  1. [root@chen ~]#tar [选项] 压缩包
选项 含义
-x 对 tar 包做解打包操作。
-f 指定要解压的 tar 包的包名。
-t 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。
-C 目录 指定解打包位置。
-v 显示解打包的具体过程。
其实解打包和打包相比,只是把打包选项 “-cvf” 更换为 “-xvf”
  1. # 解打包
  2. [xiaochen@chen tar-test]$ tar xvf test23.tar
  3. # 解打包到指定文件
  4. [xiaochen@chen tar-test]$ tar xvf test23.tar -C xvf
  5. [xiaochen@chen tar-test]$ ls xvf
  6. tar-file-test-2 tar-file-test-3
如果只想查看文件包中有哪些文件,则可以把解打包选项 “-x” 更换为测试选项 “-t”

tar打包压缩

当 tar 命令同时做打包压缩的操作时,其基本格式如下:
  1. [root@chen ~]#tar [选项] 压缩包 源文件或目录
常用的选项有以下 2 个,分别是:
  • -z:压缩和解压缩 “.tar.gz” 格式;
  1. # 直接打包为 .tar.gz
  2. [xiaochen@chen tar-test]$ tar -zcvf xvf.tar.gz xvf/
  3. xvf/
  4. xvf/tar-file-test-3
  5. xvf/tar-file-test-2
  6. [xiaochen@chen tar-test]$ ls
  7. tar-file-test-1.tar.gz tar-file-test-2 tar-file-test-3 tar-file-test-4 test234.tar.gz test23.tar xvf xvf.tar.gz
  8. [xiaochen@chen tar-test]$
  9. # 解压缩也只是在解打包选项 "-xvf" 前面加了一个 "-z" 选项
  10. [xiaochen@chen temp]$ tar -zxvf xvf.tar.gz
  11. xvf/
  12. xvf/tar-file-test-3
  13. xvf/tar-file-test-2
  14. [xiaochen@chen temp]$ ls
  15. xvf xvf.tar.gz
  16. # 前面讲的选项 "-C" 用于指定解压位置、"-t" 用于查看压缩包内容,在这里同样适用。

压缩文件&目录

  1. [root@chen ~]#zip [选项] 压缩包名 源文件或源目录列表
注意,zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩时使用。
选项 含义
-r 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。
-m 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。
-v 显示详细的压缩过程信息。
-q 在压缩的时候不显示命令的执行过程。
-压缩级别 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
-u 更新压缩文件,即往压缩文件中添加新文件。

如果系统没安装zip,请先安装

  1. apt-get install zip yum install zip

基本使用

  1. [xiaochen@chen zip-test]$ zip test.zip zip1
  2. adding: zip1/ (stored 0%)
  3. [xiaochen@chen zip-test]$ ls
  4. test.zip zip1 zip2
  5. # 同时压缩多个文件
  6. [xiaochen@chen zip-test]$ zip test1 zip1 zip2/
  7. adding: zip1/ (stored 0%)
  8. adding: zip2/ (stored 0%)
  9. [xiaochen@chen zip-test]$ ls
  10. test1.zip test.zip zip1 zip2

解压zip文件

unzip 命令可以查看和解压缩 zip 文件。该命令的基本格式如下:
  1. [root@chen ~]# unzip [选项] 压缩包名
选项 含义
-d 目录名 将压缩文件解压到指定目录下。
-n 解压时并不覆盖已经存在的文件。
-o 解压时覆盖已经存在的文件,并且无需用户确认。
-v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
-t 测试压缩文件有无损坏,但并不解压。
-x 文件列表 解压文件,但不包含文件列表中指定的文件。
  1. #基本使用
  2. [xiaochen@chen zip-test]$ unzip test.zip
  3. Archive: test.zip
  4. #解压到指定目录
  5. [xiaochen@chen zip-test]$ unzip -d unzipTest/ test1.zip
  6. Archive: test1.zip
  7. creating: unzipTest/zip1/
  8. creating: unzipTest/zip2/
  9. [xiaochen@chen zip-test]$ ls unzipTest/
  10. zip1 zip2

gzip

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为“.gz”。gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件。
  1. [root@chen ~]# gzip [选项] 源文件
选项 含义
-c 将压缩数据输出到标准输出中,并保留源文件。
-d 对压缩文件进行解压缩。
-r 递归压缩指定目录下以及子目录下的所有文件。
-v 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
-l 对每一个压缩文件,显示以下字段:
+ 压缩文件的大小;
+ 未压缩文件的大小;
+ 压缩比;
+ 未压缩文件的名称。
-数字 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。
  1. # 基本使用
  2. [xiaochen@chen gzip-test]$ gzip one.txt
  3. [xiaochen@chen gzip-test]$ ls
  4. #压缩文件生成,但是源文件也消失了
  5. one.txt.gz
  6. #保留源文件压缩
  7. [xiaochen@chen gzip-test]$ gzip -c two.txt > two.txt
  8. [xiaochen@chen gzip-test]$ ls
  9. one.txt.gz two.txt
  10. [xiaochen@chen gzip-test]$
  11. # 压缩目录
  12. #建立测试目录,并在里面建立几个测试文件
  13. [xiaochen@chen gzip-test]$ mkdir test
  14. [xiaochen@chen gzip-test]$ touch test/test1
  15. [xiaochen@chen gzip-test]$ touch test/test2
  16. [xiaochen@chen gzip-test]$ touch test/test3
  17. [xiaochen@chen gzip-test]$ gzip -r test/
  18. [xiaochen@chen gzip-test]$ ls
  19. #但是查看发现test目录依然存在,并没有变为压缩文件
  20. one.txt.gz test two.txt
  21. [xiaochen@chen gzip-test]$ ls test/
  22. test1.gz test2.gz test3.gz
  23. [xiaochen@chen gzip-test]$
  24. #原来gzip命令不会打包目录,而是把目录下所有的子文件分别压缩

gunzip

gunzip 是一个使用广泛的解压缩命令,它用于解压被 gzip 压缩过的文件(扩展名为 .gz)。对于解压被 gzip 压缩过的文件,还可以使用 gzip 自己,即 gzip -d 压缩包。
  1. [root@chen ~]# gunzip [选项] 文件
-r 递归处理,解压缩指定目录下以及子目录下的所有文件。
-c 把解压缩后的文件输出到标准输出设备。
-f 强制解压缩文件,不理会文件是否已存在等情况。
-l 列出压缩文件内容。
-v 显示命令执行过程。
-t 测试压缩文件是否正常,但不对其做解压缩操作。
  1. # 基本使用
  2. [xiaochen@chen gzip-test]$ gunzip one.txt.gz
  3. [xiaochen@chen gzip-test]$ ls
  4. one.txt test two.txt
  5. [xiaochen@chen gzip-test]$
  6. # 要解压缩目录下的内容,则需使用 "-r" 选项
  7. [xiaochen@chen gzip-test]$ ls test/
  8. test1.gz test2.gz test3.gz
  9. [xiaochen@chen gzip-test]$ gunzip -r test/
  10. [xiaochen@chen gzip-test]$ ls test/
  11. test1 test2 test3

bzip2

bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以“.bz2”为后缀的压缩包。 “.bz2”格式是 Linux 的另一种压缩格式,从理论上来讲,”.bz2”格式的算法更先进、压缩比更好;而 “.gz”格式相对来讲的时间更快。 bzip2 命令的基本格式如下:
  1. [root@chen ~]# bzip2 [选项] 源文件
选项 含义
-d 执行解压缩,此时该选项后的源文件应为标记有 .bz2 后缀的压缩包文件。
-k bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
-f bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
-t 测试压缩包文件的完整性。
-v 压缩或解压缩文件时,显示详细信息。
-数字 这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高
  1. # 基本使用
  2. [xiaochen@chen bzip-test]$ bzip2 test1.txt
  3. [xiaochen@chen bzip-test]$ ls
  4. test1.txt.bz2
  5. [xiaochen@chen bzip-test]$ mkdir test
  6. [xiaochen@chen bzip-test]$ ls
  7. test test1.txt.bz2

bunzip2

要压“.bz2”格式的压缩包文件,除了使用“bzip2 -d 压缩包名”命令外,还可以使用 bunzip2 命令。
bunzip2 命令的使用和 gunzip 命令大致相同,bunzip2 命令只能用于解压文件,即便解压目录,也是解压该目录以及所含子目录下的所有文件。
  1. [root@chen ~]# bunzip2 [选项] 源文件
选项 含义
-k 解压缩后,默认会删除原来的压缩文件。若要保留压缩文件,需使用此参数。
-f 解压缩时,若输出的文件与现有文件同名时,默认不会覆盖现有的文件。若要覆盖,可使用此选项。
-v 显示命令执行过程。
-L 列出压缩文件内容。
  1. # 基本使用
  2. [xiaochen@chen bzip-test]$ bunzip2 test1.txt.bz2
  3. [xiaochen@chen bzip-test]$ ls
  4. test test1.txt

文本编辑器

vim

众多 Linux 发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 vi 文本编辑器,但建议大家使用 Vim。 如果在命令行模式下输入“vim”,输出结果为“Command not found”,则表示此系统中未安装 Vim。安装如下:
  1. # 安装过程中需要输入 y 确认
  2. yum install vim
  3. # 自动化安装
  4. yum -y install vim

vim有三种工作模式

  • 命令模式:Vim 编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 (k、j、h、l) 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
快捷键 功能描述
h 光标向左移动一位
j 光标向下移动一行(以回车为换行符),也就是光标向下移动
k 光标向上移动一行(也就是向上移动)
l 光标向右移动一位
  • 输入模式:Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。
使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc 键即可返回命令模式。
快捷键 功能描述
i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令
  • 编辑模式:编辑模式用于对文件中的指定内容执行保存、查找或替换等操作
使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了

vim打开文件

  1. [xiaochen@chen vi-test]$ vim test.txt
Vi 使用的选项 说 明
vim filename 打开或新建一个文件,并将光标置于第一行的首部
vim -r filename 恢复上次 vim 打开时崩溃的文件
vim -R filename 把指定的文件以只读方式放入 Vim 编辑器中
vim + filename 打开文件,并将光标置于最后一行的首部
vi +n filename 打开文件,并将光标置于第 n 行的首部
vi +/pattern filename 打开文件,并将光标置于第一个与 pattern 匹配的位置
vi -c command filename 在对文件进行编辑前,先执行指定的命令

vim编辑

vim插入文本

从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,使用不同的键,光标所处的位置不同,如上

vim查找文本

快捷键 功能描述
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行
/abc$ 查找以 abc 为行尾的行
?abc 从光标所在为主向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定
在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 “shenchao” 和 “ShenChao” 会得到不同的结果。

vim替换文本

快捷键 功能描述
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
:g/a1/a2/g 将文件中所有的 a1 都用 a2 替换

vim删除文本

快捷键 功能描述
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后 n 行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从 a1 行到 a2 行的文本内容
注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 “p” 键,就可以将刚才删除的内容又粘贴到此处。

vim复制粘贴

快捷键 功能描述
p 将剪贴板中的内容粘贴到光标后
P(大写) 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
yy 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw 将光标位置的单词复制到剪贴板
常用快捷键 需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按下 “J” 键 如果不小心误删除了文件内容,则可以通过 “u” 键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次 “u” 键。

vim保存退出文本

vim保存和退出是在编辑模式中操作的

命令 功能描述
:wq 保存并退出 Vim 编辑器
:wq! 保存并强制退出 Vim 编辑器
:q 不保存就退出 Vim 编辑器
:q! 不保存,且强制退出 Vim 编辑器
:w 保存但是不退出 Vim 编辑器
:w! 强制保存文本
:w filename 另存到 filename 文件
x! 保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令
ZZ 直接退出 Vim 编辑器

光标移动快捷

快捷键 功能描述
0 或 ^ 光标移动至当前行的行首
$ 光标移动至当前行的行尾
n$ 光标移动至当前行只有 n 行的行尾,n为数字

vim撤销和恢复

快捷键 功能
u(小写) undo 的第 1 个字母,功能是撤销最近一次对文本做的修改操作。
Ctrl+R Redo 的第 1 个字母,功能是恢复最近一次所做的撤销操作。
U(大写) 第一次会撤销对文本(光标所在行)做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作

文本的处理

cat

cat 命令可以用来显示文本文件的内容,也可以把几个文件内容附加到另一个文件中,即连接合并文件。
  1. [root@chen ~]# cat [选项] 文件名
  2. 或者
  3. [root@chen ~]# cat 文件1 文件2 > 文件3
  1. # 合并文件
  2. [xiaochen@chen vi-test]$ cat file1 file2>file3
  3. # cat查看文件内容
  4. [xiaochen@chen vi-test]$ cat file3
  5. test file 1
  6. test file 2
选项 含义
-A 相当于 -vET 选项的整合,用于列出所有隐藏符号;
-E 列出每行结尾的回车符 $;
-n 对输出的所有行进行编号;
-b 同 -n 不同,此选项表示只对非空行进行编号。
-T 把 Tab 键 ^I 显示出来;
-V 列出特殊字符;
-s 当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。
cat 命令用于查看文件内容时,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。不过 Linux 可以使用PgUp+上箭头组合键向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。大文件不推荐使用

more

more 命令可以分页显示文本文件的内容,使用者可以逐页阅读文件中内容。解决了cat不能查看大文件的问题。语法:
  1. [root@chen ~]# more [选项] 文件名

Linux more命令:分屏显示文件内容

head

head 命令可以显示指定文件前若干行的文件内容,其基本格式如下:
  1. [root@chen ~]# head [选项] 文件名
选项 含义
-n K 这里的 K 表示行数,该选项用来显示文件前 K 行的内容;如果使用 “-K” 作为参数,则表示除了文件最后 K 行外,显示剩余的全部内容。
-c K 这里的 K 表示字节数,该选项用来显示文件前 K 个字节的内容;如果使用 “-K”,则表示除了文件最后 K 字节的内容,显示剩余全部内容。
-v 显示文件名;
注意,如不设置显示的具体行数,则默认显示 10 行的文本数据。

less

less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容。 区别:使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
  1. [root@chen ~]# less [选项] 文件名

Linux less命令:查看文件内容

tail

tail 命令和 head 命令正好相反,它用来查看文件末尾的数据,其基本格式如下:
  1. [root@chen ~]# tail [选项] 文件名
选项 含义
-n K 这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。
-c K 这里的 K 指的是字节数,该选项表示输出文件最后 K 个字节的内容,在此基础上,使用 -c +K 则表示从文件第 K 个字节开始输出。
-f 输出文件变化后新增加的数据。

默认显示最后10行。

最常用: 监听文件的新増内容。tail 命令有一种比较有趣的用法,可以使用 “-f” 选项来监听文件的新増内容

  1. [xiaochen@chen vi-test]$ tail -f json
  2. "Name": "test",
  3. "count": 4,
  4. "unitPrice": 24.52
  5. }
  6. ]
  7. }
  8. ]
  9. }
  10. ]
  11. }}}
这条命令会显示文件的最后 10 行内容,而且光标不会退出命令,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示。因此,这时如果向文件中追加一些数据(需要开启一个新终端)
如果想终止输出,按【Ctrl+c】键中断 tail 命令即可。

🚩grep

有时不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用 grep 命令 grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。
  1. [root@chen ~]# grep [选项] 模式 文件名

Linux grep命令详解:查找文件内容

  1. # 基本使用
  2. [xiaochen@chen vi-test]$ grep 200 json
  3. "code": 200,
  4. "hospitalCode": "42504839200",
  5. "code": 200,
  6. "hospitalCode": "42504839200",
  7. "code": 200,
  8. "hospitalCode": "42504839200",
  9. # 多个文件搜索
  10. [xiaochen@chen vi-test]$ grep 200 json json1
  11. json: "code": 200,
  12. json: "hospitalCode": "42504839200",
  13. json: "code": 200,
  14. json: "hospitalCode": "42504839200",
  15. json: "code": 200,
  16. json: "hospitalCode": "42504839200",
  17. json1: "code": 200,
  18. json1: "hospitalCode": "42504839200",
  19. json1: "code": 200,
  20. json1: "hospitalCode": "42504839200",
  21. json1: "code": 200,
  22. json1: "hospitalCode": "42504839200",
  23. # 如果想知道匹配搜索的条数,添加参数 -c
  24. [xiaochen@chen vi-test]$ grep -c 200 json json1
  25. json:6
  26. json1:6

🚩sed

Linux sed命令完全攻略(超级详细)

🚩awk

Linux awk命令详解

碰到的问题

  1. XShell无法通过账号密码登录,只能通过public key登录问题
  1. 修改/etc/ssh/sshd_config文件配置,有两处要修改:
  2. [root@chen ~]# vim /etc/ssh/sshd_config
  3. # 第1处:PasswordAuthentication no 改为yes
  4. PasswordAuthentication yes 是否可以密码认证,修改成yes
  5. 打开后有两种修改方式
  6. 方式一:找到#PasswordAuthentication yes 使用i命令进行编辑 去除前面的#,点击esc
  7. 方式二: 把下面的PasswordAuthentication no 改为yes
  8. 2处:找到并用#注释掉这行:PermitRootLogin prohibit-password
  9. 新建一行 添加:PermitRootLogin yes
  10. 修改好后然后输入:wq保存,
  11. 最后一定要执行重启ssh服务。OK,可以登录了
  12. [root@chen ~]# service ssh restart