linux文件操作

目录

编辑文件

vi/vim编辑器

paste 命令

 sort 命令

comm 命令 

chattr设置文件隐藏属性

 文件属性

修改文件属性

chmod 命令

chown 命令(改变文件的所有者)

chgrp 命令(改变文件所属用户组)

查寻文件或命令的路径

whereis命令

find命令

复制文件

 cp 命令(copy)

scp命令 

文件描述符 

 ulimit -n

lsof (list open files)

 删除文件

文件压缩

tar

查看压缩属性信息


编辑文件

vi/vim编辑器

Ctrl+f  向下翻页
 Ctrl+b  向上翻页
 G  移动到文件最后一行
 gg  移动到文件第一行
 N+回车 N 为数字,向下移到到 N 行
 /关键字 向下寻找关键字
 ?关键字 向上寻找关键字
 \# 从光标向后查找光标所在关键词
 \* 从光标向前查找光标所在关键词
 n  向下重复上一次查找操作
 N  与 n 相反,反向重复上一次查找操作

:n1,n2s/关键字 1/关键字 2/g  从第 n1 与 n2 行之间寻找关键字 1,并将关键字 1 替换为关键字 2
 :1,$s/关键字 1/关键字 2/g 从第 1 行到最后一行寻找关键字 1,并将关键字 1 替换为关键字 2
 :1,$s/关键字 1/关键字 2/gc  从第 1 行到最后一行寻找关键字 1,将关键字 1 替换为关键字 2 前会提示用
 户确认是否替换
 dd 删除整行
 ndd n 为数字,删除光标所在向下 n 行。
 yy  复制光标所在行
 nyy  n 为数字,复制光标所在向下 n 行
 p,P  小 p 将复制的数据在光标下一行粘贴,大 P 将复制的数据在光标上一行粘贴
 u  撤消前一个操作
 Ctrl+r  重做上一个操作
 .  将会重复上一个命令
 i:在当前字符的左边插入
 I:在当前行首插入
 a:在当前字符的右边插入
 A:在当前行尾插入
 o:在当前行下面插入一个新行
 O:在当前行上面插入一个新行
 :w  保存数据
 :wq  保存退出
 :q!  不保存退出
 :w 文件名 相当于另存为

paste 命令

- paste file1 file2 合并两个文件或两栏的内容
- paste -d ‘+’ file1 file2 合并两个文件或两栏的内容,中间用"+"区分

 sort 命令

 sort file1 file2 排序两个文件的内容
 sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
 sort file1 file2 | uniq -u 删除交集,留下其他的行
 sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)

comm 命令 

- comm -1 file1 file2 比较两个文件的内容只删除 ‘file1’ 所包含的内容
- comm -2 file1 file2 比较两个文件的内容只删除 ‘file2’ 所包含的内容
- comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

chattr设置文件隐藏属性

chattr 

  • a 只能增加数据,而不能删除和修改数据(适用于日志文件)
  • A 此文件(或目录)的访问时间atime将不会被修改。可避免I/O较慢的机器过度访问磁盘。
  • d dump命令运行时,不进行dump备份备份操作
  • S 一般文件是异步格式写入磁盘的,如果加上S这个属性时,对文件进行任何修改,将会“同步”写入磁盘中。
  • s :如果这个文件被删除,它将会被完全从这个硬盘空间中删除。
  • u :与s相反,如果该文件被删除了,则数据内容其实还存在磁盘中。
  • c :会自动将此文件压缩,在读取的时候会自动解压缩,但是在存储的时候,将会先进行压缩后再存储。
  • i :它可以让一个文件不能被删除、改名,设置连接也无法写入或添加数据。

lsattr

  • -a :将隐藏属性也显示出来
  • -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名
  • -R :连同子目录的数据也一并列出

命令示例

chattr +i test.txt         # test.txt拥有i属性,且root不能删除
lsattr test.txt          #显示文件隐藏属性
chattr -i test.txt        #  移除文件隐藏属性

 文件属性

