Java程序员必会Linux

一、Linux入门篇

1.1 linux系统的介绍

image

linux操作系统和大家熟知的Windows操作系统软件一样,Linux也是一个操作系统软件。与Windows不同之处在于,Linux是一套开放源代码程序的、可以自由传播的类Unix操作系统软件。
Linux在设计之初,就是它是一个多用户、多任务并且支持多进程和多CPU的操作系统,它是由世界各地成千上万的程序员设计和开发实现的,当初开发Linux系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类Unix操作系统。

1.2 我们为什么要使用Linux

  • 大多数服务器都是linux系统
  • 项目的部署都需要用linux命令
  • 项目出现问题,需要线上解决问题,都需要在linux环境中排查问题
  • Linux是一个后端程序员基本的技能
  • Linux是开源项目,具有很高的学习价值

1.3 linux的发展历程

Unix简介Unix操作系统由肯.汤普森(Ken Thompson)和丹尼斯.里奇(Dennis Ritchie)发明的。它的部分技术来源可追溯到从1965年开始的Multics工程计划,该计划由贝尔实验室、美国骂声理工学院和通用电气公司联合发起,目标是开发一种交互式的、具有多道程序处理能力的分时操作系统,以取代当时广泛使用的批处理操作系统。

image

Linux简介

Linux是一套自由加开放源代码的类Unix操作系统,诞生于1991年10月5日(第一次正式向外发布),由芬兰学生Linus Torvalds和后续陆续加入的众多爱好者共同开发完成。
Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
1984年Richard Mathew Stallman(斯托曼)发起GNU计划,GNU是一个组织(GNU is Not Unix)。计划目的是:建立一个自由、开源的Unix系统。于是他不仅宣传让同事使用此内核程序,自己还编写了C语言的编辑器也就是gcc。
其中GNU开发的几个重要软件:
(1)Emacs代码编辑器工具
(2)GNU C(GCC)
(3)Bash shell
GPL协议:
GPL(General Public License)一个开源产品的协议,意思为在当前开源产品的基础上二次开发必须公布源代码。

image

1.4 Linux的应用领域

  • 服务器系统
    • Web应用服务器、数据库服务器、游戏服务器、接口服务器、DNS、FTP等等
  • 嵌入式系统
    • 路由器、防火墙、手机、PDA、IP分享器、交换器、家电用品的微电脑控制器等等
  • 高性能运算、计算密集型应用
    • Linux有强大的运算能力。IBM的Watson超级计算机就是使用了Linux系统
  • 桌面应用系统
    • 很多桌面操作系统的底层也是Linux
  • 移动手持系统
    • 安卓系统就是基于Linux

在过去的20年里,Linux系统主要被应用于服务端、嵌入式开发和PC桌面3大领域,其中服务器端领域是重中之重。例如,我们熟知的大型、超大型互联网企业(百度、腾讯、Sina、阿里等)都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前1000的90%以上的网站使用的主流系统都是Linux系统。

1.5 Linux版本

Linux的版本继承了Unix的版本定制规则,分为内核版本和发行版本
内核版本:内核就是一个核心,其他软件都是基于这个核心,不能直接使用,内核版本统一在http:///www.linux.org发布
发行版本:由各个Linux发行商发布,Linux发行商有权选择Linux的内核版本。常见的Linux的发行版本:RedHat、CentOS、Debian、Ubuntu
内核版本分为稳定版和开发版,区分方式是根据次版本的奇偶判定,奇数位开发版,偶数位稳定版

image

Debian
Debian也属于自由、开源和稳定的Linux发行版本,它还可以由用户进行维护。Debian拥有较多的软件包,并使用强大的包管理系统。Debian目前正在被教育机构、商业公司、非营利组织和政府机构所使用。

Red Hat Enterprise Linux(RHEL)
Red Har Enterprise Linux(RHEL)是由Red Hat公司开发的开源Linux发行版本。
RHEL服务器是一个功能强大、稳定和安全的软件、可以为面向软件的存储提供现代数据中心的支持。此外,它还支持云、物联网、大数据、可视化和容器。

ubuntu
Ubuntu是一个以桌面应用为主的开源操作系统,是基于Debian开发的,其具有更高的系统安全性。
构建高性能、高度可伸缩、灵活和安全的企业数据中心具有非常强大的支持作用;为大数据、可视化和容器、物联网等服务提供支持

centos
Centos是基于RHEL开发的免费系统,它与RHEL没有什么很大的区别,最大的不同就是它是免费的。它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。

1.10 linux的组成与目录结构

image

kernel内核:是系统的心脏,是运行程序和管理磁盘和打印机等硬件设备的核心程序。
作用:管理设备、进程、内存、交换空间、文件系统,控制系统程序与硬件交互。
Shell:是系统的用户界面,提供了用户和内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。但它不仅是命令解释器,而且还是高级编程语言,shell编程。
作用:提供人机交互(类似于windows的cmd),使用户和内核之间交互。
FILE SYSTEMS(文件系统):文件系统是文件存放在磁盘等存储设备上的组织方法,Linux支持多种文件系统,如ext3、ext2、NFS、SMB、iso9660等
应用程序:标准的Linux操作系统都会有一套应用程序,例如:X-Window,Open Office等
在Linux系统上看根目录下的目录结构

