Java工程师必学的Linux命令(一)文件与目录管理

2017-07-27  本文已影响26人  爱迪生玛玛

从本篇文章开始,我将总结一些Java工程师日常研发工作中会使用到的Linux命令,在介绍这些命令的过程中,也会对Linux系统的一些基础知识进行普及。希望对大家工作和学习有所帮助吧。
本篇将从文件与目录管理开始,毕竟Linux中一切皆文件嘛。
注:本系列文章所有操作都是基于RedHat系列的Centos 7。所以开始学习前,请大家先安装Centos 7。


1. 基本概念

那么,先来看看几个基本概念吧

1.1 Linux的目录结构

Linux的目录结构可以看作一颗树,起点是根,也称为根目录,每一个目录可以看作是枝,每一个文件节点可以看作是叶。如下图:


01.png

举几个小例子:
根: /
枝:/usr
叶:/usr/local/data.db

1.2 家目录

在Linux中,系统在创建每一个用户时,都会为这个用户创建一个家目录,类似于Windows中的“我的文档”。这些用户分两类,一类是超级管理员,一个系统只能有一个超级管理员,它的用户名是root,它的家目录是/root。另一类是普通用户,它的家目录是/home/$用户名,比如一个用户名为jacky的用户,它的家目录是/home/jacky。
当用户登录系统时,默认进入的目录就是该用户的家目录。

1.3 绝对路径和相对路径

(1)绝对路径
从根目录开始查找的路径。比如说有一个文件data.db,它位于根目录的子目录usr下,那么它的绝对路径就是/usr/data.db。
注意:根目录一定是以/开头的,即从根开始一级一级向下找,一直找到这个目录为止。
(2)相对路径
从当前所在目录开始查找的路径。比如当前目录是usr目录,查找usr下的local子目录下的work文件,这个文件的相对路径就是local/work。

1.4 Linux系统自带目录及作用

Centos 6系列根目录下默认一级目录有:

注意:proc和sys的数据是直接写到内存中的,所以不能直接往这两个目录写数据,因为会写到内存,内存占满,系统就会崩溃。

Centos7 根目录下的一级目录出现了以下变动:

1.5 文件类型

Linux不依靠后缀名来区分文件类型,总共有7种类型:普通文件、目录文件、软链接文件、块设备文件、字符设备文件、套接字文件和管道文件。常用的是前三种。

1.6 文件存储方式

Linux中一切皆文件,那么文件在磁盘上是如何进行存储的呢?文件的存储是由文件系统管理的,现主流的文件系统有EXT2/3/4,FAT16/32等。以EXT系列文件系统为例:
文件由两部分数据组成,一部分是文件的内容,称为数据块。一部分是文件的元信息,包括文件的权限、所有者、群组、时间参数等。
数据块是分块存储的,每一块都是物理上等大的数据,默认每个数据块4KB,是存储文件的最小空间,称为block。每一个block都有唯一的编号,当一个文件大到一个block无法存储时,就会将文件内容切分存储到不同的块中;
元信息则存储在inode中,每一个inode也有唯一的编号的,但与数据块不同,一个文件只会有一个inode。因此inode也经常用来作为文件的标识。
文件系统维护一个目录表,称为super block,它记录了一个文件的inode及它分配的block的编号。用于检索和管理文件存储。

2. 目录管理

2.1 查看当前路径

pwd

前面我们说过了用户登录系统后,默认进入的是家目录,那么我们以root用户登录后,输入以上命令,查看一下root用户的家目录:


pwd

pwd是三个英文单词的缩写:print working directory,打印(当前)工作目录。

2.2 查看目录子节点列表

2.2.1 当前目录下的子节点列表

使用以下命令:

ls [选项] [目录路径]

ls后不加选项,表示查看当前所在目录。
在根目录下执行ls命令,如下图:


当前目录下的子节点列表

2.2.2 指定目录下的子节点列表

在ls命令后加上要查看的目录路径

ls 目录路径
/root下的子节点

2.2.3 显示所有文件,包括隐藏文件

加上-a 选项,表示显示所有文件

ls -a 目录路径
显示所有文件

2.2.4 显示文件详细信息

加上-l 选项,表示显示文件详细信息

ls -l 目录路径
显示文件详细信息

这里显示的有文件的权限、所有者、所属组、文件大小、时间参数、文件名等。

2.2.5 人性化显示文件大小

加上-h 选项,表示人性化显示文件大小,可以结合-l选项。

ls -lh 目录路径
人性化显示文件大小

注意到,文件大小显示的是1.3K,而不再是之前例子中显示的1230了。

2.2.6 显示inode

加上-i选项,可以显示文件的inode。这是文件的唯一标识。


显示inode

这里的8409154就是文件的inode。

2.2.7 显示目录属性

如果想要查看的是目录的属性,而不是目录下的子节点。则可以使用-d选项。

