Linux文件与目录管理(From:鸟哥的私房菜)

目录与路径

相对路径与绝对路径:由/开始的就是绝对路径,否则是相对路径(相对当前路径)。

 

相对路径的用途:如果设计一套软件,里面包含有若干目录,如果客户分别把软件放置到不同的目录下,那程序将会出现问题,使用相对路径可以解决此问题。

 

绝对路径的用途:绝对路径可以保证路径的正确性。某些地方,使用相对路径,可能由于执行的环境不同而导致一些问题。

 

目录的相关操作:

符号

意义

.

代表此层目录

..

代表上一层目录

-

代表前一个工作目录

~

代表当前用户的家目录

~Account

代表Account这个用户的家目录

 

命令

意义

cd

更换目录

pwd

显示当前目录

mkdir

创建一个新目录

rmdir

删除一个空的目录

 

cdChange Directory)切换目录

命令

说明

cd [相对路径/绝对路径]

 

cd ~vbird

表示切换到vbird用户的家目录

cd ~

切换到自己的家目录

cd

cd ~类似

cd -

表示回到刚刚的那个目录,例如:当前在a目录,a的上一层是bcd a, cd ..,cd --代表就是a目录)

pwdPrint Working Directory)显示目前所在的目录

pwd –P:显示实际的路径,而非使用链接路径。

 

mkdir(建立新目录)

参数

说明

-m + 权限

配置文件的权限。例如:-m 777。如果没有加上-m来强制设定属性,系统会使用默认属性。

-p

帮助直接将所需要的目录(包含上一层目录)递归建立起来

rmdir(删除空目录)

-p:连同上层空的目录也一起删除

关于执行文件路径的变量:$PATH(注意是大写)

echo $PATH

1  每个目录用:隔开,而且每个目录都是有顺序之分的。

2  如果两个目录中都存在某一个命令,则最先被查询到的那个命令被执行

3  为了安全起见,不建议将“.”加入到PATH的搜寻目录中

不同身份的用户PATH是不同的

5  PATH可以修改,一般使用者可以修改PATH来执行/sbin/usr/bin下的命令

文件与目录管理

查看文件与目录:ls

参数

说明

-a

显示所有的文件及目录

-h

以人类易读的方式的方式显示文件的容量

-d

仅列出目录本身,而不是列出目录内的文件数据

-l

