Archive for ‘ 一月, 2005

實用的 screen 終端機管理程式

程式說明

screen 是一個很方便的終端機管理程式,可以讓你在同一個終端機開啟多個終端機來操作。加強多工的處理,即使你要離開電腦,也可以將終端機執行脫離,下次登入時再取回來操作。

首先啟動 Screen 程式,開始一個終端機 Session:

$ screen

某些終端機視窗會在標題列顯示目前在操作的終端機編號,如果沒有顯示,你也可以輸入:

$ tty

來了解你目前正在哪個終端機中。

以快速鍵操作

切換時的快速鍵一開始都是 Ctrl-A
  • 新增終端機:
    Ctrl-A -> Ctrl-C
  • 切換到上一個編號的終端機:
    Ctrl-A -> Ctrl-P
  • 切換到下一個編號的終端機:
    Ctrl-A -> Ctrl-N
  • 切換到指定編號的終端機:
    Ctrl-A -> 數字
  • 切換到下一個編號的終端機:
    Ctrl-A -> 空白鍵
  • 在兩個終端機之間互相切換:
    Ctrl-A -> Ctrl-A
  • 鎖定終端機:
    Ctrl-A -> Ctrl-X
  • 顯示終端機列表,可供你選取:
    Ctrl-A -> Shift-"
  • 新視窗的標題列顯示所有的終端機編號 (其中有加上 * 表示是目前使用的終端機) :
    Ctrl-A -> Ctrl-W
  • 水平分割視窗 (可以持續分割) :
    Ctrl-A -> Shift-S
  • 垂直分割視窗 (可以持續分割,只有特定版本才支援,請參考後方的說明) :
    Ctrl-A -> Shift-|
  • 在分割的視窗做切換:
    Ctrl-A -> Tab
  • 關閉分割的視窗:
    Ctrl-A -> Shift-Q
  • 將所有終端機脫離(Detach),並回到執行 screen 前的狀態:
    Ctrl-A -> Ctrl-D
    在這種狀態下,用戶可以不須理會這些終端機。不管用戶離線或是要從別的地方登入,只要下次登入時執行:
    screen -r
    將所有終端機叫回來繼續操作。
  • 重新命名終端機:
    Ctrl-A -> Shift-A
  • 顯示日期、主機名稱及負載:
    Ctrl-A -> Ctrl-T
  • 將畫面暫停 (程式仍繼續執行):
    Ctrl-A -> Ctrl-S
  • 將暫停的畫面恢復:
    Ctrl-A -> Ctrl-Q

screen 的相關指令

  • 啟動 Screen 程式,開始一個終端機 Session:
    $ screen
    或指定名稱
    $ screen -S SessionName
  • 查看同一帳號共開啟過多少個終端機 Session 及其 Id:
    $ screen -ls
  • 取回被脫離執行的終端機:
    $ screen -r

    $ screen -r SessionId
  • 將其它的終端機 Session 強制脫離:
    $ screen -d

    $ screen -d SessionId這功能適用於原本操作的電腦當機或斷線了,讓你可以在下次取回還在 Server 中執行的 Session。
  • 同步操作終端機 Session (兩邊必須登入相同的帳號):
    $ screen -x

    $ screen -x SessionId
  • 移除終端機 Session:
    $ screen -wipe SessionId

模擬頁籤顯示

如果要在畫面底部秀出現在在哪個編號的終端機,請編輯 /etc/screenrc 或 ~/.screenrc,加入:
hardstatus alwayslastline "%-w%{= BW}%50>%n %t%{-}%+w%<"

同步作業說明

假設我在我目前所操作的終端機 Session 要分享給另一端的登入者查看,並且可以操作 (或者是我不想將遠端登入的用戶脫離 Session),則我要先以我的帳號登入主機並且執行 "screen -S 特定名稱",然後另一端的登入者:
  1. 以相同的帳號登入主機
  2. 以 "screen -ls" 查看要取回的終端機 Session
  3. 以 "screen -x 特定名稱" 或 "screen -x SessionId" 進入相同的終端機 Session

垂直分割視窗

因為 screen 只能水平分割視窗,不能充分利用寬螢幕的特性實在有點可惜! 這裡有新版可垂直分割功能的 screen:

垂直分割 screen 視窗

請自行編譯安裝。

參考網頁

[轉載]apache 部份參數說明

轉載自: 小紅帽技術論壇


Part I

AllowOverride 的屬性功能

