# linux文件系列
创建特定大小的文件
- 单元大小 字节(1B) C \字(2B) w \块(512B)b\ 千字节(1024B)k\ 兆字节(1024KB)M\ 吉字节(1025MB)G\
$ dd if=/dev/zero of=junk.data bs=1M count=1 (也可以测试内存操作速度)
文本交集与差集
sort A.txt -o A.txt; sort B.txt -o B.txt 对文件进行排序
comm A.txt B.txt
comm A.txt B.txt -3 | sed 's/^\t//'
创建长路径目录
$ mkdir dirpath
$ mkdir -p dirpath 创建多级目录
文件权限、所有权、粘滞位
$ ls - l #列出文件权限
第一列表示文件类型
“-” 普通文件
"d" 目录
"c" 字符设备
"b" 块设备
"l" 符号链接
"s" 套接字
"p" 管道
-rws---
r 代表可读 =4
w 代表可写 =2
x 代表可执行 =1
设置权限
$ chmod u=rws g=rw o=rw filename
u =指定用户权限
g = 指定用户组权限
o =指定其他实体权限
chmod 0+x filename 给其他实体权限增加可执行
chmod a+x filename 全部用户添加执行权限
chmod 765 filename
#更改所有权
chown user.group filename
#设置粘滞位
chmod a+t directory_name 只有目录所有者才可以删除目录中的文件
#递归方式设置权限
chmod 777 . -R
创建不可修改文件
chattr 可以设置文件为不可修改
chattr +i file
$ sudo chattr +i file
重新可写
chattr -i file
生成批量空白文件
touch filename
for name in (1..100).txt
do
touch $name
done
touch -a 只更改文件访问时间
touch -m 只更改文件内容修改时间
touch -d "Fri Jun 25 20:50:14 IST 1999" filename 为时间戳指定时间和日期
查找符号链接
$ ln -s target symbolic_link_name
$ ln -l -s /var/www/ ~/web
$ ls web
1rwxrwxrwx 1 slynux slynux 8 2010-06-25 21:34 web -> /var/www/
打印出符号链接
ls -l | grep "^1" | awk '{print $8}'
或者
$ find . -type 1 -print
$ ls -l web | awk '{print $10}
3.10 列举文件类型统计信息
打印文件类型信息
file filename
打印不包含文件名的文件类型信息
file -b filename
文件统计信息脚本
#!/bin/bash
if[$# -ne 1];
then
echo $0 basepath;
echo
fi
path=$1
declare -A statarray;
while read line;
do
ftype=`file -b "$line`
let statarray["$ftype"] ++;
done <<(find $path -type f -print)
for type in "${!statarray["$ftype"]}";
do
echo $ftype:${statarray["$ftype"]}
done
3.11 环回文件与挂载
创建一个1G的文件
$ dd if=/dev/zero of=loopbackfile.img bs=1G count=1
#用mkfs格式化这个1Gb文件
mkfs.ext4 loopbackfile.img
#文件检查
$sodu file loopbackfile.img
挂载环回文件
$ sodu mkdir /mnt/loopback
# mount -o loop loopbackfile.img /mnt/loopback
#链接设备
# losetup /dev/loop1 loopback.img
#mount /dev/loop1 /mnt/loopback
分区挂载硬盘文件(对一个用0填充的文件进行分区)
#losetup /dev/loop1 loopback.img
# fdisk /dev/loop1
在loopback.img中创建分区并挂载第一个分区
# losetup -o 32256 /dev/loop2 loopback.img
可以指定偏移量来设置第二个分区,挂载分区后就可以执行操作
卸载
#umount mount_point
umount /mnt/sda1(设备文件路径)
ISO文件作为环回文件挂载
mkdir /mnt/iso
mount -o loop linux.iso /mnt/iso
混合镜像
创建镜像
# cat /dev/cdrom >image.iso
或者# dd if=/dev/cdrom of=image.iso
mkisofs 创建ISO文件系统
$mkisofs -V "Label" -o image.iso source_dir/
标准ISO转化混合ISO
# isohybrid image.iso
将ISO写入USB
#dd if=image.iso of=/dev/sdb1
或者使用cat
# cat image.iso > /dev/sdb1
用命令行刻录ISO
cdrecord ISO> CD ROM/CD
# cdrecord -v dev=/dev/cdrom image.iso -speed 8 (8x速度刻录)-multi(多区段刻录)
弹出光盘
$ eject
$ eject -t 合上光盘
查找文件差异与修补
diff version1.txt version2.txt
一体化(可读性更好,+是新加入的行,-是删除的行 ,修补文件可以重定向)
# diff -u version1.txt version2.txt
# diff -u version1.txt version2.txt > version.patch 重定向另一个文件
之后就可以用paych修改文件
# patch p1 version1.txt < version.patch
diff 生成目录差异
$ diff -Naur dir1 dir2
-N 将所有缺失的文件视为空文件
-a 将所有文件是为文本文件
-u 生成一体化输出
-r 遍历目录下的所有文件
head与tail
打印前十行
# head file /tail file
从stdin读取数据
$ cat text | head /cat text | tail
指定打印前几行
$ head -n 4 file /tail -n 4 file
打印除了最后N行之外所有的行
$head -n -N file /tail -n +(N+1) file
随着文件数据的更新保持更新
tail -f growing_file
或者$ dmesg | tail -f (-s 是睡眠间隔)
根据进程监视
$ PID=$(pidof Foo)
$ tail -f file --pid $PID
列出目录
四种方法列出当前路径下的目录
$ ls -d */
$ ls -F | grep "/$"
$ ls -l | grep "^d"
$ find . -type d -maxdepth 1 -print
pushd和popd的快速定位
压入并切换路径
~ $ pushed /var/www
/var/www $ pushed /usr/src
查看栈内容
$ dirs
/usr/src /var/www ~ /usr/share /etc
0 1 2 3 4
切换路径
$ pushed +3
移除路径
$ popd
$popd +no 移除特定的路径
统计文件行数、单词数、字符数
统计行数
$ wc -l file /cat file | wc -l
统计单词数
$ wc -w file
$ cat file | wc -w
统计字符数
$ wc -c file
$ cat file | wc -c
打印文件的行数、单词数、字符数、制表符
$ wc file
最长行的长度
$ wc file -L
打印目录树
$ tree ~/unixfs
$tree PATH -P "*.SH" 匹配某种样式的文件
$tree path -I PATTERN 匹配某种样式以外的文件
同时打印出文件和目录的大小
$tree -h
$tree PATH -H http://localhost -o out.html 创建包含目录树的HTML文件