文件管理
文件数据的组成:
1.数据
2.元数据:属性信息。
权限,时间戳,属组,属主,文件的名称,文件的节点号等等。
linux的文件类型:
1.普通文件 - f
2.目录文件 d
3.链接文件
符号链接 l
硬链接 -
4.特殊文件 用于作为硬件设备访问入口的文件。
块设备 b 能够随机的,按照宽的方式进行存取。
字符设备 c 线性的,按照字符逐个存取的设备。
5.套接字文件 socket s
在本机内部用软件模拟的方式让2个进程进行通信的文件。
6.管道文件 pipe p
#touch [OPTION] FILENAME 修改文件的时间戳。但是也能用来创建空文件。
-c --no-create 不创建任何文件。
-m 只修改mtime为当前时间。
-a 只修改atime为当前时间。
-t 指定时间戳,使用格式为[[CC]YY]MMDDhhmm[.ss]
时间戳:
最近一次的访问时间 access
最近一次的修改时间 modify 文件内容的改变
最近一次的改变时间 change 文件元数据的改变。
#stat FILENAME 显示文件状态。
#nano FILENAME 编辑文件。
#rm [OPTION] FILENAME 删除文件。
-i 交互模式,会有相关提示。
-f 强制删除。不提示。
-r 递归。
#cp [OPTION] SRC... DEST 复制文件。
#cp [OPTION] FIEL1 FILE2... DEST 多文件到一个目录。单文件到一个文件。
SRC:文件 DEST:目录 文件复制到目标文件夹下。并保留原来的名称。
SRC;目录 DEST:目录 默认是会忽略目录复制的。使用-r选项可以递归复制。
SRC:文件 DEST:文件 若DEST不存在,则复制并重命名。若存在则覆盖,通常有提示。
SRC:目录 DEST:文件 不能把目录复制成文件。
-r -R --recursive 递归复制。复制文件夹以及子文件和文件夹。默认情况下cp是会忽略目录复制的。
-f 强行复制。若目标文件已存在并无法打开,则会删除文件并覆盖。
-i 在覆盖前提示。
-p 等同于--preserve=mode,ownership,timestamps
--preserve=[ATTR LIST] 在复制时保留文件的属性。默认:mode(权限),ownership(属主属组),timestamps(时间戳).
-a --archive 归档存放。等同于-dR --perserve=all 保留文件上的全部属性。
-L --dereference 总是跟随符号链接。复制的是链接指向的文件。
-P --no-dereference 从不跟随符号链接。若文件是链接,则复制链接。
-d 等同于--no-dereference --perserve=link。复制链接的属性,而不是文件。
例如:
#cp a b c d 将a,b,c复制到d。
#cp /etc/passwd /tmp/abc
#mv [OPTION] SRC DEST 移动文件。
SRC:文件 DEST:目录 文件移动到目标文件夹下。并保留原来的名称。
SRC;目录 DEST:目录 若目标文件夹不存在。移动并重命名。若目标文件夹存在,则移动到目标文件夹下。
SRC:文件 DEST:文件 同目录下为重命名,不同目录下是移动并重命名。
SRC:目录 DEST:文件 不能用目录覆盖文件。
-f 强制覆盖。
-t --target-directory=DESTDIR 先指定DEST,在指定SRC。
-i 覆盖前提示。
#install [OPTION] 复制文静并指定属性。部分用法类似cp和mv。
-d DIR...将多个目录指定为目标地址。常用来创建目录。
例如:
#install -d /tmp/{a,b}
#ls
/tmp/a
/tmp/b
-m =MODE 指定权限。默认权限为755即rwxr-xr-x。
-t DEST SRC...
目录管理
#ls [OPTION] DIR 列出目录下文件。
-a 显示目录下的所有文件,显示.和..
. 表示当前目录
.. 表示父目录
-A 显示目录下的所有文件,但是不显示.和..
-l 以长格式long显示文件的信息属性。
1.文件类型
2.文件权限(ugo)
3.文件硬链接的个数
4.文件的属主(owner)
5.文件的属组(group)
6.文件的大小
目录的大小一般是目录名字字符个数的大小,一般值都是4k大小。
7.时间戳(timestamp)最近一次被修改的时间。
atime access 文件的访问时间
ctime change 文件的改变时间 改变文件的属性。
文件有两种数据,一种是文件本身的数据,另一种是文件属性的数据。文件的属性数据也叫元数据(metadata)。
mtime modify 文件的修改时间 改变文件的内容。
8.文件名
-h 对显示的结果做单位换算,并不是精确值,只是便于阅读。human-readable。
-d 显示目录本身
-r 逆序显示 reverse
-R 递归 recursive
-i inode 显示inode号码。
#echo [OPTION] [STRING] 显示一行文本
-n 不换行
-e 启用逃逸字符。(转义字符。)
\n 换行。
\\ 显示反斜线自身。
\b 退格,会覆盖前一个字符。
\t 横向制表符
\v 纵向制表符
#cd DIR 切换目录
#cd ~ USERNAME 切换到指定用户名为USERNAME的家目录,只有root可以。
#cd - 在上个目录和本目录中来回切换。
$PWD
$OLDPWD
. 相对路径下当前目录
.. 相对路径下的上层目录
./ 可以省略,但是某些环境需要
#pwd 显示当前目录。print working directory
#mkdir [OPTION] DIR 创建空目录
-p 创建目录的同时创建父目录
-v 显示创建过程
命令行展开:bash shell在遇到{}会自动展开里边的内容,用逗号来分分隔各个元素。
例如:
#mkdir /mnt/test/{x/m,y}
#ls
/mnt/test/x/m
/mnt/test/y
#mkdir /mnt/test2/{a,d}_{b,c}
#ls
/mnt/test2/a_b
/mnt/test2/a_c
/mnt/test2/d_b
/mnt/test2/d_c
#rmdir [OPTION] DIR 删除空目录
-p 删除子目录同时删除父目录,但是仅限于空目录,非空目录无法删除
例如:
#mkdir /mnt/test/x/y/{z,q}
#tree
/mnt/
|--x
|--y
|--z
`--q
#rmdir -p /mnt/test/x/y/q
#tree
/mnt/
|--x
|--y
`--z
#tree DIR 查看目录树
文本处理
#cat [OPTION] FILENAME... 连接多个文件并打印到标准输出。
-n 显示行号。
-E --show-ends 显示每行行尾的结束符。linux系统文本文件的行结束符为$,windows的为$后跟回车。
-T 显示制表符、
-v 显示其他非打印打印字符,例如回车等。
-A --show-all 显示所有符号。
例如:
#cat /etc/issue
#cat /etc/fstab
#cat /etc/issue /etc/fstab
终端上可以按住shift+pageup/pagedown 查看内容。但是内容有可能超出缓存而显示不完整。
#tac 从最后一行倒序显示文件。
#more 和less类似,但是可以手动翻页查看。操作类似于man,但是不支持向前翻页,到文件尾部会自动退出。
#less man命令就是调用less完成的,操作上和man一样。less到文件尾部不会退出,支持向前翻页。
#head [OPTION] FILENAME
-NUM 查看前NUM行,默认不加次参数NUM的值是10。空白行也是一行。
#tail [OPTION] FILENAME 查看后NUM行。
-f 显示完成后不退出,此时如有文件内容被修改,则即时显示追加至文件的内容。
#cut [OPTION] FILENAME 剪切
-d SEP(separator) 指定分隔符为SEP。默认是空格。
-f NUM 指定要显示第NUM个字段。
-f NUM 显示第NUM个字段。
-f NUM1,NUM3 显示第NUM1和NUM3个字段。
-f NUM1-NUM3 显示第NUM1到NUM3个字段。
例如:
#cut -d :-f1 /etc/passwd
以:作为分隔符,显示第1个字段。
#cut -f1,7 /etc/passwd
显示第一个1字段和第7个字段,分隔符为空格。
#sort [OPTION] FILENAME 按照每个字符自左向右ASCII表中的值升序排列文件。
-n --numeric-sort 按照数值大小排序。
-r --reverse 降序排列。
-t 字段分隔符。
-k SEP 以某个字段为关键字或以某个字段开始进行排序。
-u 排序后相同内容只显示1次。仅限于相邻2行内容相同。
-f 忽略字符大小写。
例如:
#sort -t: -k3 /etc/passwd 以冒号为分隔符,从第3个字段开始排序。
#uniq [OPTION] FILENAME 报告或者略过重复行。
-d 只显示重复的内容
-D 显示所有重复的行的内容
-c 显示重复的次数。
文本统计
#wc [OPTION] FILENAME word conun 统计文件行数、单词数、字节数(包括空格字符)。
-l 显示行数
-w 显示单词数
-c 显示字节数(byte)
-m 显示字符数(char)
-L 最长行包含的字符个数。
例如:
#wc /etc/passwd
字符处理
#tr [OPTION] ... SET1 [SET2] 转换或删除字符。针对字符集中每个字符替换。逐个字符处理
-d --delete 删除字符集中所有字符。
例如:
#tr ab AB 把ab字符集替换为AB。
#tr ab AB < /etc/passwd 把/etc/passwd中的ab替换为ab
#tr ‘a-z‘ ‘A-Z‘ < /etc/passwd 小写字母全部替换为大写字母。
#tr -d ‘ab‘ < /etc/passwd 把/etc/passwd中有a和 b的字符删除。