2

开篇总想絮叨两句

之前一直没系统的学习过 Linux,也就简单的用过Ubuntu,或者在本地的虚拟机上,搭了搭开发的环境,以及半查半折腾的在阿里云的 CentOS 系统上部署了一个博客,现在因为有时候用的稍微多了一点,正好家里也有几本Linux的数据,那就把这一部分好好学习,顺便整理一下,难免会有一些错误,有什么问题希望大家不吝赐教 ~

(一) 强大的 Shell

(1) terminal

shell 是什么,可能大家还有点迷糊,但是 terminal 这个词或许会感觉熟悉一点,是的,一般在学习阶段,很多人安装系统的时候会选择安装图形化界面,相比较纯图形化界面,图形化界面看起来会友好一些,而在看一些书籍,视频的时候,我们会非常频繁的使用到一个名叫 terminal (终端) 的东西,它在图形用户界面中,也算是一个非常重要的东西了,我们就从这里讲起,Rush !!!

A:基本定义

终端(termimal),它确切的叫法是终端仿真器(termimal emulator),当然了大部分人更习惯于叫前者

  • 在 linux 下使用组合键 ctrl+alt+T 打开的就是终端
  • 当然,鼠标右键点击 open termimal 也是一样的

起码从咱们用户看起来的角度来看,它提供了一个命令的输入输出环境,也就是说你想执行点啥命令操作,都可以在这里面通过具体的命令语法去执行

B:terminal 和 Shell 的关系

标题是 Shell ,这都说了半天了,咋还没扯到呢

来了,来了,他们两个的关系很密切,在图形界面中的用户终端中,可以在这里用来启动 bash(也就是 Shell,因为 Linux 默认是使用 bash 后面你就知道,用它的快乐你想象不到)也就是说当你打开一个 terminal 的时候,terminal 和 Shell 会被操作系统关联起来,当我们在 terminal 中输入命令后,shell 就负责解释命令

随意将 terminal 简单的理解成一个 “工具” 的概念也是可以的

下图就是分别在 乌班图 和 CentOS 下的终端界面

(2) Shell

A:基本定义

shell是一个命令行解释器,是 Linux 内核的一个外壳,负责外界与 Linux 内核的交互

shell接收用户或者其他应用程序的命令,然后将这些命令转化成内核能理解的语言并传给内核,内核执行命令完成后将结果返回给用户或者应用程序

B:什么是Linux 内核 ?

上面一直又谈到了 Linux 的内核,这又是什么呢?

  • 计算机硬件包括运算器,控制器,存储器,输入/ 输出设备等等,而内核的作用就是让各种硬件设备各司其职且又能协同运行
  • 也就是说 Linux 系统的内核负责完成对硬件资源的分配、调度任务
  • 但是内核对于系统的正常运行,是绝对重要的一部分,所以我们一般不直接编译内核参数,而是用户通过基于系统调用接口开发出的程序或者服务来管理计算机

C:什么是 Bash ?

早在 UNIX 时期,shell 有着许多版本,比如sh、C SHell、K SHell、等等,每一种Shell都各有特点

Bash(Bournce-Again SHell)这个shell是Bourne Shell的增强版本

同样现在大部分主流的 Linux 默认的选择了Bash解释器

  • 通过上下方向键来调取过以往执行过的命令
  • 命令或者参数仅需输入前几位就可以通过Tab键补全
  • 具有强大的批处理脚本
  • 具有实用的环境变量功能

D:Shell 的地位

通过这一张图片,大家应该就很好理解定义中所说 Shell 所处的地位了,简单的说,它就像是一个翻译官,帮助 用户与内核之间交流,用户想要执行一些 “命令” 就去告诉 Shell ,然后 Shell 再去和内核沟通,最终调用相应的程序或者服务去完成

到这里,小小的总结一下:terminal 这个工具活跃在为用户服务的面前,而 Shell 活跃在为用户服务的背后

(二) 提前说明

后面继续学习的东西,基本不涉及到图形界面了,不过作为初学,仍然可以在桌面中调出 terminal 进行使用,图形化会使得学习的压力也小一点,对我个人而言,平时 Linux 更多的是用来做服务器,稳定,可靠,安全是第一个考虑的问题,图形界面虽然简单,但是却需要安装更多服务,开放更多的端口,同时占用更多的系统资源,所以下面都涉及图形界面的讲解,再次强调一下,Ubuntu 和 CentOS 以及其他发行版本有些命令是不同的,但是基础的基本也都差不多的,处于学习的态度,大家完全可以在学习中使用不同的发行版本试一试,如果你是一名开发的选手,我更推荐你在 CentOS 上实践,反正不会咱就学,不对咱就改呗