image

目录类型

文件系统的最顶层是由根目录开始的,系统使用/来表示根目录

  • .:代表当前的目录,也可以使用./表示
  • ..:代表上一级目录,也可以使用../来表示

系统启动必须

  • boot:存放启动Linux时使用的的内核文件,包括链接文件以及镜像文件
  • etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件有可能导致系统无法启动,如果做配置需要将配置文件放在etc下
  • lib/lib64:存放基本代码库(比如C++库)。其作用类似于windows中的dll文件,也叫共享库,几乎所有的应用程序都需要用到这些共享库
  • sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统时内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

指令集合

  • bin:二进制目录,存放常用的程序和命令
  • sbin:存放只有系统管理员能使用的程序和指令

外部文件管理

  • dev:Devices(设备)的缩写,存放的是Linux的外部设备。注意:在Linux中访问设备与访问文件的方式相同
  • media:类似于windows系统中的其他设备,例如U盘、光驱等,识别后linux会将设备放在此目录下
  • mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱中的内容

临时文件

  • run:临时文件系统,存储系统启动之后的信息,当系统重启时,run目录下的文件会被删除
  • lost+found:一般情况下为空,系统非法关机之后,这里存放一些文件
  • tmp:临时文件存放目录。

账户

  • root:系统管理员的用户主目录
  • home:家目录,用户的主目录,以用户的账号命名的。如果创建用户,则会在home下创建一个对应的目录
  • usr:用户的很多应用程序和文件都存放在此目录下,类似于windows下的program files
  • /usr/bin:系统用户使用的应用程序与指令
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序

运行过程中要用

  • var:存放经常修改的数据,例如程序运行的日志文件(/var/log目录下)
  • proc:管理内存的空间的虚拟目录,系统内存的映射,可以直接访问目录获取系统信息,这个目录的内容不在硬盘上而在内存中,可以直接修改里面的某些文件做修改

扩展使用

  • opt:默认是空的,我们安装额外软件可以放在这个里面
  • srv:存放服务启动后需要提取的数据(不用服务器就为空)

二、Linux基础篇

2.1 linux快捷键与命令格式

常用快捷键

'tab' 命令或路径等补全键,linux用得最多的一个快捷键

光标移动  

ctrl+a 光标回到行首
ctrl+e 光标回到行尾
ctrl+f 光标向右移动一个字符 forwards
ctrl+b 光标向左移动一个字符 behind
esc+b 移动到当前单词的开头
esc+f 移动到当前单词的结尾
esc+t 当前单词向前移动

剪切  

ctrl+u 剪切光标处到行首的所有字符,也就是删除
ctrl+k 剪切光标处到行尾的所有字符
ctrl+w 剪切光标前的一个单词(word)
ctrl+h 删除光标前的一个字符(相当于退格键)

中断

ctrl+c 中断终端正在执行的任务并开启一个新的一行

2.2 linux命令终端格式

2.2.1 命令的提示符

[root@zk-VMware-Virtual-Platform ~]#
  • []:这是提示符的分隔符号,没有特殊含义
  • root:显示的是当前的登录用户,目前使用的是root用户登录
  • @:分隔符号,没有特殊含义
  • zk-VMware-Virtual-Platform:当前系统的简写主机名(完整主机名是zk-VMware-Virtual-Platform.localdomain)
  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录
  • #:命令提示符。超级用户是#,普通用户是$

2.2.2 命令的基本格式

格式如下 

[root@localhost ~]# command命令 [选项options] [参数parameter]

说明:  

  • command:命令名,相应功能的英文单词或单词的缩写
  • [-options]:选项,可用来对命令进行控制,也可以省略
  • parameter:传给命令的参数,可以是0个、1个或者多个

举例:

如ls -l /home/.  ls是命令,-l是选项,/home是参数

2.3 help帮助指令

Linux常用命令help命令用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。  

命令格式

help [-dms] [PATTERN...]

选项说明 

  • -d:输出每个命令的简短描述
  • -m:以类似于man手册的格式描述命令
  • -s:只显示命令使用格式

示例

1、查看help支持哪些命令 

image

2、查看cd指令的帮助信息

help -d cd

image

help -m cd

image

help -s cd

image

--help 选项

绝大多数的命令都可以使用–help选项来查看帮助,这也是一种获取帮助的方法。
例如: 

root@zk-VMware-Virtual-Platform:/# ls --help

image

这种方式非常简单,输出的帮助信息基本上是man命令的信息简要版。

2.4 man指令

man命令是最常用的帮助命令,也是Linux最主要的帮助命令,基本信息如下

命令格式

man [选项][章节] 命令

man命令交互快捷键

  • 上箭头:向上移动一行
  • 下箭头:向下移动一行
  • PgUp:向上翻一页
  • PgDn:向下翻一页
  • g:移动到第一页
  • G:移动到最后一页
  • q:退出
  • /字符串:从当前向下搜索字符串
  • ?字符串:从当前向上搜索字符串
  • n:当搜索字符串时,可以用n键找到下一个字符串
  • N:当搜索字符串时,使用N键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,则N键表示向上搜索字符串;如果使用“?字符串”方式搜索,则N键表示向下搜索字符串

