硬件 | ç¶æä¿¡æ¯ | ç¨æ· | éå¶ | è¿è¡çº§å« | root å¯ç | ç¼è¯å æ ¸
æ£å¨è¿è¡çå æ ¸åç³»ç»ä¿¡æ¯# uname -a # è·åå æ ¸çæ¬ï¼åBSDçæ¬ï¼ # lsb_release -a # æ¾ç¤ºä»»ä½ LSB åè¡ççæ¬ä¿¡æ¯ # cat /etc/SuSE-release # è·å SuSE çæ¬ # cat /etc/debian_version # è·å Debian çæ¬ä½¿ç¨ /etc/
DISTR
-release å
¶ä¸DISTR(åè¡ä»£å·)=
lsb (Ubuntu), redhat, gentoo, mandrake, sun (Solaris), ççã
# uptime # æ¾ç¤ºç³»ç»å¼æºè¿è¡å°ç°å¨ç»è¿çæ¶é´ # hostname # æ¾ç¤ºç³»ç»ä¸»æºå # hostname -i # æ¾ç¤ºä¸»æºç IP å°å # man hier # æè¿°æä»¶ç³»ç»ç®å½ç»æ # last reboot # æ¾ç¤ºç³»ç»æåéå¯çåå²è®°å½
# dmesg # æ£æµå°ç硬件åå¯å¨çæ¶æ¯ # lsdev # å ³äºå·²å®è£ 硬件çä¿¡æ¯è¯æ³¨ï¼è®¸å¤ Linux åè¡çéè¦èªè¡å®è£ ï¼å¦ï¼apt-get install procinfo # dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # 读å BIOS ä¿¡æ¯
# cat /proc/cpuinfo # CPU è®¯æ¯ # cat /proc/meminfo # å åä¿¡æ¯ # grep MemTotal /proc/meminfo # æ¾ç¤ºç©çå åå¤§å° # watch -n1 'cat /proc/interrupts' # çæ§å æ ¸å¤ççææä¸æ # free -m # æ¾ç¤ºå·²ç¨å空é²çå åä¿¡æ¯ (-m 为 MB)è¯æ³¨ï¼å æ¬ SWAP ååº # cat /proc/devices # æ¾ç¤ºå½åæ ¸å¿é ç½®çè®¾å¤ # lspci -tv # æ¾ç¤º PCI è®¾å¤ # lsusb -tv # æ¾ç¤º USB è®¾å¤ # lshal # æ¾ç¤ºææè®¾å¤å±æ§å表 # dmidecode # æ¾ç¤ºä» BIOS ä¸è·åç硬件信æ¯
# sysctl hw.model # CPU è®¯æ¯ # sysctl hw # å¾å°å¾å¤ç¡¬ä»¶ä¿¡æ¯ # sysctl vm # èæå åä½¿ç¨æ åµ # dmesg | grep "real mem" # ç©çå å # sysctl -a | grep mem # å æ ¸å åç设置åä¿¡æ¯ # sysctl dev # æ¾ç¤ºå½åæ ¸å¿é ç½®çè®¾å¤ # pciconf -l -cv # æ¾ç¤º PCI è®¾å¤ # usbdevs -v # æ¾ç¤º USB è®¾å¤ # atacontrol list # æ¾ç¤º ATA 设å¤
# top # æ¾ç¤ºåæ´æ°ä½¿ç¨ cpu æå¤çè¿ç¨ # mpstat 1 # æ¾ç¤ºè¿ç¨ç¸å ³çä¿¡æ¯ # vmstat 2 # æ¾ç¤ºèæå åçç¶æä¿¡æ¯ # iostat 2 # æ¾ç¤º I/O ç¶æä¿¡æ¯(2 ç§ é´é) # systat -vmstat 1 # æ¾ç¤º BSD ç³»ç»ç¶æä¿¡æ¯(1 ç§ é´é) # systat -tcp 1 # æ¾ç¤º BSD TCP è¿æ¥ä¿¡æ¯(ä¹å¯ä»¥è¯è¯ -ip) # systat -netstat 1 # æ¾ç¤º BSD å½åç½ç»è¿æ¥ä¿¡æ¯ # systat -ifstat 1 # æ¾ç¤º BSD å½åç½å¡å¸¦å®½ä¿¡æ¯ # systat -iostat 1 # æ¾ç¤º BSD CPU åç£çä½¿ç¨æ åµ # tail -n 500 /var/log/messages # æ¾ç¤ºææ°500æ¡å æ ¸/ç³»ç»æ¥å¿çä¿¡æ¯ # tail /var/log/warn # æ¾ç¤ºç³»ç»è¦åä¿¡æ¯(çsyslog.conf)
# id # æ¾ç¤ºå½åç¨æ·åç¨æ·ç»ç ID # last # ååºç®åä¸è¿å»ç»å ¥ç³»ç»çç¨æ·ç¸å ³ä¿¡æ¯è¯æ³¨ï¼åç¬æ§è¡ last æä»¤ï¼å®ä¼è¯»åä½äº /var/log ç®å½ä¸ï¼å称为 wtmp çæä»¶ï¼å¹¶æè¯¥ç»æä»¶çå 容记å½çç»å ¥ç³»ç»çç¨æ·ååå ¨é¨æ¾ç¤ºåºæ¥ã # who # æ¾ç¤ºç®åç»å ¥ç³»ç»çç¨æ·ä¿¡æ¯ # groupadd admin # å»ºç«æ°ç»"admin"åæ·»å æ°ç¨æ· colin å¹¶å å ¥ admin ç¨æ·ç»(Linux/Solaris) # useradd -c "Colin Barschel" -g admin -m colin # userdel colin # å é¤ç¨æ· colin(Linux/Solaris) # adduser joe # FreeBSD æ·»å ç¨æ· joe(交äºå¼) # rmuser joe # FreeBSD å é¤ç¨æ· joe(交äºå¼) # pw groupadd admin # å¨ FreeBSD ä¸ä½¿ç¨ pw # pw groupmod admin -m newmember # æ·»å æ°ç¨æ·å°ä¸ä¸ªç» # pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh # pw userdel colin; pw groupdel adminå å¯è¿çå¯ç åå¨å¨ /etc/shadow (Linux and Solaris) æ /etc/master.passwd (FreeBSD) ä¸. 妿æå¨ä¿®æ¹äº master.passwdï¼éè¦è¿è¡
# pwd_mkdb -p master.passwd
æ¥éå»ºæ°æ®åºã# echo "Sorry no login now" > /etc/nologin # (Linux) # echo "Sorry no login now" > /var/run/nologin # (FreeBSD)
ulimit
æ¯é
çãä½¿ç¨ ulimit -a
坿¥çå
¶ç¶æä¿¡æ¯ã 举个ä¾åï¼æ¹å坿弿大æä»¶æ°ä» 1024 å° 10240ï¼å¯ä»¥è¿ä¹åï¼
# ulimit -n 10240 # è¿åªå¨shell䏿ç¨
ulimit
å½ä»¤å¯ä»¥ä½¿ç¨å¨èæ¬ä¸æ¥æ´æ¹å¯¹æ¤èæ¬çéå¶ã
/etc/security/limits.conf
ä¸é
ç½®ã举个ä¾åï¼
# cat /etc/security/limits.conf * hard nproc 250 # éå¶ææç¨æ·è¿ç¨æ° asterisk hard nofile 409600 # éå¶åºç¨ç¨åºå¯æå¼æå¤§æä»¶æ°
/etc/sysctl.conf
ä¸è¿è¡é
ç½®ã
# sysctl -a # æ¾ç¤ºææç³»ç»éå¶ # sysctl fs.file-max # æ¾ç¤ºç³»ç»æå¤§æä»¶æå¼æ° # sysctl fs.file-max=102400 # æ´æ¹ç³»ç»æå¤§æä»¶æå¼æ° # cat /etc/sysctl.conf fs.file-max=102400 # å¨ sysctl.conf ä¸çæ°¸ä¹ é¡¹ # cat /proc/sys/fs/file-nr # å¨ä½¿ç¨çæä»¶å¥ææ°
limits
å½ä»¤ï¼å¨ sh æ bash ä¸ä½¿ç¨ ulimit
å½ä»¤ã
/etc/login.conf
ä¸é
ç½®ç»å½åçé»è®¤éå¶ãæªä½éå¶çå¼ä¸ºç³»ç»æå¤§éå¶å¼ã
/etc/sysctl.conf
æ /boot/loader.conf
ä¸ãå
¶è¯æ³ä¸ Linux ç¸åï¼åªæ¯é®å¼ä¸åã
# sysctl -a # æ¾ç¤ºææç³»ç»éå¶ # sysctl kern.maxfiles=XXXX # æå¤§æä»¶æè¿°ç¬¦æ° kern.ipc.nmbclusters=32768 # å¨ /etc/sysctl.conf ä¸çæ°¸ä¹ é¡¹ kern.maxfiles=65536 # Squidè¯æ³¨ï¼ä»£çæå¡å¨ é常ç¨è¿ä¸ªå¼ kern.maxfilesperproc=32768 kern.ipc.somaxconn=8192 # TCP åéãapache/sendmail æå¥½ç¨è¿ä¸ªå¼ # sysctl kern.openfiles # å¨ä½¿ç¨çæä»¶æè¿°ç¬¦æ° # sysctl kern.ipc.numopensockets # å·²ç»å¼å¯ç socket æ°ç®è¯¦æ 请ç FreeBSD æå 11ç« http://www.freebsd.org/handbook/configtuning-kernel-limits.htmlã
/etc/system
ä¸çä¸å设置ï¼ä¼æé«æ¯ä¸ªè¿ç¨å¯ä»¥æå¼æå¤§æä»¶æè¿°ç¬¦çæ°éï¼
set rlim_fd_max = 4096 # ä¸ä¸ªè¿ç¨å¯ä»¥æå¼æä»¶æè¿°ç¬¦ç"硬"éå¶ set rlim_fd_cur = 1024 # ä¸ä¸ªè¿ç¨å¯ä»¥æå¼æä»¶æè¿°ç¬¦ç"软"éå¶
init
è¿ç¨ï¼ç¶åè¿è¡ rc
è¯æ³¨ï¼/etc/rc.d/rc èæ¬ï¼ä¹åè¿è¡ææå±äºå
¶è¿è¡çº§å«çå½ä»¤èæ¬ãè¿äºèæ¬é½å¨åå¨ /etc/rc.d/rcN.d ä¸(N代表è¿è¡çº§å«)ï¼å¹¶ä¸é½å»ºç«çå° /etc/init.d åç®å½ä¸å½ä»¤èæ¬ç¨åºç符å·é¾æ¥ã# grep default: /etc/inittab id:3:initdefault:å¯ä»¥ä½¿ç¨
init
æ¥æ¹åå½åè¿è¡çº§å«ã举个ä¾åï¼
# init 5 # è¿å
¥è¿è¡çº§å« 5
è¿è¡çº§å«å表å¦ä¸ï¼
chkconfig
å·¥å
·æ§å¶ç¨åºå¨ä¸ä¸ªè¿è¡çº§å«å¯å¨å忢ã
# chkconfig --list # ååºææ init èæ¬ # chkconfig --list sshd # æ¥ç sshd å¨å个è¿è¡çº§å«ä¸çå¯å¨é ç½® # chkconfig sshd --level 35 on # 对 sshd å¨çº§å« 3 å 5 ä¸å建å¯å¨é¡¹ # chkconfig sshd off # 卿æçè¿è¡çº§å«ä¸ç¦ç¨ sshdDebian ååºäºDebian åè¡çå Ubuntu æ Knoppix 使ç¨å½ä»¤
update-rc.d
æ¥ç®¡çè¿è¡çº§å«èæ¬ãé»è®¤å¯å¨ä¸º 2,3,4 å 5ï¼åæ¢ä¸º 0,1 å 6ã
# update-rc.d sshd defaults # 设置 sshd 为é»è®¤å¯å¨çº§å« # update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 . # ç¨æ¾ç¤ºåæ° # update-rc.d -f sshd remove # 卿æçè¿è¡çº§å«ä¸ç¦ç¨ sshd # shutdown -h now (æè # poweroff) # å ³éåæ¢ç³»ç»
/etc/ttys
ä¸ãææçç³»ç»èæ¬é½ä½äº /etc/rc.d/
ä¸ï¼ç¬¬ä¸æ¹åºç¨ç¨åºä½äº /usr/local/etc/rc.d/
ä¸ãservice çå¯å¨é¡ºåºè¢«é
ç½®å¨ /etc/rc.conf
å/etc/rc.conf.local
ä¸ãé»è®¤è¡ä¸ºå¯å¨ /etc/defaults/rc.conf
ä¸è¿è¡é
ç½®ã è¿äºèæ¬è³å°ååº start|stop|status.
# /etc/rc.d/sshd status sshd is running as pid 552. # shutdown now # è¿å ¥åç¨æ·æ¨¡å¼ # exit # è¿åå°å¤ç¨æ·æ¨¡å¼ # shutdown -p now # å ³éåæ¢ç³»ç» # shutdown -r now # éæ°å¯å¨ç³»ç»åæ ·å¯ä»¥ä½¿ç¨è¿ç¨
init
è¿å
¥ä¸åç¶æçº§å«ã举个ä¾åï¼ # init 6
为éå¯ã
USR2
)TERM
)INT
)TSTP
)HUP
)init=/bin/shå æ ¸ä¼æè½½ root ååºï¼è¿ç¨
init
ä¼å¯å¨ bourne shell è䏿¯ rc
ï¼ç¶åæ¯è¿è¡çº§å«ã使ç¨å½ä»¤ passwd
设置å¯ç ç¶åéå¯ãå«å¿äºéè¦å¨åç¨æ·æ¨¡å¼ä¸åè¿äºå¨ä½ã# mount -o remount,rw / # passwd # æè å é¤ root å¯ç (/etc/shadow) # sync; mount -o remount,ro / # sync å¨éæ°æå¨ä¸ºåªè¯»ä¹å sync ä¸ä¸ # reboot
# mount -o rw /dev/ad4s3a /mnt
# chroot /mnt # æ¹åç¨åºæ§è¡æ¶æåèçæ ¹ç®å½ä½ç½®ä¸º /mnt
# passwd
# reboot
# lsmod # ååºææå·²è½½å ¥å æ ¸çæ¨¡å # modprobe isdn # è½½å ¥ isdn 模å
# kldstat # ååºææå·²è½½å ¥å æ ¸çæ¨¡å # kldload crypto # è½½å ¥ crypto 模å
# cd /usr/src/linux # make mrproper # æ¸ é¤ææä¸è¥¿ï¼å æ¬é ç½®æä»¶ # make oldconfig # ä»å½åå æ ¸é ç½®æä»¶çåºç¡ä¸å建ä¸ä¸ªæ°çé ç½®æä»¶ # make menuconfig # æè xconfig (Qt) æè gconfig (GTK) # make # å建ä¸ä¸ªå·²å缩çå æ ¸æ åæä»¶ # make modules # ç¼è¯æ¨¡å # make modules_install # å®è£ 模å # make install # å®è£ å æ ¸ # reboot
GENERIC
æä»¶ã
# cd /usr/src/sys/i386/conf/ # cp GENERIC MYKERNEL # cd /usr/src # make buildkernel KERNCONF=MYKERNEL # make installkernel KERNCONF=MYKERNELè¦é建å®å ¨çæä½ç³»ç»ï¼
# make buildworld # æå»ºå®å ¨çç³»ç»ï¼ä½ä¸æ¯å æ ¸ # make buildkernel # ä½¿ç¨ KERNCONF é ç½®æä»¶ç¼è¯å æ ¸ # make installkernel # reboot # mergemaster -p # 建ç«ä¸´æ¶æ ¹ç¯å¢å¹¶æ¯å¯¹ç³»ç»é ç½®æä»¶ # make installworld # mergemaster # å级ææé ç½®åå ¶ä»æä»¶ # rebootå¯¹äºæºçä¸äºå°æ¹å¨ï¼ææ¶åç®åçå½ä»¤å°±è¶³å¤äºï¼
# make kernel world # ç¼è¯å¹¶å®è£
å
æ ¸åç³»ç»
# mergemaster
# reboot
å表 | ä¼å 级 | åå°/åå° | Top | Kill
ps
è·åæææ£å¨è¿è¡çè¿ç¨å表ã
# ps -auxefw # æææ£å¨è¿è¡è¿ç¨ç详尽å表
ç¶èï¼æ´å
¸åçç¨æ³æ¯ä½¿ç¨ç®¡éæè
pgrep
:
# ps axww | grep cron 586 ?? Is 0:01.48 /usr/sbin/cron -s # ps aux | grep 'ss[h]' # Find all ssh pids without the grep pid # pgrep -l sshd # æ¥æ¾ææè¿ç¨å䏿sshdçè¿ç¨ID # echo $$ # The PID of your shell # fuser -va 22/tcp # ååºä½¿ç¨ç«¯å£22çè¿ç¨ # fuser -va /home # ååºè®¿é® /home ååºçè¿ç¨ # strace df # è·è¸ªç³»ç»è°ç¨åä¿¡å· # truss df # åä¸(FreeBSD/Solaris/ç±»Unix) # history | tail -50 # æ¾ç¤ºæå50个使ç¨è¿çå½ä»¤
renice
æ´æ¹æ£å¨è¿è¡è¿ç¨çä¼å
级ãè´å¼æ¯æ´é«çä¼å
çº§ï¼æå°ä¸º-20ï¼å
¶æ£å¼ä¸ "nice" å¼çæä¹ç¸åè¯æ³¨ï¼è¿ç¨çä¼å
级é常被称ä½å®ç nice å¼ãç¨æ·åªè½å¯¹èªå·±ææçè¿ç¨ä½¿ç¨reniceå½ä»¤ï¼rootç¨æ·å¯ä»¥å¨ä»»ä½è¿ç¨ä¸ä½¿ç¨reniceå½ä»¤ï¼åªærootç¨æ·æè½æé«è¿ç¨çä¼å
级ã
# renice -5 586 # æ´å¼ºçä¼å
级
586: old priority 0, new priority -5
ä½¿ç¨ nice
å½ä»¤å¯å¨ä¸ä¸ªå·²å®ä¹ä¼å
级çè¿ç¨ã æ£å¼ä¸ºä½ä¼å
级ï¼è´å¼ä¸ºé«ä¼å
级ãç¡®å®ä½ ç¥é /usr/bin/nice
æè
ä½¿ç¨ shell å
ç½®å½ä»¤è¯æ³¨ï¼è¦æ¥çææ shell å
ç½®å½ä»¤ï¼å¯è¿è¡ # info bash builtin
(# which nice
)ã
# nice -n -5 top # æ´é«ä¼å 级(/usr/bin/nice) # nice -n 5 top # æ´ä½ä¼å 级(/usr/bin/nice) # nice +5 top # tcsh å ç½® nice å½ä»¤(åä¸)nice å¯ä»¥å½±å CPU çè°åº¦ï¼å¦ä¸ä¸ªå®ç¨å½ä»¤
ionice
è¯æ³¨ï¼æ¤å½ä»¤ä»
å¯å·¥ä½å¨2.6.13å以ä¸å
æ ¸çæ¬ä¸ï¼å¹¶ä¸éç¨äºCFQ ç IO è°åº¦æ¹å¼ãéè¿ #cat /sys/block/[sh]d[a-z]*/queue/scheduler å½ä»¤å¯ä»¥å¾ç¥ä½ çç³»ç»éç¨äºä»ä¹æ ·çè°åº¦ç®æ³ å¯ä»¥è°åº¦ç£ç IOãThis is very useful for intensive IO application which can bring a machine to its knees while still in a lower priority. æ¤å½ä»¤ä»
å¯å¨ Linux (AFAIK) ä¸ä½¿ç¨ãä½ å¯ä»¥éæ©ä¸ä¸ªç±»å(idle - best effort - real time)ï¼å®ç man 页å¾çå¹¶æå¾å¥½çè§£éã
# ionice c3 -p123 # ç» pid 123 设置为 idle ç±»å # ionice -c2 -n0 firefox # ç¨ best effort ç±»åè¿è¡ firefox å¹¶ä¸è®¾ä¸ºé«ä¼å 级 # ionice -c3 -p$$ # å°å½åçè¿ç¨(shell)çç£ç IO è°åº¦è®¾ç½®ä¸º idle ç±»åä¾ä¸æå䏿¡å½ä»¤å¯¹äºç¼è¯(æè°è¯)ä¸ä¸ªå¤§å项ç®ä¼é常æç¨ãæ¯ä¸ä¸ªè¿è¡äºæ¤ shell çå½ä»¤é½ä¼æä¸ä¸ªè¾ä½çä¼å 级ï¼ä½å¹¶ä¸å¦¨ç¢è¿ä¸ªç³»ç»ã$$ æ¯ä½ shell ç pid (è¯è¯ echo $$)ã
[Ctrl]-[Z] (^Z)
, bg
å fg
æ¥ è°å
¥è°åºååå°è¯æ³¨ï¼å¨å½ä»¤åé¢å &
å¯ç´æ¥ä½¿å
¶å¨åå°è¿è¡ãã举个ä¾åï¼å¯å¨ 2 个è¿ç¨ï¼è°å
¥åå°ãä½¿ç¨ jobs
ååºåå°å表ï¼ç¶ååè°å
¥ä¸ä¸ªè¿ç¨å°åå°ã
# ping cb.vu > ping.log ^Z # ping ä½¿ç¨ [Ctrl]-[Z] æ¥æå(忢) # bg # è°å ¥åå°ç»§ç»è¿è¡ # jobs -l # åå°è¿ç¨å表 [1] - 36232 Running ping cb.vu > ping.log [2] + 36233 Suspended (tty output) top # fg %2 # 让è¿ç¨ 2 è¿åå°åå°è¿è¡ä½¿ç¨
nohup
å¼å¯ä¸ä¸ªæç»è¿è¡çè¿ç¨ç´å° shell 被å
³é(é¿å
ææ)ã
# nohup ping -i 60 > ping.log &
top
ç¨åºç¨æ¥å®æ¶æ¾ç¤ºç³»ç»ä¸å个è¿ç¨çè¿è¡ä¿¡æ¯ã
# topå½
top
å¨è¿è¡çæ¶åï¼æä¸ h
è¯æ³¨ï¼ä¹å¯ä»¥æ¯ ?
é®ä¼æ¾ç¤ºå¸®å©ç»é¢ã常ç¨é®å¦ä¸ï¼
kill
æ killall
ç»æ¢æåéä¸ä¸ªä¿¡å·ç»è¿ç¨ã
# ping -i 60 cb.vu > ping.log & [1] 4712 # kill -s TERM 4712 # å kill -15 4712 # killall -1 httpd # åé HUP ä¿¡å·ç»æ¢è¿ç¨ httpd # pkill -9 http # åé TERM ä¿¡å·ç»æ¢å å« http çè¿ç¨ # pkill -TERM -u www # åé TERM ä¿¡å·ç»æ¢ www ææè è¿ç¨ # fuser -k -TERM -m /home # ç»æ¢ææè®¿é® /home çè¿ç¨(å¸è½½è¯¥ååºå)ä¸é¢æ¯ä¸äºéè¦çä¿¡å·ï¼
HUP
(æèµ·)INT
(䏿)QUIT
(éåº)KILL
(KILL ä¿¡å·ä¸è½è¢«ææï¼ä¸è½è¢«å¿½ç¥ã)TERM
(è½¯ä»¶ç»æ¢ä¿¡å·)ç£çä¿¡æ¯ | Boot | ç£çä½¿ç¨æ åµ | å·²æå¼çæä»¶ | æè½½/éæ | æè½½ SMB | æè½½æ åæä»¶ | Burn ISO | Create image | Memory disk | Disk performance
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 (ç¥éä½ å¨å¹²ä»ä¹!彿§è¡ä¸ä¸ªå ·æ setuid æéçæä»¶æ¶ï¼æä»¶çæ§è¡è¿ç¨å°å ·ææä»¶ææè çç¹æ(æ¯å¦root)ãæä»¥ï¼åºå°½éé¿å ä¸å éæ©å°å建åä½¿ç¨ root ç¨æ·æ¥æç seruid ç¨åºæ root ç»æ¥æç setgid ç¨åºã) # 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 # æ¾ç¤ºç£çæ£æµä¿¡æ¯
# 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
# 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
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
# mount /cdromæå¨ /dev/ 䏿¥æ¾è®¾å¤ï¼äº¦æä½¿ç¨
dmesg
å½ä»¤
# 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"
# 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
# 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
# dd if=/dev/zero of=/swap2gb bs=1024k count=2000 # mkswap /swap2gb # å建交æ¢åº # swapon /swap2gb # æ¿æ´»è¿ä¸ª swapãç°å¨å¯ä»¥ä½¿ç¨äº # swapoff /swap2gb # å½ä½¿ç¨å®æ¯ï¼éæ¾è¿ä¸ª swap # rm /swap2gb
# 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
# smbutil view -I 192.168.16.229 //winuser@smbserver # ååºå
񄧮
# mount_smbfs -I 192.168.16.229 //winuser@smbserver/myshare /mnt/smbshare
# mount -t iso9660 -o loop file.iso /mnt # æè½½ CD éåæä»¶ # mount -t ext3 -o loop file.img /mnt # ç¨ ext3 æä»¶ç³»ç»æè½½éåæä»¶
# 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 设å¤
# lofiadm -a file.iso
# mount -F hsfs -o ro /dev/lofi/1 /mnt
# umount /mnt; lofiadm -d /dev/lofi/1 # æ¸
é¤ lofi 设å¤
conv=notrunc
ï¼éåæä»¶ä¼çäº CD å
容大å°èé CD 容é大å°ãçä¸é¢å 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 䏿¾å°ã
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
cdrecord
å¦ä¸ææè¿°ãæ¤å¤ï¼å®è¿å¯ä»¥ä½¿ç¨æ¬å° ATAPI æ¥å£æ¥æ¾è®¾å¤æè¿°ç¬¦ï¼
# cdrecord dev=ATAPI -scanbusç¶ååä¸é¢ä¸æ ·ç§å½ CD/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 # ç´æ¥å»å½
# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300
bchunk
ç¨åºhttp://freshmeat.net/projects/bchunk/å¯ä»¥åå°è¿ä¸ç¹ãå¨ FreeBSD ä¸ï¼å®å¨ port ç sysutils/bchunk ä¸ã
# bchunk imagefile.bin imagefile.cue imagefile.iso
# 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 设å¤) æµè¯ä½ ç设置ã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
# 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 # æ¸
æ¥
/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
# mount_mfs -o rw -s 64M md /memdisk # umount /memdisk; mdconfig -d -u 0 # æ¸ é¤è¯¥ md è®¾å¤ md /memdisk mfs rw,-s64M 0 0 # /etc/fstab æ¡ç®
# mount -t tmpfs -osize=64m tmpfs /memdisk
# 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
è·¯ç± | é¢å¤ IP | æ´æ¹ MAC å°å | ç«¯å£ | é²ç«å¢ | IP 转å | NAT | DNS | DHCP | éä¿¡é | QoS | NIS
# ethtool eth0 # æ¾ç¤ºä»¥å¤ªç½ç¶æ(replaces mii-diag) # ethtool -s eth0 speed 100 duplex full # æç½å¡ eth0 é度æ¹ä¸º 100å /ç§ï¼éç¨å ¨åå·¥ # ethtool -s eth0 autoneg off # ç¦ç¨èªå¨å忍¡å¼ # ethtool -p eth1 # éªçç½ç»æ¥å£ LED ç¯ - å¦ææ¯æçè¯ï¼é常å®ç¨ # ip link show # å¨ Linux 䏿¾ç¤ºææç½ç»æ¥å£(å ifconfig 类似) # ip link set eth0 up # ä½¿è®¾å¤æ¿æ´»(æDownæ)ãå "ifconfig eth0 up" # ip addr show # å¨ Linux 䏿¾ç¤ºææ IP å°å(ä¸ ifconfig 类似) # ip neigh show # ä¸ arp -a 类似
# ifconfig fxp0 # æ¥ç "media" åæ®µ(FreeBSD) # arp -a # æ¥çè·¯ç±(æä¸»æº) ARP æ¡ç®(ææç³»ç») # ping cb.vu # 第ä¸ä¸ªè¦è¯çäºæ ... # traceroute cb.vu # åå°å°ç®çå°çè·¯ç±è·¯å¾ # ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100å /ç§ å ¨åå·¥(FreeBSD) # netstat -s # 对æ¯ä¸ªç½ç»åè®®åç³»ç»çº§åæå¦ä¸äºå½ä»¤ï¼è½ç¶ä¸æ»æ¯é»è®¤å®è£ ï¼ä½å¾å¥½æ¾ï¼
# arping 192.168.16.254 # å¨ç½ç»å±ä¸ Ping # tcptraceroute -f 5 cb.vu # ä½¿ç¨ tcp æ¿æ¢ icmp æ¥è·è¸ªï¼éè¿é²ç«å¢
# route -n # Linux æä½¿ç¨ "ip route" # netstat -rn # Linux, BSD å UNIX # route print # Windows
# route add 212.117.0.0/16 192.168.1.1 # route delete 212.117.0.0/16 # route add default 192.168.1.1æ°¸ä¹ çæ·»å è·¯ç±å¯å¨ /etc/rc.conf é ç½®æä»¶ä¸è®¾ç½®
static_routes="myroute" route_myroute="-net 212.117.0.0/16 192.168.1.1"
# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254 # ip route add 192.168.20.0/24 via 192.168.16.254 # çåäºä¸é¢å½ä»¤ # route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0 # route add default gw 192.168.51.254 # ip route add default via 192.168.51.254 dev eth0 # çåäºä¸é¢å½ä»¤ # route delete -net 192.168.20.0 netmask 255.255.255.0
# route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254
# route add default 192.168.51.254 1 # 1 = éè¿æ¤è·¯ç±è·³è¯æ³¨ï¼æ°æ®å
çå卿ä¾èµäº IP 头ä¸ççå卿(Time-to-Liveï¼ç®ç§° TTL)ãæ ¹æ® RFC çå®ä¹ï¼è¿ä¸ªåå¼ç±æ¯ä¸ªè·¯ç±å¨æ¥åå°ãæ¥æ¶å°å
çæ¯å°è·¯ç±å¨æ ¹æ®è·¯ç±è¯¥å
æè±è´¹çç§æ°ï¼å°å
ä¸çè¿ä¸ªåå¼åå»ç¸åºçæ¶é´ï¼æç´æ¥å 1ãå 为ç®åè·¯ç±å¨è½¬åå
çæ¶é´åºæ¬å°äº 1 ç§ï¼è¿ä¸ªåå¼åºæ¬ä¸å¨æºåç®çå°ä¹é´ç没ä¸è·³ä¾¿ä¼å 1ãæ°å 1
# route change default 192.168.50.254 1
æ°¸ä¹
æ¡ç®é
ç½®å¨ /etc/defaultrouter
ä¸ã
# Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253 # Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254使ç¨
add -p
æ¥æ¯è·¯ç±è®¾ç½®æ°¸ä¹
ææã
# ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # 第ä¸ä¸ª IP # ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # 第äºä¸ª IP # ip addr add 192.168.50.254/24 dev eth0 # çä»·å½ä»¤ # ip addr add 192.168.51.254/24 dev eth0 label eth0:1
# ifconfig fxp0 inet 192.168.50.254/24 # 第ä¸ä¸ª IP # ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # 第äºä¸ª IPæ°¸ä¹ æ¡ç®è®¾ç½®å¨ /etc/rc.conf ä¸
ifconfig_fxp0="inet 192.168.50.254 netmask 255.255.255.0" ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0"
ifconfig -a
å½ä»¤æ£æ¥è®¾ç½®
# ifconfig hme0 plumb # å¯ç¨ç½å¡ # ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up # 第ä¸ä¸ª IP # ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up # 第äºä¸ª IP
# ifconfig eth0 down # ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux # ifconfig fxp0 link 00:01:02:03:04:05 # FreeBSD # ifconfig hme0 ether 00:01:02:03:04:05 # Solaris # sudo ifconfig en0 ether 00:01:02:03:04:05 # Mac OS X Tiger # sudo ifconfig en0 lladdr 00:01:02:03:04:05 # Mac OS X Leopardå¯¹äº Windows å·²ç»æè®¸å¤å·¥å ·äºãå etherchangehttp://ntsecurity.nu/toolbox/etherchangeãæè çç "Mac Makeup", "smac"ã
# netstat -an | grep LISTEN # lsof -i # ååºææå ç¹ç½è¿æ¥(Linux) # socklist # ååºæå¼ç socket (Linux) # sockstat -4 # ä½¿ç¨ socket çåºç¨ç¨åºå表(FreeBSD) # netstat -anp --udp --tcp | grep LISTEN # Linux # netstat -tup # ååºæ´»è·çè¿æ¥(Linux) # netstat -tupl # ååºç³»ç»ä¸æ£å¨çå¬ç端å£(Linux) # netstat -ano # Windows
# iptables -L -n -v # ç¶æä¿¡æ¯ Open the iptables firewall # iptables -P INPUT ACCEPT # æå¼ææ # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT # iptables -Z # æææé¾çå ååèç计æ°å¨æ¸ 空 # iptables -F # æ¸ ç©ºææé¾ # iptables -X # å 餿æé¾è¯æ³¨ï¼é¾å¿ 须没æè¢«å¼ç¨
# ipfw show # ç¶æä¿¡æ¯ # ipfw list 65535 # 妿æ¾ç¤º "65535 deny ip from any to any"ï¼é£é²ç«å¢å·²è¢«ç¦ç¨ # sysctl net.inet.ip.fw.enable=0 # ç¦ç¨ # sysctl net.inet.ip.fw.enable=1 # å¯ç¨
# cat /proc/sys/net/ipv4/ip_forward # æ¥ç IP 转å 0=ç¦ç¨, 1=å¯ç¨
# echo 1 > /proc/sys/net/ipv4/ip_forward
æè
ç¼è¾ /etc/sysctl.confï¼
net.ipv4.ip_forward = 1
# sysctl net.inet.ip.forwarding # æ¥ç IP 转å 0=ç¦ç¨, 1=å¯ç¨ # sysctl net.inet.ip.forwarding=1 # sysctl net.inet.ip.fastforwarding=1 # ä¸ç¨è·¯ç±å¨æé²ç«å¢ Permanent with entry in /etc/rc.conf: gateway_enable="YES" # å¦æä¸»æºæ¯ç½å ³å设置为 YESã
# ndd -set /dev/ip ip_forwarding 1 # æ¥ç IP 转å 0=ç¦ç¨, 1=å¯ç¨
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # æ¿æ´» NAT # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \ --to 192.168.16.44:22 # 转åç«¯å£ 20022 å°å é¨ IP 端å£(ssh) # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \ --to 192.168.16.254:993:995 # 转å 993-995 èå´ç«¯å£ # ip route flush cache # iptables -L -t nat # æ¥ç NAT ç¶æä¿¡æ¯ä½¿ç¨ -D æ¿æ¢ -A æ¥å é¤ç«¯å£è½¬åã
# natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0 Or edit /etc/rc.conf with: firewall_enable="YES" # 设置 YES æ¥å¯ç¨é²ç«å¢åè½ firewall_type="open" # é²ç«å¢ç±»å(ç /etc/rc.firewall) natd_enable="YES" # å¯ç¨ natd (妿 firewall_enable == YES)ã natd_interface="tun0" # å ¬å ±çç½ç»æ¥å£æè¦ä½¿ç¨ç IP å°åã natd_flags="-s -m -u -dynamic -f /etc/natd.conf"端å£è½¬åï¼
# cat /etc/natd.conf
same_ports yes
use_sockets yes
unregistered_only
# redirect_port tcp insideIP:2300-2399 3300-3399 # 端å£èå´
redirect_port udp 192.168.51.103:7777 7777
nameserver 78.31.70.238 search sleepyowl.net intern.lab domain sleepyowl.netæ£æ¥ç³»ç»ååï¼
# hostname -d # çåäº dnsdomainname
# ipconfig /? # æ¾ç¤ºå¸®å© # ipconfig /all # æ¾ç¤ºææä¿¡æ¯å æ¬ DNS # ipconfig /flushdns # æ¸ é¤ DNS ç¼å
213.133.105.2 ns.second-ns.de
ãæ¥çåªä¸ªæå¡å¨å®¢æ·ç«¯æ¥æ¶åºç(ç®ååºç).
# dig sleepyowl.net sleepyowl.net. 600 IN A 78.31.70.238 ;; SERVER: 192.168.51.254#53(192.168.51.254)è·¯ç±å¨ 192.168.51.254 åºçäºï¼å¹¶è¿åäºä¸æ¡ A æ¡ç®(è®°å½)ã任使¡ç®é½å¯æ¥è¯¢ï¼DNS æå¡å¨å¯ç¨ @ æ¥éå®ï¼
# dig MX google.com # dig @127.0.0.1 NS sun.com # æµè¯æ¬å°æå¡å¨ # dig @204.97.212.10 NS MX heise.de # æ¥è¯¢å¤é¨ # dig AXFR @ns1.xname.org cb.vu # æ¥çåºä¼ é(zone transfer)ç¨å¼ host ä¹å¾å¼ºå¤§ã
# host -t MX cb.vu # è·åé®ä»¶ MX è®°å½ # host -t NS -T sun.com # éè¿ TCP è¿æ¥è·å NS è®°å½ # host -a sleepyowl.net # è·åææ
dig
, host
å nslookup
å½ä»¤æ¥è¯¢ï¼
# dig -x 78.31.70.238 # host 78.31.70.238 # nslookup 78.31.70.238
named
ååååæ¥è¯¢ãæ ¼å¼å¾ç®åï¼ä¸¾ä¸ªä¾åï¼
78.31.70.238 sleepyowl.net sleepyowlå¯¹äº hosts æä»¶å DNS æ¥è¯¢ä¹é´çä¼å 级ï¼å¯å¨
/etc/nsswitch.conf
å /etc/host.conf
ä¸é
ç½® order åç§°è§£æãè¿ä¸ªæä»¶åæ ·åå¨äº Windows ä¸ï¼é常å¨ï¼
C:\WINDOWS\SYSTEM32\DRIVERS\ETC
# dhcpcd -n eth0 # è§¦åæ´æ°(并䏿»æ¯å¯ä»¥å·¥ä½) # dhcpcd -k eth0 # éæ¾å¹¶å ³éç§çº¦(lease)çå ¨é¨ä¿¡æ¯åå¨å¨ï¼
/var/lib/dhcpcd/dhcpcd-eth0.info
dhclient
ãè¦é
ç½®ä¸ä¸ªç½ç»æ¥å£(å¦ï¼bge0)è¿è¡ï¼
# dhclient bge0ç§çº¦(lease)çå ¨é¨ä¿¡æ¯åå¨å¨ï¼
/var/db/dhclient.leases.bge0使ç¨
/etc/dhclient.conf设置 prepend é项æå¼ºå¶ä¸åçé项ï¼
# cat /etc/dhclient.conf interface "rl0" { prepend domain-name-servers 127.0.0.1; default domain-name "sleepyowl.net"; supersede domain-name "sleepyowl.net"; }
ipconfig
æ¥æ´æ°ï¼
# ipconfig /renew # æ´æ°ææéé å¨ # ipconfig /renew LAN # æ´æ°åå« "LAN" çéé å¨ # ipconfig /release WLAN # éæ¾åå« "WLAN" çéé 卿¯çï¼è¿æ¯ä¸ä¸ªä½¿ç¨ç®ååç§°éæ°å½åä½ çéé å¨ç好主æï¼
# tcpdump -nl -i bge0 not port ssh and src \(192.168.16.121 or 192.168.16.54\) # tcpdump -l > dump && tail -f dump # ç¼å²è¾åº # tcpdump -i rl0 -w traffic.rl0 # ææ°æ®æ¥æåå ¥äºè¿å¶æä»¶ # tcpdump -r traffic.rl0 # ä»æä»¶è¯»åæ°æ®æ¥æ(ä¹å¯ä»¥ä½¿ç¨ ethereal) # tcpdump port 80 # 两个ç»å ¸å½ä»¤ # tcpdump host google.com # tcpdump -i eth0 -X port \(110 or 143\) # æ¥çç«¯å£ 110(POP) æ 143(IMAP)çæ°æ®æ¥æ # tcpdump -n -i eth0 icmp # åªæè· ping # tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 ä¸ºå ¨é¨å , -A 为 ASCIIå¦ä¸äºéè¦é项ï¼
-A
  æ¾ç¤ºæ¯ä¸ªå