(三) 命令的基本格式

首先看一下命令的基本格式

基本格式:command [options] [arguments]

即:命令 [选项] [参数]

注意:别忘了命令后加空格

命令格式中的 [] 代表可选,有些命令可以不写选项或参数,也能执行

下面用常见的 ls 命令讲解一下(具体的知识点会放到下面说,这里只为了演示基本格式)

ls 的基本作用就是展开目录,而不同的选项、参数

  • 直接输入 ls 指令(无选项参数)后回车,那是因为有默认参数存在

  • 输入 ls -l 显示出详细信息,这是一个短格式指令,所以使用 一个减号调用 -

  • 输入ls --all 列出包括隐藏文件的指令,这是这是一个长格式指令,它是英文完整单词,所以使用 两个减号调用 --

一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项,就例如上面使用的长格式指令 ls --all 和其对应的短格式指令 ls -a的效果是一致的

但是也有一些例外比如刚开始的 ls 命令的短格式选项 -l 就没有对应的长格式选项

(四) Linux 文件和目录管理

(1) 目录结构

Linux 和 Windows 还是有很大区别的,在正式学习命令之前,还有一个知识需要补充介绍,也就是目录的结构

我拿一台空着的乌班图给大家做演示,当然不同的发行版本,还是有区别的,不过这一篇主要是一些常用的基本命令,所以也没关系,大家也可以CentOS 等等

大家可以在终端输入 ls / 看一下根目录下有些什么东西

当然了,其中自然有一些是比较重要的,我们把关键的一些介绍一下

  • bin(binary) 存放二进制的可执行文件(这个目录存放着最经常使用的命令)

    • 例如 ls mkdir 就存在此处
  • sbin(super user binary):这里存放的是系统管理员使用的系统管理程序。
  • boot:这里存放的是引导 Linux 时使用的各种文件
  • dev(divices):该目录下存放的是 Linux 的设备文件
  • etc(etcetera):这个目录用来存放所有的系统管理所需要的配置文件和子目录
  • home:存放用户文件的根目录,其中有按照用户名称命令的文件夹,里面有相关的文件(非Root用户)
  • root:超级用户目录,即Root用户的主目录
  • lib(library):这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
  • usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
  • var:这个目录中存放着运行时需要改变数据的文件,包括各种日志文件
  • media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下

我们只摘出来其中几个重要的介绍,当然还有一些就需要大家自己去探索一下啦~

(2) 绝对路径和相对路径

Linux 系统中所有的文件(目录)都被分为以根目录 “/” 开始的倒置的树状结构,学过数据结构中 “树” 这个结构,大家应该就明白了(节点上少,下多,像一个倒过来的树)

Linux使用正斜线 / 而不是反斜线 \ 来在文件路径中划分目录

在 Shell 中:

  • ~ 代表用户主目录
  • / 代表根目录
  • . 代表当前目录
  • .. 代表当前目录的上一级目录

这几个点,作为一个默认已知的基础铺垫,后面配合各种命令会及极其常用

A:绝对路径演示

最重要的一点:绝对路径一定是从根目录 / 写起的

例如,通过绝对路径打开 usr 文件夹 下的 src 目录

我们以 root 用户目录出发(cd 为切换目录,pwd 为显示当前路径 后面会介绍,这里主要看绝对和相对路径的特点)

root@ubuntu:~# cd /usr/src
root@ubuntu:/usr/src# pwd
/usr/src

上面的例子,即使我们身在 root 目录下,但是通过绝对路径我们仍然可以跳转到我们想要去的目录下

root@ubuntu:~# cd usr/src
bash: cd: usr/src: No such file or directory

如果我们不从 / 写起,就会提醒找不到这个文件或者目录

B:相对路径演示

依旧从 root 目录出发,由于 root 的前一级目录就是 / 根目录,所以可以通过 cd .. 返回上一级目录,或者直接通过 cd / 回到根目录,由于 usr 就在根目录下,所以可以通过 cd ./usr 或者cd usr相对路径的写法进入,为了演示,我都拆开写了,大家也可以在 root 目录下,使用 ../usr 直接打开 usr目录