ls -al --full-time

  1. 第一列:共10位,第1位表示文档类型,d表示目录,-表示文件,l表示链接文件,d表示可随机存取的设备,如U盘等,c表示一次性读取设备,如鼠标、键盘等。后9位,依次对应三种身份所拥有的权限,身份顺序为:owner、group、others,权限顺序为:readable、writable、excutable。
  2. 第二列:表示连结数
  3. 第三列:表示拥有者
  4. 第四列:表示所属群组
  5. 第五列:表示文档容量大小,单位字节
  6. 第六列:表示文档最后修改时间,注意不是文档的创建时间哦
  7. 第七列:表示文档名称。以点(.)开头的是隐藏文档

修改文件属性

chmod 命令

ls -lh 显示权限

chmod | ugoa | +(加入) -(除去) =(设置) | rwx | 文档路径

 chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r,4 )、写(w,2)和执行(x,1)的权限
 chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限  

  • u:owner,g:group,o:others,a:all
  • u+x:添加owner 可执行权限,g-x:去除group 可执行权限,uo=x:设置owner和others 可执行权限 

防止chmod误操作,霸道的恢复方法

执行chmod前:getfacl -R / > chmod.txt 

恢复执行:setfacl --restore=chmod.txt

chown 命令(改变文件的所有者)

chown user1 file1 改变一个文件的所有人属性 chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 chown user1:group1 file1 改变一个文件的所有人和群组属性

chgrp 命令(改变文件所属用户组)

chgrp group1 file1 改变文件的群组

查寻文件或命令的路径

whereis命令

whereis command 显示命令的路径。

which command 显示命令的路径,及使用者所定义的别名。

whatis command 显示命令功能的摘要。

find命令

find search-path -name filename -print      搜寻指定路径下某文件的路径 。

find / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录
 find / -user user1 搜索属于用户 ‘user1’ 的文件和目录

find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件

find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
 whereis halt 显示一个二进制文件、源码或man的位置

which halt 显示一个二进制文件或可执行文件的完整路径    

find /var/mail/ -size +50M -exec rm {} \;    删除大于50M的文件:   

统计.jpg文件大小

find / -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}'

查找大写字母开头的 txt 文件:$ find /etc -name "[A-Z]*.txt" -print

查找不是 out 开头的 txt 文件:$ find . -name "out*" -prune -o -name "*.txt" -print

除 git 子目录外查找 txt 文件:$ find . -path "./git" -prune -o -name "*.txt" -print

复制文件

 cp 命令(copy)

  •  -a :将文件的特性一起复制
  •  -p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
  •   -i :若目标文件已经存在时,在覆盖时会先询问操作的进行
  •   -r :递归持续复制,用于目录的复制行为
  •   -u :目标文件与源文件有差异时才会复制

scp命令 

复制文件

scp local_file remote_username@remote_ip:remote_folder 本地到远程

scp remote_username@remote_ip:remote_folder  local_file 远程到本地

复制目录

scp -r local_folder remote_username@remote_ip:remote_folder

scp -r remote_username@remote_ip:remote_folder  local_folder

pv(Pipe Viewer) 命令可以监测数据复制的过程,www.ivarch.com/programs/pv.shtml

当运行 rsync 命令或创建一个 tar 归档的时候。不带任何选项运行 pv 命令时,默认参数为:

  • -p :进程
  • -t :时间,到当前总运行时间
  • -e :预计完成时间,这往往是不准确的,因为 pv 通常不知道需要移动的数据的大小
  • -r :速率计数器,或吞吐量
  • -b :字节计数器

比如rsync 传输:          $ rsync -av /home/carla/ /media/carla/backup/|pv

创建一个 tar 归档:           $ tar-czf -/file/path|(pv> backup.tgz)

使用 pv 来回显输入的内容:           $ echo"typing random stuff to pipe through pv"|pv-qL 8 

文件描述符 

 ulimit -n

ulimit -n 查看linux系统打开最大的文件描述符,默认1024

修改/etc/security/limits.conf

* soft nofile 10240

* hard nofile 10240

重启后生效

当前系统使用的打开文件符数:cat /proc/sys/fs/file-nr

   5664   0   186405

其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于    file-max

系统最大打开文件描述符数: /proc/sys/fs/file-max

lsof (list open files)

