Linux文件与目录管理

绝对路径和相对路径:

绝对路径:路径的写法一定由根目录 ‘/’写起,例如 /usr/local/mysql 这就是绝对路径。

相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为 cd /home 然后 cd test 此时用户所在的路径为 /home/test 第一个cd命令后跟 ‘/home’ 第二个cd命令后跟 ‘test’, 并没有斜杠,这个 ‘test’ 是相对于 ‘/home’ 目录来讲的,所以叫做相对路径。

环境变量PATH:

通俗的讲,环境变量就是告诉电脑 (实际是操作系统)几个目录。这几个目录下存储几个执行文件,如前面显示的/usr/bin目录,大部分的系统命令都在这个目录下。

当我们输入命令mkdir时,系统就会在环境变量所代表的几个目录从前到后去查找,哪个里面有mkdir文件,然后去执行mkdir命令。

系统中环境变量的名字是PATH,其内容可通过下面的命令显示 (根据操作系统不同和配置不同,略有差别,但格式是统一的,: 分割的一堆路径)

echo $PATH:显示当前PATH环境变量。

加到环境变量的路径必须是全路径,全路径指以/开头或以~开头的路径。

注意第一个PATH不含 $ , 第二个PATH有 \$ 符号
\$ export PATH=$PATH:/home/ct
所以在以后安装了新的软件,或者写了新的脚本后,都把软件的可执行程序和可执行的脚本所在的目录,加到环境变量里面就可以了。

但是,在命令行中执行export,对环境变量所做的修改,只对当前终端有效,退出后就无效了。为了使得这一操作长期有效,我们需要把这句话写入一个文件中,一个登陆服务器就会被自动读取的文件中。

  • /etc/profile :

    此文件为系统的环境变量,它为每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d 目录的配置文件中搜集shell 的设置。

    ​ 这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的shell 是csh 、tcsh 、zsh ,则不会读取此文件),用于获取系统的环境变量,只在登陆的时候读取一次。

    更改完后,执行source /etc/profile 生效。

  • ~/.bashrc :

    该文件包含专用于单个人的bash shell 的bash 信息,当登录时以及每次打开一个新的shell 时, 该该文件被读取。

    ​ 单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。

    更改完后,执行 source ~/.bashrc 生效。

文件管理命令:

  • cd:这个命令是用来变更用户所在目录的,后面如果什么都不跟,就会直接到当前用户的根目录下。

    ./ 表示当前目录,../ 表示当前目录的上一级目录

  • pwd:打印出当前所在目录。

  • mkdir:创建目录。‘mkdir’ 其实就是make directory的缩写。

    -m :指定创建目录的权限。

    -p : 可以创建多级目录。如果要创建目录已经存在,会覆盖。

  • rmdir:删除空目录。用法与mkdir相同,用的少,一般用rm代替。

  • rm:删除文件或目录。最常用。

    -m : 删除目录是用的选项,等同于rmdir。但是可以删除非空目录。同时会提示是否确认删除。

    -f : 强制删除。不会提示确认删除。就算文件要删除的文件不存在也不会报错。要删除一个目录时,即使加上 ‘-f’ 选项也会报错,所以删除目录一定要加 ‘-r’ 选项。

  • cp :copy的简写,即拷贝。格式为 cp [选项] [ 来源文件 ] [目的文件]

    -r :如果要拷贝目录是必须加 -r。

    -i : 安全选项。和rm类似,如果遇到一个存在的文件,会问是否覆盖。在Redhat 和 centos系统中,cp默认覆盖。

  • mv:‘mv’ 是move的简写。格式为 mv [ 选项 ] [源文件] [目标文件]

    -i :安全选项。会有提示。

    该命令有几种情况:

    1) 目标文件是目录,而且目标文件不存在;

    2) 目标文件是目录,而且目标文件存在;

    3) 目标文件不是目录不存在;

    4) 目标文件不是目录存在;

    目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。不存在的话移动完后,目标文件是一个文件。相当于重命名,常用。

  • cat: 查看文件。

    -n : 查看文件时,把行号也显示到屏幕上。

    -A : 显示所有东西出来,包括特殊字符.

  • tac :用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。

  • more:查看文件内容,当屏幕占满后按空格才能看下一屏幕。按q可提前退出。

  • less:查看文件内容,可以上下翻阅。按 ‘j’ 键可以向下移动,按 ‘k’ 键向上移动。

    在用more和less查看内容是可以通过:按一下 ‘/’ 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按 ‘n’ 键显示下一个。另外也可以不按 ‘/’ 而是按 ‘?’ 后边同样跟word来搜索这个word,唯一不同的是, ‘/’ 是在当前行向下搜索,而 ‘?’ 是在当前行向上搜索。

  • head:显示文件的前十行。如果加 -n 选项则显示文件前n行。

  • tail:显示文件最后十行。如果加-n 选项则显示文件最后n行。