root@ubuntu:~# cd ..
root@ubuntu:/# cd ./usr
root@ubuntu:/usr# cd ./src
root@ubuntu:/usr/src# pwd
/usr/src

C:总结

绝对路径永远是是相对于根路径 / 的,文件不动,则它的绝对路径不变

而相对路径是相对于当前所在目录而言的,当前所在目录改变,文件的相对路径也会变化

(3) 第一次使用命令的注意点

A:登录后的显示

当你登录后,首次出现的就是在用户(或超级用户)的目录下,由于你登录的账户不同可能会有不同的显示

  • 左侧显示用户名 右侧显示 $ 即普通用户登录,例如:gzah7799@ubuntu:~$
  • 左侧显示 root 右侧为 # 即超级用户状态登录,例如:root@ubuntu:~#

我这里选择了使用 root 直接登录,当然你也可以选择使用普通用户登录,但是最好给其赋予 root 权限,否则学习过程中,有一些命令和操作是没有权限执行的

补充:不同的发行版本中,提示符的外观可能有些许不同,但是基本是一致的,通常会包括 (用户名@机器名 目录 和 #/$ 符号

B:家目录

用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家目录(也称用户的主目录)

  • 超级用户的家目录:/root
  • 普通用户的家目录:/home/用户名

登录后也会直接跳转到这个目录下

(4) 目录切换(cd)

cd 命令用于切换工作路径:也就是说,输入 cd接着输入绝对路径或者相对路径就可以完成目录的切换了

这个命令也太常用了,通过cd 可以非常灵活的切换工作目录,除了上面演示的绝对路径以及相对路径的写法,还有一些非常方便的写法可以搭配在 cd 后面

~ 代表当前登录用户的主目录
~ 用户名 表示切换至指定用户的主目录
- 代表上次所在目录
. 代表当前目录
.. 代表上级目录

随便写一个,大家可以参考下格式

root@ubuntu:/usr/src# cd ~
root@ubuntu:~#

(5) 显示当前路径(pwd)

使用pwd命令可以显示当前用户所处的工作目录的绝对路径,pwd 是 Print Working Directory 的缩写

注意点:

Ubuntu 默认的终端下面,进入很多层的目录后,前面那个提示符会显示完整的路径,我感觉不是很舒服,尤其是进去的目录比较深的时候,这一点可以度娘一下,把它改掉

  • root@ubuntu:/etc/vim#

CnetOS,虽然也显示出当前所在的目录,但它只会列出整个路径中最后的那一个目录,同样是 /etc/vim 文件夹,下面这种前面只显示 vim

  • root@localhost vim]#

(6) 查看目录下文件(ls)

通过前面的 cd 以及 pwd 命令我们已经在 Linux 文件系统中乱跑了,但是再怎么跑也得有个方向,ls 就可以帮助我们看到你跑到(切换)的这个地方(目录)放着哪些文件,然后再决定进行下一步操作

A:基本用法

所以这个 ls 也是非常常用的,使用频率甚至超过了cd

  • 只需要输入 ls 就可以直接查看当前工作目录下的一系列文件和子目录

  • 除此之外,还可以指定目录查看,例如指定查看 usr 目录下的内容
root@ubuntu:/# ls /usr
bin  games  include  lib  local  sbin  share  src
  • 还有一种,就是指定多个目录查看,例如同时查看普通用户主目录以及 usr 目录
root@ubuntu:/# ls /home/gzah7799 /usr
/home/gzah7799:
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos

/usr:
bin  games  include  lib  local  sbin  share  src

B:选项和参数

搭配一点参数,带来加倍的快乐,当然这里都是短指令,例如 -a 的长指令是 -all 我都没有列举哈,我摘了几个常用的,不过这几个里面也主要用 -a 和 -l 比较多

选项(短) 含义
-a 显示所有文件及目录,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
-A 显示所有文件及目录,包括隐藏文件,但不包括 . 与 .. 这两个目录
-F 在文件或目录名后加上文件类型的指示符号例如,* 代表可运行文件,/代表目录,= 代表 socket 文件,\ 代表 FIFO 文件
-l 使用长格式列出文件和目录信息
-r 将文件以相反次序显示(原定依英文字母次序)
-S 用文件和目录大小排序
-t 将文件依建立时间的先后次序列出
-R 递归处理,将指定目录下所有文件及子目录及子目录中的文件一并列出(别乱试 - -)