æ¸
æ°ææ¬(é¤äºæ¥å¤´)-X
  æ¾ç¤ºå
ç ASCII ææ¬-l
  使æ åè¾åºå为ç¼å²è¡å½¢å¼-D
  æ¾ç¤ºææå¯ç¨ç½ç»æ¥å£# nmap cb.vu # æ«æä¸»æºä¸ææä¿çç TCP ç«¯å£ # nmap -sP 192.168.16.0/24 # æ¾åºå¨ 0/24 ä¸ä¸»æºæä½¿ç¨ç IPè¯æ³¨ï¼éè¿ä½¿ç¨ "-sP" åæ°ï¼è¿è¡ ping æ«æãç¼ºçæ åµä¸ï¼Nmapç»æ¯ä¸ªæ«æå°ç主æºåéä¸ä¸ª ICMP echo åä¸ä¸ª TCP ACKï¼ä¸»æºå¯¹ä»»ä½ä¸ç§çååºé½ä¼è¢«Nmapå¾å°ã # nmap -sS -sV -O cb.vu # åç§å¯ SYN æ«ææ¥æ¢æµç³»ç»åç³»ç»æå¡ççæ¬ä¿¡æ¯ PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0) 25/tcp open smtp Sendmail smtpd 8.13.6/8.13.6 80/tcp open http Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4. [...] Running: FreeBSD 5.X Uptime 33.120 days (since Fri Aug 31 11:41:04 2007)å ¶ä»éæ åä½å¥½ç¨çå·¥å ·æ
