百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

LINUX 文件管理

sinye56 2025-01-05 20:03 6 浏览 0 评论

【七】文件管理

7.1文件(目录)是如何访问的?

1)inode是什么?

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等,这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

2)Unix/Linux如何识别文件?

系统内部不使用文件名,而使用inode号码来识别文件。在Linux中创建一个文件,系统就为该文件分配一个惟一的inode,文件的inode用于访问文件的属性。表面上,用户通过文件名打开文件,实际上,系统内部这个过程分成三步:

首先,系统找到这个文件名对应的inode号码

其次,通过inode号码,获取 inode信息

最后,根据inode信息,找到文件数据所在的block,读出数据。

3)Unix/Linux如何识别目录?

目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项的列表,每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。


4)查看某个文件的inode信息:

[root@cuug ~]# stat /etc/hosts

File: `/etc/hosts'

Size: 167 Blocks: 16 IO Block: 4096 regular file

Device: 802h/2050d Inode: 1012846 Links: 2

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2017-04-21 10:37:02.000000000 +0800

Modify: 2015-05-24 21:44:21.000000000 +0800

Change: 2015-05-24 21:44:21.000000000 +0800

[root@cuug ~]# ll -i /etc/hosts

1012846 -rw-r--r-- 2 root root 167 May 24 2015 /etc/hosts 第一列就是Inode

5)查看一个磁盘分区的inode使用情况

[root@cuug ~]# df -i

文件系统 Inode (I)已用 (I)可用 (I)已用% 挂载点

/dev/sda2 7318528 127440 7191088 2% /

/dev/sda1 26104 34 26070 1% /boot

tmpfs 223858 1 223857 1% /dev/shm

7.2目录的功能介绍

根据1994年发布的文件系统标准(FSSTND),所有的Linux文件系统都有标准的文件和目录结构,那些标准目录又包含一些特定的文件,下面来简要介绍一下每个目录的作用:

1)根目录(/)

根目录位于分层文件系统的最顶层,用斜线(/)表示。它包含一些标准文件和目录,因此可以说它包含了所有的目录和文件。

2)/bin

/bin目录,也称为二进制目录,包含了那些供系统管理员和普通用户使用的重要的Linux命令的二进制(可执行)映像。这个目录下的文件要么是可执行文件,要么是其他目录下的可执行文件的符号连接,目录/usr/bin存放了大部分的用户命令。

3)/boot

/boot目录下存放的是Linux系统启动时要用到的所有文件,包括Linux内核的二进制映像。当用lilo引导Linux时,会用到这里的一些信息,grub的配置文件也放在这里。

4)/dev

/dev目录,也称为设备目录,存放连接到计算机上的设备的对应文件,包含了Linux 系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。

5)/etc

/etc目录存放了系统管理时要用到的各种配置文件和子目录,示例网络配置文件、文件系统、X窗口系统配置文件、设备配置信息、设置用户信息等;/etc目录不包含任何二进制文件。这个目录下的文件主要由管理员使用;普通用户对大部分文件有读权限。

6)/home

用户的基本目录,/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

7)/lib

/lib目录下存放了各种编程语言库,包括库文件和kernel模块。典型的Linux系统包含了C、C++、FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令。实际上它包含了标准C库/lib/libc.so.*,数学库libm.so.*,共享的动态链接库/lib/ld/so以及目录/lib和/sbin下命令用到的其他共享库。

8)/lost+found

/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

9)/mnt

/mnt目录在一般情况下也是空的,主要用来临时装载文件系统,系统管理员执行mount命令完成装载。工作在系统中,这个目录包含了光驱、磁盘和软驱的装载点。这样,当装载了一个设备时,如光驱,就可以通过访问目录/mnt/cdrom的文件来访问相应光盘上的文件。

10)/proc

/proc目录存放了进程信息和系统信息,这些信息是在内存中由系统自己产生的。

11)/root

许多Linux系统都将目录/root作为根用户(超级用户)的主目录,该目录受到完全保护,不受普通用户的影响,普通用户没有权限访问/root目录。

12)/sbin

/sbin 该目录用来存放系统管理员的系统管理程序。目录/sbin、/usr/sbin、/usr/local/sbin包含系统管理工具、实用程序和通用的根用户专用命令。

13)/usr

/usr目录是Linux文件系统中最大的一个部分,要用到的应用程序和文件几乎都存放在这个目录下面。它包含了主机之间可以共享的只读数据。在多数Linux系统中,/usr至少包含了下面的子目录:X11R6、bin、doc、games、include、lib、local、man、sbin、share、src和tmp。

14)/tmp

/tmp目录用来存放不同程序执行时产生的临时文件。一些命令和应用程序要用到该目录。您也可以用该目录存放自己的一些临时文件。该目录中的所有文件会被定期删除,以保证磁盘(或磁盘分区)不会被临时文件所塞满。/tmp目录下某个文件的生命期是由系统管理员设定的,而且因系统而异,但通常只有若干分钟。多数系统都为/tmp目录设置了粘滞位(sticky bit),这样只有文件的所有者才能从该目录中删除文件。

15)/opt

/opt目录用来安装附加软件包。用户调用的软件包程序放在目录/opt/package_name/bin下,package_name是安装的软件包名称。软件包的参考手册放在/opt/package_name/man下。

16)/var

/var目录是系统在工作时预先设置的工作目录,如各种服务的日志文件和收发的邮件等。/var目录用于放置变量数据(当系统运行时这些数据不断变化)。

7.3文件和目录属性

7.4文件和目录的访问权限

7.5更改属性及权限的方法

1)更改目录或文件所有者及组

由root用户去执行,常用命令是:

chown [R] 用户:组 [目录|文件]

R表示递归,即该目录下所有目录和文件都一同更改。如:

#chown -R oracle:oinstall /u01

2)更改目录或文件的权限

由root用户和所有者都可以去执行,有三种方法

第一种:权重法

r(权重)=4,w(权重)=2,x(权重)=1。如:

#chmod 755 abc 赋予abc权限为rwxr-xr-x

[R]是递归,有效性截止到命令发出之前,对命令之后创建目录或文件无效

第二种:赋值法

#chmod u=rwx,g=rx,o=rx abc 同上例

这里:u=用户权限,g=组权限,o=不同组其他用户权限

第三种:加减法

#chmod u-x,g+w abc 给abc去除用户执行的权限,增加组写的权限
#chmod a+r abc 给所有用户添加读的权限

权限的理解需要注意两点:

1)凡是对某个文件有写动作的操作,不是看你是否对这个文件是否有W权限,而是看你对这个文件的上级目录的是否有W和X权限,因为你的写操作是对目录的内容的写操作。

2)root用户一般不受权限的限制,谁的目录或文件root都可以做写操作,但执行一个shell脚本所有用户必须有X权限,root也不例外。

[root@cuug abc]# cat a1.sh 这个shell文本里只包括一句执行命令
date
[root@cuug abc]# ls -al

总计 16

drwxr-xrwx 2 root root 4096 12-03 18:01 .

drwxr-xr-x 26 root root 4096 12-03 17:03 ..

-rw-r--r-- 1 root root 5 12-03 18:01 a1.sh

[root@cuug abc]# ./a1.sh 显而易见root缺省X权限,受限

-bash: ./a1.sh: 权限不够

[root@cuug abc]# sh a1.sh或bash a1.sh,此办法是可以的,因root调用了shell解释器

2015年 12月 03日 星期四 18:03:35 CST

[root@cuug abc]# chmod u+x a1.sh
[root@cuug abc]# ls -al

总计 16

drwxr-xrwx 2 root root 4096 12-03 18:01 .

drwxr-xr-x 26 root root 4096 12-03 17:03 ..

-rwxr--r-- 1 root root 5 12-03 18:01 a1.sh

[root@cuug abc]# ./a1.sh

2015年 12月 03日 星期四 18:04:12 CST

[root@cuug abc]#

7.6使用附加权限

1)SET位权限

主要用途:

为可执行(有 x 权限的)文件设置,权限字符为“s”,其他用户执行该文件时,将拥有属主或属组用户的权限。SET位权限类型:

chmod u=rws,o=rx
-rws---r-x:表示对属主用户增加SET位权限

应用示例/usr/bin/passwd

2)粘滞位权限(Sticky)

主要用途:

为公共目录(示例,权限为777的)设置,权限字符为“t”,用户不能删除该目录中其他用户的文件。

应用示例:/tmp、/var/tmp

3)设置SET位、粘滞位权限

设置权限字符chmod o±t 目录名...

示例:

【第一步】 建立公共目录,不同用户建立的各自的文件

[root@cuug /]#mkdir /abc root用户建立一个公共目录
[root@cuug /]#chmod 777 /abc 授予所有用户rwx权限
[root@cuug /]#ls -ald /abc

drwxrwxrwx 2 root root 4096 12-09 21:32 /abc

[tim@cuug ~]$touch /abc/timfile 以tim身份建立一个timfile
[ran@cuug ~]$touch /abc/ranfile 以ran身份建立一个ranfile
[ran@cuug ~]$ls -al /abc 查看一下文件的属性和权限

-rw-r--r-- 1 ran g1 0 12-09 21:41 ranfile

-rw-r--r-- 1 tim g1 0 12-09 21:40 timfile

【第二步】 测试ran用户可以删除timfile

删除后,tim重建/abc/timfile

【第三步】 为/abc目录设置粘贴位

测试ran用户删除timfile时报错

[root@cuug ~]#ls -ald /abc

drwxrwxrwx 2 root root 4096 12-09 22:02 /abc

[root@cuug ~]#chmod o+t /abc 为/abc设粘贴位
[root@cuug ~]#ls -ald /abc

drwxrwxrwt 2 root root 4096 12-09 22:02 /abc

[ran@cuug ~]$rm /abc/timfile 用户ran删别人的文件会报错

rm:是否删除有写保护的 一般空文件 “/abc/timfile”? y

rm: 无法删除 “/abc/timfile”: 不允许的操作

4)附加权限的特点

1、系统中要尽量避免使用set位,可以适当使用粘滞位;

2、Set位只能设置在文件上,而且只当文件有执行权限时才有意义;

3、粘滞位只能设置在目录上,而且不需要指定设置在针对谁的权限上。


the end !!!

@jackman 共筑美好!

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: