**如何快速搜尋筆記內容**
建議使用 Firefox 為主要瀏覽器,只要輸入 / 然後在頁面最下方輸入要搜尋的關鍵字即可,往下搜尋按 F3。
uptime
uptime awk '{print "up " $1 /60 " minutes"}' /proc/uptime w
系統開關機記錄
who -b last reboot last shutdown
$> dig +short myip.opendns.com @resolver1.opendns.com $> host myip.opendns.com resolver1.opendns.com $> dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}' $> myip="$(dig +short myip.opendns.com @resolver1.opendns.com)" $> echo "My WAN/Public IP address: ${myip}"
強制關機
NOTE: 有些時候,因為某些原因,例如 I/O Error 狀況導致系統無法關機,可以使用這個。
echo 1 > /proc/sys/kernel/sysrq echo o > /proc/sysrq-trigger <=== 這是ㄛ
強制重啟
echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger
重啟後不要執行 fsck
shutdown -rf
-r Reboot after shutdown
-f Skip fsck on reboot
CentOS/RedHat 5.11)
編輯 /etc/modprobe.conf 加上這一行 install ipv6 /bin/true 編輯 /etc/sysconfig/network 加上這兩行 NETWORKING_IPV6=no IPV6INIT=no 驗證 > lsmod | grep ipv6 > ifconfig ;不會出現 inet6 addr:... 這一行
#> dmsetup ls #> ls -l /dev/disk/by-path #> ls -l /dev/disk/by-id # > ls -l /dev/disk/by-uuid
先註解舊 MAC #> sed -i 's/HWADDR/#HWADDR/g' /etc/sysconfig/network-scripts/ifcfg-eth0 在變更新的 MAC #> service network stop #> ip link set eth0 address xx:xx:xx:xx:xx:xx #> service network start
永久變更
#> vi /etc/sysconfig/network-scripts/ifcfg-eth0 MACADDR=12:34:56:78:90:ab
注意:不用使用 HWADDR。
監看即時 log 當中還能搜尋關鍵字
#> less +F my.log Ctrl + c 進入 nomal mode 後,可以使用搜尋功能 回復原有模式 shift +f (F)
備份已安裝的套件清單
$ dpkg --get-selections $ dpkg --get-selections > /backup/installed-software.log
$ rpm -qa $ rpm -qa > /backup/installed-software.log OR remove software version number (recommended): $ rpm -qa --qf "%{NAME}\n" | sort > /backup/installed-software.log
回復清單上的所有套件
# dpkg --set-selections < /backup/installed-software.log Once list is imported, use the dselect command or other tools to install the packages, enter: # dselect Select 'i' for install the software. OR use the following command: # apt-get dselect-upgrade
# LIST="$( cat /backup/installed-software.log )" If you are using the yum command, type the following bash for loop to install all software: # for s in $LIST; do yum -y install $s; done Or try out the following command (HT to gt): # yum -y install $(cat /backup/installed-software.log)
A Note About RHEL version 4
If you are using RHEL/CentOS v4.x or older, enter: # for s in $LIST; do up2date -i $s; done Alternatively, you can use the following up2date command: # up2date -i $(cat /backup/installed-software.log)
方法一 telnet <IP> <port> 方法二 nc -zv <IP> <port>
使特定檔案無法被任何帳號刪除及變更(包含 root)
chattr +i /etc/passwd lsattr /etc/passwd
TIPs:
+i , add immutable attribute
對整個目錄
chattr -R +i my-dir/-i, remove immutable attribute
使特定檔案的內容,只能插入新行(append mode),不可作內容刪除
chattr +a /var/log/syslog
本機:8888 對應至 遠端 irc.freenode.net:6667
ssh -L 8888:irc.freenode.net:6667 myuser@randomhost.net
假使 SSH port 非標準,而是 2745 時
ssh -p2745 -L8888:irc.freenode.net:6667 myuser@randomhost.net
替代 ifconfig 指令
顯示所有網卡資訊 ip addr ip a 顯示 eth0 網卡資訊 ip a show eth0 開啟/關閉網卡 ip link set dev eth0 { up | down } 顯示所有的網路裝置 ip link show ip l show 設定 IP (非永久) ip a add 192.168.1.200/255.255.255.0 dev eth0 移除 IP (非永久) ip a del 192.168.1.200/255.255.255.0 dev eth0 顯示 default gateway 及路由表 ip route show ip r show 網路即時狀態 ip -s link 顯示 ARP 紀錄 (NOTE: 查詢連接網路設備的 MAC address 與 IP 對應表) ip neigh show ip n show 清除 ARP 清單裡的某個 IP 紀錄 ip -s -s n f <ip-address> 線上求助 ip a help
Q: 如果磁碟曾經作過 GPT 磁區,之後再用舊版 Linux 安裝系統時,可能會遇到錯誤 Your boot partition is on a disk using the GPT partitioning Scheme but this machines cannot boot using GPT. ,解決方法是必須將磁碟定義為 MBR,步驟:
在安裝 CentOS 過程,選擇語言時,按下 CTRL+ALT+F2,輸入指令
/usr/sbin/parted -s /dev/sda mklabel msdos
如果想定義磁碟為 GPT 磁區
/usr/sbin/parted -s /dev/sda mklabel gpt
補充:
MBR 主要用來做系統開機的磁區
MBR 的磁碟限制是 2TB,GPT 是 1024TB
Q: 安裝 CentOS 5.x 在 > 2TB 磁碟,無法開機
安裝 CentOS 5/6 在 > 2TB 磁碟,而且硬體是用 BIOS 開機(不是新的 UEFI),安裝後的 Linux 會無法正常開機,原因是 CentOS 的光碟安裝程序並不支援 GPT 磁區分割。
當磁碟容量超過 2TB 時,要新增一個 2TB 以上的磁區,工具軟體必須改用 parted。
#> parted /dev/xvdc (parted) mklabel gpt (parted) print
檢查磁碟總容量 4398 GB。
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
(parted) mkpart primary ext3 0 4398GB (parted) print
依照總容量切割磁區
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 4398GB 4398GB primary
(parted) set 1 lvm on (parted) print
TIPs:
(parted) mkpart
Partition name? []? primary
File system type? ext3
Start? 0
End? -1-1 最大磁碟空間
設定磁區標籤為 lvm,1 是磁區的編號。
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 4398GB 4398GB primary lvm
(parted) quit #> fdisk -l
...
WARNING: GPT (GUID Partition Table) detected on '/dev/xvdc'! The util fdisk doesn't support GPT. Use GNU Parted.
WARNING: The size of this disk is 4.4 TB (4398046511104 bytes).
DOS partition table format can not be used on drives for volumes
larger than 2.2 TB (2199023255040 bytes). Use parted(1) and GUID
partition table format (GPT).
Disk /dev/xvdc: 4398.0 GB, 4398046511104 bytes
255 heads, 63 sectors/track, 534698 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/xvdc1 1 267350 2147483647+ ee EFI GPT
yum install make libtool autoconf subversion git cvs wget libogg-devel gcc gcc-c++ pkgconfig
CentOS 6
編輯 /etc/sysconfig/i18n
英文 LANG="en_US.UTF-8" 繁體中文 LANG="zh_TW.UTF-8" 簡體中文 LANG="zh_CN.UTF-8"
// 檢查目前的 swap 配置 > free > swapon -s // 關閉 swap > swapon /dev/sda3 // 開啟 swap > swapoff /dev/sda3 // 製作一個 swap 系統 > mkswap /dev/sda3
(http://wiki.centos.org/zh-tw/FAQ/CentOS6)
沒有 setup 指令
CentOS 5:
yum install setuptool system-config-network* system-config-firewall* system-config-securitylevel-tui system-config-keyboard ntsysv
CentOS 6/7:
yum install setuptool yum install system-config-network* yum install system-config-securitylevel-tui yum install system-config-keyboard
預設會啟用 NetworkManager 管理網路,建議關閉
service NetworkManager stop chkconfig NetworkManager off
移除 SELinux
在 6.4 之前版本,套件有 bug,當使用 yum 安裝套件時,會卡在 SELinux 套件升級,並且重開機後會造成 kernel panic 無法開機。
yum remove selinux*
關閉防火牆
// CentOS 7 #> systemctl stop firewalld.service #> systemctl disable firewalld.service #> firewall-cmd --state
網路設定
// CetOS 7 #> nmcli d #> nmtui
架設寄信主機為 192.168.21.75 (smtp.my.domain)
編輯 /etc/mail/sendmail.cf
# "Smart" relay host (may be null) DS[192.168.21.75] 或者是 # "Smart" relay host (may be null) DSsmtp.my.domain
需重啟 sendmail 服務
php -i
php -m | grep imagick
編輯 /etc/php.ini
date.timezone = 'Asia/Taipei'
由於 User 的 Home 目錄內有許多隱藏檔,若要完整複製它們,有兩個方法:
方法一:可以複製成一個新目錄
cd /home cp -a user1/ user1_new/
方法二:複製到一個現有目錄內
cd /home cp -a user1/.[^.]* user1_new/
原因:對於比較大的 filesystem,預設在 mount 次數 > 30 或 180 天後,系統若有重新開機,會自動作 FSCK,這會使 downtime 非常長。
檢查檔案系統資訊
# tune2fs -l /dev/VolGroup/LogVol
Mount count: 1
Maximum mount count: 30
Last checked: Tue Apr 29 13:09:15 2014
Check interval: 15552000 (6 months)
方法一:永久關閉 - tune2fs(適用於 RedHat 4.x/5.x)
// 只關閉天數限制 tune2fs -i 0/dev/VolGroup/LogVol
// 關閉 mount 次數與天數限制 tune2fs -c 0 -i 0/dev/VolGroup/LogVol
方法二:永久關閉 - fstab(適用於 RedHat 4.x/5.x)
編輯 /etc/fstab,在第 6 欄位修改成 0
/dev/VolGroup00/arclogLV /opt/oracle/arclog ext3 defaults 1 0
方法三:暫時關閉 - 重啟系統前(適用於 RedHat 4.x/5.x)
重啟指令
shutdown -rf
-r Reboot after shutdown
-f Skip fsck on reboot
方法四:暫時關閉 - 重啟系統後(適用於 RedHat 4.x/5.x)
在開機選單畫面,按 e > 在 kernel 行最後加上 fastboot。
在 AIX 5.3 使用 ls -l 時,有時會無法顯示檔案的日期,替代方式有:
# istat istflr.MMDB.CAPMM02.CAP.log0924.gz Inode 11 on device 50/6 File Protection: rw-r--r-- Owner: 801(istflr) Group: 801(db2adm) Link count: 1 Length 5572891 bytes Last updated: Tue Sep 24 09:22:23 TAIST 2013 Last modified: Tue Sep 24 09:20:59 TAIST 2013 Last accessed: Thu Jan 9 14:28:05 TAIST 2014
# dhclient eth0 # grep dhcp-server-identifier /var/lib/dhclient/dhclient.leases
#> cat /proc/cmdline console=ttyAS0,115200 root=/dev/sdb1 rootfstype=ext3 rw nwhwconf=device:eth0,hwaddr:24:cf:21:ba:22:46 phyaddr:0,watchdog:5000 mem=120M bigphysarea=2048
// 基本運算
#> bc scale=3 ;設定小數點 3 位 239/60 3.983 quit
// 16 進制換算成 10 進制
#> echo "ibase=16;A7" | bc 167
// 2 進制換算成 10 進制
#> echo "ibase=2;11111111" | bc 255
cd /etc/httpd/conf.d mv welcome.conf welcome.conf.disabled service httpd restart
// 建立系統用帳號
CentOS/RedHat)
groupadd -r asterisk useradd -r -g asterisk -d /var/lib/asterisk -M asterisk
Ubuntu/Debian)
addgroup --system asterisk adduser --system --ingroup asterisk --home /var/lib/asterisk --no-create-home --shell /bin/bash asterisk
// 強迫使用者在第一次登入後,修改他們的登入密碼
先將帳號鎖定 # usermod -L <username> 變更帳號期限 # chage -d 0 <username> 解除帳號鎖定 # usermod -U <username>
// 修改既有帳號的設定,如註解 Comment
# usermod -c "John" john
// 限制某帳號不可遠端登入,但可以由其他允許帳號從遠端登入後,執行 su 切換到該帳號
以 CentOS 為例:
1. 編輯 /etc/security/access.conf,加上這幾行
# The line 'cron crond' is required +:devrpt:cron crond tty1 tty2 tty3 tty4 tty5 tty6 -:devrpt:ALL
TIPs:
內容格式為 permission : username: origins
permission + 允許 或 - 拒絕
username 帳號
origins 來源,這可以是 tty 名稱'、主機/網域名稱、IP 。注意:在此例,必須加上 cron crond 這一行,否則該帳號的 crontab 會無法工作。
2. 對於不同的登入服務,需要修改相應的安全設定檔
視需要將以下內容加入其中一項或多項檔案內
# Limited users for remote login via telnet # Check the file /etc/security/access.conf account required pam_access.so
// 鎖定帳號但不移除
Lock #> passwd -l john #> chage -E 0 john Unlock #> passwd -u john #> chage -E john
TIPs:
注意:passwd 雖然可以鎖定帳號,但仍可以用 SSH-Key 登入。
安裝 sshfs 套件
for CentOS) 先安裝 EPEL 套件庫 yum install fuse sshfs modprobe fuse lsmod fuse for Ubuntu) apt-get install sshfs
使用 sshfs
sshfs user@remote_host:/remote_directory /local_mount_point
設定自動掛載
1. 確認 module fuse 會自動啟動
2. 編輯 /etc/fstab
sshfs#root@10.233.10.212:/ /mnt/ssh fuse defaults 0 0
不解開檔案的搜尋方式 tar fzt myapp.tar.gz | grep keyword 壓縮檔案目錄時,想保留完整原始路徑,但都會出現訊息:tar: Removing leading `/' from member names 試試這 tar cf nagios.tar -C/ etc/nagios
必須先修改 sudoers
以用戶 john 執行 SHELL sudo -u john bash -c "whoami" 以用戶 john 開啟 vnc 服務,-H 可保持用戶的 HOME;否則會是 /root。 sudo -H -u john bash -c "vncserver" 以用戶 devrpt 執行 db2_get_tbs_usage.sh -d devrptdb sudo -u devrpt -H -s /usr/local/bin/db2_get_tbs_usage.sh -d devrptdb 或 sudo -u devrpt -H bash -c "/usr/local/bin/db2_get_tbs_usage.sh -d devrptdb"
編輯 sudoers
#> visudo alang ALL=(devrpt) /bin/bash,/usr/local/bin/db2_get_tbs_usage.sh
TIPs:
內容格式為
使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令如果要執行 SHELL Scripts,除了 scripts 路徑以外,還要加上 /bin/bash。
不需修改 sudoers,但只能適用 root 執行
su -l john -c "whoami"
帳號 user1 需要有 root 權限,但不想讓他知道 root 密碼
#visudo user1 ALL=(ALL) ALL
NOTEs:
user1 登入後,執行 sudo -i 或 sudo -s ,輸入 user1 密碼後,就可以成為 root。
啟用模組 modprobe <module name> option=<option name> 列出已啟用的模組 lsmod 檢查特定模組的參數值 cat /sys/module/<module name>/<option name>
列出已安裝的模組 - instmodsh
#instmodsh cmd? l Installed modules are: Perl asterisk-perl cmd? quit
備份或複製目錄,確保檔案及其屬性完全相同
rsync -au --delete <source-dir> <target-dir>
--delete 當 <source-dir> 裡的檔案被刪除時,<target-dir> 裡的同個檔案也會被刪除。
複製目錄下大量檔案,但不要覆蓋原有檔案也不要出現提示(Rsync)
rsync -avh --ignore-existing source-dir/ target-dir/
複製前先用這指令列出檔案清單
rsync -anvh --ignore-existing source-dir/ target-dir/ > files.list
mkbootdisk --iso --device ./boot.iso `uname -r`
在 CetOS5.5 執行會出現錯誤:cp: cannot stat `/usr/lib/syslinux/isolinux.bin': No such file or directory
Ans: 這是因為此版的 mkbootdisk script 內容有一行錯誤
if [ -n "$isoimage" ]; then cfgfile=$MOUNTDIR/isolinux/isolinux.cfg bootmsg=$MOUNTDIR/isolinux/boot.msg # create an iso image; the directory is all we need [ -n "$verbose" ] && echo -n "Installing isolinux... " mkdir $MOUNTDIR/isolinux #cp /usr/lib/syslinux/isolinux.bin $MOUNTDIR/isolinux <----- 改這行 cp /usr/share/syslinux/isolinux.bin $MOUNTDIR/isolinux [ -n "$verbose" ] && echo don
// 下載 jre-6u24-linux-i586-rpm.bin, jdk-6u24-linux-i586-rpm.bin
chmod u+x jre-6u24-linux-i586-rpm.bin ./jre-6u24-linux-i586-rpm.bin ## java ## alternatives --install /usr/bin/java java /usr/java/jre1.6.0_45/bin/java 20000 ## javaws ## alternatives --install /usr/bin/javaws javaws /usr/java/jre1.6.0_45/bin/javaws 20000 ## Java Browser (Mozilla) Plugin 32-bit ## alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/jre1.6.0_45/lib/i386/libnpjp2.so 20000 ## Java Browser (Mozilla) Plugin 64-bit ## alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jre1.6.0_45/lib/amd64/libnpjp2.so 20000
確認安裝
# java -version java version "1.6.0_24" Java(TM) SE Runtime Environment (build 1.6.0_24-b07) Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
自 2010 年起所製造的硬碟開始使用 4096-byte(4K) sector size,而 Linux 在預設安裝下仍使用 512-byte 的磁區,就網路測試的數據顯示,以 ext3 磁區,2TB 的 SATA 硬碟,樣本檔案大小 1TB,作檔案複製時,使用 4K-byte sector 竟比 512-byte sector 減少 7 小時。
指令:
fdisk -> x extra functionality (experts only) -> setting the start sector("b") to 64
測試:
hdparm -tT /dev/sda1
參考連結:
Notes: 並不是所有廠牌的硬碟都有支援 4096-byte sector size。
使用 fdisk 變更 partition table 後,若不想作 reboot 但要立即更新,可以使用指令 partprobe。
Putty 的設定)
敘述:/var/log/btmp 檔案有 1.xGB 以上。
原因:btmp 用來紀錄系統登入的資訊,若出現異常登入現象,會造成此檔增大。
解決:使用 lastb 指令檢查所有登入紀錄是否正常,要避免異常的登入,可以修改 SSH Port。
// 清空 btmp 內容
cat /dev/null > /var/log/btmp
rm ./-1234567.txt
CentOS 5)
( How to mount remote Windows shares )
mount.cifs //winbox/getme /mnt/win -o ip=123.123.123.123,username=sushi,password=yummy
※ mount.cifs 指令在 samba-client 套件內。
關於 SELinux
// 永久 Disable SELinux
重開機後自動關閉
# sed -i 's/SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
手動立即關閉
#setenforce 0
// 檢查 SELinux 的狀態
#sestatus SELinux status: disabled
// 開機時關閉
編輯開機選單
grub append> ro root=/dev/VolGroup00/LogVo100 selinux=0 enforcing=0
校時:
yum install ntp ntpdate pool.ntp.org chkconfig ntpd on service ntpd start
Crontab:
/etc/crontab
10 * * * * root (/usr/sbin/ntpdate tw.pool.ntp.org && /sbin/hwclock -w) &> /dev/null
/etc/cron.hourly/ntpdate.cron:
#!/usr/bin/env bash TIMESVR="192.168.21.86" (/sbin/ntpdate $TIMESVR && /sbin/hwclock -w) > /dev/null
檢查校時:
# ntpstat synchronised to NTP server (204.9.54.119) at stratum 2 time correct to within 121 ms polling server every 64 s # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +w1-wdc.ipv4.got 10.0.77.54 4 u 14 64 377 214.365 -16.459 8.887 clock02.chil01. 204.9.54.119 2 u 15 64 377 278.195 -1.254 0.427 *ntp.your.org .CDMA. 1 u 13 64 377 196.313 -16.884 0.456 LOCAL(0) .LOCL. 10 l 14 64 377 0.000 0.000 0.001
TIPs:
如果 ntpd server 目前時間的偏移量 offset 太大,會造成 ntpd 無法服務,必須先停止 ntpd 服務,然後用 ntpdate 手動校正時間一次,再啟動 ntpd 服務。
變更時區:
for CentOS 5)
# ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
或者
# system-config-date
設定時間:
# date -s "2 OCT 2006 18:00:00" # /sbin/hwclock --systohc
// Proxy 設定
$ export http_proxy=http://username:password@this.is.proxy.ip:port
$ export http_proxy=http://windomain\\username:password@this.is.proxy.ip:port
或 修改 /etc/wgetrc
http_proxy=http://windomain\username:password@this.is.proxy.ip:port/
這裡的 domain 與 username 之間不用雙反斜線。
// 解決:有些下載時,檔名會包含有 URL 字串
wget 'HTTP URL Link'
// 下載整個網頁 HTML 檔(必須開啟 Index of)
wget -r --no-parent http://xxx.xxx.xxx/aaa/
// 各種舊版本的套件庫位址
// 如果想將多個 CD 的 ISO 檔合併成一個 DVD ISO,可以使用附件區的 mkdvdiso.sh,這只能使用在 RedHat/CentOS 版本,使用方法如下
yum install anaconda-runtime mkisofs ./mkdvdiso.sh cd/ /tmp/CentOS-5.5-i386-bin-DVD.iso
TIPs:
所有 CD ISO 檔放在 cd/ 目錄內
必須關閉 SELinux
輸出檔路徑必須是絕對路徑
// 清除最新套件庫清單及暫存的套件檔
yum clean all
// 搜尋套件的某一個檔案
yum whatprovides <*/xxx.so>
// 下載 RPM 套件
yum -y install yum-utils.noarch yumdownloader <package-name> ; Extract downloaded RPM rpm2cpio dekiwiki-10.0.1-3.1.noarch.rpm | cpio -idmv
// 安裝時臨時啟用一個不常用的套件庫位址
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel
// 使用光碟 ISO方式來升級系統
# vi /etc/yum.repo.d/CentOS-Media.repo [c6-local] name=CentOS-$releasever - Media baseurl=file:///mnt/iso/ gpgcheck=0 enabled=0 NOTE: enabled=0,不是 1。將 DVD 掛載為 /mnt/iso。 # yum --disablerepo=\* --enablerepo=c6-local upgrade
// 安裝本機端的 RPM 套件
yum --nogpgcheck install htop-1.0.2-1.el5.rf.x86_64.rpm
// 列出所有套件庫位址
yum repolist yum repolist enabled
// 列出已安裝套件
yum list installed yum list installed |tail -n +3|cut -d' ' -f1 > installed_packages.lst 或 rpm -qa > installed_packages.lst yum -y install $(cat installed_packages.lst)
// 安裝 EPEL 套件庫
EPEL - Extra Packages for Enterprise Linux
rpm -ivh http://mirror01.idc.hinet.net/EPEL/5/i386/epel-release-5-4.noarch.rpm rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/i386/epel-release-6-8.noarch.rpm
// 安裝 ELRepo 套件庫
ELRepo - The Community Enterprise Linux Repository
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org for RHEL-5, CENTOS-5 rpm -Uvh http://elrepo.org/elrepo-release-5-2.el5.elrepo.noarch.rpm for RHEL-6, CENTOS-6 rpm -Uvh http://elrepo.org/elrepo-release-6-3.el6.elrepo.noarch.rpm
// 安裝 RPMforge/RepoForge 套件庫
RPMforge 是由 Dag 及其他包裝者合作維護的。他們為 CentOS 提供超過 5000 個套件,包括 wine、vlc、mplayer、xmms-mp3 及其他受歡迎的媒體工具。它並不是 Red Hat 或 CentOS 的一部份,但卻是為那些發行版本而設計的。
// CentOS 如何補安裝套件組
系統在第一次安裝時,都可以選擇要安裝哪些套件組,假使之後系統要補裝某套件組,例如 GNOME 視窗套件,可以使用這些指令,而不用一一找出有哪些相依性的套件名稱。
列出有哪些套件組可安裝 # yum grouplist 安裝 GNOME 視窗套件組 # yum groupinstall "GNOME Desktop Environment" 移除套件組 # yum groupremove "Office Suite and Productivity" "Dial-up Networking Support"
// 設定 proxy
編輯 /etc/yum.conf
proxy=http://<username>:<password>@<this.is.proxy.ip:<port>/
proxy=http://windowsad\username:password@proxy.server:port/
// 安裝本機上的 RPM
# yum localinstall my.rpm
// 建立 YUM 套件庫主機
安裝套件 createrepo
createrepo /source/path/reas5
很早以前 nslookup 就被 dig 所取代,看看這個新工具的用法:
// 以系統所設的 DNS server(resolv.conf) 查詢網域
$> dig www.osslab.org.tw
// 以指定的 DNS server(8.8.8.8)查詢網域,並且列出所有 type 紀錄
$> dig @8.8.8.8 osslab.org.tw ANY
type 可以設 ANY, A, MX, SIG, etc...
// 顯示所有紀錄且以易讀格式內容輸出
$> dig +multiline +noall +answer +nocmd cyberciti.biz ANY
// 反解 IP
$> dig -x 123.123.123.123
$> dig +short -x 123.123.123.123
// 批次讀取多個 domain name
$> cat /path/to/lookup.txt
+short www.google.com
+short www.osslab.org.tw
$> dig -f /path/to/lookup.txt
// 追查解析路徑
$dig +short +trace www.osslab.org.tw
// 檢查 TTL
$> dig +nocmd +noall +answer +ttlid A www.cyberciti.biz
以 RedHat/CentOS 為例)
http://kbase.redhat.com/faq/docs/DOC-8646
如果按照上述的 SOP 仍是改不了目前的主機名稱,可能是其他地方有作設置,檢查下列的項目:
Ubuntu/Debian)
# vi /etc/hostname [my_host_name] # sudo /etc/init.d/hostname.sh start
其他 Linux)
# sudo echo [my_host_name] > /proc/sys/kernel/hostname
軟體名稱:nbench
官網連結:http://www.tux.org/~mayer/linux/bmark.html
安裝方式
#>tar -xzf nbench-byte-2.2.3.tar.gz
#>cd nbench-byte-2.2.3
#>make
使用方法
#>./nbench
軟體名稱:SysBench
官網連結:http://sysbench.sourceforge.net/
應用範例:http://poller.se/2010/01/rackspace-c...vs-amazon-ec2/
軟體名稱:stress-1.0.2
RPM 安裝檔下載
http://dag.wieers.com/rpm/packages/stress/
使用方法
stress --cpu 2 --io 4 --vm 1 --vm-bytes 128M --timeout 10s
軟體名稱:SysBench
官網:http://sysbench.sourceforge.net/index.html
主機有 floppy 時,將下載的驅動程式磁碟片映像檔,使用 dd 指令寫入空白磁碟片,在使用安裝光碟開機後,輸入
linux dd
主機沒有 floppy 時,將下載的驅動程式磁碟片映像檔,上傳到 FTP/NFS/HTTP 主機,在使用安裝光碟開機後,輸入
linux dd=ftp://ftp.server.domain/this/is/driver.img
CentOS 在 v5 以後版本,kernel 的套件作了些改變,如果要使用 4GB 以上 RAM,系統必須安裝有 kernel-PAE 套件檔,這個套件安裝後系統會新增一個可支援 4GB 以上 RAM 的 kernel,系統在重新開機後若使用這個 kernel 進行開機,系統就可以正常使用 4GB 以上 RAM 了。
#> yum install kernel-PAE
設定VNC作遠端連接時的桌面與本地端桌面為同一個,且每次重開機時自動生效。
//檢查模組 vnc.so 是否存在
shell>locate vnc.so
//開機啟動圖形介面時自動載入 vnc.so
shell>vi /etc/X11/XF86Config
Section "Module" Load "dbe" Load "extmod" ... Load "vnc"
//設定 VNC 的連接認證
shell>vi /etc/X11/XF86Config
Section "Screen" ... Option "SecurityTypes" "VncAuth"
Option "UserPasswdVerifier" "VncAuth"
Option "PasswordFile" "/root/.vnc/passwd" ...
// 修改啟動設定檔 xstartup
$ vi ~/.vnc/xstartup
使用 GNOME 為桌面時
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey #vncconfig -iconic & xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" & #twm & gnome-session –sm-disable gnome-session
使用 KDE 為桌面時
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey #vncconfig -iconic & xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" & twm & startkde &
//變更 VNC 密碼
shell> vncpasswd /root/.vnc/passwd
PS. 如果連接時不想作認證,可以修改為
Section "Screen" ... Option "SecurityTypes" "None" EndSection
// 查詢未安裝的rpm套件的詳細資訊
shell> less something.rpm
// 查詢已安裝的套件的詳細資訊
shell> rpm -qi <rpm_name>
// 查詢已安裝套件是 32 或 64 bit
shell> rpm -qa --qf "%{n}-%{v}-%{r}.%{arch}\n" | grep -i <package-name>
// 查詢未安裝的套件資訊
shell> rpm -qpi your.rpm
// 列出一個尚未安裝的 RPM 所包含的檔案列表
shell> rpm -qlp your.rpm
// 查詢檔案所屬的套件名稱
shell> rpm -qf /usr/bin/ksh
// 編譯 source rpm
安裝 rpmbuild 套件
yum install rpm-build
// 不解開直接編譯
rpmbuild --rebuild something.src.rpm
// 查詢 RPM Public Key
rpm -q gpg-pubkey | sort | uniq -c | sort -nr
// 建立 RPM 套件
使用工具 sg_utils,下載位置 http://sg.torque.net/sg/sg3_utils.html。
執行指令 sg_map -i
root@oradb2 ~]# sg_map -i /dev/sg0 /dev/sda ServeRA rootvg V1.0 /dev/sg1 /dev/sdb ServeRA datavg V1.0 /dev/sg2 IBM-ESXS VPBA073C3ETS11 N A2E8 /dev/sg3 IBM-ESXS VPBA073C3ETS11 N A2E8 /dev/sg4 IBM-ESXS VSC7160 1.07 /dev/sg5 /dev/sdd i-Raid gtnas02--VOL#01 R001 /dev/sg6 /dev/sdc i-Raid x3650---VOL#00 R001 /dev/sg7 /dev/nst0 HP Ultrium 2-SCSI F6AW /dev/sg8 HP NS E1200-160 5929 |
執行指令 sg_scan -i
[root@oradb2 ~]# sg_scan -i /dev/sg0: scsi0 channel=0 id=0 lun=0 [em] ServeRA rootvg V1.0 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg1: scsi0 channel=0 id=1 lun=0 [em] ServeRA datavg V1.0 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg2: scsi0 channel=1 id=0 lun=0 [em] IBM-ESXS VPBA073C3ETS11 N A2E8 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg3: scsi0 channel=1 id=1 lun=0 [em] IBM-ESXS VPBA073C3ETS11 N A2E8 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg4: scsi0 channel=3 id=0 lun=0 [em] IBM-ESXS VSC7160 1.07 [rmb=0 cmdq=0 pqual=0 pdev=0xd] /dev/sg5: scsi1 channel=0 id=0 lun=0 i-Raid gtnas02--VOL#01 R001 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg6: scsi1 channel=0 id=0 lun=1 i-Raid x3650---VOL#00 R001 [rmb=0 cmdq=1 pqual=0 pdev=0x0] /dev/sg7: scsi1 channel=0 id=1 lun=0 HP Ultrium 2-SCSI F6AW [rmb=1 cmdq=0 pqual=0 pdev=0x1] /dev/sg8: scsi1 channel=0 id=1 lun=1 HP NS E1200-160 5929 [rmb=0 cmdq=0 pqual=0 pdev=0xc] |
在要作限制存取的網頁子目錄下,新增一個隱藏檔 .htaccess,內容如下:
範例一
AuthMySQLEnable off AuthType Basic AuthName "USE YOUR WINDOWS ACCOUNT" AuthLDAPURL "ldap://myad.mydomain.com.tw/ou=IT,dc=mydomain,dc=com,dc=tw?sAMAccountName?sub?(objectClass=*)" # Using this to bind AuthLDAPBindDN "CN=John,OU=IT,DC=mydomain,DC=com,DC=tw" AuthLDAPBindPassword "123456" # When checking for group membership, use the DN of the user, not the HTTP entry AuthLDAPGroupAttributeIsDN on #require valid-user #require user Bob require valid-user
註:
myad.mydomain.com.tw ; AD 主機名稱
mydomain.com.tw ; 網域名稱
ou=IT ; 僅對 IT 單位以內的帳號作認證,若想對所有網域帳號作認證,可刪除這。
AuthLDAPBindDN ; 設定一組存在的AD帳號作連結依據,尤其對那些有設定限制來賓連結的AD。
AuthLDAPBindPassword ; 前面所提的帳號的密碼。
範例二
AuthMySQLEnable off AuthType Basic # What the users will see as a "title" of the login prompt: #AuthName "Domain Credentials Required" AuthName "Your Domain AD's account required" # use plain LDAP authentication: AuthzLDAPMethod ldap # FQDN resolvable hostname (or IP) of the Windows # AD domain controller: AuthzLDAPServer myad.mydomain.com.tw # Distinguished Name (DN) of the user that mod_authz_ldap should # bind to the LDAP server as when searching for the domain user # provided by the web client (Active Directory does not allow # anonymous binds). Note, the cn attribute corresponds to the # "Display Name" field of a user's account in the Active Directory # Users and Computers tool, not their login username: AuthzLDAPBindDN "cn=John,ou=IT,dc=mydomain,dc=com,dc=tw" # the BindDN user's password: AuthzLDAPBindPassword "123456" # LDAP Attribute where the user's domain login username is stored in: AuthzLDAPUserKey sAMAccountName # Base DN to begin searching for users from in the LDAP: #AuthzLDAPUserBase "ou=TestOU,dc=mydomain,dc=com,dc=tw" AuthzLDAPUserBase "ou=IT,dc=mydomain,dc=com,dc=tw" # Search in sub-containers below the UserBase DN if # necessary (most likely): AuthzLDAPUserScope subtree # Require the username and password provided to be a valid # user in the AD: require valid-user # log verbosity level: AuthzLDAPLogLevel info
要取得 AD 帳號所對應的 LDAP 樹目錄帳號的連結,可以透過 LDAP Browser 這個免費工具(試用30天)。
延伸閱讀:
系統環境:CentOS 5.2
下載套件:http://oss.oetiker.ch/mrtg/download.en.html
編譯套件
./configure --prefix=/opt/mrtg-2.16.2 \ --with-gd=/usr/include \ --with-gd-lib=/usr/lib \ --with-gd-inc=/usr/include \ --with-png=/usr/include \ --with-zlib=/usr/include
註:如果出現找不到 GD Library 的錯誤訊息,請安裝 gd-devel 套件
#yum install gd-devel
安裝套件
make make install
有擔任過 IBM AIX 系統管理員的人,在使用 Linux 的 grep 指令時,一定會不習慣,因為在 AIX 上的 grep 有個 -p 顯示段落的參數,但 Linux 的 grep 卻沒有這功能。這裡教你如何寫一個可顯示段落的 grep 替代指令。
方法一:pgrep.sh
將它放在 /usr/local/bin,並且 chmod 0755 賦予可執行的權利。
用法:
pgrep.sh <file.name> <filter.string>
cat <file.name> | pgrep.sh - <filter.string>
另一個選擇,用 perl 也辦得到喔
cat <file.name> | perl -00 -ne 'print if /<filter.string>/'
方法二:pgrep.awk
使用方法
chmod 0755 pgrep.awk mv pgrep.awk /usr/local/bin cat test.txt | pgrep.awk <keyword>
相關連結:
rpm2cpio xxx.rpm | cpio -idmv
modprobe -r usb_storage
vi /etc/modprobe.conf
alias usb_storage off
執行 umount 遇到 device is busy,但又不能重開機,該怎辦?
//檢查那些程序及用戶使用該目錄
fuser -m -v <mount_point> lsof | grep <mount_point>
//刪除無效的程序
fuser -i -k <mount_point>
//以上都無效,可重啟 NFS Client daemon,但其他 NFS 目錄也會被迫中斷。
service netfs stop service netfs start
// 網友提供的另一個方法
umount -l <mount_point>
如何檢查哪些 Client 有掛載 NFS 目錄
netstat -an | grep <nfs-server-ip>:2049 預設 NFS Port 是 2049,可以使用 netstat -lt 確認
Can't mount remotely Linux host on AIX
Q: Can't mount remotely Linux host on AIX ????
A: To run the following commands on your AIX.
nfso -o nfs_use_reserved_ports=1 nfso -o portcheck=1
If the configuration would be enabled automatically on system RESTART, edit the file /etc/rc.nfs , and to add above commands in the bottom.
更多教學:http://linux.chinaitlab.com/administer/811248.html
單一個檔案時)
//建立更新檔 #diff -uN old.code new.code > patch.file //套用更新檔 #patch < patch.file //回復更新前 #patch -RE < patch.file
連續多個檔案時)
//建立更新檔 #diff -rupN olddir newdir > patch.dir //套用更新檔 #patch -p1 < patch.dir //回復更新前 #patch -RE -p1 < patch.dir
找出兩個目錄的所有原始檔 .c 內容不一致的檔案
目錄一: asterisk_orig/ 目錄二: asterisk_patched/ $ cd asterisk_orig; find ./ -name "*.c" -exec md5sum -b {} \; > ../asterisk_orig.md5; cd ../ $ cd asterisk_patched; find ./ -name "*.c" -exec md5sum -b {} \; > ../asterisk_patched.md5; cd ../ $ diff asterisk_orig.md5 asterisk_patched.md5 273c273 < 894a111d1efa5901471820e203503039 *./channels/chan_sip.c --- > 00116baac23473049b5801c9287fb4be *./channels/chan_sip.c
TIPs
前提是 asterisk_orig 與 asterisk_patched 目錄架構及檔案名稱必須完全一樣,這通常用來找出 asterisk_patched 目錄內被更新過了哪些 .c 檔案。
Notes: 指令輸入注意大小寫的不同,輸入大寫的英文是用 shift + 英文字。
命令執行(注意大小寫不同) | 使用說明 | 使用技巧 |
i | 以插入字元方式進入編輯模式 | 與 a 同為進入編輯模式,兩者差別只有游標的起始位置不同 |
a | 以附加字元方式進入編輯模式 | |
h j k l | 操控游標的移動,h--向左, j--向下, k--向上, l--向右 | 當遇到部份作業系統不支援方向鍵使用時,可用此方式代替 |
:1 | 游標移到第一行 | |
:22 | 游標移到第22行 | 作程式除錯找特定行列時會用到 |
gg | 游標移至檔首 | |
G | 游標移至檔尾 | 編輯大檔案時要移到檔尾不用一頁一頁捲 |
0 | 游標移至行首 | |
$ | 游標移至行尾 | |
:wq | 存檔後離開 | |
:w new.txt | 另存新檔成 new.txt | |
:w !sudo tee % | 以 sudo 模式存檔 | 如果存檔時遇到權限不足,且有 sudo 的權限時的方法 |
:q! | 不存檔離開 | 如不小心編錯內容,只要沒存檔前就可以用此法離開,保存原始內容 |
:set nu | 顯示行號 | 作程式除錯時必用 |
:set nonu | 取消行號顯示 | |
dd | 刪除目前這一行 | |
10dd | 刪除目前以下10行(含本列) | |
yy | 複製目前這一行 | |
3yy | 複製目前以下3行(含本列) | |
p | 貼上 | |
:%s/old/new/g | 內容包含有old字元的都會取代成new字元 | |
/keyword | 搜尋文字 | |
/\KeyWord | 搜尋文字(不分大小寫) | |
~ | 大小寫互換 | |
:%s/[ctrl+V and ctrl+M]//g | 消除斷行符號 ^M | |
:! ls -l | 執行外部 SHELL 指令 | :!! 上一個指令 |
:vsplit my.file | 左右分割視窗且左邊載入 my.file | ctrl + w + w 切換視窗 |
:split my.file | 上下分割視窗 | ctrl + w + w 切換視窗 |
比對兩個檔案內容
vim -d file1 file2
啟用 VI Highlight Color
#> yum install vim-enhanced NOTE:必須使用 vim 才會有顏色顯示;vi 不支援顏色
Putty 顏色設定優化
ANSI Blue: Red:74 Green:74 Blue:255 ANSI Blue Bold: Red:140: Green:140 Blue:255
FAQ:
Q: 錯誤訊息:A line cannot be longer than 2048 characters.
A: 這是因為 VI 的每一行字數不可超過 2048 字元,遇到時可以將超過字數的行刪除,另存一個檔。
cut -c1-2047 before.log > after.log
下載位置 http://dag.wieers.com/rpm/packages/htop/
官方網站 http://htop.sourceforge.net/
畫面預覽
// 備份MBR dd if=/dev/hdx of=/path/to/image count=1 bs=512 // 光碟轉成 iso 檔 dd if=dev/cdrom of=/root/cd.iso // 銷毀硬碟資料 dd if=/dev/urandom of=/dev/hda1 // 備份整個 USB-Flash dd if=/dev/sdb | gzip > ./my-usb_flash.img.gz //還原 USB-Flash gzip -dc ./my-usb_flash.img.gz | dd of=/dev/sdb // 建立一個測試用的大檔案10GB dd if=/dev/zero of=/path/to/image bs=1G count=10 NOTE: 新版 Linux 可以改用指令 fallocate -l 1G test.img
// CPU 使用率最高前10排名
ps aux | head -1; ps aux | sort -rn +2 | head -10
or
ps aux | head -1; ps aux | sort -rn -k 3 | head -10
// Memory 使用率最高前10排名
ps aux | head -1; ps aux | sort -rn +3 | head
or
ps aux | head -1; ps aux | sort -rn -k 4 | head
// 優先權最高的程序
ps -eakl | sort -n +6 | head
or
ps -eal | sort -n -k 7 | head
// 程序以 nice 值排序
ps -eakl | sort -n +7
or
ps -eal | sort -n -k 8
// 程序以執行時間排序
ps vx | head -1;ps vx | grep -v PID | sort -rn +3 | head -10
or
ps vx | head -1;ps vx | grep -v PID | sort -rn -k 4 | head -10
// 程序以 I/O 排序
ps vx | head -1; ps vx | grep -v PID | sort -rn +4 | head -10
or
ps vx | head -1; ps vx | grep -v PID | sort -rn -k 5 | head -10
// 等待中的程序
ps vg | head -1; ps vg | grep -w wait
有用的連結