0%

Linux Kernel command

Linux 下一些command的总结.

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
2
sudo 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|