man手册的格式

  • NAME:命令名称以及功能简要说明
  • SYNOPSIS:用法说明,包括可用的选项DESCRIPTION:命令功能的详细说明,可能包括每一个选项的意义OPTIONS:说明每一项的意义EXAMPLES:使用示例FILES:此命令相关的配置文件
    • []:可选内容
    • <>:必选内容
    • a|b:二选一
    • {}:分组
    • …:同一内容可出现多次
  • AUTHOR:作者
  • COPYRIGHT:版本信息
  • REPORTTING BUGS:bug信息
  • SEE ALSO:参考其他帮助

示例

我们输入man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一章节,同样,我们输入man ifconfig,它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man[章节号]手册名称”
man时按照手册的章节号的顺序进行搜索的,比如:‘man sleep’只会显示sleep命令的手册,如果想查看库函数sleep,就要输入‘man 3 sleep’

当输入man ls时

image

image

会显示LS命令的使用手册

2.5 目录及文件操作指令

2.5.1 目录操作命令

pwd指令

Linux中使用pwd来查看当前工作目录的完整路径

命令格式  

pwd [参数选项]

常用参数

  • -L,–logical 打印环境变量$PWD的值,可能为符号链接。目录连接链接时,输出链接路径
  • -P,–physical(默认值)打印当前工作目录的物理位置。如果是链接目录,则输出真实的目录
  • –help 显示帮助信息并退出
  • –version 显示版本信息并退出

示例

image

image

 -P与-L的区别

zk@zk-VMware-Virtual-Platform:/etc$ cd /etc/init.d/
zk@zk-VMware-Virtual-Platform:/etc/init.d$ pwd
/etc/init.d
zk@zk-VMware-Virtual-Platform:/etc/init.d$ pwd -P
/etc/init.d
zk@zk-VMware-Virtual-Platform:/etc/init.d$ pwd -L
/etc/init.d

-L代表软链接,-P代表真实目录  

cd指令

cd是切换所在目录的命令

命令格式

cd [-L|-P] [dir]

选项

  • -L:(默认值)如果要切换到的目标目录是一个符号链接,那么切换到符号链接的目录

  • -P:如果要切换的目标目录是一个符号链接,那么切换到它指向的物理位置目录

参数

dir(可选):指定要切换的目录,可以是绝对路径(以根目录为参照物)或相对路径(以当前目录为参照物)

简单用法  

cd ~:当前目录的家目录
cd -:上一次所在目录
cd .:当前目录
cd ..:上级目录

示例  

image

image

ls指令 

ls是最常见的目录操作命令,主要作用是显示目录下的内容  

命令格式 

ls [选项] [目录名]

选项

  • -a:显示所有文件
  • -h:人性化显示,按照我们习惯的单位显示文件大小
  • -l:长格式显示

示例

ls -l

image

"-l"选项用于显示文件的详细信息,-l的7列分别代表的含义
第一列:权限
第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组
第五列:大小。默认单位是字节。
第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
第七列:文件名。

mkdir指令

通过mkdir命令创建目录

命令格式

mkdir [-p] 要创建的目录

选项

  • -p:帮助你直接将所需要的目录(包括上一级目录)递归创建起来
root@zk-VMware-Virtual-Platform:/# mkdir test
root@zk-VMware-Virtual-Platform:/# mkdir -p test/test1

注意

通过mkdir -p 目录名 命令 创建目录
新建目录的名称 不能与当前目录中已有的目录或文件同名

rmdir指令  

rmdir命令的作用十分有限,只能删除空目录,一旦目录中有内容就会报错。所以一般不论删除的是文件还是目录,都会使用rm命令  

命令格式  

rmdir 目录名称

示例  

root@zk-VMware-Virtual-Platform:/# rmdir test/test1
root@zk-VMware-Virtual-Platform:/# rmdir test

注意  

如果该目录中存在文件或者其他目录时,该命令是不能删除的

2.5.2 文件操作命令

touch指令  

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,则系统会建立起一个新的文件

touch [OPTION]... FILE...

示例  

示例1:创建不存在的文件

touch 不存在的文件
root@zk-VMware-Virtual-Platform:/# touch demo.log
root@zk-VMware-Virtual-Platform:/# ll
total 3668052
drwxr-xr-x  20 root root       4096 Aug 10 19:50 ./
drwxr-xr-x  20 root root       4096 Aug 10 19:50 ../
-rw-rw-r--   1 root root          0 Aug 10 19:50 demo.log

示例2:修改文件目录的末次访问时间  

touch 存在的文件
root@zk-VMware-Virtual-Platform:/# ls -l demo.log
-rw-rw-r-- 1 root root 0 Aug 10 19:50 demo.log
root@zk-VMware-Virtual-Platform:/# touch demo.log
root@zk-VMware-Virtual-Platform:/# ls -l demo.log
-rw-rw-r-- 1 root root 0 Aug 10 19:51 demo.log