hping
(www.hping.org)ï¼å¥¹æ¯ä¸ä¸ª IP åç»ç»è£
/åæå¨ï¼å fping
(fping.sourceforge.net)ãfping å¯ä»¥å¨ä¸ä¸ªå¾ªç¯éå(round-robin fashion)䏿«æå¤ç§ä¸»æºã
# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540 # tc -s qdisc ls dev eth0 # ç¶æ # tc qdisc del dev eth0 root # å é¤éå # tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540
dummynet
æ¥æ§å¶å¸¦å®½ï¼å
¶é
置工å
·ä¸º ipfwãPipe ç¨æ¥è®¾ç½®éå¶å¸¦å®½çåä½[K|M]{æ¯ç¹/ç§|åè/ç§}ï¼0 æå³ç没æéå¶ã使ç¨åæ ·ç pipe æ°åå¯éæ°é
ç½®å®ã举个ä¾åï¼éå¶ä¸ä¼ 带宽为 500Kã
# kldload dummynet # å¦æå¿ è¦å è½½è¿ä¸ªæ¨¡å # ipfw pipe 1 config bw 500Kbit/s # å建ä¸ä¸ªå¸¦å®½éå¶ç pipe # ipfw add pipe 1 ip from me to any # 转移ææä¸ä¼ è¿å ¥è¿ä¸ª pipe
tc
çä¼å
级é忥ä¼å VoIPãå¨ voip-info.org æ www.howtoforge.com ä¸å¯ä»¥çå°å®æ´çä¾åãå设 VoIP ä½¿ç¨ UDP ç«¯å£ 10000:11024 å¹¶ä¸ä½¿ç¨ eth0 设å¤(ä¹å¯ä¸º ppp0 æ so)ãä¸åå½ä»¤å®ä¹äºä¸ä¸ªéåï¼å¹¶ä¸ç¨ QoS 0x1e
(设置ææä½) å¼ºå¶ VOIP æµéå°éå 1ãé»è®¤æµéæµå
¥éå 3ï¼Qos Minimize-Delay æµå
¥éå 2ã
# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0 # tc qdisc add dev eth0 parent 1:1 handle 10: sfq # tc qdisc add dev eth0 parent 1:2 handle 20: sfq # tc qdisc add dev eth0 parent 1:3 handle 30: sfq # tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \ match ip dport 10000 0x3C00 flowid 1:1 # ä½¿ç¨æå¡ç«¯ç«¯å£èå´ match ip dst 123.23.0.1 flowid 1:1 # æ/åä½¿ç¨æå¡å¨ IPç¶æåç§»é¤ï¼
# tc -s qdisc ls dev eth0 # queue status # tc qdisc del dev eth0 root # delete all QoS
# 2^13 (8192) < 10000 < 2^14 (16384) # ç»å°¾æ¯ 2^14 = 16384 # echo "obase=16;(2^14)-1024" | bc # æ©ç æ¯ 0x3C00
# ipfw pipe 1 config bw 500Kbit/s # ipfw queue 1 config pipe 1 weight 100 # ipfw queue 2 config pipe 1 weight 10 # ipfw queue 3 config pipe 1 weight 1 # ipfw add 10 queue 1 proto udp dst-port 10000-11024 # ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # æ/åä½¿ç¨æå¡å¨ IP # ipfw add 20 queue 2 dsp-port ssh # ipfw add 30 queue 3 from me to any # å©ä½ææç¶æåç§»é¤ï¼
# ipfw list # è§åä¿¡æ¯ # ipfw pipe list # 管éä¿¡æ¯ # ipfw flush # å é¤é¤é»è®¤å¤ææè§å
# ypwhich # è·åæä¾ NIS æå¡çæå¡å¨å # domainname # å·²é ç½®ç NIS åå # ypcat group # åå° NIS æ å° group # cd /var/yp && make # é建 yp æ°æ®åºypbind æ£å¨è¿è¡åï¼
# ps auxww | grep ypbind /usr/sbin/ypbind -s -m -S servername1,servername2 # FreeBSD /usr/sbin/ypbind # Linux # yppoll passwd.byname Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007 The master server is servername.domain.net.
# cat /etc/yp.conf ypserver servername domain domain.net broadcast
å ¬é¥è®¤è¯ | æçº¹ | SCP | é§é(Tunneling)
~/.ssh/id_dsa
ï¼å
¬é¥å¨ ~/.ssh/id_dsa.pub
ã~/.ssh/authorized_keys2
ã# ssh-keygen -t dsa -N '' # cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2"
# cd ~/.ssh # ssh-keygen -i -f keyfilename.pub >> authorized_keys2
# scp .ssh/puttykey.pub root@192.168.51.254:.ssh/
# cd ~/.ssh # ssh-keygen -i -f puttykey.pub >> authorized_keys2
ssh-keygen -l
è·åæå¡å¨çæçº¹ï¼
# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub # RSA å¯é¥ 2048 61:33:be:9b:ae:6c:36:31:fd:83:98:b7:99:2d:9f:cd /etc/ssh/ssh_host_rsa_key.pub # ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub # DSA å¯é¥(é»è®¤) 2048 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee /etc/ssh/ssh_host_dsa_key.pubç°å¨å®¢æ·ç«¯å¨è¿æ¥å°æå¡å¨æ¶å¯éªè¯å ¶æå¡å¨çç宿§ï¼
# ssh linda The authenticity of host 'linda (192.168.16.54)' can't be established. DSA key fingerprint is 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee. Are you sure you want to continue connecting (yes/no)? yes
# scp file.txt host-two:/tmp # scp joe@host-two:/www/*.html /www/tmp # scp -r joe@host-two:/www /www/tmpå¨ Konqueror æ Midnight æ§å¶å°ä¸ï¼ç¨å°å fish://user@gate æ¥è®¿é®è¿ç¨æä»¶ç³»ç»æ¯å¯è¡çï¼å°±æ¯æ¯è¾æ ¢èå·²ã
# ssh -L localport:desthost:destport user@gate # gate ä¸ºç®æ 主æºç½å ³ # ssh -R destport:desthost:localport user@gate # 转åä½ ç localport å°ç®æ ç«¯å£ # ssh -X user@gate # 转å X ç¨åºè¿å°ä¼è¿æ¥å° gate 并转å端å£å°ç®æ ä¸»æº desthost:destportãæ³¨æ desthost 为 gate ä¸çç®æ 主æºåãå æ¤ï¼å¦æè¿æ¥å°äº gateï¼é£ä¹ desthost å°±æ¯ localhostãä¹å¯ä»¥åæ´å¤ç端å£è½¬åã
# ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate
# ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gateç°å¨è¿ä¸ª SMB å ±äº«å¯ä»¥ä½¿ç¨ \\127.0.0.1\ 访é®ï¼ä½åªè½å¨æ¬å°å ±äº«å ³éçæ åµä¸ï¼å 为æ¬çå ±äº«ä¹æ¯å¨ 139 端å£çå¬çã
# ssh -R 2022:localhost:22 user@gate # 转å客æ·ç«¯ 22 端å£å° gate:2022 端å£
å¼å¯ cliadmin 客æ·ç«¯(ä»ä¸»æºå° gate)ï¼
# ssh -L 3022:localhost:2022 admin@gate # 转å客æ·ç«¯ 3022 端å£å° gate:2022 端å£
ç°å¨ admin å¯ä»¥ç´æ¥è¿æ¥ cliuser 客æ·ç«¯ï¼
# ssh -p 3022 admin@localhost # local:3022 -> gate:2022 -> client:22
# ssh -R 15900:localhost:5900 user@gateå¼å¯ cliadmin 客æ·ç«¯(ä»ä¸»æºå° gate)ï¼
# ssh -L 5900:localhost:15900 admin@gateç°å¨ admin ç´æ¥è¿æ¥å° VNC 客æ·ç«¯ï¼
# vncconnect -display :0 localhost
PermitRootLogin yes PermitTunnel yes
cli># ssh -w5:5 root@hserver srv># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # 卿å¡ç«¯ shell 䏿§è¡
cli># ssh -w5:5 root@hserver srv># ifconfig tun5 10.0.1.1 10.0.1.2 # 卿å¡ç«¯ shell 䏿§è¡
cli># ifconfig tun5 10.0.1.2 netmask 255.255.255.252 # Linuxä¸ç客æ·ç«¯ cli># ifconfig tun5 10.0.1.2 10.0.1.1 # FreeBSDä¸ç客æ·ç«¯ç°å¨ä¸¤ä¸ªä¸»æºé½è¿ä¸äºï¼å¹¶ä¸å¯ä»¥å¨ä»»ä½ 3/4 å±åè®®ä¸ä½¿ç¨æ¤éé IP å°åéæçé讯ã
gateA># ssh -w5:5 root@gateB gateB># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # å¨ gateB ç shell 䏿§è¡ gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5 gateB># echo 1 > /proc/sys/net/ipv4/ip_forward # 妿䏿¯é»è®¤ç½å ³ gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
gateA># ssh -w5:5 root@gateB # å建 tun5 è®¾å¤ gateB># ifconfig tun5 10.0.1.1 10.0.1.2 # å¨ gateB ç shell 䏿§è¡ gateB># route add 192.168.51.0/24 10.0.1.2 gateB># sysctl net.inet.ip.forwarding=1 # 妿䏿¯é»è®¤ç½å ³ gateB># natd -s -m -u -dynamic -n fxp0 # ç NAT gateA># sysctl net.inet.ip.fw.enable=1
gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252 gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5 gateA># echo 1 > /proc/sys/net/ipv4/ip_forward gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
gateA># ifconfig tun5 10.0.1.2 10.0.1.1 gateA># route add 192.168.16.0/24 10.0.1.2 gateA># sysctl net.inet.ip.forwarding=1 gateA># natd -s -m -u -dynamic -n fxp0 # ç NAT gateA># sysctl net.inet.ip.fw.enable=1ç°å¨ä¸¤ä¸ªç§æç½ç»é½å¯ä»¥éè¿ SSH VPN æ¥éæçè¿æ¥ã妿 gate 䏿¯é»è®¤ç½å ³ï¼é£ä¹ IP 转åå NAT è®¾ç½®é½æ¯å¿ é¡»çãå¨è¿ç§æ åµä¸ï¼å®¢æ·ç«¯å°ä¸ç¥éå¨åªé转åååº(response)ï¼å¹¶ä¸ NAT å¿ é¡»æ¯å¼å¯çã
# rsync -a /home/colin/ /backup/colin/
# rsync -a /var/ /var_bak/
# rsync -aR --delete-during /home/user/ /backup/ # 使ç¨ç¸å¯¹è·¯å¾(çä¸é¢)
åä¹å䏿 ·ï¼ä½ä½¿ç¨äºå缩åç½ç»ãRsync ä½¿ç¨ SSH è¿è¡ä¼ è¾ï¼å¹¶ä¸ä½¿ç¨ SSH å¯é¥ï¼å¦æè®¾ç½®çè¯ãå SCP 䏿 ·ä½¿ç¨ ":"ãä¸ä¸ªå
¸åçæ·è´ï¼
# rsync -axSRzv /home/user/ user@server:/backup/user/æé¤å¨ /home/user/ ä¸ä»»ä½ tmp ç®å½ï¼å¹¶ä¸ä¿æç¸å¯¹ç®å½å±æ¬¡ç»æï¼è¿ç¨ç®å½çç»æå°±æ¯ /backup/home/user/ãå ¸åçç¨äºå¤ä»½çå½ä»¤ã
# rsync -azR --exclude /tmp/ /home/user/ user@server:/backup/SSH è¿æ¥ä½¿ç¨ç«¯å£ 20022ï¼
# rsync -az -e 'ssh -p 20022' /home/colin/ user@server:/backup/colin/ä½¿ç¨ rsync 宿¤è¿ç¨(使ç¨"::")æ¯å¾å¿«çï¼ä½æ²¡æéè¿ SSH å å¯ã ä½ç½® /backup å®ä¹å¨äºé ç½®æä»¶ /etc/rsyncd.conf ä¸ãåé RSYNC_PASSWORD å¯ä»¥è®¾ç½®ç¨æ¥å 餿å¨è¾å ¥å¯ç ã
# rsync -axSRz /home/ ruser@hostname::rmodule/backup/
# rsync -axSRz ruser@hostname::rmodule/backup/ /home/ # åæ·è´
ä¸äºéè¦é项ï¼
-a, --archive
彿¡£æ¨¡å¼ï¼çäº -rlptgoD (é -H)-r, --recursive
对åç®å½ä»¥é彿¨¡å¼å¤ç-R, --relative
使ç¨ç¸å¯¹è·¯å¾å-H, --hard-links
ä¿ç硬é¾ç»-S, --sparse
对ç¨çæä»¶è¿è¡ç¹æ®å¤ç以èçDSTç空é´-x, --one-file-system
ä¸è·¨è¶æä»¶ç³»ç»è¾¹ç --exclude=PATTERN
æå®æé¤ä¸éè¦ä¼ è¾çæä»¶æ¨¡å¼ --delete-during
ä¼ è¾æé´å é¤ --delete-after
ä¼ è¾ç»æä»¥ååå é¤rsync
å ssh
å¯ç¨äº Windows å½ä»¤çªå£ä¸ã
# ssh-keygen -t dsa -N '' # å建å¯é¥å¯¹ # rsync user@server:.ssh/authorized_keys2 . # 仿å¡å¨æ·è´æ¬å°æä»¶ # cat id_dsa.pub >> authorized_keys2 # æè 使ç¨ç¼è¾å¨æ·»å è¿ä¸ªå ¬é¥ # rsync authorized_keys2 user@server:.ssh/ # æ·è´æä»¶åæå¡å¨ # del authorized_keys2 # å 餿¬å°æ·è´ç°å¨æµè¯ä¸ä¸(å¨åä¸è¡éé¢):
rsync -rv "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/'
@ECHO OFF REM rsync the directory My Documents SETLOCAL SET CWRSYNCHOME=C:\PROGRAM FILES\CWRSYNC SET CYGWIN=nontsec SET CWOLDPATH=%PATH% REM uncomment the next line when using cygwin SET PATH=%CWRSYNCHOME%\BIN;%PATH% echo Press Control-C to abort rsync -av "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/' pause
# sudo /etc/init.d/dhcpd restart # ç¨ root æéè¿è¡ rc èæ¬ # sudo -u sysadmin whoami # 使ç¨å ¶ä»ç¨æ·è¿è¡å½ä»¤
/etc/sudoers
ä¸ï¼å¹¶ä¸åªè½ç¨ visudo
ç¼è¾è¯æ³¨ï¼å¹¶ä¸æ¯è¯´ä¸è½ç¨å
¶ä»ç¼è¾å¨ç¼è¾ï¼èæ¯å 为 visudo
ä¼å¯¹å
¶è¯æ³è¿è¡ä¸¥æ ¼æ£æ¥ï¼é¿å
ç»ç³»ç»å¸¦æ¥ä¸¥éåæããå
¶åºæ¬è¯æ³æ¯(å表æ¯ä»¥éå·åéç)ï¼
user hosts = (runas) commands # å¨ /etc/sudoers ä¸
users
ä¸ä¸ªæå¤ä¸ªç¨æ·ææ¯%ç¨æ·ç»(å %wheel) æ¥è·å¾æéhosts
主æºå表(æ ALL)runas
ååºç¨æ·ä»¥ä½ç§èº«ä»½(æ ALL)æ¥æ§è¡å½ä»¤ï¼æ¾å¨ ( ) å
ï¼commands
ååºå¯è¢« users 以 runas æ root æéè¿è¡çå½ä»¤(æ ALL)# cat /etc/sudoers # 主æºå«å Host_Alias DMZ = 212.118.81.40/28 Host_Alias DESKTOP = work1, work2 # ç¨æ·å«å å runas å«å User_Alias ADMINS = colin, luca, admin User_Alias DEVEL = joe, jack, julia Runas_Alias DBA = oracle,pgsql # å½ä»¤å«åï¼å ¶å¼ä¸ºå ¨è·¯å¾å½ä»¤ Cmnd_Alias SYSTEM = /sbin/reboot,/usr/bin/kill,/sbin/halt,/sbin/shutdown,/etc/init.d/ Cmnd_Alias PW = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root # Not root pwd! Cmnd_Alias DEBUG = /usr/sbin/tcpdump,/usr/bin/wireshark,/usr/bin/nmap
# ä¸ä¸ªçå®çè§å root,ADMINS ALL = (ALL) NOPASSWD: ALL # ADMINS å«åä¸çç¨æ·å¯åä»»ä½äºæ ä¸éè¦å¯ç DEVEL DESKTOP = (ALL) NOPASSWD: ALL # å¼å人åå¯å¨ DESKTOP å«åç主æºä¸åä»»ä½äºæ DEVEL DMZ = (ALL) NOPASSWD: DEBUG # å¼å人åå¯ä»¥å¨ DMZ å«åç主æºä¸ä½¿ç¨ DEBUG å«åä¸çå½ä»¤ # ç¨æ· sysadmin å¯ä»¥å¨ DMZ æå¡å¨ä¸æ§è¡ä¸äºå½ä»¤ sysadmin DMZ = (ALL) NOPASSWD: SYSTEM,PW,DEBUG sysadmin ALL,!DMZ = (ALL) NOPASSWD: ALL # å¯ä»¥å¨é DMZ 主æºä¸åä»»ä½äºæ %dba ALL = (DBA) ALL # ç¨æ·ç» dba å¯ä»¥è¿è¡ DBA å«åä¸ç¨æ·æéçææå½ä»¤ # ææç¨æ·å¯ä»¥å¨ DESKTOP å«åç主æºä¸ æè½½/å¸è½½ CD-ROM ALL DESKTOP = NOPASSWD: /sbin/mount /cdrom,/sbin/umount /cdrom
# openssl des -salt -in file -out file.des # openssl des -d -salt -in file.des -out fileé£ä¸ª file å¯ä»¥æ¯å½æ¡£æä»¶(tar archive)ã
# tar -cf - directory | openssl des -salt -out directory.tar.des # å å¯ # openssl des -d -salt -in directory.tar.des | tar -x # è§£å¯
# tar -zcf - directory | openssl des -salt -out directory.tar.gz.des # å å¯ # openssl des -d -salt -in directory.tar.gz.des | tar -xz # è§£å¯
# gpg -c file # 使ç¨å¯ç å 坿件 # gpg file.gpg # æä»¶è§£å¯(é项 -o å ¶ä»æä»¶)
# gpg --gen-key # è¿éè¦ä¸äºæ¶é´
å¨ Unix ä¸å¯é¥åå¨å¨ ~/.gnupg/ ä¸ï¼å¨ Windows ä¸é常åå¨å¨~/.gnupg/pubring.gpg # å å«ä½ çå ¬é¥åææå ¶ä»å¯¼å ¥çä¿¡æ¯ ~/.gnupg/secring.gpg # å¯å å«å¤ä¸ªç§é¥å¸¸ç¨é项çç®çæè¿°ï¼
# gpg -e -r 'Your Name' file # 使ç¨ä½ çå ¬é¥å å¯ # gpg -o file -d file.gpg # è§£å¯ãä½¿ç¨ -o æå®è¾åºæä»¶
# gpg -a -o alicekey.asc --export 'Alice' # Alice 导åºå¥¹çå ¬é¥å° ascii æä»¶ä¸ # gpg --send-keys --keyserver subkeys.pgp.net KEYID # Alice æå¥¹çå ¬é¥æ¾å ¥ä¸ä¸ªæå¡å¨ # gpg --import alicekey.asc # ä½ å¯¼å ¥å¥¹çå¯é¥å°ä½ çå ¬é¥ç¯(pubring)ä¸ # gpg --search-keys --keyserver subkeys.pgp.net 'Alice' # æè ä»ä¸ä¸ªæå¡å¨ä¸è·åä»çå ¬é¥ä¸æ¦è¿äºå ¬é¥å¯¼å ¥åï¼å å¯æè§£å¯ä¸ä¸ªæä»¶ä¼é常ç®åï¼
# gpg -e -r 'Alice' file # ç» Alice å 坿件 # gpg -d file.gpg -o file # è§£å¯ Alice ç»ä½ çå 坿件
# gpg --list-keys # ååºææå ¬é¥å¹¶æ¥çå ¶ KEYID KEYID è·å¨ '/' åé¢ æ¯å¦ï¼pub 1024D/D12B77CE å®ç KEYID æ¯ D12B77CE # gpg --gen-revoke 'Your Name' # 产çä¸ä»½æ¤éå¯é¥è¯ä¹¦ # gpg --list-secret-keys # ååºææç§é¥ # gpg --delete-keys NAME # 仿¬çå¯é¥ç¯ä¸å é¤ä¸ä¸ªå ¬é¥ # gpg --delete-secret-key NAME # 仿¬çå¯é¥ç¯ä¸å é¤ä¸ä¸ªç§é¥ # gpg --fingerprint KEYID # æ¾ç¤º KIYID è¿ä¸ªå¯é¥çæçº¹ # gpg --edit-key KEYID # ç¼è¾å¯é¥(æ¯å¦ç¾åæè æ·»å /å é¤ email)
Linux with LUKS | Linux dm-crypt only | FreeBSD GELI | FreeBSD åªä½¿ç¨å¯ç
æ(许å¤)å ¶ä»æ¿ä»£æ¹æ³æ¥å å¯ç£çï¼æåªåç°ææç¥éå使ç¨çæ¹æ³ã请记ä½ï¼å®å ¨åªæ¯ç³»ç»è¿æªç»è¿å®é èéªèå·²ãå ¥ä¾µè å¯ä»¥è½»æéè¿é®çäºä»¶è®°å½å¯ç ãæ¤å¤ï¼å½å·²ç»å è½½äºååºï¼å ¶æ°æ®æ¯å¯ä»¥èªç±è®¿é®çï¼å¹¶ä¸ä¼é»æ¢å ¥ä¾µè å»è®¿é®å®ã/dev/sdc1
ååºï¼å®å¯ä¸ºä»»ä½å
¶ä»ååºãç£çãUSBæè
ç¨ losetup
å建çåºäºæä»¶çååºã对äºåºäºæä»¶çååºï¼æä»¬ä½¿ç¨ /dev/loop0
ãç éåæä»¶ååºãDevice mapper å©ç¨æ ç¾æ¥æ è¯ä¸ä¸ªååºãæä»¬ä½¿ç¨ sdc1
ä½ä¸ºæ¤æ ç¾ï¼ä½å¯ä»¥ä¸ºä»»ä½å符串ã
# cryptsetup --help
æ¥æµè¯ LUKS æ¯å¦å¯ç¨ãå¦ææ²¡ææ¾ç¤ºä»»ä½å
³äº LUKS çä¿¡æ¯ï¼å¯çä¸é¢Without LUKS çä»ç»ãç¬¬ä¸æ¥å¦æéè¦çè¯å建ä¸ä¸ªååºï¼fdisk /dev/sdc
ã
# dd if=/dev/urandom of=/dev/sdc1 # å¯é # cryptsetup -y luksFormat /dev/sdc1 # è¿ç ´åäºå¨ sdc1 ä¸çæ°æ® # cryptsetup luksOpen /dev/sdc1 sdc1 # mkfs.ext3 /dev/mapper/sdc1 # å建 ext3 æä»¶ç³»ç» # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt # cryptsetup luksClose sdc1 # Detach å·²å å¯çååº
# cryptsetup luksOpen /dev/sdc1 sdc1 # mount -t ext3 /dev/mapper/sdc1 /mnt
# umount /mnt # cryptsetup luksClose sdc1
# cryptsetup -y create sdc1 /dev/sdc1 # æä»»ä½å ¶ä»ååºå /dev/loop0 # dmsetup ls # æ£æ¥ä¸ä¸ï¼å°æ¾ç¤ºï¼sdc1 (254, 0) # mkfs.ext3 /dev/mapper/sdc1 # åªæç¬¬ä¸æ¬¡è¦è¿ä¹åï¼ # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt/ # cryptsetup remove sdc1 # Detach å·²å å¯çååºè¿æ ·åçåäº(é mkfs é¨å) re-attach ååºã妿å¯ç 䏿£ç¡®ï¼mount å½ä»¤å°ä¼å¤±è´¥ã对äºè¿ä¸ªä¾åï¼åªè¦ç®åçç§»é¤ sdc1 (
cryptsetup remove sdc1
)å¹¶é建å³å¯ã
gbde
å geli
ãæç°å¨ä½¿ç¨ geli
åå æ¯å®å¤å¿«å¹¶ä¸å®ä½¿ç¨å è§£å¯ç¡¬ä»¶å é设å¤ã详æ
å¯ç FreeBSD ä½¿ç¨æå 18.6http://www.freebsd.org/handbook/disks-encrypting.htmlãgeli
模åå¿
须已ç¼è¯æå è½½è¿å
æ ¸ï¼
options GEOM_ELI device crypto # å æ ¸é ç½®æä»¶ä¸å å ¥è¿ä¸¤è¡ # echo 'geom_eli_load="YES"' >> /boot/loader.conf # ä¹å¯ä»¥å¨ç³»ç»å¼å¯¼æ¶å è½½æè åï¼kldload geom_eli
/root/ad1.key
æ¥ attach ååºã主å¯é¥åå¨å¨è¿ä¸ªå å¯ååºä¸å¹¶ä¸ä¸å¯è§ãçä¸é¢ä¸º USB æ æ åæä»¶çå å¯è®¾ç½®ã
# dd if=/dev/random of=/root/ad1.key bs=64 count=1 # å å¯ä¸»å¯é¥çå¯é¥ # geli init -s 4096 -K /root/ad1.key /dev/ad1 # 对äºç£çä¹å¯ç¨ -s 8192 # geli attach -k /root/ad1.key /dev/ad1 # å° /dev/ad1 䏿çæçå¯é¥ /root/ad1.key å ³è # dd if=/dev/random of=/dev/ad1.eli bs=1m # å¯éï¼éè¦å¾é¿æ¶é´ # newfs /dev/ad1.eli # å建æä»¶ç³»ç» # mount /dev/ad1.eli /mnt
# geli attach -k /root/ad1.key /dev/ad1
# fsck -ny -t ffs /dev/ad1.eli # æ£æ¥æä»¶ç³»ç»
# mount /dev/ad1.eli /mnt
# umount /mnt # geli detach /dev/ad1.eli
# grep geli /etc/rc.conf geli_devices="ad1" geli_ad1_flags="-k /root/ad1.key" # grep geli /etc/fstab /dev/ad1.eli /home/private ufs rw 0 0
/cryptedfile
ã
# dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # 1 GB æä»¶ # mdconfig -at vnode -f /cryptedfile # geli init /dev/md0 # ä» ç¨å¯ç å å¯ # geli attach /dev/md0 # newfs -U -m 0 /dev/md0.eli # mount /dev/md0.eli /mnt # umount /dev/md0.eli # geli detach md0.eliç°å¨å¯ä»¥æè¿ä¸ªæ åæä»¶å è½½æä» éå¯ç çæä»¶ç³»ç»ã
# mdconfig -at vnode -f /cryptedfile # geli attach /dev/md0 # mount /dev/md0.eli /mnt
[ CA_default ] dir = /usr/local/certs/CA # ä¿åææä¿¡æ¯çæä»¶å¤¹ certs = $dir/certs # å·²çæè¯ä¹¦çé»è®¤ä¿åç®å½ crl_dir = $dir/crl # çæçè¯ä¹¦æ¤éå表(CRL)çé»è®¤ä¿åç®å½ database = $dir/index.txt # ä¿åå·²ç¾åè¯ä¹¦çææ¬æ°æ®åºæä»¶ç¡®ä¿ææç®å½å·²ç»å建
# mkdir -p /usr/local/certs/CA
# cd /usr/local/certs/CA
# mkdir certs crl newcerts private
# echo "01" > serial # ä»
å½ serial ä¸å卿¶
# touch index.txt
# openssl req -new -x509 -days 730 -config /etc/ssl/openssl.cnf \ -keyout CA/private/cakey.pem -out CA/cacert.pem
-nodes
æ¥ç¦ç¨å å¯ã
# openssl req -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf
# openssl req -nodes -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf # ä¸å¯¹è¿ä¸ªå¯é¥å å¯
# cat newreq.pem newkey.pem > new.pem # openssl ca -policy policy_anything -out servernamecert.pem \ -config /etc/ssl/openssl.cnf -infiles new.pem # mv newkey.pem servernamekey.pemç°å¨ï¼servernamekey.pem å°±æ¯ç§é¥ï¼servernamecert.pem 就为æå¡å¨çè¯ä¹¦ã
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDutWy+o/XZ/[...]qK5LqQgT3c9dU6fcR+WuSs6aejdEDDqBRQ -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIERzCCA7CgAwIBAgIBBDANB[...]iG9w0BAQQFADCBxTELMAkGA1UEBhMCREUx -----END CERTIFICATE-----ç°å¨æä»¬ç /usr/local/certs/ ç®å½ä¸æäºè¿äºï¼
# openssl x509 -text -in servernamecert.pem # æ¾ç¤ºè¯ä¹¦ä¿¡æ¯ # openssl req -noout -text -in server.csr # æ¾ç¤ºç³è¯·ä¿¡æ¯ # openssl s_client -connect cb.vu:443 # æ£æ¥ web æå¡å¨è®¤è¯ä¿¡æ¯
æå¡å¨è®¾ç½® | CVS æµè¯ | SSH é§é | CVS 使ç¨
# mkdir -p /usr/local/cvs # setenv CVSROOT /usr/local/cvs # 设置 CVSROOT ç¯å¢åé(æ¬å°) # cvs init # å建ææåå§å CVS é ç½®æä»¶ # cd /root # cvs checkout CVSROOT # ç¾åºé ç½®æä»¶æ¥ä¿®æ¹ä»ä»¬ # cd CVSROOT edit config ( fine as it is) # cvs commit config cat >> writers # å建 writers æä»¶ (ä¹å¯ä¸º readers) colin ^D # ä½¿ç¨ [Control][D] éåºç¼è¾ # cvs add writers # æ·»å æä»¶ writers è¿ repository # cvs edit checkoutlist # cat >> checkoutlist writers ^D # ä½¿ç¨ [Control][D] éåºç¼è¾ # cvs commit # æäº¤ææé ç½®æ´æ¹æ·»å ä¸ä¸ª readers æä»¶ï¼å¦æä½ è¦åºå读åæéçè¯ã注æï¼ ä¸è¦å¨ä¸» cvs ä¸ç´æ¥ç¼è¾æä»¶ï¼èåºè¯¥ç¾åºè¦ç¼è¾çæä»¶ï¼ä¿®æ¹å®æååç¾å ¥ãæä»¬æåçæä»¶ writers ç¨æ¥å®ä¹å¯åæéã
cvspserver stream tcp nowait cvs /usr/bin/cvs cvs \ --allow-root=/usr/local/cvs pserverè¿æ¯ä¸ªç¨æ¥é»æä» internet è®¿é® cvs 端å£çå¥½æ¹æ³ï¼å¯ä½¿ç¨ ssh é§éæ¥è¿ç¨çè®¿é® repositoryã
# htpasswd -cb passwd user1 password1 # -c å建æä»¶
# htpasswd -b passwd user2 password2
ç°å¨æ·»å :cvs
å°æ¯è¡çç»å°¾å¤ï¼ç¨æ¥åè¯ cvs æå¡å¨æ´æ¹ç¨æ·å° cvs (æä»»ä½ä½ æ£å¨è¿è¡ç cvs æå¡å¨ä¸)ãå®çèµ·æ¥åè¿æ ·ï¼
# cat passwd user1:xsFjhU22u8Fuo:cvs user2:vnefJOsnnvToM:cvs
# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs CVS password:
setenv CVSROOT string
(csh, tcsh shell) æè
export CVSROOT=string
( sh, bash shell) 设置 CVSROOT ç¯å¢åéã
# setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory For example: # setenv CVSROOT /usr/local/cvs # ä» éæ¬çä½¿ç¨ # setenv CVSROOT :local:/usr/local/cvs # åä¸ # setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs # éè¿ SSH ç´æ¥è®¿é® # setenv CVS_RSH ssh # ext åè®®è®¿é® # setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs # éè¿ pserver ç½ç»è®¿é®ä¸æ¦ç»å½æåå°±å¯å¯¼å ¥ä¸ä¸ªæ°é¡¹ç®è¿ repositoryï¼cd è¿å ¥ä½ çé¡¹ç®æ ¹ç®å½
cvs import <module name> <vendor tag> <initial tag> cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany STARTå¨ repository ä¸æä¸ªåå« MyProject æ°é¡¹ç®(ä¹åç¨æ¥ç¾åº)ãCVS ä¼å¯¼å ¥å½åç®å½çå å®¹è¿æ°é¡¹ç®ã
# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject
æè
# setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
# cvs checkout MyProject
# ssh -L2401:localhost:2401 colin@cvs_server # ç´æ¥è¿æ¥å° cvs æå¡å¨ãæï¼ # ssh -L2401:cvs_server:2401 colin@gateway # 使ç¨ä¸ä¸ªç½å ³é´æ¥è¿æ¥å° cvs æå¡å¨å¨ shell 2:
# setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs # cvs login Logging in to :pserver:colin@localhost:2401/usr/local/cvs CVS password: # cvs checkout MyProject/src
# cvs import [options] directory-name vendor-tag release-tag # cd /devel # å¿ é¡»å¨è¯¥ç®å½ä¸æ¥å¯¼å ¥ # cvs import myapp Company R1_0 # 修订(release)æ ç¾å¯ä»¥ä¸ºä»»ä½å个åè¯å¨æ·»å äºä¸ä¸ªæ°ç®å½ "/devel/tools/" åï¼ä¹å¯è¿ä¹å¯¼å ¥ã
# cd /devel/tools # cvs import myapp/tools Company R1_0
# cvs co myapp/tools # ä» ä¼ç¾åº tools ç®å½ # cvs co -r R1_1 myapp # ç¾åºä¿®è®¢çæ¬ä¸º R1_1 ç myapp (sticky) # cvs -q -d update -P # å ¸åç CVS æ´æ° # cvs update -A # éç½®ææ sticky æ ç¾(ææ¥æãé项) # cvs add newfile # æ·»å ä¸ä¸ªæ°æä»¶ # cvs add -kb newfile # æ·»å ä¸ä¸ªäºè¿å¶æä»¶ # cvs commit file1 file2 # ä» æäº¤è¿ä¸¤ä¸ªæä»¶ # cvs commit -m "message" # æäº¤æææ´æ¹å¹¶ä¸ºè¿ä¸ªæ´æ¹æ·»å æ¥å¿æ¶æ¯
# cd /devel/project
# diff -Naur olddir newdir > patchfile # Create a patch from a directory or a file
# diff -Naur oldfile newfile > patchfile
# cd /devel/project # patch --dry-run -p0 < patchfile # Test the path without applying it # patch -p0 < patchfile # patch -p1 < patchfile # strip off the 1st level from the path
Server setup | SVN+SSH | SVN over http | SVN usage
Subversion (SVN)http://subversion.tigris.org/ is a version control system designed to be the successor of CVS (Concurrent Versions System). The concept is similar to CVS, but many shortcomings where improved. See also the SVN bookhttp://svnbook.red-bean.com/en/1.4/./home/svn/
must exist):
# svnadmin create --fs-type fsfs /home/svn/project1Now the access to the repository is made possible with:
file://
Direct file system access with the svn client with. This requires local permissions on the file system.svn://
or svn+ssh://
Remote access with the svnserve server (also over SSH). This requires local permissions on the file system.http://
Remote access with webdav using apache. No local users are necessary for this method.# svn import /project1/ file:///home/svn/project1/trunk -m 'Initial import' # svn checkout file:///home/svn/project1The new directory "trunk" is only a convention, this is not required.
file://
with svn+ssh/hostname
. For example:
# svn checkout svn+ssh://hostname/home/svn/project1As with the local file access, every user needs an ssh access to the server (with a local account) and also read/write access. This method might be suitable for a small group. All users could belong to a subversion group which owns the repository, for example:
# groupadd subversion # groupmod -A user1 subversion # chown -R root:subversion /home/svn # chmod -R 770 /home/svn
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so # Only for access control
<Location /svn>
DAV svn
# any "/svn/foo" URL will map to a repository /home/svn/foo
SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion repository"
AuthzSVNAccessFile /etc/apache2/svn.acl
AuthUserFile /etc/apache2/svn-passwd
Require valid-user
</Location>
The apache server needs full access to the repository:
# chown -R www:www /home/svnCreate a user with htpasswd2:
# htpasswd -c /etc/svn-passwd user1 # -c creates the file
# Default it read access. "* =" would be default no access [/] * = r [groups] project1-developers = joe, jack, jane # Give write access to the developers [project1:] @project1-developers = rw
import
command. Import is also used to add a directory with its content to an existing project.
# svn help import # Get help for any command # Add a new directory (with content) into the src dir on project1 # svn import /project1/newdir http://host.url/svn/project1/trunk/src -m 'add newdir'
# svn co http://host.url/svn/project1/trunk # Checkout the most recent version # Tags and branches are created by copying # svn mkdir http://host.url/svn/project1/tags/ # Create the tags directory # svn copy -m "Tag rc1 rel." http://host.url/svn/project1/trunk \ http://host.url/svn/project1/tags/1.0rc1 # svn status [--verbose] # Check files status into working dir # svn add src/file.h src/file.cpp # Add two files # svn commit -m 'Added new class file' # Commit the changes with a message # svn ls http://host.url/svn/project1/tags/ # List all tags # svn move foo.c bar.c # Move (rename) files # svn delete some_old_file # Delete files
less | vi | mail | tar | dd | screen | find | æ··æç
less
å½ä»¤ç¨æ¥å¨æ§å¶å°ä¸å屿¾ç¤ºææ¬ææ¡£ãå®å¨è®¸å¤åè¡çä¸å¯ç¨ã
# less unixtoolbox.xhtmlä¸äºéè¦æä»¤(^N 代表 [control]-[N])ï¼
: help
ãnano
å pico
é常ä¹é½å¯ç¨ï¼è䏿´å®¹æ(IMHO)使ç¨ã
mail
å½ä»¤æ¯ä¸ä¸ªè¯»åååéé®ä»¶çåºç¨ç¨åºï¼å¥¹é常已å®è£
ãè¦åéä¸å°é®ä»¶ï¼å¯ä»¥ç®åçè¾å
¥ "mail user@domain"ãå
¶ç¬¬ä¸è¡ä¸ºä¸»é¢ï¼ç¶åæ¯é®ä»¶å
容ãå¨ä¸ä¸ªæ°è¡ä¸ä½¿ç¨å个ç¹(.)æ¥ç»æå¹¶åéé®ä»¶ãä¾åï¼
# mail c@cb.vu Subject: Your text is full of typos "For a moment, nothing happened. Then, after a second or so, nothing continued to happen." . EOT #è¿åæ ·å¯ç¨äºç®¡éï¼
# echo "This is the mail body" | mail c@cb.vu乿¯æµè¯é®ä»¶æå¡å¨çç®åæ¹æ³ã
tar
(ç£å¸¦åæ¡£) å¯ä»¥ä¸ºæä»¶åç®å½å建档æ¡ã彿¡£æä»¶ .tar æ¯æªå缩çï¼ä¸ä¸ªå缩è¿ç彿¡£æä»¶çåç¼æ¯ .tgz æ .tar.gz (zip) æè
.tbz (bzip2)ãä¸è¦ä½¿ç¨ç»å¯¹è·¯å¾å»ºç«ä¸ä¸ªå½æ¡£æä»¶ï¼ä½ å¯è½è¦è§£å¼è¿ä¸ªå½æ¡£æä»¶å°æä¸ªå°æ¹ãä¸äºå¸¸ç¨å½ä»¤å¦ä¸ï¼
# cd / # tar -cf home.tar home/ # 彿¡£æ´ä¸ª /home ç®å½(c 为å建) # tar -czf home.tgz home/ # çåäº zip å缩 # tar -cjf home.tbz home/ # çåäº bzip2 å缩ä»ä¸ä¸ªç®å½æ ä¸åªå å«ä¸ä¸ª(æ2个)ç®å½ï¼å¹¶ä¿æç¸å¯¹ç®å½ç»æã举个ä¾åï¼/usr/local/etc å /usr/local/wwwï¼å®ä»¬å¨å½æ¡£æä»¶ä¸ç第ä¸å±ç®å½æ¯ local/ã
# tar -C /usr -czf local.tgz local/etc local/www # tar -C /usr -xzf local.tgz # éæ¾ local ç®å½å° /usr # cd /usr; tar -xzf local.tgz # åä¸é¢ä¸æ ·
# tar -tzf home.tgz # ååºå½æ¡£æä»¶ä¸çæææä»¶ï¼å¹¶ä¸éæ¾ # tar -xf home.tar # 鿾彿¡£æä»¶(x ä¸ºéæ¾) # tar -xzf home.tgz # çåäº zip å缩 # tar -xjf home.tgz # çåäº bzip2 å缩 # tar -xjf home.tgz home/colin/file.txt # éæ¾å个æä»¶
# tar c dir/ | gzip | ssh user@remote 'dd of=dir.tgz' # 彿¡£å缩 dir/ ç®å½å¹¶åå¨å°è¿ç¨ä¸»æºä¸ # tar cvf - `find . -print` > backup.tar # 彿¡£å½åç®å½ # tar -cf - -C /etc . | tar xpf - -C /backup/etc # æ·è´ç®å½ # tar -cf - -C /etc . | ssh user@remote tar xpf - -C /backup/etc # è¿ç¨æ·è´ # tar -czf home.tgz --exclude '*.o' --exclude 'tmp/' home/
dd
(ç£çå¤ä»½(disk dump) æ destroy diskï¼ä¹å¯ç dd çå«ä¹) ç¨æ¥æ·è´ååºãç£çæè
å
¶å®æ·è´ãé常è¿ä¹ç¨ï¼
# dd if=<source> of=<target> bs=<byte size> conv=<conversion>éè¦ç conv é项ï¼
notrunc
Â Â Â ä¸æªçè¾åºæä»¶noerror
   åºéæ¶ä¸åæ¢å¤ç(e.g. åæåº)sync
