linux 文件和目录管理

文件管理命令

ls命令 文件查看

[root@client ~]# ls -la
总用量 420
dr-xr-x---.  9 root  root    4096 2月  28 12:07 .
dr-xr-xr-x. 17 root  root     224 2月  27 21:16 ..
-rwxrwxrwx.  1 test1 test1      0 2月  27 21:02 aaaa.txt
-rw-r--r--.  1 root  root       0 11月 27 21:12 abc
drwxr-xr-x.  2 root  root       6 11月 27 21:12 abcc
-rw-------.  1 root  root    1923 3月  28 2019 anaconda-ks.cfg
-rw-------.  1 root  root    4517 11月 27 21:06 .bash_history
-rw-r--r--.  1 root  root      18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root  root     176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root  root     176 12月 29 2013 .bashrc
[    1   ][  2 ][   3  ][  4 ][    5   ][     6     ][       7          ]

[  权限  ][连结][拥有者][群组][文件容量][  修改日期 ][      檔名        ]
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称

[root@www ~]# ls [--color={never,auto,always}] 目录名称

[root@www ~]# ls [--full-time] 目录名称

选项与参数:

-a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)

-A  :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录

-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)

-f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)

-F  :根据文件、目录等资讯,给予附加数据结构,例如:

      *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;

-h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;

-i  :列出 inode 号码,inode 的意义下一章将会介绍;

-l  :长数据串列出,包含文件的属性与权限等等数据;(常用)

-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)

-r  :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;

-R  :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;

-S  :以文件容量大小排序,而不是用档名排序;

-t  :依时间排序,而不是用档名。

--color=never  :不要依据文件特性给予颜色显示;

--color=always :显示颜色

--color=auto   :让系统自行依据配置来判断是否给予颜色

--full-time    :以完整时间模式 (包含年、月、日、时、分) 输出

--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 

                       而非内容变更时间 (modification time)
ls更多详细参数

文件的时间的三种:

    • modification time (mtime)
      当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!

    • status time (ctime)
      当该文件的『状态 (status)』改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。 

    • access time (atime)
      当『该文件的内容被取用』时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config , 就会升级该文件的 atime 了。
[root@client ~]# stat aaaa.txt   #单独查看文件三种时间的方法
  文件:"aaaa.txt"
  大小:0             块:0          IO 块:4096   普通空文件
设备:fd00h/64768d    Inode:51391120    硬链接:1
权限:(0777/-rwxrwxrwx)  Uid:( 1003/   test1)   Gid:( 1003/   test1)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-02-27 21:02:47.070000000 +0800
最近更改:2020-02-27 21:02:47.070000000 +0800
最近改动:2020-02-27 21:07:06.723000000 +0800
创建时间:-
[root@client ~]#

chgrp命令 改变所属群组

[root@www ~]# chgrp [-R] dirname/filename ...

选项与参数:

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录

     都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

范例:

[root@www ~]# chgrp users install.log

[root@www ~]# ls -l

-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log

[root@www ~]# chgrp testing install.log