touch也可以修改目录的末次访问时间  

root@zk-VMware-Virtual-Platform:/# mkdir -p aaa
root@zk-VMware-Virtual-Platform:/# ls -l
total 3668048
drwxrwxr-x   2 root root       4096 Aug 10 19:56 aaa
root@zk-VMware-Virtual-Platform:/# touch aaa
root@zk-VMware-Virtual-Platform:/# ls -l
total 3668048
drwxrwxr-x   2 root root       4096 Aug 10 19:57 aaa

示例3:创建多个文件  

root@zk-VMware-Virtual-Platform:/# touch aaa bbb ccc
root@zk-VMware-Virtual-Platform:/# ls -l aaa bbb ccc
-rw-rw-r-- 1 root root 0 Aug 10 19:54 aaa
-rw-rw-r-- 1 root root 0 Aug 10 19:54 bbb
-rw-rw-r-- 1 root root 0 Aug 10 19:54 ccc

cp指令  

cp指令用于拷贝文件和目录,如果拷贝目录且目录非空,则需要添加-r选项  

cp [选项] 文件1 备份文件名称
cp [选项] 文件1 文件2 文件3 ... 目录

选项  

-r recursive (递归)递归复制目标目录的内容

示例  

1、复制文件

root@zk-VMware-Virtual-Platform:/# touch aaa.txt
root@zk-VMware-Virtual-Platform:/# cp aaa.txt bbb.txt
root@zk-VMware-Virtual-Platform:/# ls -l aaa.txt bbb.txt
-rw-rw-r-- 1 root root 0 Aug 11 21:36 aaa.txt
-rw-rw-r-- 1 root root 0 Aug 11 21:36 bbb.txt

2、递归复制整个文件夹  

zk@zk-VMware-Virtual-Platform:~$ mkdir -p aaa/bbb/ccc
zk@zk-VMware-Virtual-Platform:~$ cp -r aaa/bbb/ccc aaa/bbb/ddd

image

 3、同时拷贝多个文件到另一文件夹中

zk@zk-VMware-Virtual-Platform:~/aaa/bbb/ccc$ cp -r a.txt b.txt c.txt ddd
zk@zk-VMware-Virtual-Platform:~/aaa/bbb/ccc$ cd ddd
zk@zk-VMware-Virtual-Platform:~/aaa/bbb/ccc/ddd$ ls -l
total 0
-rw-rw-r-- 1 zk zk 0 Aug 11 22:12 a.txt
-rw-rw-r-- 1 zk zk 0 Aug 11 22:12 b.txt
-rw-rw-r-- 1 zk zk 0 Aug 11 22:12 c.txt

mv指令  

通过mv命令可以用来移动文件或目录,也可以给文件或目录重命名  

命令格式  

mv [旧文件名] [新文件名称]
mv [被移动目录] [目标目录]

示例  

1、重命名

zk@zk-VMware-Virtual-Platform:~/Music$ ls -l
total 4
drwxrwxr-x 3 zk zk 4096 Aug 12 21:11 a
-rw-rw-r-- 1 zk zk    0 Aug 12 21:11 test
zk@zk-VMware-Virtual-Platform:~/Music$ mv test test1
zk@zk-VMware-Virtual-Platform:~/Music$ ls -l
total 4
drwxrwxr-x 3 zk zk 4096 Aug 12 21:11 a
-rw-rw-r-- 1 zk zk    0 Aug 12 21:11 test1

2、移动文件  

zk@zk-VMware-Virtual-Platform:~/Music$ ls -l
total 4
drwxrwxr-x 3 zk zk 4096 Aug 12 21:11 a
-rw-rw-r-- 1 zk zk    0 Aug 12 21:11 test1
zk@zk-VMware-Virtual-Platform:~/Music$ mv test1 a/b/c
zk@zk-VMware-Virtual-Platform:~/Music$ ls -l
total 4
drwxrwxr-x 3 zk zk 4096 Aug 12 21:11 a
zk@zk-VMware-Virtual-Platform:~/Music$ cd a/b/c
zk@zk-VMware-Virtual-Platform:~/Music/a/b/c$ ls -l
total 0
-rw-rw-r-- 1 zk zk 0 Aug 12 21:11 test1

2.5.3 查看文件指令

cat指令  

cat看完文件内容,一次显示所有的内容,适合查看内容较少的文本文件  

cat [选项] fileName

参数

  • -n或–number:由1开始对所有输出的行数编号
  • -b或–number-noblank:和-n相似,只不过对于空白行不编号

示例

1、查看文件内容

zk@zk-VMware-Virtual-Platform:~/Music/a/b/c$ cat test1
babababa
abababaa
bbbabaaa
cxcccccc

2、查看内容添加-n  

zk@zk-VMware-Virtual-Platform:~/Music/a/b/c$ cat -n test1
     1	babababa
     2	abababaa
     3	bbbabaaa
     4	cxcccccc

3、查看内容空行不加行号  

zk@zk-VMware-Virtual-Platform:~/Music/a/b/c$ cat -n -b test1
     1	babababa
     2	abababaa


     3	bbbabaaa
     4	cxcccccc

more指令  

more命令是常用的文本文件阅读工具,类似于cat,不过以一页一页的形式显示,更方便使用者逐页阅读。一般文件过大时使用more浏览,文件较小时使用cat 

more [OPTIONS] FILE [...]

参数  

-NUM 指定每屏显示的行数为NUM
+/STRING 从匹配搜索字符串STRING所在行的前两行开始显示
+NUM 从文件第NUM行开始显示

交互式的指令有:  

(1)回车键向下滚动一行;
(2)空格键(Space)显示下一页
(3)b键(back)回显上一页
(4)q或Q键退出

示例  

1、显示test文件内容  

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# more test

image

2、显示test文件内容5行 

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# more -5 test

image

3、显示test文件从第3行开始看10行 

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# more +3 -5 test

image

 4、搜索内容显示前几行

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# more -10 +/if test

image

less指令

命令简介  

less简介时常用的文本文件阅读工具,类似于more,是加强版的more命令。less主要用于浏览大文件,加载文件时不会读取整个文件,相当于vim或nano等文本编辑器,启动会更快。

命令格式

less [OPTIONS] [FILE]...

参数  

-m 显示类似more命令的百分比
-N 显示每行的行号

less的命令行选项很少使用,浏览文件时常用的是交互式命令。  

交互式命令

b 向后翻一页
Q 退出less命令
空格键 滚动一页
回车键 滚动一行
 1. 向前搜索
 /:使用一个模式搜索,并定位到下一个匹配的文本
 n:向前查找下一个匹配的文本
 N:向后查找一个匹配的文本
 
 2. 全屏导航
 ctrl+F  向前移动一屏
 ctrl+B  向后移动一屏
 ctrl+D  向前移动单屏
 ctrl+U  向后移动单屏 
示例  

1、简单查看文件内容

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# less test 

2、查看内容显示查看内容百分比  

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# less -m test

image

3、查看内容显示内容行号 

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# less -N test

image

 4、在less文件中查找内容

首先执行less -N test命令行,然后在less回显中输入/able

image

可以使用n键向下查,shift+n键向上查

5、less查看多个文件 

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# less test test1 

在页面底部输入:n可以切换到第二个文件,然后再输入:p可以切换到第一个文件  

head指令  

命令简介

head命令用于显示文件开头的内容。在默认情况下,显示文件的头10行内容

命令格式

head [OPTION] ... [FILE] ... 

参数说明  

-c, --bytes=[-]k
	显示每个文件的前K字节内容:如果附加-参数,则显示每个文件最后K字节外的所有内容
-n, --lines=[-]k
	显示每个文件的前K行内容:如果附加-参数,则显示每个文件最后K行外的所有内容 

示例  

1、显示文件的头10行内容  

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# head test

image

2、显示文件的头100字节内容

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# head -c100 test

image

3、看5行文件内容

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# head -n5 test

image

 4、看多文件5行内容

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# head -n5 test test1

image

tail指令

命令简介

tail命令用于显示文件尾部内容,与命令head作用相反。默认情况下,显示文件的末尾10行内容。  

命令格式 

tail [OPTION]... [FILE].... 

可以指定多个文件FILE,这种情况下,输出的内容前会列出所属文件名。如果未给定FILE或者FILE是-,则从标准输入读取  

参数说明 

-f 按照指定时间间隔输出文件追加的内容
-n 输出最后N行,而非默认的最后n行 

示例  

1、显示文件/etc/passwd的末尾10行

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# tail /etc/passwd
gnome-remote-desktop:x:988:988:GNOME Remote Desktop:/var/lib/gnome-remote-desktop:/usr/sbin/nologin
polkitd:x:987:987:User for polkitd:/:/usr/sbin/nologin
rtkit:x:116:119:RealtimeKit,,,:/proc:/usr/sbin/nologin
colord:x:117:120:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
gnome-initial-setup:x:118:65534::/run/gnome-initial-setup/:/bin/false
nm-openvpn:x:119:121:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
gdm:x:120:122:Gnome Display Manager:/var/lib/gdm3:/bin/false
zk:x:1000:1000:zk:/home/zk:/bin/bash
sshd:x:121:65534::/run/sshd:/usr/sbin/nologin
quagga:x:122:125:Quagga routing suite,,,:/run/quagga/:/usr/sbin/nologin 

2、显示文件/etc/passwd的末尾3行  

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# tail -n 3 /etc/passwd
zk:x:1000:1000:zk:/home/zk:/bin/bash
sshd:x:121:65534::/run/sshd:/usr/sbin/nologin
quagga:x:122:125:Quagga routing suite,,,:/run/quagga/:/usr/sbin/nologin 

2.6 其他常用指令

2.6.1 日期和时间指令

date指令  

date用于显示当前时间

命令格式 