文件的所属主以及所属组:

一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。

可通过ls -l查看文件属性。

1
2
3
4
[root@localhost hadoop]# ls -l
总用量 4
-rw-r--r--. 1 root root 13 6月 16 23:08 file.txt
[root@localhost hadoop]#

Linux文件属性:

1
2
3
4
5
6
7
[root@localhost etc]# ls -l yum
总用量 4
drwxr-xr-x. 2 root root 6 4月 13 20:58 fssnap.d
drwxr-xr-x. 2 root root 83 6月 5 21:45 pluginconf.d
drwxr-xr-x. 2 root root 26 4月 13 20:58 protected.d
drwxr-xr-x. 2 root root 37 4月 13 20:58 vars
-rw-r--r--. 1 root root 444 4月 13 20:58 version-groups.conf

在查看文件属性时,有9列内容:具体含义如下:

  • 第一列:代表这个文件是“目录、文件或链接文件等”。

若是【d】则代表该条记录是目录;

若是【-】则代表是文件;

若是【|】则表示为连接文件(linkfile);

若是【b】则表示设备文件里面的可供存储的接口设备;

若是【c】则表示设备文件里面的串口端口设备,例如键盘、鼠标。

  • 接下来以3个为一组:“rwx”

    其中【r】代表可读(read);

    其中【w】代表可写(write);

    其中【x】代表可执行(execute);

    这3个权限的位置不会改变,如果没有相应的权限,就会出现减号【-】

    前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。

  • 第二列表示有多少文件名连接到此节点(i-node)

  • 第三列表表示这个文件(或目录)的“所有者账号”

  • 第四列表表示这个文件的所属用户组

  • 第五列为这个文件的大小,默认单位为B

  • 第六列为这个文件的创建文件日期或者是最近的修改日期

  • 第七列为文件名.

权限

图:示例