Â Â Â ææ¯ä¸ªè¾å
¥åå¡«å
å°ibs个åèï¼ä¸è¶³é¨åç¨ç©º(NUL)å符补é½# dd if=/dev/hda of=/dev/hdc bs=16065b # æ·è´ç£çå°ç£ç(ç¸å大å°) # dd if=/dev/sda7 of /home/root.img bs=4096 conv=notrunc,noerror # å¤ä»½ / # dd if /home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # æ¢å¤ / # dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz # å缩å¤ä»½ # gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M # è§£åæ¢å¤ # dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # ä¹å¯ä¸ºè¿ç¨ç # gunzip -dc ad4s3e.gz | ssh eedcoba@host 'dd of=/dev/ad0s3e bs=1M' # dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror # å¿½ç¥ MBR # å¦æç®æ (ad2)æ¯è¾å°ï¼è¿æ¯å¿ é¡»çã
dd
å½ä»¤ä¼è¯»åååºçæ¯ä¸ä¸ªåºåï¼å³ææåºåãå¯¹äºæé®é¢çåºåï¼æå¥½ä½¿ç¨ conv=sync,noerror
é项ï¼dd å°ä¼è·³è¿åçåºåå¹¶å
¥ 0ãå æ¤ï¼è¿å°±æ¯è®¾ç½®å大å°çäºæå°äºç£çå大å°çéè¦æ§ã1k 大å°ä¼¼ä¹å®å
¨ï¼ç¨ bs=1k
æ¥è®¾ç½®å®ãåå¦ä¸ä¸ªç£çæåæåºå¹¶ä¸æä¸ªååºçæ°æ®è¦æ¢å¤ï¼é£ä¹ç¨ dd å·¥å
·å建ä¸ä¸ªéåæä»¶ï¼æè½½è¿ä¸ªéåæä»¶ï¼ç¶åæ·è´å
容尿°çç£çä¸ã妿ç¨äº noerror
é项ï¼dd ä¼è·³è¿åæåºå¹¶åå
¥ 0ï¼ä¹å³åæåºä¸çå
容ä¼ä¸¢å¤±ã
# dd if=/dev/hda of=/dev/null bs=1m # æ£æ¥åæåº # dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh \ # åéå°è¿ç¨ root@fry 'dd of=hda1.gz bs=1k' # dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img # åå¨ä¸ºä¸ä¸ªæ åæä»¶ # mount -o loop /hda1.img /mnt # æè½½è¿ä¸ªæ åæä»¶ # rsync -ax /mnt/ /newdisk/ # æ·è´å°ä¸ä¸ªæ°ç£ç # dd if=/dev/hda of=/dev/hda # å·æ°ç£ç¶æ # ä¸é¢çå½ä»¤å¯¹äºå·æ°ç£ç(refresh disk)徿ç¨ãè¿ç»å¯¹å®å ¨ï¼ä½å¿ é¡»å å¸è½½ç£çã
# dd if=/dev/zero of=/dev/hdc # å é¤å ¨é¨æ°æ® # dd if=/dev/urandom of=/dev/hdc # æ´å¥½çå é¤å ¨é¨æ°æ®è¯æ³¨ï¼/dev/urandom è®¾å¤æä»¶æä¾äºä¸ç§æ¯åç¬ä½¿ç¨$RANDOMæ´å¥½ç,è½äº§çæ´"éæº"çéæºæ°çæ¹æ³ã # kill -USR1 PID # æ¥ç dd è¿åº¦(ä» Linux!)
# dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1 # å®å ¨å¤ä»½ MBR # dd if=/dev/zero of=/dev/sda bs=512 count=1 # å é¤ MBR åååºè¡¨ # dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1 # å®å ¨æ¢å¤MBR # dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1 # ä» åå¤å¼å¯¼ç¨åº # dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # æ¢å¤ååºè¡¨
# screenå¨ screen ä¼è¯ä¸ï¼æä»¬å¯ä»¥å¼å¯ä¸ä¸ªé¿æ¶é´è¿è¡çç¨åº(å¦ top)ãDetach è¿ä¸ªç»ç«¯ï¼ä¹åå¯ä»¥ä»å ¶ä»æºå¨ reattach è¿ä¸ªç¸åçç»ç«¯(æ¯å¦éè¿ ssh)ã
# topç°å¨ç¨ Ctrl-a Ctrl-d æ¥ detachãReattach ç»ç«¯ï¼
# screen -rææ´å¥½çï¼
# screen -R -Dç°å¨ attach å°è¿éãå ·ä½æææ¯ï¼å è¯å¾æ¢å¤ç¦»çº¿ç screen ä¼è¯ãè¥æ¾ä¸å°ç¦»çº¿ç screen ä¼è¯ï¼å³å»ºç«æ°ç screen ä¼è¯ç»ç¨æ·ã
-x
(BSD) -xdev
(Linux)    çäºåä¸æä»¶ç³»ç» (fstab ä¸ç dev)-exec cmd {} \;
   æ§è¡å½ä»¤å¹¶ç¨å