chgrp: invalid group name `testing' <== 发生错误讯息啰~找不到这个群组名~

chown命令 改变文件拥有者

[root@www ~]# chown [-R] 账号名称 文件或目录

[root@www ~]# chown [-R] 账号名称:组名 文件或目录

选项与参数:

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更



范例:将install.log的拥有者改为bin这个账号:

[root@www ~]# chown bin install.log

[root@www ~]# ls -l

-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log



范例:将install.log的拥有者与群组改回为root:

[root@www ~]# chown root:root install.log

[root@www ~]# ls -l

-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

chmod命令 改变文件权限

[root@www ~]# chmod [-R] xyz 文件或目录

选项与参数:

xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

举例:
[root@www ~]# ls -al .bashrc

-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc

[root@www ~]# chmod 777 .bashrc

[root@www ~]# ls -al .bashrc

-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

cp命令 复制

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)

[root@www ~]# cp [options] source1 source2 source3 .... directory

选项与参数:

-a  :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)

-d  :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

-f  :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

-i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

-l  :进行硬式连结(hard link)的连结档创建,而非复制文件本身;

-p  :连同文件的属性一起复制过去,而非使用默认属性(备份常用);

-r  :递回持续复制,用於目录的复制行为;(常用)

-s  :复制成为符号连结档 (symbolic link),亦即『捷径』文件;

-u  :若 destination 比 source 旧才升级 destination !

最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!

rm命令 删除

[root@www ~]# rm [-fir] 文件或目录

选项与参数:

-f  :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

-i  :互动模式,在删除前会询问使用者是否动作

-r  :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

mv命令 移动或重命名

[root@www ~]# mv [-fiu] source destination

[root@www ~]# mv [options] source1 source2 source3 .... directory

选项与参数:

-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

-u  :若目标文件已经存在,且 source 比较新,才会升级 (update)

basename命令 从路径中取出路径名和文件名

[root@www ~]# basename /etc/sysconfig/network

network         <== 很简单!就取得最后的档名~

[root@www ~]# dirname /etc/sysconfig/network

/etc/sysconfig  <== 取得的变成目录名了! 

pwd命令 展示目录

[root@www ~]# pwd [-P]
选项与参数:
-P  :显示出确实的路径,而非使用连结 (link) 路径。

范例:单纯显示出目前的工作目录:
[root@www ~]# pwd
/root   <== 显示出目录~

范例:显示出实际的工作目录,而非连结档本身的目录名而已
[root@www ~]# cd /var/mail   <==注意,/var/mail是一个连结档
[root@www mail]# pwd
/var/mail         <==列出目前的工作目录
[root@www mail]# pwd -P
/var/spool/mail   <==怎么回事?有没有加 -P 差很多~
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail
# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail 
# 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!

mkdir命令 创建目录

[root@www ~]# mkdir [-mp] 目录名称

选项与参数:

-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~

-p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!

rmdir命令 删除目录

[root@www ~]# rmdir [-p] 目录名称

选项与参数:

-p :连同上一级『空的』目录也一起删除

关于环境变量的增加和查看

[root@client ~]# echo $PATH   # 查看环境变量,root和普通用户的环境变量不同。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@client ~]# useradd wangzengyi
[root@client ~]# su - wangzengyi
[wangzengyi@client ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wangzengyi/.local/bin:/home/wangzengyi/bin
[wangzengyi@client ~]$ exit
logout
[root@client ~]# PATH="$PATH":/root   #增加环境变量
[root@client ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@client ~]#

cat命令 查看文件

[root@www ~]# cat [-AbEnTv]

选项与参数:

-A  :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

-b  :列出行号,仅针对非空白行做行号显示,空白行不标行号!

-E  :将结尾的断行字节 $ 显示出来;

-n  :列印出行号,连同空白行也会有行号,与 -b 的选项不同;

-T  :将 [tab] 按键以 ^I 显示出来;

-v  :列出一些看不出来的特殊字符

tac命令 倒序查看文件

[root@www ~]# tac /etc/issue


Kernel 
 on an m

CentOS release 5.3 (Final)

# 嘿嘿!与刚刚上面的范例一比较,是由最后一行先显示喔!

nl命令 查看文件

[root@www ~]# nl [-bnw] 文件

选项与参数:

-b  :指定行号指定的方式,主要有两种:

      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

      -b t :如果有空行,空的那一行不要列出行号(默认值);

-n  :列出行号表示的方法,主要有三种:

      -n ln :行号在萤幕的最左方显示;

      -n rn :行号在自己栏位的最右方显示,且不加 0 ;

      -n rz :行号在自己栏位的最右方显示,且加 0 ;

-w  :行号栏位的占用的位数。

more命令 查看文件

空白键 (space):代表向下翻一页; 
Enter         :代表向下翻『一行』; 
/字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字; 
:f            :立刻显示出档名以及目前显示的行数; 
q             :代表立刻离开 more ,不再显示该文件内容。 
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

less命令 查看文件

空白键    :向下翻动一页; 
[pagedown]:向下翻动一页; 
[pageup]  :向上翻动一页; 
/字串     :向下搜寻『字串』的功能; 
?字串     :向上搜寻『字串』的功能; 
n         :重复前一个搜寻 (与 / 或 ? 有关!) 
N         :反向的重复前一个搜寻 (与 / 或 ? 有关!) 
q         :离开 less 这个程序;

head命令 查看文件

[root@www ~]# head [-n number] 文件 

选项与参数:

-n  :后面接数字,代表显示几行的意思



[root@www ~]# head /etc/man.config

# 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.config

tail命令 查看文件

[root@www ~]# tail [-n number] 文件 

选项与参数:

-n  :后面接数字,代表显示几行的意思

-f  :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测



[root@www ~]# tail /etc/man.config

# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:

[root@www ~]# tail -n 20 /etc/man.config

od命令 查看特殊文件

[root@www ~]# od [-t TYPE] 文件

选项或参数:

-t  :后面可以接各种『类型 (TYPE)』的输出,例如:

      a       :利用默认的字节来输出;

      c       :使用 ASCII 字节来输出

      d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes ;

      f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ;

      o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ;

      x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes ;

touch命令 创建文件

[root@www ~]# touch [-acdmt] 文件

选项与参数:

-a  :仅修订 access time;

-c  :仅修改文件的时间,若该文件不存在则不创建新文件;

-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"

-m  :仅修改 mtime ;

-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

which 命令路径搜索

[root@www ~]# which [-a] command

选项或参数:

-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称

whereis 文件搜索

[root@www ~]# whereis [-bmsu] 文件或目录名

选项与参数:

-b    :只找 binary 格式的文件

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

-s    :只找 source 来源文件

-u    :搜寻不在上述三个项目当中的其他特殊文件

locate 文件搜索

[root@www ~]# locate [-ir] keyword

选项与参数:

-i  :忽略大小写的差异;

-r  :后面可接正规表示法的显示方式
  • 如果搜索不到,可能是数据库没更新。updatedb:根据 /etc/updatedb.conf 的配置去搜寻系统硬盘内的档名,并升级 /var/lib/mlocate 内的数据库文件。
  • locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字档名。

find 强大的查找命令

[root@www ~]# find [PATH] [option] [action]

选项与参数:

1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明

   -mtime  n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;

   -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;

   -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。

   -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名



范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出

[root@www ~]# find / -mtime 0

# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,

# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?

# find / -mtime 3 有变动过的文件都被列出的意思!



范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出

[root@www ~]# find /etc -newer /etc/passwd

# -newer 用在分辨两个文件之间的新旧关系是很有用的!
选项与参数:

2. 与使用者或群组名称有关的参数:

   -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在

            /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。

   -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在

            /etc/group,相关的介绍我们会第四篇说明~

   -user name :name 为使用者帐号名称喔!例如 dmtsai 

   -group name:name 为群组名称喔,例如 users ;

   -nouser    :寻找文件的拥有者不存在 /etc/passwd 的人!

   -nogroup   :寻找文件的拥有群组不存在於 /etc/group 的文件!

                当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,

                这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。



范例三:搜寻 /home 底下属於 vbird 的文件

[root@www ~]# find /home -user vbird

# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,

# 就可以利用这个命令将属於某个使用者的所有文件都找出来喔!



范例四:搜寻系统中不属於任何人的文件

[root@www ~]# find / -nouser

# 透过这个命令,可以轻易的就找出那些不太正常的文件。

# 如果有找到不属於系统任何人的文件时,不要太紧张,

# 那有时候是正常的~尤其是你曾经以原始码自行编译软件时。
选项与参数:

3. 与文件权限及名称有关的参数:

   -name filename:搜寻文件名称为 filename 的文件;

   -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:

                   c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB

                   还要大的文件,就是『 -size +50k 』

   -type TYPE    :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f),

                   装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 

                   及 FIFO (p) 等属性。

   -perm mode  :搜寻文件权限『刚好等於』 mode 的文件,这个 mode 为类似 chmod

                 的属性值,举例来说, -rwsr-xr-x 的属性为 4755-perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说,

                 我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,

                 当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,

                 因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。

   -perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻

                 -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为 -rw-------

                 也会被列出来,因为他有 -rw.... 的属性存在!



范例五:找出档名为 passwd 这个文件

[root@www ~]# find / -name passwd

# 利用这个 -name 可以搜寻档名啊!



范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些?

[root@www ~]# find /var -type s

# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,

# 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找!



范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性

[root@www ~]# find / -perm +7000 

# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,

# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,

# 因此,就是 +7000  
选项与参数:

4. 额外可进行的动作:

   -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到

                   的结果。

   -print        :将结果列印到萤幕上,这个动作是默认动作!



范例八:将上个范例找到的文件使用 ls -l 列出来~

[root@www ~]# find / -perm +7000 -exec ls -l {} ;

# 注意到,那个 -exec 后面的 ls -l 就是额外的命令,命令不支持命令别名,

# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!



范例九:找出系统中,大於 1MB 的文件

[root@www ~]# find / -size +1000k

# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,

# 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!

  

umask 查看和设置文件权限的反掩码(略)

file 查看文件类型(略)

cd 切换目录(略)

文件隐藏属性

[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称

选项与参数:

+   :添加某一个特殊参数,其他原本存在参数则不动。

-   :移除某一个特殊参数,其他原本存在参数则不动。

=   :配置一定,且仅有后面接的参数



A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime

     将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助

S  :一般文件是非同步写入磁碟的,如果加上 S 这个

     属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。

a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 

     才能配置这个属性。 

c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,

     但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)

d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份

i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法

     写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性

s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘

     空间,所以如果误删了,完全无法救回来了喔!

u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还

     存在磁碟中,可以使用来救援该文件喔!

注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置
chattr, lsattr

SUID/SGID/SBIT 权限配置

  • 4 为 SUID 
  • 2 为 SGID 
  • 1 为 SBIT

假设要将一个文件权限改为『-rwsr-xr-x』时,由於 s 在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来配置!

  • Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么SUID的权限对於一个文件的特殊功能是什么呢?

基本上SUID有这样的限制与功能:

  • SUID 权限仅对二进位程序(binary program)有效; 
  • 运行者对於该程序需要具有 x 的可运行权限; 
  • 本权限仅在运行该程序的过程中有效 (run-time); 
  • 运行者将具有该程序拥有者 (owner) 的权限。

与 SUID 不同的是,SGID 可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

  • SGID 对二进位程序有用; 
  • 程序运行者对於该程序来说,需具备 x 的权限; 
  • 运行者在运行的过程中将会获得该程序群组的支持!
  • Sticky Bit

这个 Sticky Bit, SBIT 目前只针对目录有效,对於文件已经没有效果了。 SBIT 对於目录的作用是:

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时; 
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

linux的文件种类

  • 正规文件(regular file ):
    • 纯文本档(ASCII):这是Linux系统中最多的一种文件类型啰, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
    • 二进制文件(binary):还记得我们在『 第零章、计算器概论 』里面的软件程序的运作中提过, 我们的系统其实仅认识且可以执行二进制文件(binary file)吧?没错~ 你的Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的啦~ 举例来说,刚刚下达的指令cat就是一个binary file。
    • 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码~因为他是属于一种特殊格式的文件。瞭乎?
  • 目录(directory):就是目录~第一个属性为 [ d ],例如 [drwxrwxrwx]。
  • 连结档(link):就是类似Windows系统底下的快捷方式啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
  • 设备与装置文件(device):与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
    • 区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备啰!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔!
    • 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
  • 数据接口文件(sockets):既然被称为数据接口文件, 想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
  • 数据输送文件(FIFO, pipe):FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。

linux的文件后缀

  • *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ;
  • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
  • *.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!

linux文件名限制

由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:
* ? > < ; & ! [ ] | ' " ` ( ) { }
因为这些符号在文字接口下,是有特殊意义的!另外,文件名的开头为小数点『.』时, 代表这个文件为『隐藏档』喔!同时,由于指令下达当中,常常会使用到 -option 之类的选项,
所以你最好也避免将文件档名的开头以 - 或 + 来命名。