-l 举个例子:

补充:llls -l 的效果是一样的,可以理解为简写或者别名

root@ubuntu:/usr# ls -l
total 92
drwxr-xr-x   2 root root 49152 Apr 21 07:17 bin
drwxr-xr-x   2 root root  4096 Jul 24  2018 games
drwxr-xr-x  34 root root  4096 Apr 15 06:53 include
drwxr-xr-x 131 root root  4096 Apr 17 02:15 lib
drwxr-xr-x  10 root root  4096 Jul 24  2018 local
drwxr-xr-x   2 root root 12288 Apr 17 02:20 sbin
drwxr-xr-x 246 root root 12288 Apr 17 02:16 share
drwxr-xr-x   6 root root  4096 Apr 21 07:17 src

C:长列表格式

前面看到了使用 cd -l使得目录下的内容通过长格式显示出了结果,而这种格式包含着很多的有用信息,简单看一下它提供了哪些

输出信息 信息描述
d 文件类型:“-”代表普通文件,d 表示目录
drwxr-xr-x 文件权限,以三个分,共分为三组,在后面的权限专篇文章,我会专门去讲解这一点
2 文件连接数
root 文件的用户所有者
root 文件的用户群所有者
49152 文件长度(也就是文件大小,不是文件的磁盘占用量)
Apr 21 07:17 文件的更改时间(mtime),或者是文件的最后访问时间(atime)
bin 文件 / 目录名称

(7) Linux创建目录(mkdir命令)

基本用法:mkdir [参数] 目录名称

  • -m<目录属性>或—mode<目录属性> :建立目录的同时设置目录的权限,而不是采用默认目录权限

    • 无参数默认创建目录dir,其默认权限为755,加-m 权限为777
  • -p--parents :若上层目录没有建立,则递归帮你创建上层目录

权限的问题我们仍不多考虑,放到后面,这里分别演示一下无参数创建以及递归创建

root@ubuntu:~# mkdir ideal-20
root@ubuntu:~# cd ideal-20
root@ubuntu:~/ideal-20# mkdir -p a/b
root@ubuntu:~/ideal-20# cd a
root@ubuntu:~/ideal-20/a# cd b
root@ubuntu:~/ideal-20/a/b# pwd
/root/ideal-20/a/b

(8) 删除空目录(rmdir)

基本用法:rmdir [选项] [目录]

  • -p:递归删除目录,当子目录删除其父目录为空时,也一同删除
  • -v:输出处理的目录详情

演示:

root@ubuntu:~/ideal-20/a/b# rmdir /root/ideal-20/a/b

如果目录不为空就会报错

rmdir: failed to remove '/root/ideal-20': Directory not empty

(9) 创建文件 (touch)

创建好了目录,就可以开始试着创建文件了,touch 可以帮助我们创建文件,也可以修改目录的时间参数

基本用法:touch 文件名称

选项
-c--no-create 如果文件不存在,不建立任何文件,也不提示
-d<时间日期> 使用指定的时间日期,而非现在的时间
-t<日期时间> 使用指定的日期时间,而非现在的时间
-a 改变文件的访问时间为系统当前时间,无需设置时间选项
-m 改变文件的修改时间为系统当前时间,无需设置时间选项
-r 把指定文件或目录的日期、时间都设成和参考文件或目录的日期、时间想通过

比较用的多一点的就是简单的文件创建了

root@ubuntu:~# touch demo.txt
root@ubuntu:~# ls
demo.txt

指定修改时间 也给出一下格式

touch -d "20200423 10:11" test.txt

(10) 复制文件和目录(cp)

cp 命令,主要用来复制文件和目录

基本用法:cp [选项] 源文件 目标文件

选项 含义
-a 复制文件和目录以及属性(包括所有权和权限)
-i 若目标文件或目录已经存在时,进行覆盖时会先询问是否进行覆盖
-p 保留源文件或目录的属性,而非使用默认属性(备份常用);
-r 递归地复制目录及其内容
u 复制时,只会复制那些目标目录不存在的或者相应文件的更新文件
v 复制文件时,显示信息性消息

A:复制文件

  • 首先将 root 目录下的 demo.txt 复制到 var 文件夹下
