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

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

作者: 爱迪生玛玛 | 来源:发表于2017-07-27 00:58 被阅读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系列根目录下默认一级目录有:

    • /bin 命令保存目录,普通用户可使用的命令
    • /boot 启动目录,存放启动相关文件
    • /dev 设备文件
    • /etc 配置文件
    • /home 普通用户的家目录
    • /lib 第三方库文件保存目录,系统或软件运行所需依赖的第三方库文件
    • /mnt 系统挂载目录
    • /media 媒体外设挂载目录
    • /misc 音频设备挂载目录
    • /root 超级用户的家目录
    • /tmp 临时目录 存放临时文件
    • /sbin 超级用户才能使用的命令存放的目录
    • /proc 内存运行目录,存放一些运行于内存中的信息
    • /sys 系统配置内存目录
    • /usr 用户共享资源目录,一般存放安装的第三方软件
    • /var 可变文档目录,可用于存放访问日志等可变文档

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

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

    • /bin, /sbin, /lib, /lib64都变成了链接文件,实际内存分别存放在/usr/bin, /usr/sbin, /usr/lib, /usr/lib64。

    • 新增了/run目录存放系统服务进程生成的比如pid等临时文件,比如systemd生成的临时文件

    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目录下
    
    

    注意:

    • 如果原文件就在目标目录下,那就是改名命令。
    • 与cp不同,mv命令移动目录时,不用加-r选项。

    4. 管理链接

    4.1 硬链接与软链接

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

    • 它与原文件拥有相同inode和block,可以看做是同一个文件
    • 可通过inode进行标识
    • 不能跨磁盘分区
    • 不能针对目录进行使用

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

    软链接特征:

    • 它拥有自己的inode和block块,但是block块中只保存原文件的文件名和inode编号,并没有实际的文件数据。
    • 修改原文件或软链接二者任一,另一个都会改变。
    • 删除原文件,软链接则不能使用

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

    4.2 创建链接

    命令格式:

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

    选项:

    -s 创建软链接
    

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

    5. 总结

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/slyakxtx.html