ls -d 目录路径
显示目录属性

2.3 切换目录/进入目录

想要进入某个目录,执行以下命令

cd 目录路径

进入/usr/local目录,如下图所示:


切换目录

此外,cd命令进行一些特定的目录,还有以下简化的命令

cd ~      表示进入当前用户的家目录
cd -       进入上次目录
cd ..      进入上一级目录
cd .       进入当前目录

2.4 创建目录

2.4.1 创建单级目录

可以使用mkdir命令来创建目录

mkdir 目录名

比如,在/usr/local目录下创建一个新目录test。
创建完后,可以使用ls命令查看。


创建目录

2.4.2 递归创建多级目录

mkdir加上-p选项,即可以递归创建多级目录。

mkdir -p test/today/job
创建多级目录

2.5 删除目录

rmdir命令,用于删除空目录。如果目录里有子目录或者文件,则无法使用此命令。

rmdir  job

3. 文件管理

3.1 创建文件

3.1.1 touch命令创建文件

touch命令可以在当前目录下创建一个空文件。

touch 文件名
touch命令

3.1.2 输出重定向创建文件

输出重定向,我们在后面的系统管理部分文章再细讲。这里只讲以下命令格式

echo “文本内容” > 文件名

将文本内容输出重定向到文件,如果这个文件不存在,则会先创建这个文件。


输出重定向

3.1.3 vi工具创建文件

vi是linux自带的文本编辑工具,后面的文章我们会介绍它的用法。这里只涉及用它来创建文件的基本操作。

vi 文件名

以上命令会进行vi会话,如果这个文件不存在,则会先创建这个文件。用户可以输入:ESC键 + :wq退出。

3.2 查看文件内容

3.2.1 cat命令

cat命令用于将文件内容输出到标准输入设备(也就是屏幕)上。当文件内容很多时,会一闪而过,体验不是很好。

cat [选项] 文件名

常用选项有:

-n或--number:有1开始对所有输出的行数编号;
-b或--number-nonblank:和-n相似,只不过对于空白行不编号;
-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;

3.2.2 less和more命令

more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件

more +3 test.log               #从第三行开始显示日志内容

在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。而且** less 在查看之前不会加载整个文件, 它有缓冲区的概念**。
当查看文件内容较多时,建议使用less命令。

less file1

3.2.3 head和tail命令

head、tail #查看文本中开头或结尾部分的内容

head  -n  5  a.log #查看a.log文件的前5行
tail  -F b.log #循环读取(follow)

除了上述命令之外,vi也可以用来查看文件内容,等我们后面介绍vi时再细讲。

3.3 删除文件/目录

命令格式:

rm -rf [文件或目录]

选项

-r 删除目录
-f 强制

删除目录时,建议使用相对路径,避免误操作删除根目录下的所有内容(rm -rf /)

3.4 复制文件/目录

命令格式:

cp [选项] [原文件或目录] [文件或目录]

选项有:

-r 复制目录
-p 连带复制文件属性(比如时间参数)
-d 若源文件是链接文件,则复制链接属性
-a 相当于 -pdr
复制文件

注意:如果不加 -p 选项,则复制出来的文件是新生成的,它拥有自己的文件属性,比如创建时间会是重新生成的。加上 -p选项之后,则连文件属性也一并复制过来了,就连创建时间也会和源文件相同。

3.5 移动(重命令)文件/目录

命令格式:

mv [原文件或目录] [目标目录]

例如

mv a.txt local/  将文件b.txt移动到local目录下
mv /oracle/ test/  将/oracle/目录移动到test目录下

注意:

4. 管理链接

4.1 硬链接与软链接

链接分为硬链接和软链接。
前面我们已经提过,一个文件可以看作由两部分组成,一部分是元信息和索引信息,称为inode,一部分是实际文件内容,存储在一个或多个block块中。
硬链接可以看作对文件的一个引用,具有以下特点:

最重要的一点是:硬链接与原文件拥有相同的inode,所以它们的block块也是相同的,修改两者中任一个,文件的内容都会改变。无论删除硬链接和原文件任一个,只要另一个文件存在,都不影响对文件的访问(相当于只删除了对文件的一个引用而已,文件并没有被实际删除)。
创建了硬链接,文件的引用计数会加1。

软链接特征:

注意:创建软链接,一定要写绝对路径,否则它会在目标目录下寻找原文件(不一定能找到)

4.2 创建链接

命令格式:

ln [选项] [原文件] [目标文件]

选项:

-s 创建软链接

不加选项,则创建的是硬链接。

5. 总结

本文讲述了Linux(具体是Centos 7)中常用到的文件和目录管理相关命令,这些命令在实际开发和运维过程中都是最基本的,必须熟记和多加练习。

上一篇下一篇

猜你喜欢

热点阅读