root@ubuntu:~# cp demo.txt /var/
  • 再次执行这一句,原来的内容就会被覆盖掉,如果想要提醒可以执行 cp -i
  • 当我们处于别的目录下记得要写绝对路径,同时下面一同演示如何改名修改
root@ubuntu:/var# cp /root/demo.txt /var/test.txt

B:复制目录

  • 把 var 目录下的 ideal 文件夹复制到 root目录下
root@ubuntu:/var# cp -r /var/ideal/ /root/
  • 还有一种就是使用通配符,把第一个文件夹中的所有文件复制到第二个文件夹中
root@ubuntu:/var# cp -r /var/ideal/* /root/

(11) 删除文件或目录(rm)

rm 命令用来删除文件和目录,同时默认情况下不会有任何的提示

基本用法: rm[选项] 文件或目录

选项 含义
-f 系统将不再询问,而是直接删除目标文件或目录
-i 在删除文件或目录之前,系统会给出提示信息
-r 可删除指定目录及包含的所有内容,包括所有的子目录和文件

这个方法使用要特别小心,Linux 可是没有还原操作的,它默认认为用户是明智的,尤其搭配通配符进行删除的时候,一定要小心,可以提前使用 ls 命令看一下要删除的内容是不是自己想要的

下面两行命令分别就是删除文件和删除目录的简单演示

root@ubuntu:/var# rm test.txt
root@ubuntu:/var# rm -r /var/ideal/

(12) 移动文件或重命名文件(mv)

基本用法:mv [参数] [源文件或目录] [目标文件或目录]

选项 含义
-b 若需覆盖文件,则覆盖前先进行备份
-f 如果目标文件或目录已经存在,则直接覆盖现有的文件或目录
-i 若目标文件或目录已经存在时,进行覆盖时会先询问是否进行覆盖
-u 移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件
A:移动文件

/root/demo.txt 文件移动到根目录 /

root@ubuntu:~# mv /root/demo.txt /
B:移动文件并改名

/root/demo.txt 文件移动到根目录 / ,并重命名为 test.txt

root@ubuntu:~# mv /root/demo.txt /test.txt
C:移动目录

移动/root/ideal目录中的所有文件和子目录到根目录

root@ubuntu:~# mv /root/ideal /
D:重命名文件或目录

将 demo 文件重命名为 demo2 ,将 ideal 目录重命名为 ideal2

root@ubuntu:~# mv /root/demo /root/demo2
root@ubuntu:~# mv /root/ideal /root/ideal2

(13) 文件间建立链接(ln)

基本用法:ln [选项] 源文件 目标文件

选项 含义
-s 如果目标文件已经存在,则删除目标文件后再建立链接文件
-f 如果目标文件已经存在,则删除目标文件后再建立链接文件

Linux 链接概念

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

(五) 文本操作(仅查看)

(1) 显示文本文件内容(cat)

使用 cat 命令可以显示文本文件的内容,其后可以直接跟文件名

同时 cat 也可以把几个文件内容附加到另一个文件中,即连接合并文件

基本用法:cat [参数] [文件]

选项 含义
-A 显示所有的内容,包括特殊字符
-E 列出每行结尾的回车符 $;
-n 对输出的所有行进行编号;
-s 当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。

选个长度小点的演示,别的大家亲手试一试就好了

root@ubuntu:/etc# cat -n issue
     1    Ubuntu 18.04.1 LTS \n \l
     2    

补充:cat 是从第一行开始显示,而有一个命令 tac 则是从最后一行开始显示

(2) 分页显示文本文件的内容(more)

上面的演示是一个很短的文件,但是由于 cat 命令是直接将内容一次性输出到屏幕上,但是如果内容过多,查看起来就会非常的麻烦,因为信息会在屏幕上快速的滚动,对于长篇的文本内容,更推荐使用more命令来查看,同时它在下面会以百分比的形式告诉你已经读了多少

基本用法:more [选项] 文件名

除了特殊需要,一般也不加什么参数,下面的大概了解下就好了

选项 含义
-f 计算行数时,以实际的行数,而不是自动换行过后的行数。
-p 不以卷动的方式显示每一页,而是先清除屏幕后再显示内容。
-c 跟 -p 选项相似,不同的是先显示内容再清除其他旧资料。
-s 当遇到有连续两行以上的空白行时,就替换为一行的空白行。
-u 不显示下引号(根据环境变量 TERM 指定的终端而有所不同)。
+n 从第 n 行开始显示文件内容,n 代表数字。
-n 一次显示的行数,n 代表数字。

