使用文件相关命令

dd

用来生成任意大小的文件

dd if=/dev/zero of=junk.data bs=1m count=1

生成一个1m大小的文件,里面全部使用0填充

if: 指定输入文件,如果没有默认从stdin读取

/dev/zero:是一个字符设备,它会不断返回0值字节(\0)

of:指定输出文件,如果没有指定默认输出到stdout

junk.data:输出文件名称

bs:设置输入、输出文件的大小,单位有字节(c),字(w),块(b),千字节(k),兆字节(M),吉字节(G)

count:将输入copyn份到输出

comm

求出两个文件的交集,3列用Tab隔开,依次为:只有A有的,A、B都有的,只有B有的

交集:两个文件相同的行

sort A.txt -o A.txt; sort B.txt -o B.txt

先对两个文件排序,-o指定排序后的输出文件

comm A.txt B.txt

对文件求差后输出

comm A.txt B.txt -1 -3

只输出两个文件的交集,共同的行

-1:表示不输出第一列(A中包含,B中不包含)

-2:不输出第二列

-3:不输出第三列

``2:不输出第二列

-3:不输出第三列

comm A.txt B.txt -1 -3 | sed '/^\t//'

只输出第二列,并且删除第二列前面的tab空白

文件的交集、并集、差集

交集

sort a.txt b.txt | uniq -d

sort对两个文件进行排序

uniq -d 输出文件中出现超过一次的行

并集

sort a.txt b.txt | uniq

uniq 去除文件中重复的行,其他全部输出

交集

a-b

sort a.txt b.txt b.txt | uniq -u

对三个文件进行排序,b.txt中的行至少出出现两次

uniq -u 输出文件中只出现过一次的行,也就是a.txt中有,而b.txt 中没有

查找并删除文件

#!/bin/bash
# filename:remove_dumplicates.sh
# usage: 查找并删除重复文件,没一个文件都只保留一个样本 ls -lS | awk 'BEGIN {
getline; getline;
name1 = $9;size=$5
}
{
name2=$9;size2=$5;
if (size == $5) {
cmd="md5sum "name1;cmd | getline; csum1=$1;close(cmd);
cmd="md5sum "name2;cmd | getline; csum2=$1;close(cmd);
if (csum1 == csum2) {
print name1;print name2;
}
};
name1=name2;size=size2;
}' | sort -u > duplicate_files cat duplicate_files | xargs -I {} md5sum {} | sort | uniq -w 32 | awk '{print "^"$2"$"}' | sort -u > duplicate_sample echo Rmoving
comm duplicate_files duplicate_sample -2 -3 | tee /dev/stderr | xargs rm
echo Removed duplicates files successfully.

ls -lS: 列出文件详细信息并按照文件大小排序

awk的BEGIN部分: 在awk读取输入前执行,getline是awk内置函数,读取一行,这里是为了跳过ls输出的Total

接着找到第一行的文件名称和文件大小

中间的"{}"表示awk循环每一行的时候执行的语句,里面先比较两个文件大小,大小一致才有可能是相同的文件,使用md5sum进一步确认,将相同内容的文件名称输出

sort -u: 对输出的文件名称排序并去重(同一个文件名可能被输出多次,如果一个文件有多个相同内容的文件的时候,该文件名会被输出多次,需要去重),然后重定向到文件中,duplicate_files保存的是存在内容重复的多个文件名称

md5sum: 接下来对于duplicate_files文件中的所有文件求出md5sum,

sort: 然后排序,将md5sum相同(也就是存在重复的文件)依次输出

uniq -w 32: 按照前面输出的前32个字符去重,md5的值就是32位的

awk: 输出去重后的文件名

sort -u: 排序去重后输出到duplicate_sample,目前duplicate_sample包含的是所有重复文件的一份样本的文件名

comm duplicate_files duplicate_sample -2 -3: 只输出第一列,也就是需要被删除的文件名称

tee /dev/stderr: tee读读取输入输出到文件/dev/stderr 并输出到stdout

xargs rm: 删除

创建长目录

mkdir -p /var/test/dir1

创建上面的目录路径,如果不存在则创建,如果存在也不会输出错误信息

目录的权限

读:允许读取目录中文件和子目录的列表

写:允许在目录中创建或者删除文件

执行:指明是否可以访问目录中的文件或者子目录

创建不可修改的文件

chattr +i file

则file文件不可以修改删除,-i重置为可修改删除

file

查看文件类型信息

file filename

filename的文件类型

file -b filename

filename的文件类型(只包含文件类型信息,没有-b则输出文件名称和类型信息)

环回文件

通常,我们在硬件设备上创建文件系统,然后挂载在某个目录上,这个目录就是挂载点。如果是创建一个文件,格式化为文件系统的格式(ntfs, exfat, ext4等),然后挂载在某个目录上使用,这个新建的文件就是环回文件

dd if=/dev/zero of=loopback.img bs=1G count=1

创建一个1G的文件

mkfs.ext4 loopback.img

将该文件格式化为ext4

file loopback.img

查看文件格式

mkdir /mnt/loopnack

创建挂载点

mount -o loop loopback.img /mnt/loopback

将新建的文件作为换回文件挂载,-o loop 挂载环回文件

仅列出目录下所有目录

ls -d */

ls -F | grep "/$"

ls -l | gerp "^d"

find . -type d -maxdepth 1

wc

wc file -L

file中最长行的长度

wc file -l

file的行数,-l:行数,-w:单词数,-c:字符数

对行、单词、字符进行迭代

迭代行

while read line
do
echo $line;
done < file.txt

