linux的一些复杂命令

Posted on 2017-05-17 15:56  白小山  阅读(1230)  评论(0编辑  收藏  举报

用与改变root目录可以用pivot_root和chroot命令,但是这两者之间是有区别的

pivot_root :直接将整个文件系统的root目录改为指定目录

chroot :对于运行的指令以目标目录作为root目录,只影响单个进程.

 

exec :用于结束当前执行的进程并继承其上下文,开始一个新的进程.PID不会改变. 和souse命令的不同之处在于exec会结束当前进程而souse不会.

如果不想结束当前进程可以用fork()建立新的进程再调用exec命令.这个过程和system是一样的.

 

mount --bind :绑定挂载. 用于将文件系统绑定到两个不同的位置,目标挂载点原本文件系统将被隐藏掉.umount之后又能看到被隐藏的文件系统.

另外根据原始挂载点的传播类型标记(shared, private, slave, unbindable)不同也会导致镜像和本体之间的映射关系不同.用findmnt -o PROPAGATION 查看挂载点的传播类型标记 :

shared 表示允许创建镜像,一个镜像内的挂载和卸载操作会被自动传播到所有其他镜像中.

slave 表示自动继承主挂载点中挂载和卸载操作,但是自身的挂载和卸载操作不会反向传播到主挂载点中.

private 表示既不继承主挂载点中挂载和卸载操作,自身的挂载和卸载操作也不会反向传播到主挂载点中.

unbindable 表示禁止对该挂载点进行任何绑定(--bind|--rbind)操作.

 

mount --move :用于将一个目录移动到另一个地方而文件物理地址不变.相当于先umount再mount.但是对于传播类型标记为shared的挂载点无法进行操作.

 

mount --noatime :用于挂载时禁止更新文件与目录的inode访问时间,以获得更快的访问速度(实际影响并不大).

 

mount -t ramfs ; mount -t tmpfs  :mount -t type type表示文件系统类型,这个命令指定要挂载的文件系统类型,可以使用逗号分割多种类型.

ramfs是Linux下一种基于RAM做存储的文件系统.在使用过程中你就可以把ramfs理解为在普通的HDD上建立了一个文件系统,而现在HDD被替换成了RAM,因为是RAM做存储所以会有很高的存储效率.但是ramfs有一个很大的缺陷就是它会吃光系统所有的内存,即使你mount的时候指定了大小,同时它也只能被root用户访问.

tmpfs也是Linux下的一个文件系统,它将所有的文件都保存在虚拟内存中,umount tmpfs后所有的数据也会丢失,tmpfs就是ramfs的衍生品.tmpfs使用了虚拟内存的机制,它会进行swap,但是它有一个相比ramfs的好处:mount时指定的size参数是起作用的,这样就能保证系统的安全,而不是像ramfs那样,一不留心因为写入数据太大吃光系统所有内存导致系统被卡住.总结:

ramfs会因为数据的写入自动增长空间,所以可能导致最后系统所有的内存耗完

tmpfs可以再mount时限定大小,不会自动增长

ramfs不会用swap

tmpfs会使用swap

两者都是用来提升效率,但是tmpfs比ramfs的性能更好

 

/dev/urandom ; /dev/random :两者都是用来提供随机数的,通过采集环境噪音来产生随机数据并存入熵池. 只是random提取随机数时会将所提取的数据清除,urandom不清除数据而重复使用,属于伪随机. 也是由于这个原因/dev/random产生数据的速度比较慢,有时候还会出现较大的停顿,而/dev/urandom的数据产生速度很快,基本没有任何停顿。

/dev/null  :  /dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF.被称为"比特桶"或"黑洞".
/dev/zero :/dev/zero是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL,ASCII NUL, 0x00).  其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件(命令 dd). 与/dev/null类似,/dev/zero也可以作为一个数据源或数据池,所有写往/dev/zero将返回成功,没有其他影响,/dev/null也是一样,但是作为数据池更常用。所有对/dev/zero的读操作,将返回请求数目的"NUL"字节.