¨è·¯å¾æ¿æ¢ {}-iname
   å -name 䏿 ·ï¼ä½ä¸åºå大å°å-ls
   æ¾ç¤ºå
³äºæä»¶çä¿¡æ¯(å ls -la)-size n
   n 为 +-n (k M G T P)-cmin n
Â Â Â æ¥æ¾ç³»ç»ä¸æå n åéæ¹åæä»¶ç¶æçæä»¶# find . -type f ! -perm -444 # å¯»æ¾æææ æ³è¯»åçæä»¶ # find . -type d ! -perm -111 # å¯»æ¾æææ æ³è®¿é®çç®å½ # find /home/user/ -cmin 10 -print # å¯»æ¾æå 10 åéå建æä¿®æ¹çæä»¶ # find . -name '*.[ch]' | xargs grep -E 'expr' # å¨å½åç®å½ååç®å½æç´¢ 'expr' è¡¨è¾¾å¼ # find / -name "*.core" | xargs rm # å¯»æ¾ core åå¾å¹¶å é¤å®ä»¬(ä¹å¯è¯è¯ core.*) # find / -name "*.core" -print -exec rm {} \; # å¦ä¸ç§è¯æ³ # 寻æ¾å¾åæä»¶å¹¶å建ä¸ä¸ªå½æ¡£æä»¶ï¼iname 为ä¸åºå大å°åã-r 为éå # find . \( -iname "*.png" -o -iname "*.jpg" \) -print -exec tar -rf images.tar {} \; # find . -type f -name "*.txt" ! -name README.txt -print # é¤ README.txt çæä»¶ # find /var/ -size +10M -exec ls -lh {} \; # æ¥æ¾ > 10 MB çæä»¶ # find /var/ -size +10M -ls # è¿ä¸ªæ´ç®å # find . -size +10M -size -50M -print # find /usr/ports/ -name work -type d -print -exec rm -rf {} \; # æ¸ ç port # 以 SUID æ¥æ¾æä»¶ï¼è¿äºæä»¶å¾èå¼±ï¼å¿ é¡»ä¿æå®å ¨ã # find / -type f -user root -perm -4000 -exec ls -l {} \;å°å¿ xarg æ execï¼å ä¸ºå½æä»¶æç®å½ä¸å å«ç©ºæ ¼æ¶å¯è½ä¼è¿åé误çç»æãå¨æçææ¶ç¨ "-print0 | xargs -0" ä»£æ¿ "| xargs"ãé项 -print0 å¿ é¡»å¨ find å½ä»¤çæåãçè¿ä¸ªä¸éç find è¿·ä½ æç¨http://www.hccfl.edu/pollock/Unix/FindCmd.htm.
# find . -type f | xargs ls -l # ä¸è½å·¥ä½äºæç©ºæ ¼çåå # find . -type f -print0 | xargs -0 ls -l # å¯å·¥ä½äºæç©ºæ ¼çåå # find . -type f -exec ls -l '{}' \; # æä½¿ç¨ç¨äº -exec çå¼ç¨ '{}'
# which command # æ¾ç¤ºå½ä»¤çå ¨è·¯å¾å # time command # æ¾ç¤ºä¸ä¸ªå½ä»¤æ§è¡å®ææç¨çæ¶é´ # time cat # ä½¿ç¨ time ä½ä¸ºç§è¡¨ï¼ç¨ Ctrl-c æ¥åæ¢ # set | grep $USER # åæ¾å½åç¯å¢åé # cal -3 # æ¾ç¤ºä¸ä¸ªææ¥å # date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] # date 10022155 # è®¾ç½®æ¥æåæ¶é´ # whatis grep # æ¾ç¤ºå½ä»¤çç®çä¿¡æ¯ # whereis java # æ¥è¯¢å½ä»¤ççè·¯å¾åæ åç®å½ # setenv varname value # 设置ç¯å¢åéï¼è®¾ç½®åé varname çå¼ä¸º value (csh/tcsh) # export varname="value" # 设置ç¯å¢åéï¼è®¾ç½®åé varname çå¼ä¸º value (sh/ksh/bash) # pwd # æ¾ç¤ºå½åå·¥ä½ç®å½ # mkdir -p /path/to/dir # 妿åå¨ä¸æ¾ç¤ºé误ï¼å»ºç«æéçä¸çº§ç®å½ # mkdir -p project/{bin,src,obj,doc/{html,man,pdf},debug/some/more/dirs} # rmdir /path/to/dir # ç§»é¤ç®å½ # rm -rf /path/to/dir # ç§»é¤ç®å½åå ¶å 容(强å¶) # cp -la /dir1 /dir2 # åæ¡£ãç¡¬è¿æ¥ç®å½æææä»¶ï¼ç¨æ¥æ¿ä»£æ·è´ # cp -lpR /dir1 /dir2 # åä¸ (FreeBSD) # cp unixtoolbox.xhtml{,.bak} # æ·è´æä»¶ææ°æ©å±åçå¿«éæ¹æ³ # mv /dir1 /dir2 # ä¿®æ¹ç®å½å
# rpm -qa # ååºå·²å®è£ è¿ç软件å (RH, SuSE, åºäº RPM ç) # dpkg -l # Debian, Ubuntu # pkg_info # ååºææå·²å®è£ è¿ç软件å (FreeBSD) # pkg_info -W smbd # æ¥ç smbd å®è£ äºé£äºè½¯ä»¶å (FreeBSD) # pkginfo # Solaris
# rpm -i pkgname.rpm # å®è£ 软件å (RH, SuSE, åºäº RPM ç) # rpm -e pkgname # å é¤è½¯ä»¶å
# apt-get update # æ´æ°æºå表 # apt-get install emacs # å®è£ emacs 软件å # dpkg --remove emacs # å é¤ emacs 软件å # dpkg -S file # æ¥æ¾æ¥æè¯¥ file ç软件å
# emerge --sync # åæ¥æ´æ°æ¬å° protage æ # emerge -u packagename # å®è£ ææ´æ°ä¸ä¸ªè½¯ä»¶å # emerge -C packagename # å é¤è½¯ä»¶å # revdep-rebuild # ä¿®å¤ä¾èµå ³ç³»ç缺失
/cdrom/cdrom0
.
# pkgadd -d <cdrom>/Solaris_9/Product SUNWgtar # pkgadd -d SUNWgtar # æ·»å ä¸è½½ç软件å (å è¦ bunzip2) # pkgrm SUNWgtar # å é¤è½¯ä»¶å
# pkg_add -r rsync # è·åå¹¶å®è£ rsync # pkg_delete /var/db/pkg/rsync-xx # å é¤ rsync 软件åå¯ä½¿ç¨
PACKAGESITE
ç¯å¢åéæ¥è®¾ç½®åªéå¯ä»¥è·å软件å
ã举个ä¾åï¼
# export PACKAGESITE=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages/Latest/ # or ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/
/usr/ports/
æ¯ä¸ä¸ªåå¤ç¼è¯åå®è£
ç软件éãå¯ç¨ portsnap
å·¥å
·æ¥è·æ° portã
# portsnap fetch extract # å½ç¬¬ä¸æ¬¡è¿è¡è¿ä¸ªå½ä»¤ï¼ä¼å建 port æ # portsnap fetch update # è·æ° port æ # cd /usr/ports/net/rsync/ # éæ©è½¯ä»¶å®è£ ç®å½ # make install distclean # å®è£ å¹¶æ¸ ç(ä¹å¯ç man ports) # make package # Make ä¸ä¸ªäºè¿å¶è½¯ä»¶å
ldd
å ldconfig
æ¥æ£æ¥å管çã
# ldd /usr/bin/rsync # ååºæææéçè¿è¡æ¶åº # ldconfig -n /path/to/libs/ # æ·»å ä¸ä¸ªè·¯å¾å°å ±äº«åºç®å½Add a path to the shared libraries directories # ldconfig -m /path/to/libs/ # FreeBSD # LD_LIBRARY_PATH # è®¾ç½®è¿æ¥åºè·¯å¾çç¯å¢åé
iconv
å¯ä»¥ä»ä¸ä¸ªç¼ç è½¬æ¢æå¦ä¸ä¸ªç¼ç ã
# iconv -f <from_encoding> -t <to_encoding> <input_file>
# iconv -f ISO8859-1 -t UTF-8 -o file.input > file_utf8
# iconv -l # åæ¾ç³»ç»ææ¯æçå符ç¼ç
è¥ææ¡£æ¾ç¤ºè¯å¥½ï¼é常é½å¯ä¸ä½¿ç¨ -f é项ï¼iconv ä¼ä½¿ç¨æ¬å°å符é(char-set)ã
dos2unix
å unix2dos
å·¥å
·ï¼å¦æä½ æå®ä»¬çè¯ã
# sed 's/.$//' dosfile.txt > unixfile.txtå¨ Windows ç¯å¢ä¸è½¬æ¢ Unix å° Dos æ°è¡æ ¼å¼ãéè¦å¨ mingw æ cygwin ä¸ä½¿ç¨ sedã
# sed -n p unixfile.txt > dosfile.txt
gs
(GhostScript) å·¥å
·è½¬æ¢ PDF ææ¡£çæ¯ä¸é¡µæ jpeg (æ png)å¾åãä¹å¯ä»¥ä½¿ç¨æ´çç convert
(æ¥èª ImageMagick æ GraphicsMagick å·¥å
·) å½ä»¤ã
# gs -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
-dMaxStripSize=8192 -sOutputFile=unixtoolbox_%d.jpg unixtoolbox.pdf
# convert unixtoolbox.pdf unixtoolbox-%03d.png
# convert *.jpeg images.pdf # æææå¾çè½¬æ¢æä¸ä»½ç®åç PDF ææ¡£
Ghostscript åæ ·å¯è¿æ¥å¤ä¸ª pdf æä»¶æä¸ä»½ PDF ææ¡£ãè¿ä»
å¯å·¥ä½äºè¿äº PDF æä»¶é½ "åç°ä¸è´(well behaved)" çæ
åµä¸ã
# gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=all.pdf \
file1.pdf file2.pdf ... # å¨ Windows ä¸ä½¿ç¨ '#' ä»£æ¿ '='
# mencoder -o videoout.avi -oac mp3lame -ovc lavc -srate 11025 \ -channels 1 -af-adv force=1 -lameopts preset=medium -lavcopts \ vcodec=msmpeg4v2:vbitrate=600 -mc 0 vidoein.AVI对äºå£°é³çå¤çå¯ç soxã
cdparanoia
http://xiph.org/paranoia/ å¯ä»¥ä¿åé³è½¨(FreeBSD port å¨ audio/cdparanoia/)ï¼oggenc
å¯ç¼ç Ogg Vorbis æ ¼å¼ï¼lame
å¯è½¬æ¢æ mp3ã
# cdparanoia -B # æ·è´é³è½¨æ wav æä»¶å°å½åç®å½å表(dir) # lame -b 256 in.wav out.mp3 # ç¼ç æ 256 kb/s ç mp3 # for i in *.wav; do lame -b 256 $i `basename $i .wav`.mp3; done # oggenc in.wav -b 256 out.ogg # ç¼ç æ 256 kb/s ç Ogg Vorbis
# lpr unixtoolbox.ps # ç¨é»è®¤æå°æºæå° # export PRINTER=hp4600 # æ´æ¹é»è®¤æå°æº # lpr -Php4500 #2 unixtoolbox.ps # æå®æå°æº hp4500 å¹¶æå° 2 份 # lpr -o Duplex=DuplexNoTumble ... # å¯ç¨åé¢æå° # lpr -o PageSize=A4,Duplex=DuplexNoTumble ... # lpq # æ¥çé»è®¤æå°æºçéå # lpq -l -Php4500 # è¯¦ç»æ¾ç¤ºæå°æºéåä¿¡æ¯ # lprm - # å 餿ææå°æºå çç¨æ·æå°ä½ä¸ # lprm -Php4500 3186 # å é¤ä½ä¸ 3186ãå¯ä½¿ç¨ lpq æ¥çä½ä¸å· # lpc status # åå°ææå¯ç¨æå°æº # lpc status hp4500 # 妿æå°æºå¨çº¿ï¼æ¥çå ¶ç¶æååéé¿åº¦å½è¦æå° PDF æä»¶æ¶ï¼ä¸äºæå°è®¾å¤ä¸å ·å¤å¤ç postscript çè½åãå¯ä»¥è¿æ ·è§£å³è¯æ³¨ï¼æ¤ä¾äºå®ä¸å©ç¨ç®¡é(pipe)æ¹å¼å° PDF ç转æ¢ç»æå©ç¨ -sOutputFile éé¡¹å¯¼å ¥ç» lpr æå°ãï¼
# gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr file.pdf
# psql -d template1 -U pgsql
> alter user pgsql with password 'pgsql_password'; # pgsql 为éè¦æ´æ¹å¯ç çç¨æ·å
createuser
, dropuser
, createdb
å dropdb
çåäº SQL å½ä»¤è¯æ³¨ï¼å
¶å®æ¯ä¸ä¸ª Shell èæ¬çå¿«æ·æ¹å¼ãæä»¬å建ä¸ä¸ªæ°ç¨æ·å« bob åä¸ä¸ªæ°æ®åºå« bobdbï¼ä½¿ç¨æ°æ®åºçè¶
çº§ç¨æ· pgsql æ¥å建ï¼
# createuser -U pgsql -P bob # -P ä¼è¯·æ±ä¸ä¸ªç§å¯ # createdb -U pgsql -O bob bobdb # æ°æ°æ®åº bobdn çææè æ¯ bobè¯æ³¨ï¼éå¸¸ï¼æ§è¡è¿ä¸ªå½ä»¤çæ°æ®åºç¨æ·æä¸ºæ°æ°æ®åºçææè ãä¸è¿ï¼å¦ææ§è¡ç¨æ·æ¥æåéçæéï¼é£ä¹ä»å¯ä»¥éè¿ -O æå®åéçç¨æ·ã # dropdb bobdb # å 餿°æ®åº bobdb # dropuser bob # å é¤ç¨æ· bobä¸è¬æ°æ®åºè®¤è¯æºå¶é ç½®å¨ pg_hba.conf æä»¶ä¸ã
$PGSQL_DATA_D/postgresql.conf
坿å®ç»å®å°åãå¯¹äº Postgres 8.x é常为 listen_addresses = '*'
ã$PGSQL_DATA_D/pg_hba.conf
å®ä¹äºè®¿é®æ§å¶ã举ä¾ï¼
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host bobdb bob 212.117.81.42 255.255.255.255 password host all all 0.0.0.0/0 password
# pg_dump --clean dbname > dbname_sql.dump # psql dbname < dbname_sql.dumpå¤ä»½åæ¢å¤æææ°æ®åº(å æ¬ç¨æ·)ï¼
# pg_dumpall --clean > full.dump # psql -f full.dump postgreså¨è¿ä¸ªä¾åä¸ï¼ä½ å¯ä»¥å£°æä»»æç°æçæ°æ®åºè¿è¡è¿æ¥ï¼ä½æ¯å¦æä½ æ¯åä¸ä¸ªç©ºçæ°æ®åºéç¾¤è£ è½½ï¼é£ä¹ postgres åºè¯¥æ¯æ¯è¾å¥½çéæ©ã
# /etc/init.d/mysql stop
or
# killall mysqld
# mysqld --skip-grant-tables
# mysqladmin -u root password 'newpasswd'
# /etc/init.d/mysql start
# mysql -u root mysql mysql> UPDATE USER SET PASSWORD=PASSWORD("newpassword") where user='root'; mysql> FLUSH PRIVILEGES; # 使ç¨ç¨æ·åæ¿ä»£"root" mysql> quit
# mysql -u root mysql mysql> CREATE DATABASE bobdb; mysql> GRANT ALL ON *.* TO 'bob'@'%' IDENTIFIED BY 'pwd'; # ä½¿ç¨ localhost æ¿ä»£ % æ¥éå¶ç½ç»è®¿é® mysql> DROP DATABASE bobdb; # å 餿°æ®åº bobdb mysql> DROP USER bob; # å é¤ç¨æ· bob mysql> DELETE FROM mysql.user WHERE user='bob and host='hostname'; # å é¤ mysql æ°æ®åº user è¡¨ä¸ user=bob,host=hostname çè®°å½ mysql> FLUSH PRIVILEGES;
/etc/my.cnf
å
å«çº¦å®ç IP å°åãé常为 bind-address =
ç»å®å°åã
# mysql -u root mysql mysql> GRANT ALL ON bobdb.* TO bob@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'PASSWORD'; mysql> REVOKE GRANT OPTION ON foo.* FROM bar@'xxx.xxx.xxx.xxx'; mysql> FLUSH PRIVILEGES; # ä½¿ç¨ 'hostname' ä¹å¯ä¸º '%' æ¥å®å ¨è®¿é®
# mysqldump -u root -psecret --add-drop-database dbname > dbname_sql.dump # mysql -u root -psecret -D dbname < dbname_sql.dumpå¤ä»½åæ¢å¤ææçæ°æ®åºï¼
# mysqldump -u root -psecret --add-drop-database --all-databases > full.dump # mysql -u root -psecret < full.dumpè¿é mysql root çå¯ç 为 "secret"ï¼-p é项å颿²¡æç©ºæ ¼ãå½åç¬ä½¿ç¨ -p é项(ä¸è·å¯ç )ï¼å½ä»¤è¡æç¤ºç¬¦åä¼è¦æ±è¾å ¥å¯ç ã
sqlite3
ã
# sqlite database.db .dump > dump.sql # å¤ä»½ # sqlite database.db < dump.sql # æ¢å¤
sqlite database_v2.db .dump | sqlite3 database_v3.db
usrquota
å° fstab çæè½½ç±»åä¸ï¼ä¸¾ä¸ªä¾åï¼
/dev/sda2 /home reiserfs rw,acl,user_xattr,usrquota 1 1
# mount -o remount /home
# mount # æ£æ¥ usrquota å·²ç»æ¿æ´»ï¼å¦åéå¯
ç¨ quotacheck
åå§å quota.user æä»¶ã
# quotacheck -vum /home
# chmod 644 /home/aquota.user # è®©ç¨æ·æ£æ¥èªå·±çé
é¢
ç¨èæ¬(e.g. SuSE ç /etc/init.d/quotad)æ quotaon
æ¥å¯ç¨éé¢ï¼
quotaon -vu /homeæ£æ¥é é¢å¯ç¨æ åµï¼
quota -v
options QUOTAä¸ Linux 䏿 ·ï¼æ·»å éé¢å° fstab é项(æ¯ userquotaï¼è䏿¯ usrquota)ä¸ï¼
/dev/ad0s1d /home ufs rw,noatime,userquota 2 2
# mount /home # éæ°æè½½ååº
å¨ /etc/rc.conf ä¸å¯ç¨ç£çéé¢å¹¶å¼å¯ quota æå¡ã
# grep quotas /etc/rc.conf enable_quotas="YES" # å¨å¯å¨æ¶æå¼éé¢(æè "NO") check_quotas="YES" # å¨å¯å¨æ¶æ£æ¥éé¢(æè "NO") # /etc/rc.d/quota start
edquota
æ¥å¯¹åç¨æ·è¿è¡éå¶ãä¸ä¸ª quota ä¹å¯ç»è®¸å¤ç¨æ·å¤ç¨ãè½ç¶ quota å®ç°ä¹é´çæä»¶ç»æä¸åï¼ä½å
¶åçæ¯ç¸åçï¼éå¶èç¹(inodes)æ°é以å使ç¨è
å¯ä»¥åç¨çç£çåºåæ°éãOnly change the values of soft and hard. å¦ææªæå®ï¼é»è®¤åºå大å°ä¸º 1kãä½¿ç¨ edquota -t
设置 grace æ¶é´ã举个ä¾åï¼
# edquota -u colin
Disk quotas for user colin (uid 1007): Filesystem blocks soft hard inodes soft hard /dev/sda8 108 1000 2000 1 0 0
Quotas for user colin: /home: kbytes in use: 504184, limits (soft = 700000, hard = 800000) inodes in use: 1792, limits (soft = 0, hard = 0)
edquota -p
ç¨æ¥å¤ç¨ä¸ä¸ª quota ç»å
¶ä»ç¨æ·ã举个ä¾åï¼å¤ç¨ææç¨æ·çéé¢ç»ææç¨æ·ï¼
# edquota -p refuser `awk -F: $3 > 499 {print $1}' /etc/passwd`
# edquota -p refuser user1 user2 # å¤ç¨ç» 2 ä¸ªç¨æ·
quota
(æä»¶ quota.user å¿
é¡»å¯è¯») æ¥å¯ä»¥æ£æ¥ä»ä»¬çéé¢ãRoot å¯ä»¥æ¥çææç¨æ·çéé¢ã
# quota -u colin # æ¥çç¨æ·çéé¢ # repquota /home # ææç¨æ·å¨è¿ä¸ªååºä¸çé颿 åµ
grep
  模å¼å¹é