more 命令的执行会打开一个可以交互的界面,所以了解下面一些交互的指令还是必要的

交互指令 功能
h 或 ? 显示 more 命令交互命令帮助。
q 或 Q 退出 more。
v 在当前行启动一个编辑器。
:f 显示当前文件的文件名和行号。
!<命令> 或 :!<命令> 在子Shell中执行指定命令。
回车键 向下移动一行。
空格键 向下移动一页。
Ctrl+l 刷新屏幕。
= 显示当前行的行号
' 转到上一次搜索开始的地方
Ctrf+f 向下滚动一页。
. 重复上次输入的命令
/ 字符串 搜索指定的字符串
d 向下移动半页
b 向上移动一页

(3) 显示文本文件前/后 N 行(head/tail)

这个命令的应用场景就是当你不想要看完整个文档,直线看前N行,就可以使用它

基本用法:head [选项] 文件名 以及 tail [选项] 文件名

选项 含义
-n K 这里的 K 表示行数,该选项用来显示文件前 K 行的内容;
-c K 这里的 K 表示字节数,该选项用来显示文件前 K 个字节的内容
-v 显示文件名

(2) 和 (3) 都比较简单,就不演示了

(4) 显示(less)

less命令和more命令功能基本差不多,也是分屏的显示方式,同时支持 more 命令的所有参数,同时还多了一些选项,例如支持使用上下键翻页,总的来说,它更加的全面以及完善

基本用法:less [选项] 文件名

选项暂时用的也不多,暂时搁着,以后有需要查就是了,下面的交互指令,了解一下就好了,把常用的例如上下页这种记住就可以了

交互指令 功能
/字符串 向下搜索“字符串”的功能。
?字符串 向上搜索“字符串”的功能。
n 重复*前一个搜索(与 / 成 ? 有关)。
N 反向重复前一个搜索(与 / 或 ? 有关)。
b 向上移动一页。
d 向下移动半页。
h 或 H 显示帮助界面。
q 或 Q 退出 less 命令。
y 向上移动一行。
空格键 向下移动一页。
回车键 向下移动一行。
【PgDn】键 向下移动一页。
【PgUp】键 向上移动一页。
Ctrl+f 向下移动一页。
Ctrl+b 向上移动一页。
Ctrl+d 向下移动一页。
Ctrl+u 向上移动半页。
j 向下移动一行。
k 向上移动一行。
G 移动至最后一行。
g 移动到第一行。
ZZ 退出 less 命令。
v 使用配置的编辑器编辑当前文件。
[ 移动到本文档的上一个节点。
] 移动到本文档的下一个节点。
p 移动到同级的上一个节点。
u 向上移动半页。

(5) 总结

这几个查看文本的命令用几句话总结一下

  • cat 从第一行开始显示内容,特点是一次性加载完
  • tac 从最后一行开始显示内容,特点是一次性加载完
  • more 一页一页的显示文件内容
  • less 与 more 类似,可以向前翻页,更加完善
  • head 只显示前 N 行
  • tail 只显示后 N 行

(六) Linux 打包和压缩

在网络上,人们自然是更倾向于传输经过压缩后的文件,由于其体积小,所以传输时间得以缩短,下面我们就来了解一下 Linux 针对文件压缩等的概念

(1) 区分打包和压缩的概念

在 Windows 下,我们通常会借用一些第三方的压缩软件,例如 WinRAR Bandizip 进行文件的压缩,常见的格式 也就是 .rar .zip .7z 等,而同样 Linux 也有着它压缩的方式与一些格式,在 Linux 中,在压缩之前,通常还有一个打包的操作,我们首先来了解一下这两个概念

① 打包,也称为归档,是将一个文件或者目录的集合存储在一个文件中,打包后的文件没有经过压缩,因此它占用的空间是其中所有文件目录的总和

  • 说白了,就是把一些文件放在一起变成一个包,方面存储和和传输

② 压缩的原理就是将文件中相同的信息用一个字符代替,文件体积就能变小,压缩对于文本或者数据类文件有比较明显的作用

  • 就比如,文本中总出现,理想二旬不止 这几个字,那么这些都会被一个代码表示,然后写入词典文件

下面看一下具体的用法

(2) 打包/解打包命令(tar )