使用子shell

cat file.txt | (while read line; do echo $line;done)

迭代每一个单词

for word in $line
do
echo $word
done

迭代一个单词的每一个字符

for (i=0;i<${#word};i++)
do
echo ${word:i:1}
done

${#var_name}: var_name表示变量,整体表示该变量值得长度

${string:start_position:char_count}: 截取字符串变量$string 中从start_position开始,char_count个字符,$(string:start_position)表示将变量$string 从start_position开始截取到最后

${string/line/replaced}: 使用replaced替换变量$string中的line

linux 命令 — 文件相关的更多相关文章

  1. Linux命令-文件传输

    Linux命令-文件传输 Linux lprm命令 Linux lprm命令用于将一个工作由打印机贮列中移除 尚未完成的打印机工作会被放在打印机贮列之中,这个命令可用来将常未送到打印机的工作取消.由于 ...

  2. Linux命令——文件和目录管理

    Linux命令--文件和目录管理 基本命令 命令ls 作用:显示目录下的文件和文件夹 说明:默认显示当前目录,可跟路径参数 参数:-a,显示隐藏目录 参数:-l,显示文件权限 参数:-d,显示文件最后 ...

  3. Linux基本操作——文件相关

    一.前言 无论是IC工程师.FPGA工程师还是嵌入式软件工程师,都或多或少会接触到Linux操作系统.有很多EDA工具只有Linux版本,因此掌握基本的操作和常用命令十分必要.Linux中的数据均以文 ...

  4. Linux命令 文件压缩及压缩命令

    gzip [功能说明] 文件的压缩 #gizp属于GNU软件,总性能不错,是Linux系统首选的压缩工具,tar归档命令的-z参数也是利用gzip/gunzip来解压缩 [语法格式] Gip[选项][ ...

  5. Linux命令 文件的建立移动删除

    cat [功能说明] 建立文件  #cat命令用来串接文件或显示文件内容的但是如果从标准输入设备中读入数据并将结果重定向到一个新的文件中,则可以到达建立新文件的目的.Cat命令只能在编辑新的文件时只能 ...

  6. # 常用linux 命令和相关问题解决

    最近试着自己部署了服务器,在unbantu的环境下 学习了很多新知识 也遇到了很多问题,现在腾出手了,总结一下 常用Linux命令 目录操作 pwd: 查看当前路径 cd: 移动 cd .. : 返回 ...

  7. Linux命令-文件搜索命令:which

    主要用途:查找linu命令,而不是磁盘上的普通文件,并且能看到命令的别名和目录. 区别whereis命令,which在path变量指定的目录中查找命令,并且返回第一个符合的结果.whereis是查找所 ...

  8. Linux命令-文件处理命令:touch

    touch chengshi.list 在当前目录中创建chengshi.list文件 touch /root/chengshi.list 在root目录下面创建chengshi.list文件 tou ...

  9. linux查看文件相关指令

    以下内容整理自以下两篇文章: http://www.cnblogs.com/xilifeng/archive/2012/10/13/2722596.html Linux 查看文件内容的命令 http: ...

随机推荐

  1. 使用rar把程序打包成一个exe

    根目录--全部文件--右键添加到压缩文件 常规--创建自解压压缩文件 高级--自解压选项 解压路径--Finger(自己写)--在"Program Files"中创建 设置--解压 ...

  2. jquery学习总结12-24

    一.jquery操作类的相关方法 1.addClass()方法可以为DOM元素添加类,若添加多个类中间可以用空格连接 2.removeClass()方法可以为DOM元素删除类,若删除多个类中间可以用空 ...

  3. Java程序设计(第二版)复习 第二章

    1.Java使用Unicode字符集,一般用16位二进制表示一个字符.且Java中午sizeof关键字,因为所有基本数据类型长度是确定的,不依赖执行环境. 2. Java变量在声明时并没有分配内存,真 ...

  4. 2019.03.28 bzoj3597: [Scoi2014]方伯伯运椰子(01分数规划)

    传送门 题意咕咕咕有点麻烦不想写 思路: 考虑加了多少一定要压缩多少,这样可以改造边. 于是可以通过分数规划+spfaspfaspfa解决. 代码: #include<bits/stdc++.h ...

  5. angular 实现 echarts 拖动区域进行放大 方法

    实现逻辑: 1.通过鼠标摁下事件  和弹出事件  获取x轴的index  之后去x轴的list中去获取两个坐标点 2.之后将这两个数据作为参数  传到后台更新数据 3.记录下来这两个坐标点 放到lis ...

  6. C++程序调用python3

    今天想做一个简单的管理密码的小程序,由于最近了解了下Python,就想用Python来写.但是看了看Python的界面库用法有感觉有点麻烦,所以还不如直接使用MFC写写界面,关于csv的文件处理部分使 ...

  7. Redis讲解以及测试要点

    一.redis 简介 redis适合放一些频繁使用,比较热的数据,因为是放在内存中,读写速度都非常快,一般会应用在下面一些场景,排行榜.计数器.消息队列推送.好友关注.粉丝. 首先要知道mysql存储 ...

  8. 深入浅出Git教程【转载】转载

    深入浅出Git教程(转载)   目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1 ...

  9. MVC+EF 多条件查询

    根据以前的做法是拼接sql语句,这会增加维护成本,因为sql语句里的内容不会报错,所以在使用ef的时候必须要抛弃拼接sql语句的习惯. 构建实例 List<vyw_user> list = ...

  10. socketserver 实现并发

    基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环 socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) server类: reque ...