zoukankan      html  css  js  c++  java
  • Linux重要目录结构

    学习Linux重要目录结构详解,Linux和Windows目录结构是不一样的,这里记录一下Linux下目录的结构,以及各个目录的作用是什么。

    硬盘编号和分区编号

    在理解Linux目录结构前,有必要大致了解一下Linux系统下硬盘编号和分区编号的方式,主要有如下几种命名方式,Windows下硬盘编号就是C盘、D盘、E盘等。

    (1)IDE硬盘:硬盘编号为hda,hdb...,对应的分区编号为硬盘编号加数字,如hda1,hda2...。

    (2)SAS/SATA/SCSI/USB:硬盘编号为sda,sdb...,分别代表第一块硬盘,第二块硬盘...,对应的分区编号为sda1,sda2...,代表第一块硬盘上的第一个分区,第二个分区...。

    (3)xvdx,x为a到z:Xen虚拟机硬盘。

    关于几种硬盘的主要区别后面补充,反正我的9年历史宏基电脑硬盘使用的是IDE,然后刚组装的台式机使用的是SATA硬盘。

    那么问题来了,如果是Window下的文件夹,如果一个文件在C盘,那么它不可能在D盘,并且文件下的子文件也只能在C盘。对于Linux来说就不一定了,比如/etc目录可能在sda1,但是/etc下的子目录可能有在sda2的,所以文件在哪个目录不能确定它在哪个盘,这是跟Window的区别。

    主分区和扩展分区

    主分区:主要安装操作系统用,也可以存储数据。

    扩展分区:不能直接使用,需要在分区上建立逻辑分区才能使用。

    逻辑分区:只能用于存储数据,不能用于系统安装。

    分区表

    MBR:比较旧的分区,使用MBR作为引导(一共446字节),并且里面66字节用于保存分区信息,此分区最大支持4个主分区和2TB容量,这种分区的电脑最多只能安装4个操作系统。

    GPT(GUID):取消了扩展分区,所有的分区都可以做为主分区,支持硬盘容量18EB,安装操作系统数目无限定,现在新的电脑一般采用它,如果你的硬盘是2T以上,就建议使用GPT分区。

    常用的分区工具,MBR下有fdisk,GPT下有parted,此外df -h或blkid -h可以查看分区信息。

     1 [root@node02 ~]]# fdisk -l
     2 
     3 Disk /dev/sda: 21.5 GB, 21474836480 bytes
     4 255 heads, 63 sectors/track, 2610 cylinders
     5 Units = cylinders of 16065 * 512 = 8225280 bytes
     6 Sector size (logical/physical): 512 bytes / 512 bytes
     7 I/O size (minimum/optimal): 512 bytes / 512 bytes
     8 Disk identifier: 0x0000198b
     9 
    10    Device Boot      Start         End      Blocks   Id  System
    11 /dev/sda1   *           1          26      204800   83  Linux
    12 Partition 1 does not end on cylinder boundary.
    13 /dev/sda2              26        2350    18668544   83  Linux
    14 /dev/sda3            2350        2611     2097152   82  Linux swap / Solaris
    15 [root@node02 ~]]# parted -l
    16 Model: VMware, VMware Virtual S (scsi)
    17 Disk /dev/sda: 21.5GB
    18 Sector size (logical/physical): 512B/512B
    19 Partition Table: msdos
    20 
    21 Number  Start   End     Size    Type     File system     Flags
    22  1      1049kB  211MB   210MB   primary  ext4            boot
    23  2      211MB   19.3GB  19.1GB  primary  ext4
    24  3      19.3GB  21.5GB  2147MB  primary  linux-swap(v1)
    25 
    26 
    27 Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
    28 has been opened read-only.
    29 Error: Invalid partition table - recursive partition on /dev/sr0.         
    30 Ignore/Cancel? Cancel                                                     
    31 
    32 [root@node02 ~]]# df -h
    33 Filesystem      Size  Used Avail Use% Mounted on
    34 /dev/sda2        18G  2.0G   15G  12% /
    35 tmpfs           931M     0  931M   0% /dev/shm
    36 /dev/sda1       194M   34M  151M  19% /boot
    37 
    38 [root@node02 ~]]# blkid
    39 /dev/sda2: UUID="8588ff17-82cc-48c0-b582-896a032f4dea" TYPE="ext4" 
    40 /dev/sda1: UUID="379bd3e4-f3f3-43d1-af9d-0d3542f644f2" TYPE="ext4" 
    41 /dev/sda3: UUID="e0f7f0cf-9420-448e-bcfe-08bdb5cb1b49" TYPE="swap" 

    从上面可以看出文件系统为ext4,它是ext3的升级版,简单来说是一种非常强大的文件系统,支持更大的文件和文件系统,且支持延迟分配(文件在cache中写完才开始分配数据块并写入磁盘)、持久预分配(下载时可以预先在磁盘中创建一个相同大小的空文件,避免下载时间过长导致空间不足)、无限数量的子目录。

    挂载

    Linux里的分区默认是不能访问的,我们通过命令可以访问到里面的内容,其实是链接的过程,比如访问/etc,其实是可能链接到了/dev/sda1,这个过程称为挂载。/etc就是挂载点。

    挂载:为分区找一个入口。

    挂载点:分区入口的目录名。

    举例分析,如图所示,访问/dev/cdrom,即光盘里的内容发现访问不了。

    发现无法访问

    挂载一下,通过访问mnt,来实现对光盘内容的访问。

    卸载mnt,再次查看发现已经没有了内容。

    目录结构

    首先上一张目录结构的树形图,然后一个一个记录它的作用。

    /bin 

    是binary的缩写,存放用户模式下可以操作的命令,如下图所示,如rm命令,当使用which rm后,显示路径为/usr/bin/rm,说明访问/bin目录下的命令将会软链接到/usr/bin/下。

    /boot

    Linux内核和系统引导程序,配置文件等所在的目录,在配置boot分区时是第一个配置的,并给了256M的大小,这个分区一般就是这么大。boot分区其实就是/dev/sda1的挂载点。

    /dev

    以文件形式存放任何设备与接口,如声卡,硬盘,光驱等。如下就是一块盘sda下的3个分区,sda1对应就是boot,sda2对应就是swap,sda3对应就是/。

    如果不确定可以通过以下命令的对比都可以分析出来。

    [root@clyang ~]# df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda3       12309504 3943356   8366148  33% /
    devtmpfs         2002356       0   2002356   0% /dev
    tmpfs            2013172       0   2013172   0% /dev/shm
    tmpfs            2013172   11956   2001216   1% /run
    tmpfs            2013172       0   2013172   0% /sys/fs/cgroup
    /dev/sda1         258724  138844    119880  54% /boot
    tmpfs             402636       0    402636   0% /run/user/0
    [root@clyang ~]# ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sda3
    [root@clyang ~]# blkid
    /dev/sda1: UUID="2c63419a-a2cb-4dcb-a579-6dc4023d8c1f" TYPE="xfs" 
    /dev/sda2: UUID="ccc93b28-83b4-4b16-930a-f8f1e32a32ca" TYPE="swap" 
    /dev/sda3: UUID="7530f7d3-3d71-4cad-a9ae-645b3d7c421f" TYPE="xfs" 
    /dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
    [root@clyang ~]# cat /etc/fstab
    
    #
    # /etc/fstab
    # Created by anaconda on Fri May 31 00:53:04 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=7530f7d3-3d71-4cad-a9ae-645b3d7c421f /                       xfs     defaults        0 0
    UUID=2c63419a-a2cb-4dcb-a579-6dc4023d8c1f /boot                   xfs     defaults        0 0
    UUID=ccc93b28-83b4-4b16-930a-f8f1e32a32ca swap                    swap    defaults        0 0
    [root@clyang ~]# 

    /etc

    配置文件所在的目录,二进制软件包配置文件所在的目录。

    /home

    普通用户的家目录。

    /root

    管理员的家目录,如我们是root用户,因此家目录就是/root。

    /mnt

    临时挂载点

    /sbin

    管理员命令所在目录,普通用户不能使用,如下面切换到个人目录下后,使用管理员命令reboot无法生效。

    切换到clyang用户,使用reboot命令提示切换到其他用户。

    切回去,使用root用户来执行reboot,生效。

    /lib

    开机使用的函数库,以及/bin和/sbin目录下命令要调用的函数。

    除了lib,还有一个lib64,代表64位下的函数库,一般为系统为64位。

    /opt

    放置第三方软件,现在一般不用了。

    /media

    用于挂载设备文件的目录。一般是可以移除的媒体文件。

    /srv

    为用户提供服务的数据所在的目录,一些网络服务的数据文件目录。

    /tmp

    任何人都可以使用的共享目录,存放临时文件。

    /usr

    系统软件和用户相关程序所在目录,FHS里解释为第二层次目录。如我在里面安装了jdk,tomcat和mysql。

    /var

    经常存放可变化的数据,如日志文件。

    /proc

    虚拟文件系统,存放进程、内核信息、外部设备及网络状态的目录。

    /sys

    跟proc类似。

    /run

    正在运行的进程相关文件。

    /etc系统初始化及设置相关重要文件

    网卡配置

    可以先查看。

    其作用是配置上网的,可以看下里面的内容。

    具体的意思如下:

    (1)TYPE=Ethernet:上网类型,现在基本为以太网

    (2)BOOTPROTO=none:启动协议,获取配置方式,一般有none、bootp和dhcp三个

    (3)DEFROUTE=yes:使用默认路由

    (4)NAME=eth0:第一块网卡逻辑设备名,如eth0,第二块为eth1

    (5)UUID=355fd293-f18d-4a72-b9e3-9cb69f659d57:通用唯一标识码(Universally Unique Identifier),如果VMware克隆的虚拟机无法启动网卡,可以去掉此项。

    (6)DEVICE=eth0:第一块网卡逻辑设备名

    (7)ONBOOT=yes:开机自动激活网卡设备

    (8)IPADDR=10.0.0.200:虚拟机NAT模式下IP地址,IP地址分为网络位和主机位

    (9)PREFIX=24:子网掩码位数,子网掩码用于划分网络用,将ip地址的网络位和主机位进行划分,可以计算ip地址的数量,如果是24位即255.255.255.0,代表可以使用255.255.255.0-255.255.255.255之间的ip,255主机位一般作为广播用,还有一个用做网关,一般紧靠广播位

    (10)DNS1=223.5.5.5:主DNS,这个配置会优先于/etc/resolv.conf中的配置生效

    (11)GATEWAY=10.0.0.254:局域网上网网关地址,网关用于数据的转发,任何数据传输都需要通过网关

    DNS配置文件

    DNS就是域名系统,主要作用是将浏览器输入的网址转化为要访问服务端的ip地址,也可以使用/etc/hosts来解析,但是这个针对个人电脑的,DNS则是放到了一个公共的地方,大家都可以使用来解析。

    目前来说/etc/resolv.conf基本废弃,主要配置在/etc/sysconfig/network-scripts/ifcfg-eth0里设置DNS即可。如果在resolv.conf中设置了DNS地址,只针对当前设置有用,如果网卡重启就会被重新覆盖。如果/etc/sysconfig/network-scripts/ifcfg-eth0设置了,自动更新到resolv.conf里,反之则不会。

    查看修改后内容,重启后发现又变回去了。

    /etc/hosts文件

    系统本地的DNS解析文件,如果本地DNS中有设置一个网址的解析地址,则优先按照hosts文件中的进行解析,否则按照公共DNS进行解析。

    下面在不修改hosts文件的情况下ping百度。

    修改hosts文件,添加对百度网址的解析,IP地址修改为1.1.1.1,重新ping发现ip地址已经修改为hosts文件中的IP地址。

    一般这个文件是用做局域网测试解析。

    /etc/fstab

    开机自动挂载设备的文件,如下图所示,自动挂载了/、/boot、swap和/media。

    入图所示,第一列UUID代表设备名,可以通过blkid命令来查看对应的设备。其他如下:

    (1)第二列代表挂载点

    (2)第三列代表文件系统类型

    (3)第四列代表挂载参数,可以看到光盘的挂载参数为iso9660

    (4)第五列代表是否自动备份,一般设置0

    (5)第六列代表是否开机检查,一般设置0

     /etc/rc.local

    存放开机自启动程序命令的文件,其实真实路径是/etc/rc.d/rc.local,这里有一个链接。

    从提示可以看出来,需要使用chmod +x /etc/rc.d/rc.local命令来确保这个文件在启动时执行。

    /etc/profile和/etc/bashrc

    配置系统的环境变量,别名等的文件,目前的认知是发现profile一般是设置环境变量,bashrc一般是别名。

    下面是profile文件,里面配置了JDK,Tomcat和MySql的环境变量,另外还配置了PS1变量,让显示效果改变,其中把export PS1="[[e[34;1m]u@[e[0m][e[32;1m]H[e[0m][e[31;1m] w[e[0m]]\$ "添加到profile文件中就可以,可以使用source命令生效,或者重启。

    还有别名也可以放到profile文件里,比如rm命令,按照如下添加,设置后启动命令就提示"不要使用rm",但是发现一个问题,如果重启后就没用了,不提示。

    alias rm='不要使用rm命令'

    然后将别名命令添加到bashrc,重启后发现可以正常提示。

    从上面可以看出来,/etc/bashrc里设置的别名命令优先于/etc/profile生效。

    /etc/issue和/etc/issue.net

    清理这里面的内容,可以让linux启动后不再显示版本和内核信息。

    虚拟机启动显示内容

    清理里面内容

    [root@oldboyedu ~]# >/etc/issue
    [root@oldboyedu ~]# >/etc/issue.net

    查看已经没有了内容。

    重启或者Ctrl+D后查看是否还有版本信息和内核信息,发现已经没了。

    /etc/motd

    配置用户登录系统之后显示的提示内容,可以通过vim命令在里面修改,如图就是我添加的。

    登录后提示我写的内容。

    /etc/redhat-release

    查看系统版本,另外cat /etc/system-release也可以查看。

    还有一个查看系统内核,可以看下。

    /etc/sysctl.conf

    Linux系统内核参数设置与优化的文件,以后补充。

    /etc/init.d

    这个目录时用来存放yum或者rpm工具安装的软件的默认启动脚本,如我安装的mysql,另外在Centos7中这个文件基本废弃不用了,统一由systemctl取代。

    /etc/inittab

    设置开机运行级别以及启动相应脚本(Centos5用,后面没用了)的文件,主要是Centos7之前使用,查看里面内容可以发现,在这里设置将不再生效。

    根据提示去systemd查看,下面就是新的存放地。

    另外补充一下运行级别的概念,linux下有7个运行级别,如下。

    (1)0 关机

    (2)1 单用户模式,root用户密码忘记可以使用此模式找回

    (3)2 没有NFS(一个文件系统),无网络多用户模式

    (4)3 命令行模式,企业级服务器核心运行状态

    (5)4 未使用,官方预留

    (6)5 图形化模式

    (7)6 重启

    下面都是查看运行级别的命令,下面三个在Centos7都可以使用,最后一个适用Centos7。

    Centos6和Centos7的运行级别有一一对应关系。

    如果需要切换运行级别,使用init命令,如下图使用init 6命令后重启了linux。

     在Centos7下主要使用 'systemctl set-default 运行级别' 修改运行级别。

    如果是Centos6,修改/etc/inittab文件,将如下行进行设置。

    id:3:initdefault

    下面在centos6下测试将默认运行级别修改为6,然后进入单用户模式进行修改运行级别。

    (1)修改运行级别为6

    (2)重启虚拟机,进入循环重启,在出现如下画面时,按ctrl+G鼠标进入虚拟机,方向键或回车均可。

    (3)根据提示,按e,进入系统前编辑命令。

    (4)选中kernel,继续按e。

    (5)quiet后空格,在加上1后回车

     (6)再次在kernel上按字母b进行boot启动

     (7)这样就进入了单用户模式,可以在此模式下修改运行级别,或者修改root密码(passwd命令修改)。

     单用户

    总结

    以上主要内容,为目录结构用途,以及关键的文件作用,学习的过程中暂时先获得大体的印象,后面慢慢学习的过程中再加深理解。

  • 相关阅读:
    java 万能转换器 输入SQL 直接得到ArrayList
    社交原理
    意志力和自律
    windows phone 8.1 让项目开启蓝牙genericAttributeProfile
    C# JSON和对象之间互相转换
    QTC++监控USB插拔
    英语通假字
    #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
    Qt5.3.2 在MAC yosemite下编译出错 Could not resolve SDK path
    Mac 用Ctr+C复制,Ctr+V 粘贴
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11117376.html
Copyright © 2011-2022 走看看