前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员必须了解的Linux基础(目录和磁盘)

程序员必须了解的Linux基础(目录和磁盘)

作者头像
一行舟
发布2022-08-25 13:52:45
6350
发布2022-08-25 13:52:45
举报
文章被收录于专栏:一行舟

引言:本文主要介绍,Linux的目录标准,目录和文件常用操作命令,文件系统三部分

Linux目录标准:FHS

我们使用的Linux服务器,虽然有很多不同的发行版,但他们的文件目录都有一些相似性。Linux目录配置的依据是FHS(https://www.pathname.com/fhs/)标准。FHS建议根目录最好单独分区,尤其与安装的应用程序分开,这样根目录所在的文件系统不容易发生问题。

FHS标准里主要定义了 1:根目录/ 2:/usr 3:/var 三个目录应该放置的内容。下面分别列举三个目录下比较常用的目录及存放的文件内容,详情还请参照FHS官方文档:

一:根目录 / 下必须存在的目录及作用

  • /bin:系统的可执行文件存放在这里,比如常用的:cd cp find chmod chown等命令们
  • /boot:存放系统启动使用的文件
  • /dev:设备和接口设备都以文件的形式存在此目录下,其中还包括,标准输入:stdin 标准错误:stderr 标准输出:stdout
  • /etc:系统主要的配置文件,比如用户的账号密码和各服务的启动文件等
  • /lib:系统的函数库
  • /media:软盘、光盘、DVD等临时设备挂载目录
  • /mnt:暂时挂载一些额外的目录
  • /opt:第三方辅助软件放置的目录
  • /run:系统启动之后的一些信息
  • /sbin:启动过程中需要的命令
  • /srv:一些网络服务启动之后的数据存放位置
  • /tmp:临时文件存放
  • /usr:第二层有更多目录要求
  • /var:第二层有更多目录要求

二:/usr目录下必须存在的目录

  • /usr/bin/:所有用户能够使用的命令。Centos7已经把全部的用户能够使用的命令都放在了这里,根目录下的/bin链接到这里
  • /usr/lib/:根目录的lib链接到此目录
  • /usr/local/:系统管理员给自己本机下载的软件
  • /usr/sbin/:根目录的sbin链接到此
  • /usr/share:放置一些可以共享的只读数据文件,比如一些帮助文档、说明文档

三:/var目录:主要存放一些经常变动的文件,比如MySQL、Redis数据库文件

  • /var/cache/:应用程序本身运行过程中产生的一些缓存
  • /var/lib/:应用程序执行过程中需要使用的数据文件
  • /var/log/:日志文件存放目录
  • /var/run/:某些程序启动之后的PID放在此目录下,链接到/run目录
目录和文件常用操作命令

文件目录查看:ls [-alSt]

  • a:全部的文件连同隐藏文件
  • l:详细显示信息包含文件的属性和权限等数据
  • S:依文件容量大小排序
  • t:依时间排序

切换目录:cd 目录

显示当前目录:pwd

创建目录:mkdir 目录

删除目录:rmdir 目录

复制:cp [-rip] 源文件 目标文件

  • r:递归复制
  • i:若目标文件已存在,询问是否覆盖
  • p:连同文件的(权限、用户、时间)一起复制,通常在备份时使用

删除:rm [-fr] 目录/文件

  • f:强制删除
  • r:删除目录时,递归删除

移动:mv [-fi] 源文件 目标文件

  • f:强制移动
  • i:目标文件已存在时,询问是否覆盖

查看文件内容:

显示全部文件内容:cat [-n] 文件

n:打印行号

查看前n行文件:head [-n 数值] 文件

-n 数值:前n行,默认是10行

查看倒数前n行:tail [-n 数值] 文件

-n 数值:前n行,默认是10行

创建文件:touch [-m] 文件

m:修改文件的mtime(上次被修改的时间)

文件打包tar命令:

打包并压缩:tar [-z|-j|-J] [cv] [-f 打包完的文件名] 需要压缩的目录/文件

解压缩:tar [-z|-j|-J] [xv] [-f 需要解压的文件] -C 目录

查看:tar [-z|-j|-J] [tv] [-f 需要查看的压缩文件]

z,j,J代表三种压缩方式,分别为:z:gzip j:bzip2 J:xz

bzip2的压缩比通常优于gzip,xz的压缩比又优于bzip2,但是xz的压缩效率很低,很小的文件要比较久的时间才能生成压缩包

这么多参数有时候不好记忆,其实用的最多的就是:

  • 压缩:tar -zcv -f file1.gz /home
  • 解压:tar -zxv -f file1.gz -C /home

查找执行文件:which [-a] command

a: 将所有由PATH目录中找到的命令都列出,默认只列出第一个

查找命令:whereis [-l] 文件或目录名

l:列出查找了多少目录

查找命令:local [-ir] 文件/目录

i:忽略大小写差异

r:文件/目录可以写正则表达式

查找命令:find [目录] [option] [action]

eg:

  • find / -user xingzhou 属于用户xingzhou的所有文件
  • find / -name xingzhou 查找文件名为xingzhou的文件
  • find / -name "*xingzhou*"查找文件名包含xingzhou的文件
  • find / -mtime 0 24小时内有修改的文件
  • find / -mtime 3 3天前的那一天24小时内有修改的文件
  • find / -mtime -3 小于等于三天内有修改的文件
  • find / -mtime +3 大于等于四天前有修改的文件

说明:find命令是从磁盘上直接查找文件会比较耗时。whereis只是查找系统中的特定目录,local从系统的数据库中查找所以这两个命令会比较快。但是系统的文件存储信息数据库并不是实时更新的,所以local查询的文件结果可能没那么准确。

文件系统

概要:
操作系统为了管理和使用磁盘,发明了文件系统。Linux常用的文件系统有ext2 ext3 ext4 ,这些都是索引式文件系统。所谓的索引式文件系统就是给存储在磁盘上的文件内容建立索引。建立索引的目的当然是为了更快的查找文件内容。索引式文件系统通常有三类区块来存放不同的数据:超级区块、inode区块、数据区块。超级区块里存放文件系统的属性,还有inode和数据区块的总量、使用量、剩余量等信息inode:记录文件的属性,同时记录文件内容存放的数据区块(可以认为是文件系统的索引)数据区块:存放具体的文件内容。不同的文件系统对于区块的划分细节会有些差异,但原理是一致的。Centos7默认开始使用xfs文件系统,xfs文件系统,是一个日志文件系统。(https://baike.baidu.com/item/XFS#ref_[2]_1222157)更适合一些高容量的磁盘和大型文件的存储。
使用:

磁盘在使用之前需要进行“挂载”,挂载就是把磁盘和目录建立联系。

挂载的具体命令是:mount

依照/etc/fstab的配置挂载所有磁盘:mount -a

查看当前的挂载信息:mount

挂载某个目录:

  • mount [-t 文件系统] LABEL='' 目录
  • mount [-t 文件系统] LABEL='' 目录
  • mount [-t 文件系统] LABEL='' 目录

mount --bind 目录1 目录2:把目录1挂载到目录2下,挂载的是目录而不是文件系统,此时目录1和目录2链接到了同一个inode。

取消挂载:umount [-fnl] 设备文件名/目录

  • f:强制取消
  • n:卸载但是不更新/etc/mtab文件
  • l:立刻卸载文件系统
几个查看命令:

df [-ahi] [目录/文件]

  • a:列出所有的文件系统,包括/proc(等下再解释这个目录)
  • h:以易读的形式显示
  • i:显示inode的数量,而不是磁盘容量

du [-sham] 文件/目录

  • s:仅显示总量
  • h:以易读的容量显示
  • a:列出所有文件和目录的容量
  • m:以M为单位,显示容量

eg:du -sm /*:仅列出根目录下孩子目录的容量,不统计孙子目录

补充说明下/proc目录:/proc是进程文件系统,proc目录下的内容都是存储在内存中的,不占用磁盘(https://zh.wikipedia.org/wiki/Procfs)

swap(内存交换分区)

我们执行free命令,会看到有一栏是Swap,swap是一个特殊的分区,称为内存交换分区,当系统内存不足的时候,可以当内存使用。其实对于绝大多数互联网的服务端开发场景,机器的内存配置往往很充足,再就是可以以来cgroups去分配合适的内存,swap可能没那么有必要了。

如果有的业务场景,不追求速率,只要进程不挂慢慢跑就可以,这种的话就可以设置swap。

如果排查swap开启之后,是否影响性能,可以使用vmstat 2命令,查看 si so 来观察对性能的影响,这两个值越大,对性能影响越严重。

总结:其实关于“Linux的目录和磁盘”需要学习的地方还有很多,这里仅仅列出来了一些常用的知识点,需要系统的了解的话,可以通过官网、源码、技术书籍等途径去学习。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言:本文主要介绍,Linux的目录标准,目录和文件常用操作命令,文件系统三部分
    • 目录和文件常用操作命令
    • 文件系统
      • 概要:
        • 操作系统为了管理和使用磁盘,发明了文件系统。Linux常用的文件系统有ext2 ext3 ext4 ,这些都是索引式文件系统。所谓的索引式文件系统就是给存储在磁盘上的文件内容建立索引。建立索引的目的当然是为了更快的查找文件内容。索引式文件系统通常有三类区块来存放不同的数据:超级区块、inode区块、数据区块。超级区块里存放文件系统的属性,还有inode和数据区块的总量、使用量、剩余量等信息inode:记录文件的属性,同时记录文件内容存放的数据区块(可以认为是文件系统的索引)数据区块:存放具体的文件内容。不同的文件系统对于区块的划分细节会有些差异,但原理是一致的。Centos7默认开始使用xfs文件系统,xfs文件系统,是一个日志文件系统。(https://baike.baidu.com/item/XFS#ref_[2]_1222157)更适合一些高容量的磁盘和大型文件的存储。
          • 使用:
            • 几个查看命令:
              • swap(内存交换分区)
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档