0x01 gunzip
1 | gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][文件...] 或 gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][目录] |
- -a或—ascii 使用ASCII文字模式。
- -c或—stdout或—to-stdout 把解压后的文件输出到标准输出设备。
- -f或-force 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
- -h或—help 在线帮助。
- -l或—list 列出压缩文件的相关信息。
- -L或—license 显示版本与版权信息。
- -n或—no-name 解压缩时,若压缩文件内含有远来的文件名称及时间戳记,则将其忽略不予处理。
- -N或—name 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
- -q或—quiet 不显示警告信息。
- -r或—recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
- -S<压缩字尾字符串>或—suffix<压缩字尾字符串> 更改压缩字尾字符串。
- -t或—test 测试压缩文件是否正确无误。
- -v或—verbose 显示指令执行过程。
- -V或—version 显示版本信息。
0x02 cpio
… 这也太长了点吧..1
cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][-H <备份格式>][-O <备份档>][--block-size=<区块大小>][--force-local][--help][--quiet][--version] 或 cpio [-bBcdfikmnrsStuvV][-C <输入/输出大小>][-E <范本文件>][-F <备份档>][-H <备份格式>][-I <备份档>][-M <回传信息>][-R <拥有者><:/.><所属群组>][--block-size=<区块大小>][--force-local][--help][--no-absolute-filenames][--no-preserve-owner][--only-verify-crc][--quiet][--sparse][--version][范本样式...] 或 cpio [-0adkiLmpuvV][-R <拥有者><:/.><所属群组>][--help][--no-preserve-owner][--quiet][--sparse][--version][目的目]
找几个看起来有用的参数先记录一下, 以后有用到的再补.
- -a或—reset-access-time 重新设置文件的存取时间。
- -A或—append 附加到已存在的备份档中,且这个备份档必须存放在磁盘上,而不能放置于磁带机里。
- -B 将输入/输出的区块大小改成5210 Bytes。
- -C<区块大小>或—io-size=<区块大小> 设置输入/输出的区块大小,单位是Byte。
- -d或—make-directories 如有需要cpio会自行建立目录。
- -f或—nonmatching 让cpio解开所有不符合范本条件的文件。
- -F<备份档>或—file=<备份档> 指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档。
- -H<备份格式> 指定备份时欲使用的文件格式。
- -i或—extract 执行copy-in模式,还原备份档。
- -l<备份档> 指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档。
- -L或—dereference 不建立符号连接,直接复制该连接所指向的原始文件。
- -o或—create 执行copy-out模式,建立备份档。
- -p或—pass-through 执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录。
- -u或—unconditional 置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖。
- —force-local 强制将备份档存放在本地主机。
- —block-size=<区块大小> 设置输入/输出的区块大小,假如设置数值为5,则区块大小为2500,若设置成10,则区块大小为5120,依次类推。
好多啊…
0x03 mount
基本使用
mount 命令用来挂载文件系统。其基本命令格式为:
mount -t type [-o options] device dir
- device:指定要挂载的设备,比如磁盘、光驱等。
- dir:指定把文件系统挂载到哪个目录。
- type: 指定挂载的文件系统类型,一般不用指定,mount 命令能够自行判断。
- options: 指定挂载参数,比如 ro 表示以只读方式挂载文件系统。
查看挂载的文件系统
- mount
- mount -t tmpfs 只会输出tmpfs类型的文件系统.
格式化并挂载磁盘
对于一个磁盘分区,我们可以使用 mkfs 命令把磁盘分区格式化为指定的文件系统,比如 ext4:1
sudo mkfs -t ext4 /dev/sdb1
然后挂载到/mnt目录:1
sudo mount /dev/sdb1 /mnt
挂载光驱
挂载光驱的命令.1
sudo mount /dev/cdrom /mnt
设置模式1
sudo mount -o ro /dev/sdb1 /mnt
把只读的挂载重新挂载为读写模式1
mount /mnt -o rw, remount
挂载windows共享文件
1 | sudo mount -t cifs -o username=nick,password=Test123456 //10.32.2.30/doc /mnt |
注意,-t cifs 是可以省略的,mount 命令能够自动识别。一定要使用 IP 代替 windows 主机的名称。
这个感觉可能挺实用.
挂载虚拟文件系统
proc、tmpfs、sysfs、devpts 等都是 Linux 内核映射到用户空间的虚拟文件系统,它们不和具体的物理设备关联,但它们具有普通文件系统的特征,应用层程序可以像访问普通文件系统一样来访问他们。
比如内核的 proc 文件系统默认被挂载到了 /proc 目录,当然我们也可以再把它挂载到其它的目录,比如 /mnt 目录下:1
sudo mount -t proc none /mnt
在 Linux 上我们还可以通过 tmpfs 文件系统轻松地构建出内存磁盘来。比如在内存中创建一个 512M 的 tmpfs 文件系统,并挂载到 /mnt 下,这样所有写到 /mnt 目录下的文件都存储在内存中,速度非常快,不过要注意,由于数据存储在内存中,所以断电后数据会丢失掉:1
sudo mount -t tmpfs -o size=512m tmpfs /mnt
感觉这个指令相当于是把内存当做磁盘来存了, 十分快, 不知道有什么用.
挂载loop设备
这个不懂, 但是先总结上吧.
在 Linux中,硬盘、光盘、软盘等都是常见的块设备,他们在 Linux 下的目录一般是 /dev/sda1、/dev/cdrom、 /dev/fd0 这样的。而 loop device 是虚拟的块设备,主要目的是让用户可以像访问上述块设备那样访问一个文件。 loop device 设备的路径一般是 /dev/loop0、dev/loop1 等,具体的个数跟内核的配置有关。
挂载ISO文件
需要用到 loop device 的最常见的场景是挂载一个 ISO 文件。比如将 /tmp/test.iso 这个光盘镜像文件使用 loop 模式挂载到 /mnt 下,这样就不需要把 ISO 文件刻录到光盘上了,当然也不需要光驱了。
下面的命令把 projects 目录下的内容打包到 test.iso 文件中:1
mkisofs -o test.iso projects/
挂载这个iso到/mnt目录下.1
sudo mount test.iso /mnt
挂载test.iso文件使用了虚拟设备/dev/loop0, 并且是只读的模式。
虚拟硬盘
loop 设备另一种常见的用法是虚拟一个硬盘,比如我想玩儿一下 btrfs 这个文件系统,但系统中目前的所有分区都已经用了,里面都是有用的数据,不想格式化他们,这时虚拟硬盘就有用武之地了。1
dd if=/dev/zero bs=1M count=512 of=./vdisk.img
然后在这个文件里面创建 btrfs 文件系统:1
2sudo apt install btrfs-progs
mkfs.btrfs vdisk.img
最后把它挂载到/mnt:1
sudo mount vdisk.img /mnt
挂载一个设备到多个目录
我们也可以把同一个设备挂载到不同的目录,这样在不同的目录中看到的是同样的内容。还可以在不同的目录中控制挂载的权限,比如以只读方式挂载:1
sudo mount -o ro vdisk.img ./testdir
0x04 chown
使用权限 : root
语法1
chown [-cfhvR] [--help] [--version] user[:group] file...
参数 :
- user: 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
0x05 exec
exec命令 | 作用 |
---|---|
exec ls | 在shell中执行ls,ls结束后不返回原来的shell中了 |
exec < file | file中的内容作为标准输入(替代STDIN) |
exec >file | 将标准输出写入file(替代STDOUT) |
exec 3 < file | 将file读入到文件描述符3中(此时,创建了文件描述符3) |
sort <&3 |
将文件描述符3作为临时输入,用于sort排序|
|exec 4>file|将写入文件描述符4中的内容写入file中(此时,创建了文件描述符4)|
|ls >&4|ls将不会有显示,直接写入文件描述符4中了,即上面的file中|
|exec 5<&4|创建文件描述符4的拷贝文件描述符5|
|exec 3<&-|关闭文件描述符3|