A:打包

基本用法:tar [选项] 源文件或目录

同时由于打包(归档)后的包文件都是 .tar 结尾所以,又叫做 tar 包

选项 含义
-c 将多个文件或目录进行打包。
-A 追加 tar 文件到归档文件。
-f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v 显示打包文件过程;

注意哈,使用 tar 命令指定选项时可以不在选项前面输入“-”,输不输入都一样的

演示下,首先 root 目录下有 demo.txt 文件以及 test 目录,这三种情况就分别代表了,打包文件、目录,以及同事打包多者

root@ubuntu:~# tar -cvf demo.txt.tar demo.txt
demo.txt

root@ubuntu:~# tar -cvf test.tar test
test/

root@ubuntu:~# tar -cvf demo-test.tar demo.txt test
demo.txt
test/

查看一下结果

root@ubuntu:~# ls
demo-test.tar  demo.txt  demo.txt.tar  test  test.tar

如果想要进而对其压缩,就可以执行下面的命令,暂时先看看,别急,这种方式有点麻烦,能更加优化的

这样 文件就加上了 .gz 后缀了,这是一种压缩格式,后面再细说

root@ubuntu:~# gzip demo.txt.tar
root@ubuntu:~# ls
demo-test.tar  demo.txt  demo.txt.tar.gz  test  test.tar

B:解打包

基本用法:tar [选项] 压缩包

选项 含义
-x 对 tar 包做解打包操作。
-f 指定要解压的 tar 包的包名。
-t 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。
-C 目录 指定解打包位置。
-v 显示解打包的具体过程。

其实与打包区别是不大的,只不过把 -cvf 替换成了 -xvf

root@ubuntu:~# tar -xvf demo.txt.tar

前者是默认解压在当前目录的,如果想要指定目录解压,需要使用 -C 选项,例如下面解压到 usr 目录下

root@ubuntu:~# tar -xvf demo.txt.tar -C /usr

如果想看一下包中有哪些文件,可以 将 -x 替换成 -t 选项

root@ubuntu:~# tar -tvf test.tar

C:tar 命令直接做打包后压缩/解压缩

上面虽然演示了一下打包后,再进行压缩的一个例子,但是这也太麻烦了吧,打包压缩,需要先打包成 .tar 再压缩成 .tar.gz 别急阿,前面演示,是为了让大家分的更清楚一点,自然是有着更加方便的操作方式,下面来看一下

基本用法:tar [选项] 压缩包 源文件或目录

常用的有两种:

  • -z:压缩和解压缩 ".tar.gz" 格式
  • -j:压缩和解压缩 ".tar.bz2"格式

① .tar.gz 方式

  • 打包压缩
root@ubuntu:~# tar -zcvf demo.txt.tar.gz demo.txt
  • 解压
root@ubuntu:~# tar -zxvf demo.txt.tar.gz

② -jcvf 方式

这个的区别就是把上面的 -zcvf 换成了 -jcvf 也就是 -z 变成了 -j

  • 打包压缩
root@ubuntu:~# tar -jcvf demo.txt.tar.gz demo.txt
  • 解压
root@ubuntu:~# tar -jxvf demo.txt.tar.gz

同时上面说的, -C 用于指定解压位置、-t 用于查看压缩包内容,也是一样的哈

总结:一般来说,.tar.gz.tar.bz2 是比较常用的,后面这两种直接打包压缩 解压缩的方式要记好了

(七) 总结

这一篇文章,也是除了安装,以及配置网络,环境以外,关于 Linux 的第一篇,这一篇主要讲解了关于 Linux 的常用命令,当然了,都是一些比较基础的,原本 vi/vim 也想放到这里,但是现在已经1w字左右了,篇幅太长,给大家查阅起来也不是很方便,就挪到下一篇说,虽然说我暂时没想着把 Linux 学到多么深的一个层次,不过即使作为基础认识,还有一些例如用户、还有权限等等的问题也没有说到,后面我会再出几篇文章说一下

写这篇文章,主要原因还是因为自己欠缺这方面的知识,顺便当总结,也同样分享给大家一起交流,当然啦,这篇文章都是一些入门的基础操作,没什么难度可言,也渴望与大家交流

感谢大家的支持,谢谢!

(八) 结尾

如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持!

如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创开发技术文章的公众号:理想二旬不止


二境志
191 声望26 粉丝