AllowOverride Limit 允許覆寫原連結屬性的範圍
AllowOverride Authconfig 可做密碼設定: 如: 藏密
AllowOverride Options 可將該目錄之 Options 功能覆寫
AllowOverride FileInfo 可將該目錄之任何文件型態覆寫, 如: DefaultType, ErrorType
AllowOverride Indexs 可將該目錄之顯示列印功能覆寫, 如: AddIcon, HeaderName, ReadName

Options 的屬性功能

Indexs 當無 index.html 可用列印目錄方式顯示, 如: center3 homepage 若用 -Indexs 則看不見 listing
FollowSymLinks 加一屬性如 +FollowSymLinks 可允許使用 symbol link 時, 依舊可瀏覽
ExecCGI 當為 +ExecCGI 可執行 CGI SCRIPT
Includes 可執行 Server site include, 若為 +Includes
IncludesNOEXEC 可執行 Server site include, 若為 +Includes, 但不可執行 CGI
None 沒有任何功能可用
All 均可
總之, 以 +, - 符號可加或刪減其功能, 若未給符號, 則只有初步功能

Read more

hdparm 參數

測硬碟速度:

hdparm -tT /dev/hda

UDMA3(ATA33):

# hdparm -X66 -c1 -d1 -m16 /dev/hda

UDMA4(ATA66):

# hdparm -X68 -c1 -d1 -m16 /dev/hda

UDMA5(ATA100):

# hdparm -X69 -c1 -d1 -m16 /dev/hda

[轉載]PHP 正規表達式基本語法

轉載自: 中文 PHP 資訊站


首先讓我們看兩個特殊的符號: ^ 和 $。他們的作用是分別指出一個字串的開始和結束。例子如下:

^The:表示所有以「The」開始的字串(「There」、「The cat」等);

of despair$:表示所有以「of despair」結尾的字串;

^abc$:表示開始和結尾都是「abc」的字串--呵呵,只有「abc」自己了;

notice:表示任何包含「notice」的字串。

像最後那個例子,如果你不使用兩個特殊字元,你就在表示要查找的串在被查找串的任意部分--你並不把它定位在某一個頂端。

Read more

[轉載]Linux 上的用戶管理

轉載自: 中文 PHP 資訊站


在linux中,每個普通用戶都有一個帳戶,包括用戶名、密碼和主目錄等資訊。除此之外,還有一些系統本身創建的特殊用戶,它們具有特殊的意義。其中最重要的是超級用戶,在linux中,它默認用戶名是root。

基本操作

增加一個用戶 newuser :

useradd newuser
passwd newuser

然後根據提示兩次輸入新用戶的密碼,請注意,用useradd增加一個用戶後應該立刻用passwd給新用戶修改密碼,沒有密碼的新帳號將不能使用。在/etc/passwd文件中,沒有密碼的新用戶的記錄是如下一行:

newuser:!!:506:506::/home/newuser:/bin/bash

在這一行裏,用戶的密碼域被設置成了”!!”,這就意味著用戶密碼還沒有設置,用戶不能登陸。(passwd文件的格式是 用戶名:密碼:用戶ID(UID):組ID(GID):全名:用戶目錄:外殼腳本)。

當然你可以用-d參數設置新用戶的主目錄(例如:useradd newuser -d /www),也可以用-g參數為用戶指定新組名(例如:useradd newuser -g linuxusers),你還可以用-G參數把新用戶設成系統其他一些組的成員(例如:useradd newuser -G users,shutdown)。所有這些,你都可以在本站的命令查詢中得到詳細資訊。

附注:相應的,僅僅增加一個新組可以用命令groupadd。

