## 權限
用?`chmod`?和?`chown`?更改訪問權限和所有權。對于所有用戶的默認掩碼(umask)可以在 /etc/profile (Linux) 或 /etc/login.conf (FreeBSD) 中修改。其默認掩碼(umask)通常為 022。掩碼可以和777做減法,從而得到755的權限。
1?--x?執行???????????????????????????
#?Mode?764?=?執行/讀/寫?|?讀/寫?|?讀2?-w-?寫?????????????????????????????
#?|---所有者|---用戶組|---其他用戶|4?r--?讀
??ugo=a??????????????????????????????u=所有者,?g=用戶組,?o=其他用戶,?a=所有用戶
#?chmod?[OPTION]?MODE[,MODE]?FILE????
#?MODE?可以是?[ugoa]*([-+=]([rwxXst]))
#?chmod?640?/var/log/maillog?????????
#?更改?maillog?訪問權限為?-rw-r-----
#?chmod?u=rw,g=r,o=?/var/log/maillog?
#?同上
#?chmod?-R?o-r?/home/*???????????????
#?遞歸去除所有其他用戶的可讀權限
#?chmod?u+s?/path/to/prog????????????
#?在可執行位設置?SUID?(知道你在干什么!)
#?find?/?-perm?-u+s?-print???????????
#?查找所有設置過?SUID?位的程序
#?chown?user:group?/path/to/file?????
#?改變文件的所有者和文件關聯的組
#?chgrp?group?/path/to/file??????????
#?改變文件關聯的組#?chmod?640?`find?./?-type?f?-print`?
#?Change?permissions?to?640?for?all?files#?chmod?751?`find?./?-type?d?-print`?
#?Change?permissions?to?751?for?all?directories
## 磁盤信息
#?diskinfo?-v?/dev/ad2???????????????
#?顯示磁盤信息(扇區/大小)?(FreeBSD)
#?hdparm?-I?/dev/sda?????????????????
#?顯示?IDE/ATA?磁盤信息?(Linux)
#?fdisk?/dev/ad2?????????????????????
#?顯示和修改磁盤分區表
#?smartctl?-a?/dev/ad2???????????????
#?顯示磁盤檢測信息
## Boot
## FreeBSD
如果新內核不能引導,要引導一個舊內核,停止啟動倒計時,做如下動作:
#?unload
#?load?kernel.old
#?boot
## 系統掛載點/磁盤使用情況
#?mount?|?column?-t??????????????????
#?顯示系統已掛載分區情況
#?df?????????????????????????????????
#?顯示磁盤剩余空間和掛載的設備
#?cat?/proc/partitions???????????????
#?顯示所有設備的所有分區(Linux)
## 磁盤使用情況
#?du?-sh?*???????????????????????????
#?列出當前目錄下所有文件夾大小
#?du?-csh????????????????????????????
#?當前目錄下所有目錄大小總數
#?du?-ks?*?|?sort?-n?-r??????????????
#?由大到小排序顯示目錄大小
#?ls?-lSr????????????????????????????
#?由小到大顯示文件列表
## 誰打開了那些文件
對于找出哪些文件阻止卸載分區并給出有代表性的錯誤是有幫助的:
#?umount?/home/
umount:?unmount?of?/home?????????????
#?不能卸載,因為有一個文件鎖定了?home
???failed:?Device?busy
## FreeBSD 和大多數 Unix
#?fstat?-f?/home?????????????????????
#?對于一個掛載點#?fstat?-p?PID???????????????????????
#?對于一個應用程序進程?ID#?fstat?-u?user??????????????????????
#?對于一個用戶
查找已打開日志文件(或其他已打開文件), 比如 Xorg:
#?ps?ax?|?grep?Xorg?|?awk?'{print?$1}'
1252
#?fstat?-p?1252
USER?????CMD??????????PID???FD?MOUNT??????INUM?MODE?????????SZ|DV?R/W
root?????Xorg????????1252?root?/?????????????2?drwxr-xr-x?????512??r
root?????Xorg????????1252?text?/usr?????216016?-rws--x--x??1679848?r
root?????Xorg????????1252????0?/var?????212042?-rw-r--r--???56987??w
在 /var 中的只有一個 inum 為 212042 的文件:
#?find?-x?/var?-inum?212042
/var/log/Xorg.0.log
### Linux
使用?`fuser`?或?`lsof`?在一個掛載點中查找已打開的文件:
#?fuser?-m?/home?????????????????????
#?列出訪問?/home?的進程
#?lsof?/home
COMMAND???PID????USER???FD???TYPE?DEVICE????SIZE?????NODE?NAME
tcsh????29029?eedcoba??cwd????DIR???0,18???12288??1048587?/home/eedcoba?(guam:/home)
lsof????29140?eedcoba??cwd????DIR???0,18???12288??1048587?/home/eedcoba?(guam:/home)
關于一個應用程序:
ps?ax?|?grep?Xorg?|?awk?'{print?$1}'
3324
#?lsof?-p?3324
COMMAND???PID????USER???FD???TYPE?DEVICE????SIZE????NODE?NAME
Xorg????3324?root????0w???REG????????8,6???56296??????12492?/var/log/Xorg.0.log
關于單個文件:
#?lsof?/var/log/Xorg.0.log
COMMAND??PID?USER???FD???TYPE?DEVICE??SIZE??NODE?NAME
Xorg????3324?root????0w???REG????8,6?56296?12492?/var/log/Xorg.0.log
## 掛載/重掛載一個文件系統
舉個 cdrom 的例子。如果已經列于 /etc/fstab 中:
#?mount?/cdrom
或在 /dev/ 中查找設備,亦或使用?`dmesg`?命令
## FreeBSD
#?mount?-v?-t?cd9660?/dev/cd0c?/mnt??
#?cdrom#?mount_cd9660?/dev/wcd0c?/cdrom?????
#?另外一個方法#?mount?-v?-t?msdos?/dev/fd0c?/mnt???
#?軟驅
/etc/fstab 中的一條:
#?Device????????????????Mountpoint??????FStype??Options?????????Dump????Pass#
/dev/acd0???????????????/cdrom??????????cd9660??ro,noauto???????0???????0
要允許用戶做這些,可以這么做:
#?sysctl?vfs.usermount=1??#?或者在?/etc/sysctl.conf?中插入一條?"vfs.usermount=1"
## Linux
#?mount?-t?auto?/dev/cdrom?/mnt/cdrom???
#?典型的?cdrom?掛載命令
#?mount?/dev/hdc?-t?iso9660?-r?/cdrom??
#?IDE
#?mount?/dev/sdc0?-t?iso9660?-r?/cdrom??#?SCSI
/etc/fstab 中的條目:
/dev/cdrom???/media/cdrom??subfs?noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec?0?0
### 用 Linux 掛載一個 FreeBSD 分區
用 fdisk 查找分區號,這通常是 root 分區,但也可能是其他 BSD slice。如果 FreeBSD 有許多 slice,他們不列于同一個 fdisk 分區表中,但可見于 /dev/sda* 或 /dev/hda* 中。
#?fdisk?/dev/sda?????????????????????
#?查找?FreeBSD?分區/dev/sda3???*????????5357????????7905????20474842+??a5??FreeBSD
#?mount?-t?ufs?-o?ufstype=ufs2,ro?/dev/sda3?/mnt
/dev/sda10?=?/tmp;?/dev/sda11?/usr???
#?其他?slice
## 重掛載
不用卸載一個設備來重掛載。 對?`fsck`?來說是必須的。舉個例子:
#?mount?-o?remount,ro?/??????????????
#?Linux#?mount?-o?ro?/??????????????????????
#?FreeBSD
從 cdrom 拷貝原始數據進一個 iso 映像文件:
#?dd?if=/dev/cd0c?of=file.iso
## 給即時燒錄(on-the-fly)添加 swap
假設你需要很多的 swap (即刻),如一個 2GB 文件 /swap2gb (只限 Linux)。
#?dd?if=/dev/zero?of=/swap2gb?bs=1024k?count=2000
#?mkswap?/swap2gb????????????????????
#?創建交換區
#?swapon?/swap2gb????????????????????
#?激活這個?swap。現在可以使用了
#?swapoff?/swap2gb???????????????????
#?當使用完畢,釋放這個?swap
#?rm?/swap2gb
## 掛載一個 SMB?共享
假設我們要訪問計算機 smbserver 上的名叫 myshare 的 SMB 共享,在 window PC 上鍵入的地址是 \\smbserver\myshare\。我掛載到 /mnt/smbshare 上。注意 cifs 必須是 IP 或 DNS 名,不是 Windows 名字。
## Linux
~~~
#?smbclient?-U?user?-I?192.168.16.229?-L?//smbshare/????
#?列出共享
#?mount?-t?smbfs?-o?username=winuser?//smbserver/myshare?/mnt/smbshare
#?mount?-t?cifs?-o?username=winuser,password=winpwd?//192.168.16.229/myshare?/mnt/share
~~~
此外,mount.cifs 軟件包可以存儲認證到一個文件中。例如,`/home/user/.smb`:
username=winuser
password=winpwd
現在可以像下面那樣掛載:
#?mount?-t?cifs?-o?credentials=/home/user/.smb?//192.168.16.229/myshare?/mnt/smbshare
## FreeBSD
使用 -I 來獲取 IP (或 DNS 名);smbserver 是 Windows 名。
#?smbutil?view?-I?192.168.16.229?//winuser@smbserver????
#?列出共享
#?mount_smbfs?-I?192.168.16.229?//winuser@smbserver/myshare?/mnt/smbshare
## 掛載鏡像文件
### Linux loop-back
~~~
#?mount?-t?iso9660?-o?loop?file.iso?/mnt????????????????
#?掛載?CD?鏡像文件
#?mount?-t?ext3?-o?loop?file.img?/mnt???????????????????
#?用?ext3?文件系統掛載鏡像文件
~~~
## FreeBSD
用于存儲設備 (如果需要做 # kldload md.ko 動作):
#?mdconfig?-a?-t?vnode?-f?file.iso?-u?0
#?mount?-t?cd9660?/dev/md0?/mnt
#?umount?/mnt;?mdconfig?-d?-u?0?????????????????????????
#?清除?md?設備
用于虛擬節點:
#?vnconfig?/dev/vn0c?file.iso;?mount?-t?cd9660?/dev/vn0c?/mnt
#?umount?/mnt;?vnconfig?-u?/dev/vn0c????????????????????
#?清除?vn?設備
## Solaris and FreeBSD
用于 loop-back 文件接口或 lofi:
#?lofiadm?-a?file.iso
#?mount?-F?hsfs?-o?ro?/dev/lofi/1?/mnt
#?umount?/mnt;?lofiadm?-d?/dev/lofi/1???????????????????
#?清除?lofi?設備
## 創建并刻錄 ISO 鏡像文件
這將會拷貝 CD 或者 DVD 的扇區。當不用?`conv=notrunc`,鏡像文件會等于 CD 內容大小而非 CD 容量大小。看下面和?[dd 例子](http://cb.vu/unixtoolbox_zh_CN.xhtml#dd)。
#?dd?if=/dev/hdc?of=/tmp/mycd.iso?bs=2048?conv=notrunc
使用 mkisofs 把目錄中所有文件創建成 CD/DVD 鏡像文件。克服文件名限制:-r 開啟 Rock Ridge 擴展用于 Unix 系統,-J 開啟 Joliet 擴展用于微軟系統。-L 允許 ISO9660 文件名第一個字符為句點。
#?mkisofs?-J?-L?-r?-V?TITLE?-o?imagefile.iso?/path/to/dir
對于 FreeBSD,mkisofs 可以到 port 的 sysutils/cdrtools 中找到。
## 刻錄 ISO 鏡像文件
### FreeBSD
FreeBSD 默認情況下沒有在 ATAPI 驅動上啟用 DMA。DMA 可用 sysctl 命令啟用,其參數如下,或者在 /boot/loader.conf 中添加如下條目:
hw.ata.ata_dma="1"
hw.ata.atapi_dma="1"
`burncd`?用于 ATAPI 驅動(`burncd`?為基本系統的一部分),`cdrecord`?(在 sysutils/cdrtools 中)用于 SCSI 驅動。
#?burncd?-f?/dev/acd0?data?imagefile.iso?fixate??????
#?ATAPI?驅動
#?cdrecord?-scanbus??????????????????
#?查找?burner?設備描述符(如?1,0,0)
#?cdrecord?dev=1,0,0?imagefile.iso
### Linux
對于 Linux,同樣使用?`cdrecord`?如上文所述。此外,它還可以使用本地 ATAPI 接口查找設備描述符:
#?cdrecord?dev=ATAPI?-scanbus
然后同上面一樣燒錄 CD/DVD。
### dvd+rw-tools
[dvd+rw-tools](http://fy.chalmers.se/~appro/linux/DVD+RW/)?工具包(FreeBSD: ports/sysutils/dvd+rw-tools)可以做上面的一切,其還包括 growisofs 工具來刻錄 CD 或 DVD。本實例所引用的 DVD 設備?`/dev/dvd`?可能是指向`/dev/scd0`?(Linux)的符號連接,或者?`/dev/cd0`?(FreeBSD),或者?`/dev/rcd0c`?(NetBSD/OpenBSD),或者?`/dev/rdsk/c0t1d0s2`?(Solaris)。對于本實例?[FreeBSD 手冊 18.7 章](http://www.freebsd.org/handbook/creating-dvds.html)?上有一份很好的文檔。
#?-dvd-compat?選項將完結光盤,光盤便不可再附加數據
#?growisofs?-dvd-compat?-Z?/dev/dvd=imagefile.iso?????
#?刻錄已存在的?iso?鏡像文件
#?growisofs?-dvd-compat?-Z?/dev/dvd?-J?-R?/p/to/data??
#?直接刻錄
## 轉換 Nero .nrg 文件成 .iso
Nero 簡單的添加了 300KB 的頭到一個常規的 iso 鏡像文件中。我們可用 dd 工具來去除它。
#?dd?bs=1k?if=imagefile.nrg?of=imagefile.iso?skip=300
## 轉換 bin/cue 鏡像成 .iso
[`bchunk`?程序](http://freshmeat.net/projects/bchunk/)可以做到這一點。在 FreeBSD 中,它在 port 的 sysutils/bchunk 中。
#?bchunk?imagefile.bin?imagefile.cue?imagefile.iso
## 創建基于文件的鏡像文件
舉個例子,一個使用文件 /usr/vdisk.img 的 1GB 分區。這里我們使用 vnode 0,但也可為 1。
## FreeBSD
#?dd?if=/dev/random?of=/usr/vdisk.img?bs=1K?count=1M
#?mdconfig?-a?-t?vnode?-f?/usr/vdisk.img?-u?0?????????
#?創建設備?/dev/md1#?bsdlabel?-w?/dev/md0
#?newfs?/dev/md0c
#?mount?/dev/md0c?/mnt
#?umount?/mnt;?mdconfig?-d?-u?0;?rm?/usr/vdisk.img????
#?清除?md?設備
這個基于文件的鏡像文件可以在 /etc/rc.conf 和 /etc/fstab 中配置成啟動期間自動掛載。可用?`# /etc/rc.d/mdconfig start`?(先用?`# mdconfig -d -u 0`?命令刪除 md0 設備) 測試你的設置。
需要注意的是,那個自動設置僅工作于這個基于文件的鏡像文件不在 root 分區中。原因是 /etc/rc.d/mdconfig 腳本早于啟動就執行了,并且 root 分區仍然是只讀的。腳本 /etc/rc.d/mdconfig2 之后,鏡像文件將位于 root 分區外掛載。
/boot/loader.conf:
md_load="YES"
/etc/rc.conf:
#?mdconfig_md0="-t?vnode?-f?/usr/vdisk.img"??????????
#?/usr?不在?root?分區中
/etc/fstab: (行后的兩個 0 0 很重要,它告訴 fsck 忽略這個設備,現在還不存在。)
/dev/md0????????????????/usr/vdisk??????ufs?????rw??????????????0???????0
也可能在增加鏡像文件的大小之后,如增大到 300MB。
#?umount?/mnt;?mdconfig?-d?-u?0
#?dd?if=/dev/zero?bs=1m?count=300?>>?/usr/vdisk.img
#?mdconfig?-a?-t?vnode?-f?/usr/vdisk.img?-u?0
#?growfs?/dev/md0
#?mount?/dev/md0c?/mnt????????????????????????????????
#?文件分區現在為?300MB
### Linux
#?dd?if=/dev/zero?of=/usr/vdisk.img?bs=1024k?count=1024
#?mkfs.ext3?/usr/vdisk.img
#?mount?-o?loop?/usr/vdisk.img?/mnt
#?umount?/mnt;?rm?/usr/vdisk.img??????????????????????
#?清楚
## Linux with losetup
`/dev/zero`?比?`urandom`?更快,但對于加密來說卻不夠安全。
#?dd?if=/dev/urandom?of=/usr/vdisk.img?bs=1024k?count=1024
#?losetup?/dev/loop0?/usr/vdisk.img???????????????????
#?創建并聯結?/dev/loop0#?mkfs.ext3?/dev/loop0
#?mount?/dev/loop0?/mnt
#?losetup?-a??????????????????????????????????????????
#?查看已經掛載的?loop?設備#?umount?/mnt
#?losetup?-d?/dev/loop0???????????????????????????????
#?Detach#?rm?/usr/vdisk.img
## 創建基于內存的文件系統
基于內存的文件系統對于重量級 IO 應用程序來說非常快。怎樣創建一個掛載到 /memdisk 的 64M 分區:
### FreeBSD
#?mount_mfs?-o?rw?-s?64M?md?/memdisk
#?umount?/memdisk;?mdconfig?-d?-u?0???????????????????
#?清除該?md?設備md?????/memdisk?????mfs?????rw,-s64M????0???0?????????
#?/etc/fstab?條目
### Linux
#?mount?-t?tmpfs?-osize=64m?tmpfs?/memdisk
## 磁盤性能
在 ad4s3c (/home) 分區上讀寫一個 1GB 的文件。
#?time?dd?if=/dev/ad4s3c?of=/dev/null?bs=1024k?count=1000
#?time?dd?if=/dev/zero?bs=1024k?count=1000?of=/home/1Gb.file
#?hdparm?-tT?/dev/hda??????
#?僅限?Linux