lsof (list open files)用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),还可以用于找回/恢复被删除的文件。

显示所有连接:# lsof -i

只显示IPV6的连接信息:# lsof -i 6

仅显示TCP连接:# lsof -i tcp

显示指定端口的连接信息# lsof -i :22

列由某个用户打开的进程或文件# lsof -u root | head -5,非root:# lsof -u ^root | head

显示指定的连接信息:# lsof -i@192.168.1.100:22

显示某些状态的端口信息:# lsof -i -sTCP:LISTEN、lsof -i -sTCP:ESTABLISHED

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr:结果是以 打开的文件描述符数量:进程号  的格式排序 。降序排序

lsof -p PID:查看进程打开的句柄

lsof 命令第一栏进程名在显示的时候,默认显示前 n 个字符,这样如果我们需要显示完整的进程名以方便过滤的话,可以使用 +c 选项。用法如下:

lsof +c 15:#最左侧的程序名最大显示 15 个字符, 如果你设置值太大, lsof 便不会采用你设置的最大值,而是使用默认最大值。

 进程打开的文件描述符数量 

pidof vim

      3253 获得进程pid

 ll /proc/3253/fd

 命令

ls -lR|grep "^-"|wc -l    查看当前目录及子目录下文件数

ls -lc filename         列出文件的 ctime

ls -lu filename         列出文件的 atime

ls -l filename          列出文件的 mtime --ll默认显示的就是这个时间

nl同cat,打印行号

col:把man文件转成纯文本文件。

xmlwf:检查一下一个XML文档是否是所有的tag都是正常的。

列出当前目录下文件夹的大小 

grep -v "^#" nova.conf | grep -v "^$"  排除空行又排除注释行的命令

du -h --max-depth=1

du -sm * | sort -nr :统计当前目录下文件大小,并按照大小排序

lsof |grep deleted  :查看所有已打开文件并筛选出其中已删除状态的文件

 删除文件

rm 命令(remove)

-f :就是force的意思,忽略不存在的文件,不会出现警告消息
 -i :互动模式,在删除前会询问用户是否操作
 -r :递归删除,最常用于目录删除,它是一个非常危险的参数

1、rm 路径/-xxx      #加上文件路径

2、rm -- -xxx          #加上--

3、rm "<>!*"          #加引号

4、转义字符

5、按照i节点号删除

     ls -i    查询文件节点号

    find ./ -inum 1703907 -exec rm {} ;

脚本中:rm -rf ${p}/*,如果p变量没有设置,命令等同于rm -rf /,后果严重

文件压缩

tar

-c :新建打包文件
 -t :查看打包文件的内容含有哪些文件名
 -x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
 -j :通过bzip2的支持进行压缩/解压缩
 -z :通过gzip的支持进行压缩/解压缩
 -v :在压缩/解压缩过程中,将正在处理的文件名显示出来
 -f filename :filename为要处理的文件
 -C dir :指定压缩/解压缩的目录dir
 压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
 查询:tar -jtv -f filename.tar.bz2
 解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
 bunzip2 file1.bz2 解压一个叫做 'file1.bz2’的文件
 bzip2 file1 压缩一个叫做 ‘file1’ 的文件
 gunzip file1.gz 解压一个叫做 'file1.gz’的文件
 gzip file1 压缩一个叫做 'file1’的文件
 gzip -9 file1 最大程度压缩
 rar a file1.rar test_file 创建一个叫做 ‘file1.rar’ 的包
 rar a file1.rar file1 file2 dir1 同时压缩 ‘file1’, ‘file2’ 以及目录 ‘dir1’
 rar x file1.rar 解压rar包
 zip file1.zip file1 创建一个zip格式的压缩包
 unzip file1.zip 解压一个zip格式压缩包
 zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩

查看压缩属性信息

zcat -l httpd-2.4.46.tar.gz

compressed          #压缩大小    

uncompressed        #未压缩大小

ratio               #压缩比率

uncompressed_name    #未压缩文件的名称

#测试压缩包的完整性

 zcat -t httpd-2.4.46.tar.gz

#显示软件许可信息

# zcat -L httpd-2.4.46.tar.gz

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值