修改現有用戶的帳號:

  • 修改密碼
  • 普通用戶可以用passwd修改自己的密碼,只有管理員才能用passwd username為其他用戶修改密碼。
  • 修改用戶shell設置
  • 使用chsh命令可以修改自己的shell,只有管理員才能用chsh username為其他用戶修改shell設置。注意,指定的shell必須是列入/etc/shells文件中的shell,否則該用戶將不能登陸。
    你也可以使用usermod命令修改shell資訊,如下所示:
    usermod -s(new shell path)(username)
    其中new shell path和username應取相應的值。
  • 修改主目錄設置
  • usermod -d(new home directory)(username)
    如果想將現有主目錄的主要內容轉移到新的目錄,應該使用-m參數,如下所示:
    usermod -d -m/www/newuser newuser
  • 修改UID
  • usermod -u UID username
    主目錄中所有該用戶所擁有的文件和目錄都將自動修改UID設置。但是,對於主目錄外該用戶所擁有的文件,只能手工用chown命令修改所有權設置。
  • 修改默認組設置
  • username -g(group name) or GID username
  • 修改帳號的有效期
  • 如果使用了影子密碼,則可以使用如下命令來修改一個帳號的有效期:
    usermod -e MM/DD/YY username
    例如把用戶newuser的有效期定為12/31/01:
    usermod -e 12/31/01 newuser
  • 刪除或禁止用戶帳號
  • 使用userdel命令刪除現有用戶。例如,下面的命令將刪除bluewind用戶:
    usedel bluewind
    如果想同時刪除該用戶的主目錄以及其中所有內容,要使用-r參數來遞迴刪除。值得注意的是你無法刪除已經進入系統的用戶,如果想強行完成,需要先killall有關它的進程,然後再運行userdel命令。
  • 如果只是想暫時禁止某個帳號,可以使用下列方法:
  • - 使用無效的shell。例如使用usermod -s newshell username將用戶的 shell改為/bin/false(最好把它列入/etc/shells文件裏)。
    - 使該帳號過期。如果使用影子密碼,可使用usermod -e MM/DD/YY username命令使該帳號過期。
    如果想禁止所有帳號(root帳號當然除外)的訪問,可以創建一個名為/etc/nologin的文件,說明系統暫時不允許訪問。注意,確認你還能用root直接登陸才使用這個辦法,否則你慘了。

    本文中的所有命令都可以在linuxaid獲得中文詳細的幫助,下面我們一起來繼續探討有關用戶管理的高級內容。

    建立多個超級用戶

    不少新系統管理員認為root用戶是唯一的超級用戶,其實root只是系統默認的超級用戶的名稱,root並非因為它叫root而成為超級用戶的。隨便打開一個/etc/passwd文件的例子,你就會發現如下幾行:

    root:asiewhgYfaoO/J:0:0:root:/root:/bin/tcsh
    bin:*:1:1:bin:/bin:
    daemon:*:2:2:daemon:/sbin:
    lanf:Yuao56Ioyefg:0:0:bluewind:/home/bluewind:/bin/bash
    jake:gUyfaiIodashfj:501:501:jake cheng:/home/jake:/bin/tcsh
    apache:!!:502:502::/usr/local/apache:/bin/false

    可以看到,root的UID和GID都被設置為0了。實際上,超級用戶的充要條件就是UID和GID都等於0。也就是說,任何用戶,只要它的UID和GID都為0,就與常被稱為root超級用戶沒有什麼兩樣了。比如上面那個例子裏面的lanf,也是一個超級用戶。

    所以,可以將任何普通用戶變成超級用戶。但是,這樣做並沒有好處,很多時候這都會增加系統的隱患。除非在組織中需要多個系統管理員管理同一個系統,這就需要有多個超級用戶帳號。這有利於各個管理員明確責任,通過日誌知道不同的人分別做過什麼事。

    還有一種情況,也可能出現多個超級用戶帳號,那就是黑客入侵後設置一個看起來象普通帳號的用戶,卻修改了UID和GID使之為0。這樣根本就不需要知道root用戶密碼,就可以執行超級用戶許可權了。而從我們的系統管理員的一方來說,我們不可能時刻注意passwd文件的變化的,沒有那個時間也沒有那個精力。這時只好編寫一個腳本來幫助監視,例如:

    /bin/grep '0:0' /etc/passwd |awk 'BEGIN{FS=":"}{print $1}'|mail -s "`date +"%D%T"`"root

    這是一個很小的腳本程式,使用了一些常規的命令來查看/etc/passwd文件,把UID和GID為0的行寄給root用戶。把這個腳本放在/etc/cron.daily文件中讓cron運行,root將每天收到一封信,報告當前的超級用戶。

    實際上,由於PAM(可插入驗證模組)的限制,在telnet上是不允許超級用戶登入的,也就是說,黑客修改了自己的UID和GID後,想再次登陸從而獲得超級用戶的許可權的話,不修改/etc/seuretty文件是不可能的–除非你傻到自己添加了為TTY設備ROOT用戶登陸許可權。一般可以讓超級用戶先用普通用戶帳號登陸,再su(su命令相關內容請參考本站命令查詢部分)。

    為普通用戶分配特權

    使用sudo命令可以允許普通用戶執行超級用戶才能執行的命令。無論是基於信任的建立需要時間,還是基於是否存在這種必要,我們都不會把超級用戶的所有權限輕易許人的。這是網管工作的原則。所以,當一些用戶必須訪問某些內容時,我們可以配置sudo以允許單獨的普通用戶運行特權命令。

    sudo命令允許已經在/etc/sudoers文件中指定的用戶運行超級用戶命令。例如,一個已經獲得許可的普通用戶可以運行:

    sudo vi /etc/passwd

    實際上,sudo的配置完全可以讓我們指定某個列入/etc/sudoers文件的普通用戶可以做什麼、不可以做什麼。/etc/sudoers的配置行如下:

  • 空行或注釋行(以#字元打頭):無用行。
  • 可選的主機別名行:用來創建主機列表的簡稱。必須以Host_Alias關鍵字開頭,列表中的主機必須用逗號隔開。例如:
  • Host_Alias REDHAT=binbu,qd

    其中binbu和qd是倆主機名,你可以用REDHAT(別名)統稱它們。

  • 可選的用戶別名行:用來創建用戶列表的簡稱。用戶別名行必須以User_Alias關鍵字開頭,列表中的用戶名必須以逗號隔開。其格式同主機別名行。
  • 可選的命令別名行:用來創建命令列表的簡稱。必須以Cmnd_alias開頭,列表中的命令必須用逗號隔開。
  • 可選的運行方式別名行:也是用來創建用戶列表的簡稱。不同的是,使用這樣的別名可以告訴sudo程式以列表中某一用戶的身份來運行程式。
  • 必要的用戶訪問說明行:用戶訪問的說明語法如下:
  • user host= [run as user ] command list

    在user處指定一個真正的用戶名或定義過的別名,同樣的,host也可以是一個真正的主機名或者定義過的主機別名。默認情況下,sudo執行的所有命令都是以root身份執行。如果你想使用其他身份可以指定。至於command list可以是以逗號分隔的命令列表,也可以是一個已經定義過的別名。例如:

    lanf binbu=/sbin/shutdown

    這一句說明lanf可以在binbu主機上運行關機命令。

    注意:

  • 可以在一行定義多個別名,中間用:隔開。
  • 可以在命令或命令別名之前加上!號,使該命令或命令別名無效。
  • 有兩個關鍵字:ALL 和NOPASSWD。ALL意味著”所有文件”(所有主機或所有命令),NOPASSWD意味著不用密碼。
  • 下面是一個sudoers文件的例子:

    #sudoers files#User alias specificationUser_Alias ADMIN=yourid:POWERUSER=hisid,herid#user privilege specification ADMIN ALL=ALLPOWERUSER ALL=ALL,!/bin/su

    第三行定義了兩個別名ADMIN和POWERUSER,第五行說明在所有主機上ADMIN都可以以root身份執行所有命令。第六行給POWERUSER除了運行su命令外同等ADMIN的許可權。

    ShareWatch - 電腦共享資料夾的監控程式

    檔案下載

    如果您的電腦有透過內部網路分享資源,但一般我們不會知道有誰正透過網路芳鄰來連線到您的電腦、存取共享的資料夾及檔案。

    「ShareWatch」是一套共享資料夾的檢測工具,可以查看自己分享了那些資料夾,同時具有中止資料夾共享及中斷用戶連線的功能。

    Read more

    TCPView 2.4 - 系統封包監控程式 *

    檔案下載

    TCPView 是一支很好用的網路監控程式,可以及時監看 TCP/UDP 的封包流向,而且不用安裝就可以執行了。

    第一次執行時,請先去改字型,不然字很小,看不清楚。

    類似功能的程式,還有 NirsoftCurrPorts

    iptables 防火牆的一些基本用法

  • 列出目前的規則
  • iptables -L -n
  • 刪除 “INPUT” 的第 1 條規則
  • iptables -D INPUT 1
  • 丟棄來自 192.168.1.203 的封包
  • iptables -A INPUT -p all -s 192.168.1.203 -j DROP
  • 禁止 192.168.1.203 的用戶以 SSH 登入(Port:22)
  • iptables -A INPUT -p tcp -s 192.168.1.203 --dport 22 -j DROP
  • 儲存防火牆的設定到 filename
  • iptables-save > filename
  • 從 filename 讀取防火牆的設定
  • iptables-restore < filename

    如何複製檔案及目錄

    use File::Copy;
    copy('file1.txt','file2.txt') or die "can't copy: $!\n";

    複製目錄

    sub copy_dir{
      my $source = $_[0];
      my $target = $_[1];
      use File::Copy;
      opendir(DIR,$source);
      while(my $filename = readdir(DIR)){
        if(-f "$source/$filename")){
          copy("$source/$filename","$target/$filename") or die "can't copy: $!\n";
        }
      }
      close(DIR);
    }

    參考網頁

  • File::Copy - Copy files or filehandles
  • return top