sed
Â Â æ¥æ¾å¹¶æ¿æ¢å符串æå符cut
  ä»ä¸ä¸ªæ è®°å¼å§æå°ææå®åæ°æ®sort
  æåæ¯ææ°åæåºuniq
  å é¤ä¸ä¸ªæä»¶ä¸éå¤è¡# ifconfig | sed 's/ / /g' | cut -d" " -f1 | uniq | grep -E "[a-z0-9]+" | sort -r # ifconfig | sed '/.*inet addr:/!d;s///;s/ .*//'|sort -t. -k1,1n -k2,2n -k3,3n -k4,4nsed çæ¨¡å¼å符串ä¸ç第ä¸ä¸ªå符æ¯ä¸ä¸ª tabãè¦å¨å½ä»¤æ§å¶å°ä¸è¾å ¥ tabï¼å¯ä»¥ä½¿ç¨ ctrl-v ctrl-tabã
# cmd 1> file # éå®åæ åè¾åºå° fileã # cmd 2> file # éå®åæ åé误è¾åºå° fileã # cmd 1>> file # éå®åæ åè¾åºå¹¶è¿½å å° fileã # cmd &> file # éå®åæ åè¾åºåæ åé误è¾åºå° fileã # cmd >file 2>&1 # éå®åæ åé误è¾åºå°æ åè¾åºç¶åéå®åå° fileã # cmd1 | cmd2 # cmd1 çè¾åºéè¿ç®¡éè¿æ¥å° cmd2 çè¾å ¥ # cmd1 2>&1 | cmd2 # cmd1 çè¾åºåé误è¾åºéè¿ç®¡éè¿æ¥å° cmd2 çè¾å ¥ä¿®æ¹ä½ çé ç½®æä»¶ ~/.bashrc (ä¹å¯ä»¥æ¯ ~/.bash_profile)ãä¸åæ¡ç®é常æç¨ï¼ä½¿ç¨". .bashrc"éæ°å è½½ã
# in .bashrc bind '"\e[A"':history-search-backward # 使ç¨ä¸ä¸é®æ¥æ¾ bind '"\e[B"':history-search-forward # åå²å½ä»¤ãæ ä»·ä¹å®! set -o emacs # Set emacs mode in bash (çä¸é¢) set bell-style visible # Do not beep, inverse colors # 设置ä¸ä¸ªæ¼äº®çæç¤ºç¬¦å [user@host]/path/todir> PS1="\[\033[1;30m\][\[\033[1;34m\]\u\[\033[1;30m\]" PS1="$PS1@\[\033[0;33m\]\h\[\033[1;30m\]]\[\033[0;37m\]" PS1="$PS1\w\[\033[1;30m\]>\[\033[0m\]"
# è¦æ£æ¥å½åå¯ç¨å«å(alias)ï¼åªéç®åè¾å ¥å½ä»¤ alias alias ls='ls -aF' # æ·»å æç¤ºç¬¦(*/=>@| å ¶ä¸ä¹ä¸) alias ll='ls -aFls' # æ¸ å alias la='ls -all' alias ..='cd ..' alias ...='cd ../..' export HISTFILESIZE=5000 # 巨大çåå²è®°å½ export CLICOLOR=1 # 使ç¨é¢è²(妿å¯ç¨) export LSCOLORS=ExGxFxdxCxDxDxBxBxExEx
# cmd >& file # éå®åæ åè¾åºåæ åé误è¾åºå° fileã # cmd >>& file # è¿½å æ åè¾åºåæ åé误è¾åºå° fileã # cmd1 | cmd2 # cmd1 çè¾åºéè¿ç®¡éè¿æ¥å° cmd2 çè¾å ¥ # cmd1 |& cmd2 # cmd1 çè¾åºåé误è¾åºéè¿ç®¡éè¿æ¥å° cmd2 çè¾å ¥Csh/tcsh ç设置å¨
~/.cshrc
ä¸ï¼ä½¿ç¨"source .cshrc"æ¥éæ°å è½½ãä¾åï¼
# in .cshrc alias ls 'ls -aF' alias ll 'ls -aFls' alias la 'ls -all' alias .. 'cd ..' alias ... 'cd ../..' set prompt = "%B%n%b@%B%m%b%/> " # å user@host/path/todir> set history = 5000 set savehist = ( 6000 merge ) set autolist # æ§å¶å½ä»¤è¡¥å ¨ååéè¡¥å ¨ set visiblebell # 使ç¨éªå¨å±å¹çæ¹å¼æ¥å代è鸣å¨é¸£å«
# Bindkey åé¢è² bindkey -e Select Emacs bindings # å°å½ä»¤è¡ç¼è¾å¨åæ¢å°emacsæ¨¡å¼ bindkey -k up history-search-backward # 使ç¨ä¸ä¸é®æ¥æç´¢ bindkey -k down history-search-forward setenv CLICOLOR 1 # 使ç¨é¢è²(å¯è½çè¯) setenv LSCOLORS ExGxFxdxCxDxDxBxBxExEx该 emacs 模å¼å°ä½¿ç¨ emacs å¿«æ·é®æ¥ä¿®æ¹å½ä»¤æç¤ºè¡ãè¿æ¯é常æç¨ç(ä¸å为 Emacs ç¨æ·)ãæå¸¸ç¨çå½ä»¤å¦ä¸ï¼
åºç¡ | èæ¬å®ä¾ | sed/å®ç¨å½ä»¤
Bourne shellè¯æ³¨ï¼Shell åå¨å¾å¤ç§ï¼å¦ bash(Bourne Again Shell),csh(C Shell),tcsh(TC Shell),zsh(Z Shell) çãéè¿ ps å½ä»¤å¯è¯å«åºæ£å¨è¿è¡çæ¯åªç§ Shellã (/bin/sh) åå¨äºææç Unix ç³»ç»ä¸ï¼å¹¶ä¸ç¨å¥¹åçèæ¬æ¯(å®å ¨)å¯ç§»æ¤çï¼man 1 sh
æ¯ä¸ä¸ªå¥½çåèã
variable=value
çå½ä»¤æ ¼å¼è®¾ç½®åéï¼å
¶ä¸ variable æ¯åéåç§°ï¼valueæ¯æç®èµç»è¯¥åéçå¼ãä½¿ç¨ $variable è·ååéå¼ã
MESSAGE="Hello World" # èµäºä¸ä¸ªå符串 PI=3.1415 # èµäºä¸ä¸ªåè¿å¶å°æ° N=8 TWON=`expr $N * 2` # ç®æ¯è¡¨è¾¾å¼(åªéæ´æ°) TWON=$(($N * 2)) # å¦ä¸ç§è¯æ³ TWOPI=`echo "$PI * 2" | bc -l` # ä½¿ç¨ bc è¿è¡æµ®ç¹è¿ç® ZERO=`echo "c($PI/4)-sqrt(2)/2" | bc -l`å½ä»¤è¡åæ°ï¼
$0, $1, $2, ... # $0 å½ä»¤æ¬èº« $# # å½ä»¤åæ°ä¸ªæ° $* # ææåæ°(ä¹å¯ä»¥æ¯ $@)
$$ # å½åè¿ç¨ ID $? # æåå½ä»¤éåºç¶æç command if [ $? != 0 ]; then echo "command failed" fi mypath=`pwd` mypath=${mypath}/file.txt echo ${mypath##*/} # åªæ¾ç¤ºæä»¶å echo ${mypath%%.*} # é¤äºæ©å±åçå ¨è·¯å¾ var2=${var:=string} # 妿var没æè¢«èµå¼ï¼åstringå¼å èµå¼ç»varï¼ # ç¶ååèµå¼ç»var2
for file in `ls` do echo $file done count=0 while [ $count -lt 5 ]; do echo $count sleep 1 count=$(($count + 1)) done myfunction() { find . -type f -name "*.$1" -print # $1 ä¸ºæ¹æ³ç第ä¸ä¸ªåæ° } myfunction "txt"
MYHOME=/home/colin cat > testhome.sh << _EOF # ææ_EOFåç代ç é½ä¼è¿å ¥å° testhome.sh æä»¶ä¸å» if [ -d "$MYHOME" ] ; then echo $MYHOME exists else echo $MYHOME does not exist fi _EOF sh testhome.sh
#!/bin/sh # æ¤èæ¬å¯ä»¥å建ä¸ä»½ä¾å颿尿ºæå°ç PDF æ ¼å¼ç书 if [ $# -ne 1 ]; then # æ£æ¥åæ°æ¯å¦çäº 1 echo 1>&2 "Usage: $0 HtmlFile" exit 1 # 妿ä¸çäº1ï¼é0éåº fi file=$1 # æä»¶åé fname=${file%.*} # æä»¶ååé fext=${file#*.} # æä»¶æ©å±ååé prince $file -o $fname.pdf # www.princexml.com pdftops -paper A4 -noshrink $fname.pdf $fname.ps # å建 postscript å°åå cat $fname.ps |psbook|psnup -Pa4 -2 |pstops -b "2:0,1U(21cm,29.7cm)" > $fname.book.ps ps2pdf13 -sPAPERSIZE=a4 -sAutoRotatePages=None $fname.book.ps $fname.book.pdf # å¨ Windows ä¸ä½¿ç¨ #a4 å #None! exit 0 # exit 0 æä¸ºæå
sed 's/string1/string2/g' # æ¿æ¢ string1 为 string2 sed -i 's/wroong/wrong/g' *.txt # ç¨ g æ¿æ¢ææè¿åçåè¯ sed 's/\(.*\)1/\12/g' # ä¿®æ¹ anystring1 为 anystring2 sed '/<p>/,/<\/p>/d' t.xhtml # å é¤ä»¥ <p> å¼å§ï¼ä»¥ </p> ç»å°¾çè¡ sed '/ *#/d; /^ *$/d' # å 餿³¨éåç©ºè¡ sed 's/[ \t]*$//' # å é¤è¡å°¾ç©ºæ ¼ (ä½¿ç¨ tab ä»£æ¿ \t) sed 's/^[ \t]*//;s/[ \t]*$//' # å é¤è¡å¤´å°¾ç©ºæ ¼ sed 's/[^*]/[&]/' # æ¬ä½é¦å符 [] top -> [t]op sed = file | sed 'N;s/\n/\t/' > file.num # 为æä»¶æ·»å è¡å·
[\^$.|?*+() # ç¹æ®å符ï¼å ¶ä»å符å°å¹é èªèº« \ # 转ä¹ç¹æ®å符ï¼å½ææ®éåç¬¦å¯¹å¾ * # éå¤å项 0 次æå¤æ¬¡ . # å个åç¬¦é¤æ¢è¡ç¬¦ .* # å¹é 0 个æå¤ä¸ªå符 ^ # å¹é å符串è¡å¼å§å¤ $ # å¹é å符串è¡ç»å°¾å¤ .$ # å¹é åç¬¦ä¸²è¡æåä¸ä¸ªå符 ^ $ # å¹é åä¸ªç©ºæ ¼çè¡ [^A-Z] # å¹é ä»»ä½ä»¥ A-Z å符å¼å§çè¡
sort -t. -k1,1n -k2,2n -k3,3n -k4,4n # æåº IPv4 æ ¼å¼ç IP å°å echo 'Test' | tr '[:lower:]' '[:upper:]' # è½¬æ¢æå¤§å echo foo.bar | cut -d . -f 1 # è¿å foo PID=$(ps | grep script.sh | grep bin | awk '{print $1}') # æ£å¨è¿è¡å为 script èæ¬ç PID PID=$(ps axww | grep [p]ing | awk '{print $1}') # ping ç PID (w/o grep pid) IP=$(ifconfig $INTERFACE | sed '/.*inet addr:/!d;s///;s/ .*//') # Linux IP=$(ifconfig $INTERFACE | sed '/.*inet /!d;s///;s/ .*//') # FreeBSD if [ `diff file1 file2 | wc -l` != 0 ]; then [...] fi # æä»¶æ¹åäºï¼ cat /etc/master.passwd | grep -v root | grep -v \*: | awk -F":" \ # å建 http passwd '{ printf("%s:%s\n", $1, $2) }' > /usr/local/etc/apache2/passwd testuser=$(cat /usr/local/etc/apache2/passwd | grep -v \ # æ¥ç passwd ä¸çç¨æ· root | grep -v \*: | awk -F":" '{ printf("%s\n", $1) }' | grep ^user$) :(){ :|:& };: # bash fork ç¸å¼¹ãä¼å¹²æä½ çæºå¨è¯æ³¨ï¼http://forum.ubuntu.org.cn/viewtopic.php?t=92074 tail +2 file > file2 # å 餿件ç第ä¸è¡æä½¿ç¨ä¸ç§å°ä¼ä¿©æ¥ä¸æ¬¡æ´æ¹è®¸å¤æä»¶çæ©å±åã举个ä¾åï¼ä» .cxx å° .cppãæé¤æåç
| sh
å
æµè¯ä¸ä¸ãä½ åæ ·å¯ä»¥ä½¿ç¨å½ä»¤ rename
æ¥åè¿äºï¼å¦æå®è£
äºçè¯ãæè
ä½¿ç¨ bash å
建å½ä»¤ã
# ls *.cxx | awk -F. '{print "mv "$0" "$1".cpp"}' | sh # ls *.c | sed "s/.*/cp & &.$(date "+%Y%m%d")/" | sh # å¦ æ·è´ *.c æ *.c.20080401 # rename .cxx .cpp *.cxx # éå½åææ .cxx æ .cpp # for i in *.cxx; do mv $i ${i%%.cxx}.cpp; done # bash å 建ç
strcpy(newstr,str) /* æ·è´ str å° newstr */ expr1 ? expr2 : expr3 /* if (expr1) expr2 else expr3 */ x = (y > z) ? y : z; /* if (y > z) x = y; else x = z; */ int a[]={0,1,2}; /* åå§åæ°ç» (æè a[3]={0,1,2}; */ int a[2][3]={{1,2,3},{4,5,6}}; /* åå§åäºç»´æ°ç» */ int i = 12345; /* ä» i è½¬æ¢æ char str */ char str[10]; sprintf(str, "%d", i);
#include <stdio.h> main() { int number=42; printf("The answer is %i\n", number); }ç¼è¯ï¼
# gcc simple.c -o simple # ./simple The answer is 42
*pointer // æå对象çæé &obj // 对象 obj çå°å obj.x // ç±»(对象) obj æå x pobj->x // æé pobj æåç±»(对象)æå x // (*pobj).x å pobj->x
#ifndef IPV4_H #define IPV4_H #include <string> namespace GenericUtils { // å建 namespace class IPv4 { // ç±»å®ä¹ public: IPv4(); ~IPv4(); std::string IPint_to_IPquad(unsigned long ip);// æåæ¹æ³æ¥å£ }; } //namespace GenericUtils #endif // IPV4_H
#include "IPv4.h" #include <string> #include <sstream> using namespace std; // ä½¿ç¨ namespace using namespace GenericUtils; IPv4::IPv4() {} // é»è®¤æé /ææå½æ° IPv4::~IPv4() {} string IPv4::IPint_to_IPquad(unsigned long ip) { // æåæ¹æ³å®ç° ostringstream ipstr; // 使ç¨åç¬¦ä¸²æµ ipstr << ((ip &0xff000000) >> 24) // ä½å³ç§» << "." << ((ip &0x00ff0000) >> 16) << "." << ((ip &0x0000ff00) >> 8) << "." << ((ip &0x000000ff)); return ipstr.str(); }
#include "IPv4.h" #include <iostream> #include <string> using namespace std; int main (int argc, char* argv[]) { string ipstr; // å®ä¹åé unsigned long ipint = 1347861486; // æ°åå½¢å¼ç IP GenericUtils::IPv4 iputils; // å建ä¸ä¸ªç±»ç对象 ipstr = iputils.IPint_to_IPquad(ipint); // è°ç ç±»çæåæ¹æ³ cout << ipint << " = " << ipstr << endl; // è¾åºç»æ return 0; }ç¼è¯åæ§è¡ï¼
# g++ -c IPv4.cpp simplecpp.cpp # ç¼è¯æç®æ æä»¶ # g++ IPv4.o simplecpp.o -o simplecpp.exe # è¿æ¥ç®æ 代ç ï¼çæå¯æ§è¡æä»¶ # ./simplecpp.exe 1347861486 = 80.86.187.238使ç¨
ldd
èæ¬æ£æ¥å¹¶ååºå¯æ§è¡ç¨åºæä¾èµçå
±äº«åºæä»¶ãè¿ä¸ªå½ä»¤åæ ·å¯ä»¥ç¨æ¥æ£æ¥å
±äº«åºç丢失ã
# ldd /sbin/ifconfig
CC = g++ CFLAGS = -O OBJS = IPv4.o simplecpp.o simplecpp: ${OBJS} ${CC} -o simplecpp ${CFLAGS} ${OBJS} clean: rm -f ${TARGET} ${OBJS}
Linux ææ¡£ | en.tldp.org |
Linux Man Pages | www.linuxmanpages.com |
Linux å½ä»¤ç®å½ | www.oreillynet.com/linux/cmd |
Linux doc man howtos | linux.die.net |
FreeBSD æå | www.freebsd.org/handbook |
FreeBSD Man Pages | www.freebsd.org/cgi/man.cgi |
FreeBSD ç¨æ· wiki | www.freebsdwiki.net |
Solaris Man Pages | docs.sun.com/app/docs/coll/40.10 |
Rosetta Stone for Unix | bhami.com/rosetta.html (a Unix command translator) |
Unix guide cross reference | unixguide.net/unixguide.shtml |
Linux å½ä»¤è¡å表 | www.linuxguide.it/commands_list.php |
Short Linux reference | www.pixelbeat.org/cmdline.html |
That's all folks!