目录
1.生成任意大小的文件
- dd命令
dd命令会克隆给定的输入内容,然后将相同的副本写入到输出
if:输入文件,/dev/zero是一个字符设备,不断返回\0,如果不指定,默认从stdin输入
of:输出文件,如果不指定,默认输出到stdout
bs:block size,字节块大小
count:块个数
数据总体大小为 bs*count
Ian>dd if=/dev/zero of=junk.data bs=3M count=2
2+0 records in
2+0 records out
6291456 bytes (6.3 MB, 6.0 MiB) copied, 0.0119019 s, 529 MB/s
可以传输一个很大的数据来测试内存的操作速度
2.文本文件的交集与差集
comm命令可以用于求交集差集,必须使用排序过的文件
交集:两个文件共同的行
差集:包含在A文件,但不包含在其他指定文件中的行
求差:文件A和B包含的且互不相同的行
- 基本使用
comm:求交集;第一列A文件行,第二列B文件行,第三列共有的行
-1 -2 -3:删除相应的列
sed 's/^\t//':格式化输出
Ian>cat a.txt.sort
apple
iron
orange
water
Ian>cat b.txt.sort
gold
silver
water
wood
Ian>comm a.txt.sort b.txt.sort
apple
gold
iron
orange
silver
water
wood
Ian>comm a.txt.sort b.txt.sort -3
apple
gold
iron
orange
silver
wood
Ian>comm a.txt.sort b.txt.sort -3| sed 's/^\t//'
apple
gold
iron
orange
silver
wood
Ian>comm a.txt.sort b.txt.sort -1 -2
water
Ian>comm a.txt.sort b.txt.sort -1 -3
gold
silver
wood
3.查找并删除重复文件
使用md5sum校验文件,文件内容相同,校验和就相同。
4.文件和目录权限
- 文件权限含义
-rwxrwxrwx 1 ian ian 133 Apr 12 15:45 auto_expect.sh
第一个代表文件类型,文件,目录或者链接,管道等
后面每三个为一组,分别代表用户,用户组,其他用户(非指定的用户和用户组的其他用户)
rwx:读写执行
- 文件权限修改
chmod u=rwx g=rw o=r filename:使用角色修改
其中需要加权限:chmod o+x filename
需要减权限:chmod u-x filename
chmod 755 filename:使用数字修改
数字含义:
r--=4
-w-=2
--x=1
- 更改所有权
chown user:group filename
- 设置粘滞位
目录的粘滞位,只有目录的所有者才有权删除目录中的文件
chmod a+t dir_name:t为粘滞位
- 递归方式修改
chmod 777 filename -R
chown user:group filename -R
- 以不同的身份运行
setuid的特殊权限:先以user:group登录,将文件权限修改为想要执行的用户,然后+s修改
chmod +s filename
修改之后每次执行都是以user执行
5.创建不可修改的文件
chattr +i file:将文件设置为不可修改,任何用户包括超级用户都不能删除
chattr -i file:移除不可修改的属性
Ian>sudo chattr +i inter.sh
Ian>rm -f inter.sh
rm: cannot remove 'inter.sh': Operation not permitted
Ian>sudo chattr -i inter.sh
Ian>rm -f inter.sh
6.修改文件访问时间
touch可以修改访问时间,内容修改时间,指定特定的时间和日期
touch -a :只修改访问时间
touch -m:只修改文件内容修改时间
touch -d:指定文件时间
Ian>ll A*
-rw-r--r-- 1 ian ian 0 Apr 12 00:21 A.JPG
Ian>touch -d "Jan 20 2020" A.JPG
Ian>ll A*
-rw-r--r-- 1 ian ian 0 Jan 20 00:00 A.JPG
7.查找符号链接与指向目标
符号链接功能上类似于Mac中的别名或者windows的快捷方式。删除链接影响不到源文件
创建链接:ln -s target link
查看是否创建:ls -l
使用grep查找链接文件: grep "^l"
使用find查找: find path -type l
查看链接指向位置:readlink link
Ian>ln -s A.JPG A.link
Ian>ls -l
total 4
-rw-r--r-- 1 ian ian 0 Jan 20 00:00 A.JPG
lrwxrwxrwx 1 ian ian 5 Apr 12 18:59 A.link -> A.JPG
-rwxrwxrwx 1 ian ian 133 Apr 12 15:45 auto_expect.sh
-rw-r--r-- 1 ian ian 0 Apr 12 00:21 B.JPG
-rw-r--r-- 1 ian ian 0 Apr 12 18:43 chattr
-rw-r--r-- 1 ian ian 0 Apr 12 00:21 C.JPG
Ian>ls -l |grep "^l"
lrwxrwxrwx 1 ian ian 5 Apr 12 18:59 A.link -> A.JPG
Ian>find ./ -type l
./A.link
Ian>readlink A.link
A.JPG
8.查找文件差异并进行修补
一体化diff输出:diff -u f1 f2 >patch.txt,以f2的文本为基准
修复文本:patch -p1 v1.txt < patch.txt
撤销修复:patch -p1 v1.txt < patch.txt
diff目录: diff -Naur dir1 dir2
-N:将所有缺失文件视为空文件
-a:将所有文件视为文本
-r:遍历目录下所有文件
Ian>cat v1.txt
2
3
4
a
Ian>cat v2.txt
2
3
a
b
Ian>diff -u v1.txt v2.txt
--- v1.txt 2020-04-13 00:16:04.891985569 +0800
+++ v2.txt 2020-04-13 00:16:24.000706757 +0800
@@ -1,4 +1,4 @@
2
3
-4
a
+b
Ian>patch -p1 v1.txt < patch.txt
patching file v1.txt
Ian>cat v1.txt
2
3
a
b
9.head与tail
head和tail分别默认前10和后10行
打印前4行:head -n 4 file
打印除了最后5行之外所有行:head -n -5 file
打印后4行:tail -n 4 file
打印除前5行之外所有行:tail -n -6 file
监控某个进程:tail -f --pid $PID
10.pushd和popd进行快速目录切换
Ian>pwd
/home/ian/test/rename
Ian>pushd /home/ian/
~ ~/test/rename
Ian>pushd /usr/bin/
/usr/bin ~ ~/test/rename
Ian>dirs
/usr/bin ~ ~/test/rename
Ian>pwd
/usr/bin
Ian>pushd +1
~ ~/test/rename /usr/bin
Ian>pushd /etc/
/etc ~ ~/test/rename /usr/bin
Ian>dirs
/etc ~ ~/test/rename /usr/bin
Ian>pushd +2
~/test/rename /usr/bin /etc ~
Ian>popd +2
~/test/rename /usr/bin ~
11.统计文件行数,单词数和字符数
wc:统计行,单词,字符数
wc -l:统计行
wc -w:统计单词
wc -c:统计字符
wc -L:文件中最长一行的字符数
Ian>wc -l output.session
25 output.session
Ian>wc -w output.session
66 output.session
Ian>wc -c output.session
774 output.session
Ian>wc -L output.session
59 output.session
Ian>wc output.session
25 66 774 output.session
12.打印目录树
tree命令可打印文件目录
Ian>tree test/
test/
├── test.txt
├── tree1
└── tree2
2 directories, 1 file
tree -P pattern:标记某种样式的文件
tree -P pattern:标记某种样式之外的文件
tree -h:同时打印出文件和目录大小
Ian>ls
a.sh test.txt tree1 tree2
Ian>tree -P "*.sh"
.
├── a.sh
├── tree1
│ └── b.sh
└── tree2
2 directories, 2 files
Ian>tree -I "*.sh"
.
├── test.txt
├── tree1
│ └── c.log
└── tree2
2 directories, 2 files
Ian>tree -h
.
├── [ 0] a.sh
├── [ 0] test.txt
├── [4.0K] tree1
│ ├── [ 0] b.sh
│ └── [ 0] c.log
└── [4.0K] tree2
2 directories, 4 files
tree ./ -H http://localhost -o out.html:以当前的目录生成一个html文件