更改文件权限:

  1. 更改所属组:chgrp

    语法:chgrp [组名] [文件名]

    ‘chgrp’命令也可以更改目录的所属组,但是只能更改目录本身,而目录下面的目录或者文件没有更改,要想级联更改子目录以及子文件,需要加个参数:-R。

    该命令使用不多,可用可用chown代替。

  2. 更改文件的所属主:chown

    语法: chown [ -R ] 账户名 文件名 chown [-R] 账户名:组名 文件名

    这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。

  3. 改变用户读文件的读写执行权限:chmod

    chmod 语法: chmod [-R] xyz 文件名 (这里的xyz,表示数字,‘-R’ 选项作用同chown,级联更改)

    在linux中为了方便更改这些权限,linux使用数字去代替rwx, 具体规则为 ‘r’ 等于4, ‘w’ 等于2, ‘x’ 等于1, ‘-‘ 等于0。

    举个例子: ‘-rwxrwx—’ 用数字表示就是 ‘770’, 具体是这样来的: ‘rwx’ = 4+2+1=7; ‘rwx’ = 4+2+1=7; ‘- -
    -‘ = 0+0+0=0.

    在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.

    ’chmod’ 还支持使用rwx的方式来设置权限。九个属性分别是(1)user (2)group (3)others,
    可以使用u, g, o 来代表它们三个的属性,此外, a 则代表 all 亦即全部。例:chmod u-x test/test2

    另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例:chmod u-x test/test2

  4. umask:

    umask语法: umask xxx (这里的xxx代表三个数字)

    umask预设是0022,其代表什么含义?先看一下下面的规则:

    1)若用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘).

    2)若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’).

    umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为 'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',普通文件的权限为 'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'. umask的值是可以自定义的,比如设定umask 为 002,您再创建目录或者文件时,默认权限分别为 'rwxrwxrwx' - '-------w-' = 'rwxrwxr-x''rw-rw-rw-' - '-------w-' = 'rw-rw-r--'.

    umask 可以在 /etc/bashrc 里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。

  5. 修改文件特殊属性:chattr

    语法: chattr [+-=][ASaci [文件或者目录名]

    ‘+-=’ : 分别为增加、减少、设定

    ‘A’ : 增加该属性后,文件或目录的atime将不可被修改;

    ‘S’ : 增加该属性后,会将数据同步写入磁盘中;

    ‘a’ : 增加该属性后,只能追加不能删除,非root用户不能设定该属性;

    ‘c’ : 自动压缩该文件,读取时会自动解压;

    ‘i’ : 增加后,使文件不能被删除、重命名、设定链接接、写入、新增数据;

  6. 读取文件或目录的特殊权限:lsattr

    语法为 lsattr [-aR] [文件/目录名]

    ‘-a’ : 类似与ls 的-a 选项,即连同隐藏文件一同列出;

    ‘-R’ : 连同子目录的数据一同列出。

在Linux下搜索一个文件:

(1)通过which可以查找文件的绝对路径。

需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。

(2)whereis: 通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。

语法: whereis [-bmsu] [文件名称]

‘-b’ : 只找binary 文件

‘-m’ : 只找在说明文件manual路径下的文件

‘-s’ : 只找source来源文件

‘-u’ : 没有说明档的文件

这个命令一般很少使用。

(3)‘locate’ 类似于’whereis’, 也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里。

用的也不是太多。

(4)find:使用最多的搜索命令。

语法 : find [路径] [参数]

常用参数:

  • ‘-atime +n/-n’ : 访问或执行时间大于/小于n天的文件.
  • ‘-ctime +n/-n’ : 写入、更改inode属性(例如更改所有者、权限或者链接)时间大于/小于n天的文件。
  • ‘-mtime +n/-n’ : 写入时间大于/小于n天的文件。

注:文件的三个time属性。

文件的 Access time也就是 ‘atime’ 是在读取文件或者执行文件时更改的。文件的 Modified time也就是 ‘mtime’ 是在写入文件时随文件内容的更改而更改的。文件的 Create time也就是 ‘ctime’ 是在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改的。 因此,更改文件的内容即会更改mtime和ctime,但是文件的ctime可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化。

‘stat’ 命令可用来列出文件的 atime、ctime 和 mtime。

stat

atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。总之, 这三个 time stamp 都放在 inode 中。若 mtime, atime 修改 inode 就一定会改, 既然 inode 改了, 那 ctime 也就跟着要改了。

  • ‘-name filename’ 直接查找该文件名的文件,这个选项使用很多。

  • ‘-type filetype’ 通过文件类型查找。filetype 包含了 f, b, c, d, l, s 等。

    -:普通文件

    d :目录

    c:字符设备

    b:块设备

    s:套接口文件

    l:符号连接

Linux文件类型:

1)普通文件(regular file):就是一般类型的文件,当用 ls -l 查看某个目录时,第一个属性为 ‘-‘ 的文件就是正规文件,或者叫普通文件。正规文件又可分成纯文字文件(ascii)和二进制文件(binary)。纯文本文件是可以通过cat, more, less等工具直接查看内容的,而二进制文件并不能。例如我们用的命令/bin/ls 这就是一个二进制文件。

2)目录(directory):这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。ls -l 查看第一个属性为 ‘d’.

3)链接文件(link):ls -l 查看第一个属性为 ‘l’, 类似windows下的快捷方式。

4)设备(device):与系统周边相关的一些档案,通常都集中在 /dev 这个目录之下! 通常又分为两种:块(block)设备 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘。例如您的一号硬盘的代码是 /dev/sda1, 第一个属性为 ‘b’;另一种是字符(character)设备 :是一些串行端口的接口设备,例如键盘、鼠标等等,第一个属性为 ‘c’.

Linux文件后缀名

在linux系统中,文件的后缀名并没有具体意义,也就是说,加或者不加,都无所谓。但是为了容易区分,我们习惯给文件加一个后缀名,这样当用户看到这个文件名时就会很快想到它到底是一个什么文件。例如1.sh, 2.tar.gz, my.cnf, test.zip等等。

早期Unix系统文件名最多允许14个字符,而新的Unix或者linux系统中,文件名最长可以到达 256 个字符。

Linux的链接文件:

链接文件分为两种,硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别关键点在于inode。

  • Hard Links : 当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再建立一个inode链接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode table; (2) 不能链接目录。

    硬链接只是复制了一份inode信息。空间大小不变

  • Symbolic Links : 跟hard link不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上。软连接就是windows中的快捷方式。

建立软连接即快捷方式的命令:ln

语法 : ln [-s] [来源文件] [目的文件]

ln 常用的选项就一个 ‘-s’, 如果不加就是建立硬链接,加上就建立软链接。

坚持原创技术分享,您的支持将鼓励我继续创作!