详细信息格式显示,包含文件的属性&权限等(也可以使用ll

复制、删除与移动:cprmmv

cp

参数

说明

-a

相当于-pdr属性

-i

如果目标文件存在时,在覆盖前会先询问

-p

连同文件的属性一起复制,而非使用默认属性(备份常用)

-r

递归持续复制

在使用cp进行拷贝之前,需要了解:

是否需要完整的保留来源文件的信息

源文件是否是链接文件

源文件是否是特殊文件

源文件是否为目录

rm

-f

忽略不存在的文件,不会出现警告信息

-i

互动模式,在删除前要求客户的确认

-r

递归删除,常用语目录的删除

\rm –r /tmp/etc

在指令前加上反斜杠,可以忽略alias的指定选项。

 

删除文件名以“-”开头的文件

rm ./-filename

 

mv(移动文件或目录)

-f

如果目标文件已经存在,不会询问直接覆盖

-i

若目标文件已经存在,提示是否需要覆盖

-u

若目标文件存在,且source较新才会更新

获取路径的文件名或目录名称

basename /etc/sysconfig/network

network <==获取到的是最后的名称

dirname /etc/sysconfig/network

/etc/sysconfig <==获取到的是目录名

 

文件内容查询

最常用的显示文件内容的指令是:cat\more\less。如果一个很大的文件,但我们只需要几行而已,使用tail或者tac

cat

由第一行开始显示内容

tac

从最后一行开始显示,taccat倒着写

nl

显示同时输出行号

more

一页一页的显示文件内容

less

more相似,但它可以支持往前翻页

head

只看头几行

tail

只看尾几行

od

二进制方式读取文件内容

 

直接查看文件内容cat/tac/nl

cat -n 显示行号

一般配合moreless较好

 

tac反向显示

cat是从第一行到最后一行打印,而tac则是从最后一行到第一行打印

 

nl(添加行号打印)

nl可以将行号进行比较多的显示设计

 

可翻页显示

 

more(一页一页滚动)

空格

向下翻页

Enter

向下翻一行

/字符串

在这个显示内容中,向下搜索关键字

:f

显示文件名以及目前显示的行数

q

离开

b

往回翻页,对管道无效

 

less(一页一页翻动)

less的用法较more更加有弹性,使用less,可以往前翻,也可以往后翻,和VIM的按键一致。

空格

向下翻动一页

page down

向下翻动一页

pageup

向上翻动一页

/字符串

向下搜寻“字符串”的功能

?字符串

向上搜寻“字符串”的功能

n

重复前一个搜寻(与/或?有关)

N

反向的重复前一个搜寻

q

离开less程序

 

从文件中取出数据

head(取出前面几行)

head [-n number] 文件

默认显示前10行。如果n是负数,代表不包括后面的多少行。例如:某个文件有141行,如果使用head –n -100,则打印前面的41行,后面的100行则不打印。

 

tail(取出后面几行)

tail [-n number] 文件

默认显示最后10

-n:代表几行的意思,如果使用head –n +100则列出100以后的行

-f:表示一直检测文件,如果文件有变化就显示到屏幕

 

非纯文本:od

od [-t TYPE] 档案

-t可接各种类型的输出

a

利用默认的字符输出

c

使用ASCII字符输出

d[size]

利用十进制来输出数据,每个整数占用size bytes

f[size]

利用浮点数输出

o[size]

利用八进制输出

x[size]

利用十六进制输出

左边第一栏是以8进制表示的bytes数,

 

修改文件时间或创建新文件:touch

modification time(mtime)文件内容发生改变时,都会更新时间。

status time(ctime)文件的状态改变时,会更新这个时间。

access time(atime)文档的内容被取用的时候,都会更新这个时间。

例如:

ls –l --time=atime /etc/man.config

ls –l –time=ctime /etc/man.config

 

如果文件的时间有问题的话,可能会造成某些程序无法顺利的运行。使用touch可以改变文件的时间。

 

touch [-acdmt] 文件/目录

建立一个空的文件

mtimeatime修改为当前时间

-a

仅修改access time

-c

仅修改文件的时间,若文件不存在,则不会建立新文件

-d

后面直接加上要修改的日期

-m

仅修改mtime

-t

后面可以直接加上要修改的时间,格式为[YYMMDDhhmm]

如果touch后的文件存在,则将更新mtime/atime/ctime。如果不存在,则创建新的文件。

 

Linux命令中,输入分号表示连续执行命令;

例如:ll;cd ..;ll

 

文件默认权限:umask

umask

0022   <<< 与一般权限有关是后面的三个数字,第一组是特殊权限用的

若用户创建“文件”则默认没有可执行权限,只有rw两个选项,最大为666

若用户创建“目录”默认为所有权限开放,即为777

umask022,则:

新建文件时:(-rw-rw-rw-) – (----w--w-) (-rw-r--r--)

 

可以这样来设置umaskumask 002

 

文件隐藏属性:chattrlsattr

chattr [+-=][Asacdistu] 文件或目录名称

a

文件只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性

i

让一个文件“不能被删除、改名、设置连接也无法写入或添加数据”,只有root才能设置

lsattr [-adR] 文件或目录

-a:将隐藏文件的属性都打印出来

-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名

-R:连同目录的数据也一并列出来

 

文件特殊权限:SUIDSGIDSBIT

SetUID:当s出现在文件所有者的x权限上时,被成为Set UID

*SUID权限仅对二进制程序有效

*执行者对于该程序需要具有x的可执行权限

*该权限尽在执行程序的过程中有效

*执行者将该具有程序所有者的权限

 

Set GID:当s出现在用户组的x时,则成为Set GID

*SGID可以针对文件或目录来设置

*SGID对二进制程序有效

*程序执行者对于该程序来说,需具备x的权限

*执行者在执行的过程中将会获得该程序用户组的支持

Sticky Bit:只针对目录有效。

*用户对此目录具有wx权限

*用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件

 

如果要设置SGUIDSGIDSBIT权限的话,需在之前学习过的三个权限数字前再加上一个数字:4SUID2SGID1SBIT

 

查看文件类型:file

 

脚本文件名的查询:通过whichtype来搜寻

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

 

文件名的查找:使用whereislocate利用数据库来查找文件,速度较快,如果真找不到才使用find查找。

whereis  [-bmsu] 文件或目录

-b

只找二进制格式的文件

-m

只找在说明文件manual路径下的文件

-s

只找source源文件

-u

查找不在上述三个选项当中的其他特殊文件

Linux系统将系统内所有的文件都记录在一个数据库文件下,当使用whereis或者locate的时候,都会以次数据库文件的内容为准。

 

locat使用更简单,直接在命令后面输入“文件的部分名称”就能够得到结果。

手动更新数据库:updatedb——根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件,locate根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名。

locate [-ir] keyword

-i:忽略大小写

-r:后面可接正则表达式的显示方式

 

find

find [PATH] [option] [action]

你可能感兴趣的:(linux)