文件与目录操作

2021/6/16 18:21:02

本文主要是介绍文件与目录操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

-文件与目录的检视

ls [-aAdfFhilnrRSt] 文件名或目录名称..

 ls [--color={never,auto,always}] 文件名或目录名称.. 

 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)

 

文件/目录 复制 删除 移动

 

复制cp

代码:

cp 来源文件 目标文件(一般使用)

cp [-a/d/f/i/l/p/r/s/u] 来源文件(source) 目标文件(destination) (更多复制要求使用)

选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)

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

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

-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;

-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。 --preserve=all :

除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。 最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

rm(移除文件或目录) 

rm [-f/i/r] 文件或目录 
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!! 

注意代码:rm 目录 删除的是空目录

mv (移动文件与目录,或更名) 

 mv [-fiu] 文件名 目的地

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

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update) 

范例一:复制一文件,建立一目录,将文件移动到目录中

[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc [root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest
# 将某个文件移动到某个目录去,就是这样做! 

**********************

范例二:将刚刚的目录名称更名为 mvtest2
[root@study tmp]# mv mvtest mvtest2 

***********************

范例三:再建立两个文件,再全部移动到 /tmp/mvtest2 当中 [root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2

# 注意到这边,如果有多个来源文件或目录,则最后一个目标文件一定是『目录!』 # 意思是说,将所有的数据移动到该目录的意思! 

取得路径的文件名与目录名称 

 

取得路径文件名 代码basename 路径

取得目录名 代码 dirname 路径 

例子:

~ [root@study ~]# basename /etc/sysconfig/network network <== 很简单!就取得最后的档名

~ [root@study ~]# dirname /etc/sysconfig/network /etc/sysconfig <== 取得的变成目录名了! 

 

 

文件内容查阅 

1,cat 由第一行开始显示文件内容

若无其他查看要求只查看内容代码:cat 文件名

若查看有其他要求代码如下:

cat -A/b/E/n/T/v 选项与参数:

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

-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;

-T :将 [tab] 按键以 ^I 显示出来; -v :列出一些看不出来的特殊字符

 

2,tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!  代码:

tac 文件名

 

3,nl 输出的时候,顺道输出行号!

nl [-bnw] 文件 

选项与参数:

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

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

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

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

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

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

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

-w :行号字段的占用的字符数。 

 

4,more 一页一页的显示文件内容

代码:more 文件名

more 后面接的文件内容行数大于屏幕输出的行数时, 就会出现 --more--(%),

在 more 这个程序的运作过程中,你有几个按键可以按的 :

-空格键 (space):代表向下翻一页; Enter :代表向下翻『一行』;  

-Enter :代表向下翻『一行』; 

-/字符串 :代表在这个显示的内容当中,向下搜寻『字符串』这个关键词; 

-:f :立刻显示出文件名以及目前显示的行数; 

-q :代表立刻离开 more ,不再显示该文件内容。 

-b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。 

 

5,less与 more 类似,但是比 more 更好的是,他可以往前翻页! 只看头几行 

代码:less 文件名

空格键 :向下翻动一页; 

 [pagedown]:向下翻动一页; 

[pageup] 向上翻动一页;

/字符串 :向下搜寻『字符串』的功能

?字符串 :向上搜寻『字符串』的功能;

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

N :反向的重复前一个搜寻 (与 / 或 ? 有关!) 

g :前进到这个资料的第一行去; 

G :前进到这个数据的最后一行去 (注意大小写); 

q :离开 less 这个程序; 

 

6,head 取出前几行

代码:head [-n number] 文件 

若没有加上 -n 这个选项时,默认只显示十行 

另外那个 -n 选项后面的参数是负数,例如上面范例的-n -100 时,代表列前的所有行数, 但不包括后面 100 行 

若文件总共131行,令『head -n -100 /etc/man_db.conf』 就会列出前面 31 行,后面 100 行不会打印出来了 。

 

7,tail 取出尾巴几行 

# 默认的情况中,显示最后的十行!

代码:tail [-n number] 文件

选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c 才会结束 tail 的侦测 

取第x行到第y 行,代码:head -n y | tail -n y-x+1 例如:

取出socket_client.py 的第3到第4行

[root@rfjmy7h77vmu src]# head -n 4 socket_client.py | tail -n 2

ip_port=('127.0.0.1',8001)

非纯文本档: od 

代码: 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 ; 

范例二:请将/etc/issue 这个文件的内容以 8 进位列出储存值与 ASCII 的对照表

代码:[root@study ~]# od -t oCc /etc/issue

*****************

 

例题:
我不想找 google,想要立刻找到 password 这几个字的 ASCII 对照,该如何透过 od 来判断?
答:
其实可以透过刚刚上一个小节谈到的管线命令来处理!如下所示:
echo password | od -t oCc
echo 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给 od 去继续处理!就可以得到 ASCII code 对照啰! 

 

修改文件时间或建置新档: touch 

 

 

每个文件在 linux 底下都会记录许多的时间参数, 其实是 有三个主要的变动时间 :

-modification time (mtime): 

当该文件的『内容数据』变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或 权限喔! 

-status time (ctime):

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

-access time (atime):

当『该文件的内容被取用』时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man_db.conf , 就会更新该文件的 atime 了。 

 

-新建文档

无任何要求,代码:touch 文件名

有要求,代码:touch [-a/c/d/m/t] 文件

选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"

-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm] 

 

范例一: 将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期 

[dmtsai@study tmp]# cp -a ~/.bashrc bashrc
[dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc

Tue Jun 16 00:49:24 CST 2015 <==这是目前的时间
-rw-r--r--. 1 dmtsai dmtsai 231 Mar 6 06:06 bashrc <==这是 mtime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 23:44 bashrc <==这是 atime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:47 bashrc <==这是 ctime 

 



这篇关于文件与目录操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程