从本篇文章开始,我将总结一些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)中常用到的文件和目录管理相关命令,这些命令在实际开发和运维过程中都是最基本的,必须熟记和多加练习。

文件节点的linux指令,Java工程师必学的Linux命令(一)文件与目录管理相关推荐

  1. 视频教程-Java工程师必学系列课程之4--《Java Swing》视频课程-Java

    Java工程师必学系列课程之4--<Java Swing>视频课程 某知名科技公司技术总监,10年以上大型J2EE项目的实战研发经验,参与并主持开发"内蒙古电力集团考试系统&qu ...

  2. JAVA工程师必学技能,进阶涨薪的推进器!这份实战教程请收下

    Netty 作为互联网中间件的基石,是 JAVA 工程师进阶为高级程序员必备的能力之一.也是目前是互联网中间件领域使用最广泛最核心的网络通信框架. Netty是一个高性能.异步事件驱动的NIO框架,它 ...

  3. Linux运维工程师必学必备的8项IT技能

    如果你在学习Linux,那么强烈推荐你选择RHEL和Centos作为学习的Linux发行版本,在公司及企业当中他们是使用最多的,毕竟学习除了本身是爱好,其次也是为了就业.Centos是RHEL的克隆版 ...

  4. Java工程师必学知识点【吊打面试官系列】

  5. linux运维工程师培训课程_《Linux运维工程师必学技能》完整版视频课程专题(1.0)...

    高性能负载均衡集群HAProxy实战视频课程 13节 4小时7分钟 课程目标: 欢迎大家加入 51CTO学院Linux交流群575837909,与喜欢学习Linux小伙伴们做朋友,一起为梦想增值.高性 ...

  6. 什么是linux系统管理指令,Linux必学的系统管理命令

    本文中介绍一些实用又常用的Linux或Unix命令,这些是Linux系统管理员们平常使用的命令.本文不是什么完整列表,而是简要地列出了需要时派得上用场的命令.下面跟着学习啦小编一起来了解一下吧. Li ...

  7. Linux必学的系统管理命令-1

    Linux必学的系统管理命令<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  8. Java虚拟机必学之四大知识要点,附学习资料

    转载自  Java虚拟机必学之四大知识要点,附学习资料 作为一位 Java 程序员,在尽情享受 Java 虚拟机带来好处的同时,我们还应该去了解和思考"这些技术特性是如何实现的", ...

  9. 学习Linux七(Linux必学60个命令之【系统管理】)

    Linux必学的系统管理命令 对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心.熟悉了Linux常用的文件处理命令 ...

最新文章

  1. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据
  2. memcached的应用和兼容程序
  3. 数据中心行业在能源转型中将发挥重要作用
  4. 第十四期: 拥有7000多万店铺和10多亿件商品的微店如何打造AI系统?
  5. 实用教程丨官方下载Oracle各版本安装软件及补丁包
  6. Android 系统(94)---Android属性之build.prop生成过程分析
  7. C++_结构体指针_嵌套结构体_结构体做为函数参数_结构体值传递和指针传递---C++语言工作笔记026
  8. svn版本备份和恢复注意事项
  9. Spire.Doc 教程:在C#,VB.NET创建、编辑和保存Word
  10. Lost Cows POJ 2182 思维+巧法
  11. 开源网管工具 汇总比较
  12. 电阻分压计算,电阻选型
  13. 网络安全篇 全局ACL与URPF-12
  14. 单片机学习笔记-基础知识
  15. word计算机计算公式求总和,word2010如何算总和 word中如何在表格中计算总和
  16. word编辑中空格变成灰点
  17. 我是怎么做到开源系统的角色权限功能的?
  18. python拟合二次函数_Python 最小二乘法 拟合 二次曲线
  19. 鼠标修复DoubleClickFix
  20. win10照片查看器_Win10 下好用的免费无广告看图软件 XnView

热门文章

  1. 程序、进程、线程区别与联系
  2. 为Qt扩展QextSerialPort类
  3. 多条记录取最前面一条或根据条件任取N条
  4. 计算机维护系统Win8PE,u启动windows8PE工具箱
  5. utf8 连接 mysql_mysql配置为支持utf8的连接方式只要改client就可以了吗
  6. 怎么逐步突破,成为Python高手?
  7. php计算有多少页,PHP 计算页面执行时间
  8. python数字类型转换函数_Python的数据类型转换函数
  9. stm32怎么用keil软件进行仿真?(必需掌握的技能)
  10. stm32f103最小系统的组成及各部分功能