基本语法:注意命令和参数之间有空格
(1) date (功能描述:显示当前时间)
(2) date +%Y (功能描述:显示当前年年份)
(3) date +%m (功能描述:显示当前月份)
(4) date +%d (功能描述:显示当前是哪一天)
(5) date +%Y%m%d ... (功能描述:显示当前年年月日各种格式)
(6) date +%Y-%m-%d %H:%M:%S ... (功能描述:显示当前年年月日时分秒) 

显示的是字符串描述的时间,不是当前时间  

示例

1、显示当前时间

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# date "+%Y-%m-%d %H:%M:%S"
2025-08-19 20:59:09 

设置系统时间 

基本语法:
date -s 字符串时间 

示例  

1、设置系统时间

root@zk-VMware-Virtual-Platform:/aaa/bbb/ccc# date -s "2025-08-19 21:03:00"
Tue Aug 19 09:03:00 PM CST 2025 

2.6.2 cal日历命令

cal指令  

cal用于查看日历

cal [选项](功能描述:不加选项,显示本月日历) 

参数

-3 显示系统前一个月,当前月,下一个月的日历
具体某一年,显示这一年的日历 

示例  

1、显示当前月份

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# cal

image

如果cal命令不生效执行如下命令 

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# sudo apt-get update
root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# sudo apt install ncal 

2、显示上个月、当月和下个月  

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# cal -3

image

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# cal 1968

image

2.6.3 搜索命令

find指令

find命令用来指定目录下查找文件  

命令格式

find [搜索路径] [选项]   

搜索路径:省略则默认为当前目录,相当于"find ."

选项

-name 按照文件名称搜索,支持通配符模糊查询
-iname 此参数的效果和指定"-name"参数类似,但忽略字符大小写的差别
-path 查找路径包含范本样式的文件或目录
-regex 正则表达式搜索 -iregex 同"-regex",忽略大小写
-size [+|-]文件大小[cwbkMG]:查找符合指定的文件大小的文件 "+"的意思是搜索比指定大小还要大的文件, "-"的意思是搜索比指定大小还要小的文件 "cwbkMG"是单位,c--字节,w--字(2字节),b--块(512字节),k--千字节,M--兆字节,G--吉字节。如果不写单位默认是b 
-atime [+|-]天数,按照文件最后一次访问的时间搜索,单位每天,"+"、"-"的含义,例如"5"表示恰好5天前的那一天,"+5"超过5天前的时间,"-5"5天内的时间(以下按时间搜索选项中"+"、"-"含义相同)
-mtime [+|-]天数,按照文件最后一次修改的时间搜索,单位每天
-ctime [+|-]天数,按照文件元数据(如权限等)最后一次修改时间搜索,单位每天
-amin [+|-]分钟数,按照文件最后一次访问时间搜索,单位每分钟
-nmin [+|-]分钟数,按照文件数据最后一次修改时间搜索,单位每分钟
-cmin [+|-]分钟数,按照文件元数据(如权限等)最后一次修改时间搜索,单位每分钟
-perm [+|-]权限数值:查找符合指定的权限数值的文件或目录。例如,权限数值为"766"表示权限恰好等于766,"-766"表示文件权限必须包含766,"+766"表示文件权限包含766任意一个权限
-uid 用户ID:查找所有者是指定用户ID的文件
-user 用户名:查找所有者是指定用户名的文件 -gid 组ID:查找所有组是指定组ID的文件
-group 组名:查找所有组是指定组名的文件
-nouser : 查找没有所有者的文件
-type :文件类型,只寻找符合指定的文件类型的文件,f---普通文件,l---符号链接,d---目录,c---字符设备,b---块设备,s---套接字,p---Fifo
-empty :查找文件大小为0的文件 

示例  

1、查找etc目录下,文件后缀为.conf的文件名

root@zhangkun-VMware-Virtual-Platform:/etc# find /etc -name "*.conf"

2、查找etc目录下,文件后缀为.conf的文件名忽略大小写

root@zhangkun-VMware-Virtual-Platform:/etc# find /etc -iname "*.conf" 

3、查找etc目录下,后缀为.conf或者.txt的文件

root@zhangkun-VMware-Virtual-Platform:/etc# find /etc \( -name "*.conf" -o -name ¨*.txt¨ \) 

4、查找目录中包含local的路径的文件 

root@zhangkun-VMware-Virtual-Platform:/# find -path *local* 

5、查找文件大小大于2k的普通文件 

root@zhangkun-VMware-Virtual-Platform:/# find . -size +2k -a -type f  

6、查找文件结尾不以txt结尾的文件

root@zhangkun-VMware-Virtual-Platform:/# find . -not -name ¨*.txt¨
root@zhangkun-VMware-Virtual-Platform:/# find ~ ! -name ¨*.txt¨ 

grep指令

grep命令的作用是在文件中提取和匹配符合条件的字符串行,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来  

命令格式  

grep [选项] 搜索内容 文件名 

选项

-c:只输出匹配的行的计数
-i:忽略大小写
-n:输出行号
-w:显示整个单词
-R或-r:递归查找目录下的所有文件内容

示例

1、在/etc/passwd文件中查找usr

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep usr /etc/passwd 

image

2、在/etc/passwd文件中查找usr并显示行号

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep -n usr /etc/passwd 

image