linux文件长度限制

在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的档名长度限制为:
单一文件或目录的最大容许文件名为 255 个字符;
包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。

权限与命令之间的关系

一、让使用者能进入某目录成为『可工作目录』的基本权限为何:

  • 可使用的命令:例如 cd 等变换工作目录的命令; 
  • 目录所需权限:使用者对这个目录至少需要具有 x 的权限
  • 额外需求:如果使用者想要在这个目录内利用 ls 查阅档名,则使用者对此目录还需要 r 的权限。

二、使用者在某个目录内读取一个文件的基本权限为何?

  • 可使用的命令:例如本章谈到的 cat, more, less等等 
  • 目录所需权限:使用者对这个目录至少需要具有 x 权限; 
  • 文件所需权限:使用者对文件至少需要具有 r 的权限才行!

三、让使用者可以修改一个文件的基本权限为何?

  • 可使用的命令:例如 nano 或未来要介绍的 vi 编辑器等; 
  • 目录所需权限:使用者在该文件所在的目录至少要有 x 权限; 
  • 文件所需权限:使用者对该文件至少要有 r, w 权限

四、让一个使用者可以创建一个文件的基本权限为何?

  • 目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦!

五、让使用者进入某目录并运行该目录下的某个命令之基本权限为何?

  • 目录所需权限:使用者在该目录至少要有 x 的权限; 
  • 文件所需权限:使用者在该文件至少需要有 x 的权限

linux目录结构和用途

linux目录结构

/etc目录作用解释

/etc这个目录主要用于存放系统的配置文件;

/usr目录解释

/usr是应用程序安装目录,所有的程序默认都会安装在此目录;

/var目录解释

/var此目录主要用于存放系统运行以及软件运行的日志信息;

/dev目录解释

/dev目录包含系统所有的设备文件。

/proc目录解释

/proc是虚拟目录,这个目录存在于内存中,目录中的所有信息都是内存映射,可以通过这个目录修改系统运行中的参数。

其他目录解释

 

原文地址:https://www.cnblogs.com/wangzengyi/p/12377825.html