文件操作和管理
文件操作是什么?
指对文件(或目录)的增删改等操作
操作目录
切换目录
使用命令 cd 可切换当前目录,需指定绝对路径或相对路径,若后面无参数(或 cd ~ )则切换到home
显示当前所在目录
使用命令 pwd 显示当前所在目录,参数 -P 可显示链接目录的真实路径
新建目录
使用命令 mkdir 新建目录,加上参数 -p 递归建立,-m 指定权限
这里目录 space1 权限是 drwxrwxrwx,而mysapce权限为预设权限 drwxrwxr-x
删除空目录
使用命令 mrdir 删除空目录,加上参数 -p 递归删除空目录,如下删除 mysapces/space2下的test,删除后space2成为空目录,也会顺带删除,而mysapces还有sapces1所以给出错误提示
操作文件
查看文件
cat
命令 cat 从第一行到最后一行显示文件内容,-n -b 列出行号(后者空白行不显示行号),-v 显示特殊字符,-T 将 tab转为^I,-E 显示结尾的换行符$,-A = -vET
printf
命令 printf 可对输出格式化,%ns表示字符串占n个位置,%ni表示整数占n个位置,%n.mf表示浮点数共n个位置(包括小数点),小数点后占m个位置
tac
命令 tac 从最后一行到第一行显示文件内容,与cat单词相反
nl
命令 nl 为添加行号查看,-ba -bt 列出行号,后者不列空行号,-n ln 行号显示左边,-n rn 显示右边,-n rz 显示右边且加0,-w 指定行号占位字符数
more
命令 more 将文件分为一页一页展示,按center显示下一行,space往下翻页,q离开
less
命令 less 也是将文件分为一页一页展示,比more更有弹性,可用pagedown和pageup上下翻页,基本用法和more类似
head
命令 head 查看文本前面的内容,-n 可指定行数,不加参数默认输出10行
tail
命令 tail 查看文本后面的内容,用法与head类型
od
命令 od 可用指定进制形式输出文本内容,如下表示将ASCII和十六进制对照输出
创建文件
命令 touch 不加参数创建文件
观察文件内容类型
命令 file 可显示文件内容类型,如下为ASCII码文本文件
共有操作
复制
使用命令 cp 进行复制,需指定待复制的文件和目标目录,不同身份下的复制会导致文件属性(权限、时间)不同,加上参数 -a 可复制文件所有属性
参数 -i 可检测当前是否已存在文件,进一步选择是否覆盖(不加参数则直接覆盖)
参数 -r 可递归复制目录中的文件
参数 -s 复制建立符号链接,-l 建立硬链接,可看到硬链接和源文件属性一样,链接数+1,而符号链接则有一个箭头指向
参数 -d 复制链接文件,可看到 1_slink_copy2.txt 指向 1.txt,而未加参数则复制原文件
参数 -u 表示当原文件比目标文件新时才复制,如不修改1.txt,在09分时cp,而2.txt 仍显示08分说明未复制
删除
使用命令 rm 删除,参数 -r 递归删除, -i 删除前询问,-f 强制删除(不会提示),如下删除mysapces,因为里面存在space1故直接调用无法删除
移动(剪切)
使用命令 mv 移动,参数 -i 已存在询问,-f 强制移动(不会提示直接覆盖),-u 更新才会覆盖,若文件位置不变则是重命名
提取文件名和目录名
使用命令 basename dirname 可提取文件名和目录名
查找
which
命令 which 可搜索程序在环境变量PATH中所规定的绝对路径
whereis
命令 whereis 在特定目录下查找文件, -l 查看它所搜寻的目录,-b 只找程序,-m 只找man下的文件,-s 只找source来源文件,-u 查找不在-b -m -s的其他文件
locate/updatedb
命令 locate 在 /var/lib/mlocate 内记载的资料库中查找,-i 忽略大小写,-c 仅输出数量,-l 设置输出行数, -S 输出资料库中的相关信息(里面的目录及数量等),-r 设置正则表达式
资料库是旧的(每天更新一次),可能查不到新创建的文件,可使用命令 updatedb 读取 /etc/updatedb.conf中的设置,再去查找硬盘中的文件,从而更新/var/lib/mlocate内的资料库文件
find
命令 find 是全路径查找
根据时间
-mtime n表示n天之前的一天之内被修改的文件,-mtime +n 表示n天之前(不含n)被修改的文件,-mtime -n表示n天之内(含n)被修改过的文件,-newer file 表示列出比file新创建的文件
如下表示24小时内修改过的文件
根据身份
-uid 指定userID,-gid 指定groupID,-user指定用户名,-group指定群组,-nouser 不存在于/etc/passwd的用户的文件,-nogroup不存在于/etc/group的群组的文件
根据属性
-name 指定文件名,-size ±n 指定大小(大于小于)n的文件,-type 指定类型,-perm n指定权限等于n的文件,-perm -n指定权限包含n的文件(如搜索-rwxr----,会找到-rwxrw----),-perm /n 指定权限包含任一n的文件(如搜索-rwx------,会找到-rw-------)
如上查找txt文件,如下查找介于5M-10M的文件,-a表示and,-o表示or
处理结果
-exec c 表示将前面找到的内容进一步交给后面的指令c处理,-print 表示将结果输出到屏幕
上图 {} 表示find搜索到的结果,-exec表示接下来接指令ls -l,; 表示指令结束( \ 转义)
文件比较和更新
diff
命令 diff 以行为单位比较两个文件的差异,-b 忽略一行中的多个空白(如a b和a b相同),-B忽略空白行,-i 忽略大小写
如上意思为左边第一行被右边第一行替换并输出原内容和新内容,如下diff也可用于比较整个目录的差异
cmp
命令 cmp 以字节为单位比较两个文件,-l将所有不同的字节都列出来(默认只显示第一个不同点)
patch
命令 patch 通常和diff共用,将差异部分制作为补丁文件,用于将旧文件升级为新文件,-p指定取消几层目录,-R则将新文件还原成旧文件
如上根据差异生成patch文件,如下将1.txt更新为2.txt,-p0因为其在同一目录所以不需要减去目录
如下还原1.txt