3、在/etc/passwd文件中查找usr显示个数

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep -c usr /etc/passwd

image

4、在/etc/passwd文件中查找usr忽略大小写

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep -i usr /etc/passwd

image

5、在/etc/passwd文件中显示usr一个单词

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep -w usr /etc/passwd

image

6、在/etc/文件目录中递归查找name

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# grep -r name /usr 

image

7、查找etc目录下以pro开头的文件

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# ls -a /etc/ | grep ^pro

image

2.6.4 重定向输出>和>>

使用重定向运算符">“和”>>"将终端输出保存到文件中。

语法  

>:它将输出重定向到文件并覆盖文件的现有内容。

$ command > [filename] 

>>:它将输出附加到文件的末尾。

$ command >> [filename] 

示例

1、将执行hostnamectl status命令输出保存到文件"test"

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# hostnamectl status > test

image

2、将执行test文件中的内容追加到test1文件中,如果test1文件不存在,则会新建一个test1文件

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# cat test >> test1

image

2.6.5 管道 |

通过 命令1|命令2 可以将命令1的结果通过 命令2作进一步的处理

image 

这样的操作实在是不方便,这是可以利用管道符,命令如下:把"ll"命令的输出作为"more"命令的操作对象 

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# ll -a /etc/ | more 

示例

1、查找etc下pro开头的文件,统计这些文件的对应的行数  

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# ls -a /etc/ | grep ^pro | wc -l

image

2.6.6 逻辑控制符

用&&连接两个命令,前一个命令执行成功,才会执行后一个命令

很多时候我们有这个需求,比如打开对应的日志信息查看等。 

语法

command1 && command2 

示例

1、打印test内容且打印test1内容  

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# cat test && cat test1

image

2、创建bbb目录和ccc文件 

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# mkdir -p bbb && touch ccc.txt

image

3、创建a文件、b文件、c文件

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# touch a && touch b && touch c

image

2.6.7 history查看历史指令

列出曾经输入的命令

我们直接输入history命令

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# history

image

如何显示历史指令的操作时间 

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# export HISTTIMEFORMAT='%F %T '

image

清除history命令 

root@zhangkun-VMware-Virtual-Platform:/home/zhangkun/Desktop# history -c

image

2.7 Linux打包(归档)和压缩

2.7.1 打包和压缩的概念和区别

归档

也称为打包,指的是一个文件和目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因为,它占用的空间是其中所有文件和目录的总和。

压缩

压缩则是将一个大的文件通过一些压缩算法变成一个小文件

2.7.2 打包和解包

打tar包

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称tar包,tar包文件的命令通常都是以.tar结尾的。使用tar包后,就可以用其他的程序来进行压缩了。

tar打包命令格式

#将一系列的文件打包成一个大文件
tar -cvf 打包名.tar 被打包的目录
tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3

tar选项说明

命令

  • c:create。生成档案文件,创建打包文件
  • v:verbosely。显示打包或解打包过程
  • f:file。指定打包文件名(.tar)或压缩包文件名 

示例

1、创建1.txt 2.txt 3.txt 和aaa bbb ccc目录并打包成test.rar压缩文件

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# touch 1.txt 2.txt 3.txt && mkdir -p aaa bbb ccc
root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -cvf test.rar 1.txt 2.txt 3.txt aaa bbb ccc

image

解tar包

tar解包命令格式

# 将一个打包后的文件分解成一系列小文件,分解位置为当前目录
tar -xvf 打包名.rar

#将一个打包后的文件分解成小文件,分解位置为指定目录
tar -xvf 打包名.rar -C 解包路径位置

命令

  • x:extract,提取,解包
  • C(大写C):directory(目录),默认保存到当前目录,通过-C更改提取目录。注意:提取目录必须存在

示例

1、解压test.rar到当前目录下

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -xvf test.rar

image

2、解压test.rar到testfile目录下 

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# mkdir -p testfile
root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -xvf test.rar -C testfile

image

gzip格式压缩和解压缩

gzip命令是".gz"格式的压缩和解压缩的命令,gzip命令对应文本文件有60%~70%的压缩率

命令格式

# 压缩文件
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录

# 解压缩文件
tar -zxvf 打包文件.tar.gz

# 解压缩到指定文件
tar -zxvf 打包文件.tar.gz -C 目录路径 

tar 的选项说明

  • z:gzip,使用gzip压缩和解压缩

1、将testfile目录下的所有文件打包成testfile.tar.gz压缩文件

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc/testfile# tar -zcvf testfile.tar.gz *

image

2、将testfile.tar.gz文件解压缩

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc/testfile# tar -zxvf testfile.tar.gz

image

bzip2格式压缩和解压缩

".bz2"格式是Linux的另一种压缩格式,从理论上来讲,".bz2"格式的算法更先进,压缩比更好,而".gz"格式相对来说压缩的时间更快 

在Linux中,bzip2压缩文件格式是xxx.tar.bz2

在tar命令中有一个选项-j可以调用bzip2,可以实现压缩和解压缩的功能

命令格式

# 压缩文件
tar -jcvf 打包压缩文件名.tar.bz2 解压缩的文件/目录

#解压缩文件
tar -jxvf 打包文件.tar.bz2

#解压缩到指定路径
tar -jxvf 打包文件.tar.bz2 -C目录路径 

注意使用bzip2前需要先安装bzip2

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# apt install bzip2

示例

1、打包/usr/local/etc下所有文件为test.tar.bz2

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -jcvf test.tar.bz2 *

image

2、 提取test.tar.bz2压缩包中的文件

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -jxvf test.tar.bz2

image

 3、解压缩bz2文件到指定目录下

root@zhangkun-VMware-Virtual-Platform:/usr/local/etc# tar -jxvf test.tar.bz2 -C /usr/local/etc 

image

 2.8 Vi编辑器使用

 2.8.1 vi与vim

vi介绍

vi编辑器通常被称为vi,而vi又是visual editor的简称,是效率很高的文本编辑器。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

vim介绍

Vim是从Vi发展出来的一个文本编辑器,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计代码补全、编辑及错误跳转等方便编程的功能特别丰富,vim适用于coding

注意:如果在命令行模式下输入"vim",输出结果为"Command not found",则表示此系统中未安装Vim

Centos系统中,使用如下命令行即可安装Vim:

yum -y install vim  

Ubuntu统中,使用如下命令行即可安装Vim:  

apt install vim

2.8.2 Vim编辑器的三种模式 

1、命令模式

  • 打开文件首先进入命令模式,是使用vi的入口
  • 通过命令对文件进行常规的编辑操作,例如定位 翻页 复制 粘贴 删除
  • 在其他图形编辑器下,通过快捷键或者鼠标实现的操作,都在命令模式下实现

2、末行模式-执行

保存 退出等操作

  • 要退出vi返回控制台,需要在末行模式下输入命令
  • 末行模式是vi的出口

3、编辑模式-正常的编辑文字

image命令/一般模式

用户刚刚启动了vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。

以下是常用的几个命令

i/a/o 切换到插入模式,以输入字符。(i:光标不动 o:另起一行 a:光标到下一个字符)
: 切换到底线命令模式,以在最底一行输入命令 

编辑/插入模式

在命令模式下按下i就进入了输入模式,在输入模式中,可以使用以下按键:

字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标的前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标变成竖线/下划线
ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多 

:q 退出程序
:w 保存文件

按ESC键可以随时退出底线命令模式 

2.8.3 三种模式下的指令

一般模式下指令

光标移动

image

移动光标的方法
h或向左箭头键 光标向左移动一个字符
j或向下箭头键 光标向下移动一个字符
k或向上箭头键 光标向上移动一个字符
l或向右箭头键 光标向右移动一个字符
[Ctrl]+[f] 屏幕[向下]移动一页,相当于[Page Down]按键(常用)
[Ctrl]+[b] 屏幕[向上]移动一页,相当于[Page Up]按键(常用)
root@zhangkun-VMware-Virtual-Platform:/etc# vim manpath.config

image

撤销与恢复撤销

命令 英文 功能
u undo 撤销上次的命令(ctrl+z)
Ctrl+r uredo 恢复撤销的命令

复制与剪切

  • vi中提供有一个被复制文本的缓冲区
    • 复制命令会将选中的文字保存在缓冲区
    • 删除命令删除的文字会被保存在缓冲区
    • 在需要的位置,使用粘贴命令可以将缓冲去的文字插入到光标所在的位置
  • 提示:
    • 命令d、x类似于图形界面的剪切操作-ctrl+x
    • 命令y类似于图形界面的复制操作-ctrl+c
    • 命令p类似于图形界面的粘贴操作-ctrl+v
    • vi中的文本缓冲区只有一个,如果后续做过复制、剪切操作,之前缓冲区中的内容会被替换。
命令 英文 功能
y(复制命令) copy 复制
yy copy 复制一行,可以nyy复制多行
d(剪切命令) delete 剪切
dd(剪切) delete 剪切一行,可以ndd剪切n行
p paste 粘贴

一般模式切换到编辑模式

进入到编辑模式

命令 英文 功能 常用
i insert 在当前字符前插入文本 常用
I insert 在行首插入文本 较常用
a append 在当前字符后添加文本  
A append 在行末添加文本 较常用
o   在当前行后面插入一空行 常用
O   在当前行前面插入一空行 常用

底行模式下命令

保存退出

命令 英文 功能
w write 保存
q quit 退出,如果没有保存,不允许退出
q! quit 强行退出,不保存退出
wq write&quit 保存且退出(末行模式)
x   保存并退出(末行模式)
 常规查找
命令 功能
/str 查找str

查找到指定内容之后,使用Next查找下一个出现的位置

n:查找下一个
N:查找上一个
命令 功能
:s/old/new 用new替换行中首次出现的old
:s/old/new/g 用new替换行中所有的old
:n,m s/old/new/g 用new替换从n到m行里所有的old
:%s/old/new/g 用new替换当前文件里所有的old

vim显示行号的命令

set nu

  

posted @ 2025-08-23 21:17  leagueandlegends  阅读(25)  评论(0)    收藏  举报