網頁

2013年5月14日 星期二

Ubuntu 12 的 /etc/inittab 在那麼?


  • 在Ubuntu上說實在的已經沒有/etc/inittab這裡檔案了,你可以在查一下/usr/share/doc/upstart/README.Debian.gz 檔可以看見一個關鍵的檔檔在/etc/init/rc-sysinit.conf。你可以試在變換你的runlevel,但是注意在ubuntu下的runlevel級別有些不同
    • Ubuntu的runlevel
      • 0 - shutdown
      • 1 - single user mode
      • 2 - multiuser graphical mode
      • 6 - reboot
  • 本文原於http://askubuntu.com/questions/71621/where-is-the-etc-inittab-file-or-how-to-set-the-default-runlevel
  • 以下是原作者的文章

There is no /etc/inittab in Ubuntu, because Ubuntu uses upstart to define startup services and runlevel. And this has not started from the last release of Ubuntu, but a long time ago.
Anyway, you can still use inittab, simply create one. I report a passage from/usr/share/doc/upstart/README.Debian.gz:
How do I change the default runlevel?
-------------------------------------

If you have an /etc/inittab file, edit it.  Locate the following line:

    id:N:initdefault:

Where N is the default runlevel, change this to match.

Most people won't have that file, you can edit /etc/init/rc-sysinit.conf
and change the following line:

    env DEFAULT_RUNLEVEL=2
but bear in mind that Ubuntu do not use standard runlevel meaning as other linux distros/unix os. Old standard was:
  • 0 - shutdown
  • 1 - single user mode
  • 3 - multiuser text mode
  • 5 - multiuser graphical mode
  • 6 - reboot
but Ubuntu uses:
  • 0 - shutdown
  • 1 - single user mode
  • 2 - multiuser graphical mode
  • 6 - reboot
Finally, if you want to have a virtual terminal with automatic login, then modifying the exec line intty1.conf seems the correct way, though I do not know mingetty, so cannot say if you used it correctly.

2013年4月25日 星期四

cpio指令



  • cpio是一個比較古老的備份命令,也是用於磁帶機備份的工具,雖然如此現在許多時侯仍然需要使用這命令,例如定制系統內存映像盤時等。像是系統內存映像盤通常位於/boot中,文件名以initrd開頭。
  • 指令選項
    • i:使用copy-in模式,還原歸檔文件或列歸檔文件中的文件列表
    • o:使用copy-out模式,建立歸檔文件
    • p:使用copy-pass模式,將文件直接複制到目的目錄
    • c:使用老式的ascii歸檔格式。如果需要跟平台使用,就需要使用
    • d:倉建需要的目錄,如果需要文件不處於同一個目錄中,應該使用此選項
    • v:顯示處理過程
    • t:顯示歸檔文件中的文件列表
    • m:保持文件的時間標記
    • H:使用指定的格式歸檔文件
  • sample
    • find /bin -print | cpio -o > bin.bak
    • find -print | cpio -o > ../backup.cpio
    • find -print | cpio -ov > ../backup.cpio
    • find -print | cpio -ov | gzip > ../backup.cpio.gz
    • find -print | cpio -ov | bzip2 > ../backup.cpio.bz2
    • cpio -t < backup.cpio
    • cpio -tv < backup.cpio
    • cpio -tv "*.c" < backup.cpio
    • cpio -i < ../backup.cpio
    • cpio -iv < ../backup.cpio
      • 以上2個,使用選項i將文件恢複到當前的目錄
    • cpio -idv < ../backup.cpio
      • 文件恢複時保持目錄結構
    • cpio -imdv < ../backup.cpio
    • cpio -idv "*.c" < ../backup.cpio





2013年4月23日 星期二

ntpdate指令,通過網路同步時間


  • ntpdate指令,通過網路同步時間
    • ntpdate 192.168.11.15
      • 從192.168.111.15上同步時間
    • hwclock -w
      • 將系統的時間同步到硬件時鐘上
  • 時間服務器位置
    • 中國國家授時中心:210.72.145.44
    • CERNET時間服務:www.time.edu.cn/mem.htm

2013年4月22日 星期一

netstat指令,顯示網路的狀態


  • 假如想觀察本機網路服務的狀態,或本地端與其他主機貸間的連線狀態等資料,可執行netstat指令查詢相關資訊。
  • 範例
    • netstat -a
      • 顯示本機所有網路服務狀態
    • netstat -nt 
      • 查看所有tcp的連線狀態
  • 其他網路上擷取的資訊
netstat
如果你覺得你的某個網路服務明明就啟動了,但是就是無法造成連線的話,那麼應該怎麼辦? 首先你應該要查詢一下自己的網路介面所監聽的埠口 (port) 來看看是否真的有啟動,因為有時候螢幕上面顯示的 [OK] 並不一定是 OK 啊! ^_^
[root@www ~]# netstat -[rn]       <==與路由有關的參數
[root@www ~]# netstat -[antulpc]  <==與網路介面有關的參數
選項與參數:
與路由 (route) 有關的參數說明:
-r  :列出路由表(route table),功能如同 route 這個指令;
-n  :不使用主機名稱與服務名稱,使用 IP 與 port number ,如同 route -n
與網路介面有關的參數:
-a  :列出所有的連線狀態,包括 tcp/udp/unix socket 等;
-t  :僅列出 TCP 封包的連線;
-u  :僅列出 UDP 封包的連線;
-l  :僅列出有在 Listen (監聽) 的服務之網路狀態;
-p  :列出 PID 與 Program 的檔名;
-c  :可以設定幾秒鐘後自動更新一次,例如 -c 5 每五秒更新一次網路狀態的顯示;

# 範例一:列出目前的路由表狀態,且以 IP 及 port number 顯示:
[root@www ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 eth0
# 其實這個參數就跟 route -n 一模一樣,對吧!這不是 netstat 的主要功能啦!

# 範例二:列出目前的所有網路連線狀態,使用 IP 與 port number
[root@www ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address     State
....(中間省略)....
tcp        0      0 127.0.0.1:25      0.0.0.0:*           LISTEN
tcp        0     52 192.168.1.100:22  192.168.1.101:1937  ESTABLISHED 
tcp        0      0 :::22             :::*                LISTEN
....(中間省略)....
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags    Type    State      I-Node Path
unix  2      [ ACC ]  STREAM  LISTENING  11075  @/var/run/hald/dbus-uukdg1qMPh
unix  2      [ ACC ]  STREAM  LISTENING  10952  /var/run/dbus/system_bus_socket
unix  2      [ ACC ]  STREAM  LISTENING  11032  /var/run/acpid.socket
....(底下省略)....
netstat 的輸出主要分為兩大部分,分別是 TCP/IP 的網路介面部分,以及傳統的 Unix socket 部分。 還記得我們在基礎篇裡面曾經談到檔案的類型嗎?那個 socket 與 FIFO 檔案還記得吧? 那就是在 Unix 介面用來做為程式資料交流的介面了,也就是上頭表格內看到的 Active Unix domain sockets 的內容囉~
通常鳥哥都是建議加上『 -n 』這個參數的,因為可以避過主機名稱與服務名稱的反查,直接以 IP 及埠口號碼 (port number) 來顯示,顯示的速度上會快很多!至於在輸出的訊息當中, 我們先來談一談關於網路連線狀態的輸出部分,他主要是分為底下幾個大項:
  • Proto:該連線的封包協定,主要為 TCP/UDP 等封包;
  • Recv-Q:非由使用者程式連接所複製而來的總 bytes 數;
  • Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數;
  • Local Address:本地端的位址,可以是 IP (-n 參數存在時), 也可以是完整的主機名稱。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差異。 如上所示,在 port 22 的介面中,使用的 :::22 就是針對 IPv6 的顯示,事實上他就相同於 0.0.0.0:22 的意思。 至於 port 25 僅針對 lo 介面開放,意指 Internet 基本上是無法連接到我本機的 25 埠口啦!
  • Foreign Address:遠端的主機 IP 與 port number
  • stat:狀態列,主要的狀態含有:
    • ESTABLISED:已建立連線的狀態;
    • SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
    • SYN_RECV:接收到一個要求連線的主動連線封包;
    • FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
    • FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
    • TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
    • LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。
基本上,我們常常談到的 netstat 的功能,就是在觀察網路的連線狀態了,而網路連線狀態中, 又以觀察『我目前開了多少的 port 在等待用戶端的連線』以及 『目前我的網路連線狀態中,有多少連線已建立或產生問題』最常見。 那你如何瞭解與觀察呢?通常鳥哥是這樣處理的:
# 範例三:秀出目前已經啟動的網路服務
[root@www ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address   State   PID/Program name
tcp        0      0 0.0.0.0:34796  0.0.0.0:*         LISTEN 987/rpc.statd
tcp        0      0 0.0.0.0:111    0.0.0.0:*         LISTEN 969/rpcbind
tcp        0      0 127.0.0.1:25   0.0.0.0:*         LISTEN 1231/master
tcp        0      0 :::22          :::*              LISTEN 1155/sshd
udp        0      0 0.0.0.0:111    0.0.0.0:*                969/rpcbind
....(底下省略)....
# 上面最重要的其實是那個 -l 的參數,因為可以僅列出有在 Listen 的 port
你可以發現很多的網路服務其實僅針對本機的 lo 開放而已,網際網路是連接不到該埠口與服務的。 而由上述的資料我們也可以看到,啟動 port 111 的,其實就是 rpcbind 那隻程式,那如果想要關閉這個埠口, 你可以使用 kill 刪除 PID 969,也可以使用 killall 刪除 rpcbind 這個程序即可。如此一來, 很輕鬆的你就能知道哪個程式啟動了哪些埠口囉!
# 範例四:觀察本機上頭所有的網路連線狀態
[root@www ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address     State       PID/Program
tcp        0      0 0.0.0.0:111       0.0.0.0:*           LISTEN      969/rpcbind
tcp        0      0 0.0.0.0:22        0.0.0.0:*           LISTEN      1155/sshd
tcp        0      0 127.0.0.1:25      0.0.0.0:*           LISTEN      1231/master
tcp        0     52 192.168.1.100:22  192.168.1.101:1937  ESTABLISHED 4716/0
....(底下省略)....
看到上頭的特殊字體吧?那代表目前已經建立連線的一條網路連線,他是由遠端主機 192.168.1.101 啟動一個大於 1024 的埠口向本地端主機 192.168.1.100 的 port 22 進行的一條連線, 你必須要想起來的是:『Client 端是隨機取一個大於 1024 以上的 port 進行連線』,此外『只有 root 可以啟動小於 1024 以下的 port 』,那就看的懂上頭那條連線囉!如果這條連線你想要砍掉他的話, 看到最右邊的 4716 了沒? kill 會用吧! ^_^
至於傳統的 Unix socket 的資料,記得使用 man netstat 查閱一下吧! 這個 Unix socket 通常是用在一些僅在本機上運作的程式所開啟的插槽介面檔, 例如 X Window 不都是在本機上運作而已嗎?那何必啟動網路的 port 呢?當然可以使用 Unix socket 囉,另外,例如 Postfix 這一類的網路伺服器,由於很多動作都是在本機上頭來完成的, 所以以會佔用很多的 Unix socket 喔!
例題:
請說明服務名稱與 port number 的對應在 Linux 當中,是用那個檔案來設定對應的?
答:
/etc/services

ifconfig顯示或設定網路的介面


  • ifconfig指令
    • 查詢目前的網路介面資訊,不加選項時會顯示已安裝的網路卡與封閉迴路(lo,loopback)的資訊。
    • 相關的欄位資訊
      • inet addr:全名為網際網路位址 ,就是此台的ip位址
      • HWaddr:硬體位址;前3碼是網路炩生產廠商的代號;後3碼是該網路卡的生產序號。
      • Bcase:這是廣播(broadcast)的位址,用於同時發送訊息給相同網域裡的其他電腦。
      • Mask:網路遮罩
      • MTU:每個資料封包的最大傳輸單位(Maximun Transmission Unit),用來控制封包的大小,預設值是1500Bytes.
      • RX、TX:分別代表已接收(Received)與已輸出(Transmitted)的封包總數,以及傳輸時封包出現流失或碰撞等狀況之數量。
    • 網路下設定
      • ifconfig eth0 netmask 255.255.0.0
        • 設定eth0這張網卡的mask為255.255.0.0
      • ifconfig eth0 down
        • 關閉eth0這張網卡
      • ifconfig eth0 up
        • 啟動eth0這張網卡

2013年4月20日 星期六

du指令(追蹤大文件命令)


  • 追蹤大文件命令
    • 隨著系統運行時間的持續,用戶數越來越多,可能會使文件仦統的可用空間越來越小,直到有一天收到系統磁盤空間告警的消息,這時管理員可能需要查看是哪些文件占用了過多的空間,以清理文件系統上的無用文件。此時du指令就派上用場了
    • du指令選項
      • h:以更直觀的方式顯示文件大小。
      • s:查看當前目錄的大小
    • 使用範例:
      • du /mnt
      • du -h /mnt
      • du -sh

2013年4月16日 星期二

關閉、啟動投影密碼(shadow)


  • 若要關閉投影密碼功能,可執行pwunconv指令,將使用者的密碼從shadow檔寫回passwd檔。若要再啟動,則執行pwconv指令。
  • 在郡組上也有相同的投影密影功能,若要關閉群組的投影密碼功能,則可執行grpunconv指令,將密碼從gshadow檔寫回group檔中,若要啟動,則執行grpconv指令。

單人模式-忘記root密碼的救星


  • 如果你忘了root密碼時
    • 先切換到單人模式
      • 在開機顯示LILO畫面時,按Ctrl+X切換到文字模式的LILO畫面,並輸入
        • linux s
        • passwd root 
          • 重新設定root的密碼

Linux軟體整理


  • 小弟是一邊看書一邊整理的…所以一開始可能看見一些已經作古的軟件,請別再在意哦!!!會續陸更新的!!
  • 辦公室軟體-KOffice
    • KWord:文書編輯軟體
    • KSpread:試算表軟體
    • KPresenter:簡報軟體
    • KChart:圖表繪製軟體
    • KFormula:公式製作軟體
    • Kivio:標程表軟體
    • Kontour:向量繪圖軟體
    • Kugar:商業數據分析軟體
    • OpenOffice:文件編輯軟體
    • GhostView:觀看PS,PDF文件
    • Xpdf:觀看PS,PDF文件
  • 一般軟體
    • Electric Eyes:影像編輯
    • gimp:影像編輯
  • 燒錄軟體
    • X-CD-Roast
  • 影音軟體
    • gtv(Gtk+MPEGPlayer)
    • MpegTV Player(mtv)
    • Xmms:mp3播放軟體
    • Gnome:聽音樂CD
  • 虛擬機器軟體
    • VMWare
  • 系統&管理相關
    • xosview
    • Webmain(管理)
    • GnoRPM
  • 模組維護工具
    • modutils
    • module-init-tools

傳輸檔案的ftp指令


  • 在ftp的模式下
    • hash :表示為了避免傳輸大檔時,不知道檔案是在傳輸中或斷線了,可讓檔案在每傳送一定大小後顯示一個#號
    • binary:指定要傳送的是2進位檔
    • ascii:指定要傳送的檔是文字檔
    • get:下載一個檔案
    • put:上傳一個檔案
    • mget:下載多個檔案
    • mput:上傳多個檔案
    • ?:顯示所有指令
    • prompt:可以設定是否要在檔案傳輸前一個一個確定
    • !指令:有!打頭的表示這一個指令是下在系統的終端機上的不是ftp本身,如
      • !pwd
      • !mkdir download
    • lcd:在不登出ftp下,切換本機目前的目錄

ssh遠端登入常用的指令&設定


  • Red Hat 預設是開啟telnet伺服器,而是以ssh伺服器來代替。因為telnet在資料傳輸時是不加密的,而ssh是有加密的。
  • 常用的指令
    • ssh canred.com.tw
    • ssh 192.168.x.xx
    • ssh -l 192.168.x.xx
      • 使用l選項,你可以指定要登入遠端主機的帳號
  • 設置
    • 取消root遠端登入
      • Red Hat的ssh伺服器default是允許root帳號登入的;如果你要關掉的話你可以修改/etc/ssh/sshd_config檔
        • PermitRootLogin no :表示不允許Root帳號登入系統
    • 當設定檔變更時,你必須重新啟動服務
      • /etc/rc.d/init.d/sshd restart

2013年4月15日 星期一

建立開機磁片,mkbootdis指令,建立一個軟盤


  • 如果你在安裝系統時,並沒有製作開機磁片;或者開機磁片已經損毀,安裝系統後,可利用mkbootdisk指偷建立一張新的開機磁片。
    • mkbootdis `runame -r`
    • 或是
    • mkbootdis --device /dev/fd0 --noprompt 2.6.18

2013年4月14日 星期日

創建文件系統指令。mkfs,mke2fs指令


  • 在linux系統中,創建文件系統可以使用mkfs系統指令,按創建的文件系統不同,mkfs系列命令包括:mkfs.ext3、mkfs.ext2和ext.vfat等。利用這些指令可以為分區創建ext3、ext2和fat32等不同的文件系統,也可以直接使用mkfs指令創建不同的文件系統。
    • mkfs 指令,類似dos下的format指令
    • 指令的格式
      • mkfs [option] device
    • 常用的option
      • t:用於指定創建的文件系統類型
      • L:創建文件系統的同時,為文件系統增加卷標
      • c:創建文件系統前,先檢查指定分區的壞道。
      • v:顯示詳細內容
    • 使用方法如下:
      • mkfs -t ext2 -v /dev/sda4
      • mkfs -t ext3 /dev/sdb1
      • mkfs.ext3 -c /dev/sdb1
        • 用mkfs.ext3指令創建文件系統的同時,使用選項c檢查磁盤中的壞道
      • mkfs -t ext3 -L /data /dev/sdb1
        • 創建文件系統的同時,使用選項L為sdb1創建卷標。
  • 查看和修改卷標指令e2label
    • 卷標是用戶對文件系統增加一個別名,通常用于標識文件系統的用途。在linux系統中卷標也可以用於掛載文件系統。
      • 指令格式:e2label device [new_label]
    • e2label /dev/sdb1 /file
      • 為sdb1的磁盤分區設定一個名稱file的卷標
    • e2label /dev/sdb1
      • 查為sdb1的磁盤分區使用的卷標
  • 掛載文件系統
    • 在linux等類unix系統中,創建文件系統後,必須先將文件系統掛載到某個目錄,然後才能使用該文件系統存儲數據。掛載是將文件系統的階區"掛"在某個目錄下,這個目錄就是該分區的訪問點。
    • 在linux系統中,掛載分區使用mount指令,不僅可以掛載分區,還可以掛載光驅、u盤、光盤鏡象等設備和文件。
    • 指令格式
      • mount [option] device directory
        • device:表示要掛載的設備或文件
        • directory表示設備或文件的掛載點。
      • 常用的選項
        • a:掛載所有可以掛載的文件系統,如果不指定,則掛載文件/etc/fstab中列出的文件系統
        • o:指定掛載時使用的參數
          • async:以非同步的方式讀寫文件系統
          • atime:每次存取都更新文件的訪問時間戳記
          • auto:自動掛載。該選項只能用於/etc/fstab文件中,表示用戶使用選項a時,此文件系統將自動掛載。
          • user:允許普通用戶掛載文件系統,此選項還附帶有noexec、nodev等選項(除非掛載時重新指定這些參數,否則default不生效)
          • users:允許所有用戶掛載文件系統,此選項還附帶有noexec、nodev等選項(除非掛載時重新指定這些參數,否則default不生效)
          • dev:提載後可讀取文件系統上的字符設備和塊設備文件。
          • exec:掛載後可執行文件系統上的2進制文件
          • noatime:與atime參數作用相反,不更新訪問時間戳記。此參數通常用於光盤等只讀的文件系統
          • noauto:與auto參數作用相反。
          • nouser:禁止普通用戶掛載文件系統
          • noexec:與exec選項相反,不允許執行文件系統上的2進制文件
          • nodev:與dev選項閜反,不允許讀取文件系統上的字符設備和塊設備文件。
          • remount:試圖重新掛載一個文件系統,通常用於改變文件系統的掛載參數。
          • ro:以只讀方式掛載文件系統。
          • rw:以可讀寫方式掛載文件系統
          • sync:所有對文件系統的讀寫操作者應該立即完成
          • suid:設置用戶id和組id
          • loop:將文件當成文件系統掛載
          • nosuid:與suid功能相反;不設置用戶id和組id
          • bind:將一個子樹掛載到其他地方,即從多個位置訪問一文件系統
          • defaults:default參數,包括:rw,suid,dev,exec,auto,nouser,async
          • 注意:如非必要,不要使用user或users等參數,否則可能會引起系統安全性的問題
        • t:指定文件系統的類型。如果掛載常見的文件系統,一般不必指定文件系統的類型。通常只有光盤鏡像、遠程文件系統等需要指定文件系統類型。
      • 用法示例:
        • mount -t ext3 /dev/sdb1 /mnt/sdb1
        • mount ext3 /dev/sdb1 /mnt/sb1
          • 不使用t選項,表示讓系統自動判斷文件系統並掛載
        • mount 
          • 查看系統掛載的狀況
        • mount -p loop linux.iso /media
          • 使用loop選項掛載光盤鏡像文件
--------------------------------------------------------
badblocks 指令用新檢查硬碟是否有壞塊的存在
使用方法如下:
badblocks -s -v /dev/sda
--------------------------------------------------------

mke2fs 指令,用於創建第2擴展文件系統
使用方法如下:
mke2fs-t ext2 -v /dev/sda4
--------------------------------------------------------

2013年4月11日 星期四

排程指令crond


  • 在使用排程crontab前,你必須確保計劃任務的相關服務已經正確啟動。也就是crond,atd這2個服務
    • chkconfig --level 35 crond on
    • chkconfig --list crond
    • chkconfig --level 35 atd on
    • chkconfig --list atd
    • service crond start
    • service atd start
  • 如果要禁用某些用戶的計劃任務
    • 在/etc/cron.denyt檔中加入需要禁用的用戶名。
  • 電腦在很多的時侯需要週期性的執行某一項目工作,這時侯你就需要使用到crond的排程指令了。
  • 排程設定檔的寫法
    • 在啟動時間格式為:Minute Hour Day Month DayOfWeek Command
    • 如遇到不指定的時間單位你可以用*來表示
      • 1 * * * * program -a -b -c
        • 上列為每分鐘執行某工作
      • 20 4 * * *  program 
        • 上列為每4點20分的時侯執行某工作
      • 1 0 8 sep * program
        • 每年九月8日的0點1分時
      • 9 4 * * sun program
        • 每個星期日的不限日4時9分時執行
      • 20 2 1,15 * * program
        • 每月的1或15日2點20分執行
      • 25 1-4 * * * program
        • 每日的1至4點的25分執行
      • */10 * * * * program
        • 每十分鐘執行一次
      • 35 5 */10 * * program
        • 每隔十日的5點35分執行
  • /etc/contab的檔案內容
    • SHELL =/bin/bash                  #指定執行排程工作所使用的shell
    • PATH=/sbin:/bin:/user/sbin:/usr/bin  #指定指令搜尋的路徑
    • MAILTO=root     #指定輸出的結果,郵寄給root帳號
    • HOME=/        #指定根目錄
    • 01 * * * * root run-parts /ect/cron.hourly
      • 每個小時的第1分鐘以root帳號執行/etc/cron.hourly目錄中的所有執行檔
      • run-parts指令會執行隨後目錄中的所有執行檔
  • crond排程指偷會每小時、每天、每週及每月執行一次/etc/hourly,/etc/daily,/etc/monthly目錄中的所有執行檔
  • 個人的排程工作
    • 你可以透過crontab -e指令來編輯自已的排程設定檔,並在此檔加入要定期執行的工作,以下為canred使用者編輯自已的排程設定檔
      • crontab -u canred
        • 指定查看canred帳號的計劃任務
      • crontab -e
      • crontab -l
        • 查詢自已所有的排程工作
      • crontab -r 
        • 刪除自已所有的排程工作,在使用前一定要特別的注意哦…因為一不小心就全刪除了。
    • 一般狀態下排程工作的設定檔會被儲存在/var/spool/cron目錄下,以帳號名稱為檔名的設定檔。
  • 系統管理員是可以編輯其他人員的排程工作哦…
    • crontab -e -u canred
      • 使用u選項來指定編輯的帳號
    • Default下系統會將用戶提交的計劃任務放在目錄/var/spool/cron/中,並以用戶命名計劃任務文件。
  • 在設定排程的常用輸出結果方式
    • 1 * * * * program >> /home/canred/cron.log
    • 1 * * * * program >> /home/canred/cron.log 2>&1
      • 2>&1表示執行結果及錯誤訊息
    • 1 * * * * program > /dev/null 2>&1
      • /dev/null 是表示不儲存資料,也就是直接放棄啦
  • 備份/還回計劃任務
    • 備份
      • crontab -l > \backup\cron_canred
    • 還原
      • crontabl \backup\cron_canred
  • 系統計劃任務
    • 有4個關鍵的目錄
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly

bzip2,bunzip2和bzip2reconver指令


  • bzip2,bunzip2和bzip2reconver
    • 你可能可以看到*.tar.bz2的壓解檔,這種壓縮檔通常會拿來壓縮統統kernel或path檔
    • bunzip2實際上就是bzip2,你可以用ls -l bzip2 bunzip2 看看
    • 選項:
      • -k:在壓縮和解壓縮的過程中保留原檔
      • -f:強迫產生檔案
      • -d:執行解壓縮行為
    • 範例:
      • *.tar.bz2的解壓縮方法
        • bzip2 -dc linux-2.1.xxx.tar.bz2 | tar xvf -
  • bzip2recover指令;用來修復損毀的.bz2檔案。
    • bzip2recover test.bz2





2013年4月10日 星期三

gunzip指令;解壓gzip檔案


  • gzip/gunzip與zip的用法上的不同
    • zip指令能將許多檔案壓縮成一個檔案的功能,但gzip不能,所以gzip一般會和tar合併使用。目前大部份可以見到的壓縮檔大都是用tar將所有檔案打包成一個檔案,再用gzip做壓縮,所以當我們看到副檔名為.tar.gz或.tgz者,大多就是這類型的檔案。
  • gzip指令
    • 選項(大致於zip的選項大同小異)
      • -S:指定副檔名
        • gzip -S .gzip data01.txt
        • 注意:使用-S的選項壓縮檔案時在解壓的時侯也要加上-S的選項
          • gzip -S .gzip -d data01*
      • -f:解壓時強迫覆蓋輸出檔案,不要提示user訊息。
        • gzip -d -f data02.txt.gz
    • 常用的範例:
      • gzip data.txt 
        • 壓縮data.txt檔案,並產出一個data.txt.gz的檔
      • gzip -d data.txt.gz
        • 解縮動作
  • gunzip指令
    • 基本是就是gzip只是負責解壓行為;另外可以用gunzip來解zip或compress所壓縮的檔案。

zip 指令 , unzip 指令



  • zip 指令
    • 常用的選項
      • g:將新的檔案附加到一個已存在的zip檔中
        • zip -g test *.txt
      • j:只壓縮檔案,但是不儲存目錄的結構;default是有目錄結構的
        • zip -j test *.text /data2/*.txt
      • r:遞廻方式壓縮
        • zip -r test *
      • -f:更新壓縮檔中的檔案
        • zip -f test *.txt *.doc
      • -u:可又新修改過的檔案並加入新檔
    • 常見的範列:
      • 將所有*.txt的檔案壓成一個myfiles.zip檔
      • zip myfiles *.txt
      • zip myfiles *.txt *.doc
  • unzip 解壓zip檔
    • 選項
      • d:指定解壓的目的目錄
      • u:在解壓時,如果目的目錄已經存在此檔案就不解壓;若不存在時才解壓。
        • unzip -u test.zip 
      • j:用法跟zip的j選項雷同;有j選項時只解壓檔案出來不含目錄的結構。
        • unzip -j test.zip 
    • 常見的用法
      • unzip test.zip
      • unzip test.zip -d mydir




2013年4月9日 星期二

tar 打包檔案以及壓縮/解壓


  • tar指令是讓使用者所指定的檔案或目錄打包成一個檔案,不過它並不做壓縮。一般unix上常用的壓縮方式是先用tar將許多檔案打包成一個檔案,再以gzip等壓縮指令壓縮成xxx.tar.gz
  • tar常用的選項
    • c:建新一個新的tar檔
    • v:顯示運作過程的資訊
    • f:指定一個檔案的名稱通常與c,x,z選項一起使用(指定打包的文件檔)
    • z:呼叫gzip壓縮指令執行壓縮
    • Z:使用compress解壓縮/壓縮
      • tar -cZvf test.tar.Z *.txt
    • t:檢視壓縮檔案的內容
    • x:解開tar檔
    • --atime-preserve:壓縮後的檔案以原來的檔案時間為主
    • --checkpoint:讀取壓縮檔時顯示目錄名稱
    • h:儲存符號連結(symbolic link)所連結的檔案,而不是符號連結本身
    • --delete:刪除.tar檔中的檔案
      • tar --delete -vf text.tar test.txt
    • r:將新的檔案附加到tar後
      • tar -rvf text.tar newfile.new
    • u:更新tar檔案的內容
      • tar -uvf test.tar t.txt
    • k:在解包的時侯不要覆蓋已存在的檔案
      • tar -xkvf test.tar
    • --remove-files:將檔案移入tar檔中,並移除原檔案。
      • tar --remove-files -cvf test.tar *.txt
    • W:可在寫入時,檢查 tar檔
      • tar -Wcvf text.tar *.txt
    • --use-compress-program:指定壓縮程式
      • tar --cvf test.tar --use-compress-program zip *.txt
    • --totals:會顯示寫入的bytes數
      • tar --total -cvf text.tar *.txt
    • j:通過bzip2處理歸檔的文件
  • tar 範例
    • tar -cvf data.tar *
      • 將所有檔案打包成為一個data.tar檔
    • tar -cvzf data.tar.gz *
      • 與上例相同但是多了壓縮
    • tar -tvf data.tar
      • 檢視data.tar檔中包含那些檔案
    • tar -xvf data.tar
      • 將data.tar檔解開
    • tar -xzvf bin.tar.gz
      • 用gzip格式解包解縮







2013年4月8日 星期一

fg,bg,&指令,將指令放到後台執行;nohup指令可讓使用者登出系統後,程序繼續執行


  • 使用者有時侯執行的程序可能要花很多時間,如果將它放在前景執行,將導致無法繼續做其他事情,最好的方法就是將它放在背景執行,甚至可能還希望使用者登出系統後,程序還可以繼續執行。
    • 在背景執行程序的&,bg指令
      • 格式:指令 &
        • sample 1 :
          • netscape
        • sample 2:
          • updatedb
            • 按下Ctrl+Z中斷動作
          • bg
            • 將更新動作放到背景執行
        • sample 3:
          • sleep 300 &
          • ps
        • 後台執行時,並將輸出重定向到指定文件中
          • mv /mnt/sdd5/test /root/ &>message &
            • 上例,使用重定向將命產生的輸出和錯誤信息寫入文件message中,這樣命令執行過程中就不會有消息發送到控制台了。
    • 在前景執行程序的fg指令
      • fg
  • nohup指令可讓使用者登出系統後,程序繼續執行
    • nohup myserver &
----編輯紀錄
  • 2013/4/23:
    • 新增:
      • 背景執行範例程式 sample 3 、重定向


開機時自動掛載光碟或軟碟片;設定允許一般使用者也能掛載光碟片


  • 假如你想在開機時就自動掛載光碟片或軟片,可編輯fstab檔案
    • 以下為光碟機為例
      • 第1欄                 第2欄           第3欄     第4欄                       第5,6欄
      • /dev/cdrom         /mnt/cdrom    iso9660  auto,owner,kudzu,ro   0  0
        • 第4欄:要開機時自動掛載光碟片,請將原本"noauto,owner,kudzu,ro"改成auto,owner,kudzu,ro
        • 第5,6欄:此行是設定掛載光碟片時的參數
    • 以下為軟碟機為例
      • /dev/fd0         /mnt/floppy    auto  auto,owner,kudzu,ro   0  0
  • 若要一般使用者要可以掛載設備資源的話,你要修改fstab檔案
    • 依上例光碟機的第4欄改成auto,owner,kudzu,user
  • 掛載其他種類的儲存媒體
    • mount指令除了可掛載光碟或軟碟片之外,也可掛載碟分割區,ZIP磁碟機等,例如fat的分割區
      • mount -t -vfat /dev/hda1 /mnt/win98

2013年4月7日 星期日

掛載的儲存媒體看不到中文檔名?


  • 如果掛載的儲存媒體中含有中文檔名,需要在執行mount指令時,再加上"-o iocharset=cp950"參數,如此才能看到此儲存媒體內的中文檔名。例如要掛載光碟片,則執行以下指令。
    • mount -o iocharset=cp950 /dev/cdrom /mnt/cdrom

避免按Ctrl+Alt+Del重新開機的方法


  • 要在Linux底下重新開機,也可以直接按下組合鍵Ctrl+Alt+Del,如果你不希望任何人利用這組合鍵隨意的重新啟動電腦,請修改/etc/initab檔:
    • 將原有的ca::ctrlaltdel:/sbin/shutdown -t3 -r now前面加上一個#即可
      • #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

/etc/inittab 設定錯誤,導致無法開機!


  • 若修改了/etc/inittab後無法正常開機,則可以在開機時採用單人模式進入系統,重新修改inittab設定檔以解決此問題。
  • 使用LILO為開機管理程式時,只要在開機顯示LILO選單畫面時,按下Ctrl+x鍵,切換到文字模式的LILO的登入畫面,並輸入以下參數即可:  
    • linux s
  • 若使用GRUB為開機管理程式時,同樣在開機顯示選單畫面時,按 Ctrl+x鍵,接著按p鍵,再輸入GRUB密碼,最後按a鍵,並在指令列輸入以下參數以進入單人模式
    • ro root=/dev/hda2 s 


2013年4月1日 星期一

設定GRUB開機管理程式


  • GRUB(GRand Unified Bootloader)為多重開機管理程式的後起之秀,這套多重開機程式最初由Erich Stefan Boleyn所設計及實作出來,目前由GNU所維護。GRUB可以取代LILO,同時功能更強大,目前已有許多Linux發行版內附GRUB的程式。
  • 如何改新開機設定檔
    • GRUB預設會去讀位於/boot/grub/menu.lst的設定檔,在Red Hat Linux裡的menu.lst為一個連結到/boot/grub/grub.conf的連結檔。並由修改此設定檔可更改GRUB的開機時的相關功能。
    • 若你想更改開機的選單、圖片,可編輯/boot/grub/menu.lst檔案修改。以下簡單的說明一下menu.lst檔案
      • default=0        //此處預設開機的作業系統
      • timeout=10    //GRUB選單的延遲時間
      • splashimage=(hd0,1)/boot/grub/splash.xpm.gz //開機選單的背影圖片
      • title Red Hat Linux (2.x.x)    //選單上所顯示的名稱
      •         root (hd0,1)                //存放系統核心的分割區
      •        kernel /boot/vmlinuz-2.....  ro root=/dev/hda2   //指定要載入的核心及掛載系統的根目錄
      •        initrd /boot/initrd.2......    
      • title DOS       //表Windows分割區
      •       rootnoverify (hd0,0)     //指定開機的磁碟
      •       chainloader +1 //由於microsoft的作業系統屬封閉類型,因此需以chainloader的方式啟動該分割區中第一個磁區裡的開機程式
  • 重新安裝GRUB
    • 修改完設定檔後必須重新安裝GRUB才能生效,請執行下面的指令
      • grub-install /dev/hda

2013年3月25日 星期一

Apache相關設定及說明


  • Appach的相關設定存儲於 /opt/httpd/conf/httpd.conf,若如果你要修改的話,或是廠商有修改的話可能在其他的地方如/etc/httpd/config下的httpd.conf
  • 啟動apache
    • /opt/apache/bin/apachectl start
    • /sbin/service httpd restart
  • 你的預設的www目錄可能在/var/www/html
  • 注意:若是你有新增page到/var/www/html中的話,記得要修改一下權限
    • chmod 755 /var/www/html/yourfile.html
  • 在httpd.conf常設定的選項
    • Listen : 是設定apache使用到的port 
      • Listen 80
    • ServerRoot "/usr/local/apache"      : 設定apache的伺服器所在的根目錄
    • <IfModule !mpm_netware.c>
    • PidFile logs/httpd.pid                    :執行http這個服務的程序號碼
    • </ifModule>
    • Timeout 300          :在傳陝五與接收之前的逾時的秒數
    • KeepAlive On     :是否保持連線
    • MaxKeepAliveRequest  100     : 建立連線時所允許的最大回應數,而0表不限
    • KeepAliveTimeout 15   :在相同的client,相同的連線中,等待下一個請求的秒數,起過即算逾時。
    • <IfModule prefork.c>
    •     StartServers 5         :server啟動時的程予數目
    •     MinSpareServers   5 :server備援程序的最小直
    •     MaxSpareServers  5 : 上行的最大值
    •     MaxClient 150 : client端的最大連線數
    •     MaxRequestsPerChild 0 : 一個server程式最大回應的子程序數目;0表不限
    • </IfModule>
    • ExtendedStatus On :這個控制是否紀錄完整的狀態(on),或是基本的資訊(off),default是關閉的。
    • User Apache
    • Group Apache 以上2行是定義執行httpd的使用者與群組,預設是apache
    • ServerAdmin admin@test.com 當系統出現問題的時侯所出現的聯絡email
    • ServerName new.host.name:80 是否認證自已的domain name
    • UseCanonicalName off 是否使用別名
    • DocumentRoot "/usr/local/apache/htdocs" 網頁根目錄所放的路徑
    • 對於apache而言,每一個目錄都可以設相關的權限,以下的default值使用嚴格的限制
      • <Directory>
      •     Options FollowSymLinks
      •     AllowOverride None    
      • </Directory>
    • DirectoryIndex index.html index.htm  頁設開啟的檔案
    • AccessFileName .htaccess 每個目錄錄中權限控管的檔案
    • 以下是設定避免.htaccess以及.htpasswd被web client看到
      • <Files ~"^\.ht">
      •     Order allow , deny
      •     Deny from all
      • </Files>
    • HostnameLookups Off 紀錄檔中的ip address是否要做反查
    • EnableMMAP off 記憶體對應的控制
    • ErrorLog logs/error_log 錯誤檔案的紀錄位置
    • LogLevel warm 紀錄檔的等級
    • CustomLog logs/access_log common 全部的紀錄都到一個紀錄檔中
    • ServerSignature On 在一些網頁中是否要出現Admin 的email的連結
    • Alias /haha "/usr/local/apache/manual" 建立別名
    • LanguagePriority tw en da ...語言的優先順序


  • 設定apache的認證登入
    • 新增一個Apache所認的id,supermain,以及密碼為abc123,並將密碼檔置於/opt/passwords。要注意…這一個密碼檔必須要能夠被apache帳號讀取到,並且最好放在瀏覽器無法存取到的位置。
      • htpasswd -c /opt/passwords superman
      • new password:abc123
      • re-type ......
    •  首外將/opt/passwords給予一孺使用者閱讀的權限,否則認正的功能將無法啟動。由於apache除了port 80 的程序由root執行之外,其他的程序由apache這個使用者執行,所以必須開放根目錄可閱讀的權限
    • chmod 644 /opt/passwords
    • chmod 755 /home/newrpm
    • 在httpd.conf加入以下四行
      • <Directory /home/*/www>
      • AuthType Basic
      • AuthName "Restricted Files"
      • AuthUserFile /opt/passwords
      • require user supermain
      • ... 
  • apache的虛擬主機:一台pc多個domain name
    • 假設pc a 的ip 為10.1.1.1 而有2個domain name,分別是www.one.com以及www.two.com,我們希望client端在browser輸入不同的domain name,則會連到不同的目錄。
      • 修改httpd.conf
        • NameVirtualHost  10.1.1.1
        • <VirtualHost www.one.com>
        •     DocumentRoot /home/one/www
        •     ServerName www.one.com
        •     ErrorLog logs/error_one_log
        •     CustomLog logs/access_log1 common
        • </VirtualHost>

        • <VirtualHost www.two.com>
        •     DocumentRoot /home/two/www
        •     ServerName www.tow.com
        •     ErrorLog logs/error_tow_log
        •     CustomLog logs/access_log2 common
        • </VirtualHost>
  • appache的分散流量
    • 實做方法有2個;1為在DNS server設定,將同一個domain name對應到多個Ip Address,另一個為iptables的設定。
  • httpd指令說明
    • -d serverroot : 設定server root的起始目錄
    • -f config :使用特定的設定檔案,預設值是conf/httpd.conf
    • -t :執行httpd.conf的語法測試,
    • -v :顯示apache的版本
    • -V:顯示apache的版本以及httpd用的參數
  • htpasswd指令
    • -c:新增密碼檔案,如果此檔案已經存在,會被覆蓋
    • -d:不使用交談方式,直接將密碼置於指令之後
      • htpasswd /usr/local/etc/apache/.htpasswd-users tom
        • 新增或是更改tom的密碼
      • htpasswd -c /home/doe/mywwww/.htpasswd jane
        • 新增一個帳號並記錄它
      • htpasswd -mb /usr/web/.htpasswd-all john HappyDays
        • HappyDays是密碼哦
  • apachectl指令
    • start:啟動apache server
    • Stop:停止apache server
    • Restart:重新啟動
    • Fullstatus:顯示完整的狀態
    • Status:顯示簡單的狀態
    • Configtest:執行語法測試
    • Help:help 這就不用說了吧…

2013年3月24日 星期日

磁碟和文件系統管理


  • 分區類型的標識【重要觀念】
    • 主分區:可以直接掛載並存取數據。一個礎盤上最多只有4個主分區(即一個磁盤最多只有4個可用的主分區)
    • 擴展分區:特殊的主分區(占用一個主分區)。要使用擴展分區,必須先將擴展分區劃分為可以直接掛載並存取數據的邏輯分區,也就是說一開始建立的擴展分區是不可以直接使用的,而一個邏輯分區一定是由擴展分區廷伸出來的。
    • 邏輯分區:從擴展分區中劃分出來一類分區。邏輯分可以直接掛載並存取數據,一個擴展分區可以被劃分為屬個邏輯分區。
    • 從上面的內容可以看出,一個磁盤最多可以劃分為4個可以直接掛載並存取數據的主分區。如果需要劃分為4個以上的分區,可以將一部分磁盤空間劃分為擴展分區,然後再將擴展分區劃分為多個邏輯分區;以磁盤sda為例,sda的4個主分區標識分別為sda1,sda2,sda3,sda4(最多4個),而邏輯分區則使用sda5,sda6,sda7(一定由5開始)…這樣的形式表示。
  • 查看磁碟設備列表指令fdisk
    • 指令格式 fdisk [option] device
      • 常用的option只有一個 l : 其作用是列出當前系統中的磁碟設備及分區詳情。
        • fdisk -l
      • 其主要的功能在對磁盤進行分區。
        • fdisk /dev/sdb
          • command(m for help):m
      • 常用的fdisk功能有
        • d:刪除分區,使用此命令時,磁盤上必須有可供刪除的磁盤分區
        • l:查看分區類型列表
        • n:增加新分區。使用此命令時,磁盤上必須有空閒的磁盤空間或者還有未被分配的擴展分區空間。
        • p:打印當前分區表。
        • q:不保存已更改的內容並退出。
        • t:修改分區類型。
        • v:驗証分區表
        • w:保存所做的更改並退出。
      • 利用fdisk工具對磁盤進行分區(我們要對sdb進行分區,將其分成2個主分區;第1個是sdb1大小為40g,第2個主分區為使用全部剩餘空間的擴展分區。最後將擴展分區的所有空間劃分為邏輯分區sdb5)
        • fdisk /dev/sdb
          • command(m for help): p
          • command(m for help): n
          • p
          • ...
          • Partition number(1-4):1
          • First sylinder (1-10443,default:1):
          • Last cylinder or +size ... : +40G
          • command(m  for help):n
          • e
          • Partition number(1-4):2
          • command(m for help):n
          • l
          • p
          • w
        • 執行完以上操作後,分區工作就已經完成了。但有時內核會無法識別新增加的分區,這個問題主要在於一些移動硬盤、u盤等。主要現像為設備目錄/dev中,沒有相應的分區文件或分區文件不完全等,這時可以使用指令partprobe讓內核重新讀取分區表
        • fdisk 的 l 選項可以列出所有的設備
          • fdisk -l
    • 注意:在linux系統中,所有的設備都被放在目錄/dev/中,對顧磁盤等存儲設備而言,sd通表示scsi磁盤、stat磁盤、u盤;hd通常表示ide磁盤,而軟盤通常使用fd表示,光驅則使用hdc或cdrom表示
  • 查看磁盤設備指令hdparm
    • hdparm命令主要用於查看ide硬盤的工作參數。還可以使用此指令設置ide硬盤的工作模式。
    • 指令格式: hdparm [option] device
      • 常用的option
        • I:顯示硬盤提供的硬件信息。
        • T:評估硬盤從快速存中讀取資料的速度。
        • t:評估硬盤從湲沖區中取資料的速度。
      • hdparam -I /dev/sha
      • hdparm -tT /dev/sba
        • 用來評做硬盤sda的性能,評估效能的指令可以用於ide設備、scsi設備、raid設備等。

2013年3月23日 星期六

POSIX ACL權限系統及其管理命令


  • POSIX是protable Operating System Interface的縮寫,含義是移植操作系統接口。POSIX ACL權限在linux的內核2.6版之後就正式支持了,一般的文件系統ext2,ext3,JFS等都支持POSIX ACL。
  • POSIX ACL仍然使用傳統權限中的讀寫、執行作為管理的核心,不同的是可以為文件增加多個用戶或組的權限細則 。為文件增加acl權限可以使用setfacl命令,而getfacl命令是取得文件的posix ACL的權限清冊。
    • ACL權限管理命令setfacl
      • setfacl命令主要用於增加、刪除acl權限。與傳統文件權限管理的命令一樣,只有root用戶和文件屬主才能畢setfacl命令。
        • 命令格式
          • setfacl [option] 權限表達式 文件名
            • 常用的option
              • b:刪除所有擴展ACL權限
              • k:刪除default的ACL權限
              • d:設定default的ACL權限
              • R:遞迴的設置目錄及目錄中的所有文件
              • m:修改、增加已有的ACL權限
            • 設定acl權限時的權限表達式與chmod的權限表達式是不同的。其ACL的權限表達式基本格式
              • [對象類型]:[對象]:[權限列表]
                • 對象類型:可以使用的對象類型有4種。
                  • u:使用者/用戶
                  • g:群組
                  • m:表示ACL權限的安全值
                  • o:其他用戶
                • 對象:當然就是用戶或組的名稱
                • 權限:以w,r,x的組合
              • 如果一條指令中要使用多個權限表達式,可以使用","將這些權限表達式分隔開。
          • 範例:
            • setfacl -m u:canred:rw a.txt
              • 設定用戶canred 可讀可寫 a.txt的文件
    • getfacl指令用來查看acl權限。
      • 使用getfacl命令查看文件的acl權限時,通常不需要使用任何選項,直接將要查看的文件作為其參數即可
        • 範例:
          • getfacl a.txt
    • 文件系統可能default不支持acl,可以通過重新掛載的方式,讓這些文件系統支持acl,命令為mount -o remonut,acl /dev/sda3。
    • ACL權限列表中還有一個特殊的條目,其對象類型為mask,其主要作用是限制ACL條目的最大權限,當設置的acl權限超過權限上限時,超過的權限將會被系統屏蔽
      • setfacl -m m::r,g:admin:rwx aFolder
    • 刪除acl權限
      • setfacl -b aFolder
    • 遞迴的增加ACL權限
      • setfacl -Rm u:canred:rw,g:admin:rw test
    • 預設ACL權限
      • setfacl -dm u:canred:rw,g:admin:rw file
        • 上面的命令為目錄設置了預設的acl權限,在目錄中建立的新文件將會自動繼承預設的acl權限。
    • 刪除預設acl權限
      • setfacl -k file

權限掩碼命令umask



  • 當戶戶建立件時,系統會自動為文件增加一個default的權限。如果用戶忘記修改文件的default權限就可能會引發一些安全隱患。為避免此類問題,通常建議用戶修改創建立件時的default權限,即將創建文件的default權限修改為一個相對安全的值。
  • 在Linux系統中,使用umask值確定用戶創建文件的default權限,可以使用修改umask值的方法修改用戶創建文件時的default權限。由予mask有掩碼的意思,也稱為權限掩碼。而權限掩碼在用戶登錄系統時就已經被初始化,umask值使用3位8進制數表示default權限。其對於文件而且:每一位的最高值為6,對於一個目錄而言,每一位最高值是7
    • 查看umask值
      • 使用umask的指令即可
    • 修改權限掩碼
      • umask 022
        • 設定其他人員、郡組都可以有read的權限
    • 保存修改後的umask的值
      • 使用umask命令設置的權限掩碼將會在系統重啟後失效,如果希望保存umask值,通常將其寫入用戶初始化文件 ~/.bash_profile中。
        • echo "umask 022" >> ~/.bash_profile



2013年3月19日 星期二

rndc指令用來管理控制nameserver用的。以及dns補助指令nslookup,host,dig


  • rndc指令是讓系統管理者控制nameserve之用的,其語法如下:
    • rndc [-c config] [-s server] [-p port] [-y key] command
      • config,server,port,key均可省略,而要注意的是command的語法
        • reload:重新啟動設定以及所有的zones
        • reload zone:重新啟動給定的zone。
        • reconfig:重新啟動新的zones,這個參數並不會去啟動已存在的zones。
        • stats:將統計資料寫到紀錄檔中 named.stats;
        • stop:停止服務,並將最新的變更對檔案做更新。
        • halt:立即停止服務,並不會對最近變更的檔案更新。
        • flush:更新server的暫存區。
        • status:顯示server的狀態。
  • nslookup
    • 這是最常用來查詢domain name與ip address之間的對應關系的指令,您可以指定使用某台DNS Server,也可以設定要查詢的種類。
      • nslookup
        • www.yahoo.com
        • .....
        • set type=mx
        • www.yahoo.com
  • host
    • 這也是常用來做查詢DNS紀錄的指偷
      • host -a hinet.net
  • dig
    • DNS查詢工具
      • dig hinet.net mx




2013年3月18日 星期一

XINETD--啟動內建的TCP服務;XINETD的設定說明:


  • XINETD是為了安全性而取代原有的INETD的一項產品,事實上不只是安全性,還包括了許多超越inetd的功能設定。底下將其特微做些說明:
    • 權限的控管
      • 它可以限制些ip address可以建立連線,哪些不行。
    • 對於DOS(Denial of Service)的防範
      • 它可以針對特定的電腦限制連線的速率,以及建立連線的數目。如果有某台電腦試圖建立很多連線,使用特定的服務,我們就可以限制某電腦同時的連線數。
    • 記錄檔的延伸性
      • 可以利用syslog去紀錄不同的服務,讀者也可以把特定的服務紀錄在特定的檔案內。
    • 服務的重新導向
      • 可以將連線重新導向到另一個特定IP Address的特定port,這裡的ip address不一定是外部的ip。如果你的電腦是nat server,當然可以導向到內部的ip。比如說a電腦是有一個外部ip及內部ip(是一個nat);b電腦是smtp服務用的電腦;c電腦是http服務器。當外部連線到a電腦,提出smtp服務時,將自動轉到b電腦,提出http服務,當就是轉到c電腦啦。
    • IPv6的支援
      • 在版本2.1.8.8之後,就有支援IPv6了。
  • XINETD所包含的服務
    • 有telnet,ftp,pop0,daytime,echo,finger...etc.它的預設的目錄在/etc/xinetd.d之下。當然,這是預設的部分,你當然可以新增自訂服務或是將既有的(非xinet所提供的服務)透過xinetd啟動(如sendmail)。此外,亦可單純的做重新導向的工作。
  • 範例:
    • 開啟telnet服務
      • vi /etc/xinetd.d/telnet
        • disable = no
        • service telnet
        • {
        •       flags = REUSE
        •       socket_type=stream
        •       wait=no
        •       user=root
        •       server=/usr/sbin/in.telnetd
        •       log_on_failure +=USERID
        •       disable=no
        • }
      • 重新啟動xinetd服務
        • /sbin/service xinetd restart
        • /etc/init.d/xinetd reload 指令重新載入說設定檔,將立即啟用telnet服務,另外說明一下有關telnet預設是不可以用root登入的哦。
      • 在使用telnet連接時可以出現中文亂碼,你可以使用telnet -8 bbs.ncku.edu.tw來啟動telnet;加上"-8"的選項便可正常輸入中文了,小弟我是沒有試過啦^ ^
      • 如果你真的要讓root帳戶可以使用telnet的話…你可這樣做(但不建意)
        • 更改/etc/securetty檔案內容
          • /etc/securetty檔案內的設定值,是用來限定root帳號可從哪一個終端機登入。在Linux中遠端登入是使用pts/0,pts/1...等終端機。而實際上使用者登入時,到底是採用第幾號pts終端機,則視您是目前系統中第幾個遠端登入的使用者而異,例如,系統目前已有2個使用者,此時您登入時,系統就會自動指定pts/2給你也就是3號終端機。所以如果要讓root帳號能遠端登入,只要利vim修改/etc/securetty檔的設定值即可,以讓root帳號能遠端登入。如果覺得麻煩也可以把/etc/securetty更名或刪除也可…但不意見哦!!!
    • 開啟pop3服務
      • vi /etc/xinetd.d/ipop3
        • disable = no
        • service telnet
        • {
        •       socket_type=stream
        •       wait=no
        •       user=root
        •       server=/usr/sbin/ipop3d
        •       log_on_success += HOST DURATION
        •       log_on_failure +=HOST
        •       disable = no
        • }
      • 重新啟動xinetd服務
        • /sbin/service xinetd restart
    • 開啟另一個telnet服務走1234port
      • 複制原/etc/xinetd.d/telnet 到 telnet2
      • vi /etc/xinetd.d/telnet2
        • disable = no
        • service telnet2
        • {
        •       flags = REUSE
        •       socket_type=stream
        •       wait=no
        •       user=root
        •       server=/usr/sbin/in.telnetd
        •       log_on_failure +=USERID
        •       disable=no
        • }
      • vi /etc/services並在telnet 23/tcp,udp下加入一行
      • telnet2 1234/tcp
      • telnet2 1234/udp
      • 重新啟動xinetd服務
        • /sbin/service xinetd restart
    • 接著我們要限制服務的ip範圍
      • vi /etc/xinetd.d/telnet2
        • 新增一行
          • only_from = 10.1.1.0/24 192.168.10.1
            • 10.1.1.1~10.1.1.255
            • 192.168.10.1
    • 接著我們要限制使用的系統資源
      • 限制記憶使用量
        • rlimit_as=16M
      • 限制CPU用量
        • rlimit_cp=20
      • 限制服務時間
        • access_times=03:00-6:00 9:00-15:00
      • 限制telnet服務的總數為5
        • 新增
          • instances=5
          • cps= 15 10
            • 以上2行的功能。instances代表的是提供服務的總數,而cps後面代的2個數值,cps代表的是每秒只提供15個client同時連線,超過的話則ftp會暫停服務,過10秒後才會再度提供服務
      • 新增一個port為10000的http服務並重新導向到http://www.yahoo.com.tw
        • 在/etc/xinetd.d/下新增一個檔案uuu,內容如下:
          • service uuu
          • {
          •     flag=REUSE
          •     socket_type=stream
          •     wait=no
          •     user=root
          •     server=/usr/sbin/in.telnetd
          •     port=10000
          •     redirect=www.yahoo.com.tw 80
          •     log_on_failure+=USERID
          •     disable=no    
          • }
    • XINETD設定檔說明
      • /etc/xinetd.conf
        • defaults
        • {
        •     instances=60
        •     log_type=SYSLOG authpriv
        •     log_on_success=HOST PID
        •     log_on_failure=HOST
        •     cps= 25 30
        • }
          • 說明:
            • instances:表示一項服務同時提供的連線數目
            • log_type:表示紀錄的方式,在這邊syslog表示會記錄到系統紀錄中,再根據/etc/syslog.conf紀錄到特定的檔案,由於authpriv在syslog.conf是紀錄到/var/log/secure,所以預設值就會紀錄到/var/log/serure中
            • log_on_success:是表示連線成功所紀錄的檔案
            • log_on_failure:是log_on_success的反之
            • cps:代表的是每秒只提供25個client同時連線,超過的話則ftp會暫停服務,過30秒後才會再度提供服務
            • includedir:表示其他的設定檔放在/etc/xinetd.d之中,如果沒特別指定,則所有的設定檔均會套用上述的設定。
  • /etc/xineted.d的通用格式如下:
    • service <service_name>{
      • <A> <B> <參數><參數>…
    • 其中的<B>為指派的運算符號,有3種=,+=,-=
    • <A>為屬性,列出一些較常用的
      • id:用來確認服務的唯一性,特別是相同名稱的服務,但卻使用不甸的通訊協定
      • type:包含下列三種
        • RPC:Remote Procedure Call,遠端程序呼叫
        • INTERNAL:本身包含在xinetd中的服務
        • UNLISTED:此項服務未包含在/etc/services中
      • disable:
        • yes表停止服務;no表正常運作
      • socket_type:
        • 包含下列3種
          • stream:stream-based的服務,也就是TCP Service。
          • dgram:datagram-based的服務,也就是UDP Service。
          • raw:需要直接使用IP的服務
      • wait:yes表single-thread,僅提供單一連線,no表示multi-thread,表示持續提供服務。
      • user:使用特定的人員來執行這個應用程式,但若是這個使用者沒有特殊使用者的權限可以會無執行
      • group:使用特定的郡組來執行這個應用程式,但若是這個群組沒有特殊使用者的權限,可能會無法執行
      • instance:同時間連線的數目;UNLIMITED表示不限制
      • server:決定這個服務所使用的應用程式
      • server_args:這個服務所需的應用程式後面所需要加的參數
      • only_from:限制某些特定來源IP Address,才提供連線服務,其他的圾不得建立連線
      • no_access:限制某些特定來源ip address不提供服務
      • access_time:可提供服務的時間
      • log_type:紀錄檔的格式 SYSLOG syslog_facility [level]:
        • 透過syslog.conf的設定紀錄到特定的檔案,syslog_facility有daemon,auth,authpriv,user等,你可以在syslog.conf中定義這樣的紀錄要寫而哪個檔案中。那麼[level]包含emerg,alert,crit,err,warning,notice,info,debug.
        • FILE file:將紀錄到特定的 檔案,file為檔案名稱,後面可加參數。
      • log_on_success:連線成功時所要紀錄的資訊
      • log_on_failure:連線失敗時所要紀錄的資訊。
      • banner:成功連線時歐出現的標題,可以是某個檔案的內容
      • cps:後面接著M,N是表示每秒僅能建立M個連線,超過的話,服務會暫時停止,等N秒後再度提供服務
      • rlimit_as:限制記憶體的資源,如rlimit_as=16M表示只能使用16M Bytes的記憶體,UNLIMITED表示不限。
      • rlimit_cpu:限制子程序最多能使用的CPU seconds,UNLIMITED表示不限
      • port:指定這項服務所使用的port number.

2013年3月15日 星期五

suid、sgid、sticky權限概述


  • 在linux系街中還存在一個比較特殊的set權限,set權限可以分為:suid、guid、sticky權限3種。雖然這3種權限很少使用,但一些特殊時侯這3種權限卻很方便(例如需要普通用戶幫root用戶執行一項任務時)。
    • 注意:由於set權限很容易發生安全問題,某些系統可能會出於安全方面的考慮,修改或禁止使用這些權限。
  • 【suid,sgid權限及其使用方法】
    • 有時可能希望以某個用戶的身份執行一個腳本或命令,例如root用戶編寫了一個用於備份的腳本,並希望普通用戶能執行這個備份腳本。存在的問題是,普通用戶可能沒有權限讀取這些需要備份的文件,如果因此修改需要備份的文件的訪問權限是不明智的。像這樣的情形下,就可以使用set權限(由於這3個權限名稱都以s開頭,許多時侯也稱為s權限),包含s權限的程序或腳本運行時,其訪問文件的權限與程序、腳本的屬主或屬組的訪問權限相同。
      • set權限的例子
        • 一個最典型的例子是普通用戶修改密碼或default shell等設置時,需要修改系統用戶文件/etc/passwd和影子文件/etc/shadow.你可以查看一下/usr/bin/passwd,/usr/bin/chsh你會發現屬主權限中是以s表示。即表示是一個suid的權限設置;一個sgid是屬組權限設置。
  • 設置s權限
    • s權限可以設為以屬主的文份運行,也可以以屬組的身份運行。
      • chmod u+s test.sh 
        • 設定suid權限
      • chmod g+s test.sh
        • 設定sgid權限
      • 在絕對模式中,使用第4各權限位來表示s權限;若為4表示suid,若為2表示sgid,若為6表示suid+sgid
      • 就使用小寫s表示有s權限和執行權限;如果原文件沒有可執行權限,則用大寫字母S表示具有s權限並且沒有執行權限。
  • 【sticky權限應用】
    • 我們可能希望某個目錄中的文件,其他用戶能夠寫入,但不能刪除,這時可以給相應的目錄加上sticky權限,這樣其他用戶就能使用該目錄中具有寫入權限的文件,但不能刪除這些文件。由於sticky權限能阻止用戶刪除文件,所以經常被稱為為刪除位。在系統臨時目錄/tmp中有許多文件,這些文件都是用戶及其應用程序使用的臨時文件。任何人都能夠編輯這個目錄中具有寫權限的文件,但只有屬主才能刪除這些文件。這是因為/tmp目錄具有sticky權限。
    • 設置sticky權限
      • chmod o+t file 
        • file是一個目錄;使用o+t表示為目錄加入防刪除位
      • 在絕對權式中,使用數字1表示防刪除位。
        • chmod 1777 file
      • 用小寫的t表示原目錄有可執行權限和sticky權限,字母大寫的T表示目錄沒有可執行權限但具有sticky權限。











2013年3月14日 星期四

DHCP設定


  • 範例 1
    • 架設一台DHCP伺服器、並分配client端的IP Address從10.1.1.10到10.1.1.50,預設的閘道為10.1.1.1、DNS伺服為10.1.1.1。
      • 修改/etc/dhcpd.conf,其內容如下,注意紅色部份,黑色是段定某一個網卡編號用的固定ip,暫時先mark掉…有需要再把他打開啦!!!
        • ddns-update-style interim;
        • ignor client-updates;
        • subnet 10.1.1.0 netmask 255.255.255.0
        • option routers 10.1.1.1;
        • option subnet-mask 255.255.255.0
        • option nis-domain "canred.net"
        • option domain-name "canred.net"
        • option domain-name-servers 10.1.1.1
        • option time-offset -18000;
        • range dynamic-bootp 10.1.1.10 10.1.1.50;
        • default-lease-time 21600;
        • max-lease-time 43200;
        • #host ns {
        • #                 next-server marvin.redhat.com;
        • #                 hardware ethernet xx:xx:xx:xx:xx:xx;
        • #                 fixed-address 10.1.1.99;
        • #              }
      • 然後重新啟動一個DHCP
        • /sbin/service dhcpd restart

2013年3月12日 星期二

設定DNS Client


  • 這邊所提到的,是當clien,若要架設dns server;假設domain為test.com,而欲設168.95.1.1及168.95.192.1為DNS Server。
    • 編輯/etc/resolv.conf
      • search test.com
      • nameserver 168.95.1.1
      • nameserver 168.95.192.1
    • 測式是否正常運作
      • nslookup
        • 鍵入網址

2013年3月11日 星期一

網卡設定相關筆記


  • 假設電腦的主機名稱為canred.com.tw,網路上ip address為111.23.1.1,子網路遮罩為255.255.255.240;預設的閘道為111.23.1.14
    • 利用vi 編輯 /etc/sysconfig/network-scripts/ifcfg-eth0 (內容如下)
      • DEVICE=eth0
      • BOOTPROTO=static
      • BROADCAST=111.23.1.15   #可以算的出來,雖然題目沒有給,但也可為空
      • IPADDR=111.23.1.1
      • NETMASK=255.255.255.240
      • NETWORK=111.23.1.0
      • ONBOOT=yes
    • 利用vi 編輯 /etc/sysconfig/network (內容如下)
      • NETWORKING=yes
      • HOSTNAME=home.test.net
      • GETWAY=111.23.1.14
    • 重新啟動一個網路服務
      • /sbin/service network restart
    • 再用ifconfig或route -n查看一下即可
  • 如果你有2張網卡的話,就要多編輯一個/etc/sysconfig/network-scripts/ifcfg-eth1的內容,步驟同上例。
  • 如果要同一張網放2個ip address的話…就要多編輯一個/etc/sysconfig/network-scripts/ifcfg-eth0:0的內容,步驟同上例。

備份/還原磁帶機、燒錄機相關指令


  • 磁帶機
    • 底下以備份/home為例
      • 將備份的帶子放進磁帶機後,執行指令將磁帶回帶
        • mt -f /dev/nsa0 rewind
      • 執行 mt -f /dev/nsa0 fsf [n] ,n是要取出的block的號碼,第一個被tar的在block 0,依此類推。
      • 執行以下指令,確定磁帶轉到正確之block
        • mt -f /dev/nsa0 status
      • 執行以下的指令來備份
        • tar cvf /dev/nsao /home

  • 燒錄機
    • 在redhat的燒錄軟件有一個叫cdrecord的…可以用rpm -ivh cdrecord*來安裝
    • 安裝完成後,使用指令來偵測燒錄機的位置
      • cdrecord -scanbus
    • 接著,將/home/canred底下的內容製作成iso檔
      • mkisofs -o /root/canred.iso /home/canred/
    • 製作好了就要開始燒錄啦
      • cdrecord -v speed=40 dev=0,0,0 /root/canred.iso
        • 上行的speed,dev都可以在cdrecord -scanbus查到哦…
-----------------------------------------------------------------------------------------------------------
  • 硬碟資料回存
    • 前題下有一個備存用的硬碟
      • 執行指令先mount他
        • mount /dev/hdb1 /tmp
      • 進入tmp中把資料移回來
        • cd /tmp
        • mv * /home/
      • unmount tmp
        • cd /
        • umount /tmp
  • 磁帶機資料回存
    • 將備份的帶子放進磁帶機,執行以下的指令將磁帶回帶
      • mt -f /dev/nsa0 rewind
    • 執行mt -f /dev/nsa0 fsf [n],n是要取出的block的號碼,第一個被tar的在block 0,依此類推
    • 執行以下指令,確定磁帶轉到正確之block。
      • mt -f /dev/nsa0 staus
    • 執行以下指令來還原
      • cd /home
      • tar xvf /dev/nsa0
  • 燒錄機資料回存
    • 先mount cdrom
      • mount /mnt/cdrom
    • 還原啦
      • cp -rf /mnt/cdrom/* /home/canred/
























安裝Kernel Source


  • 將新版的kernel rpm安裝至系統,如果該rpm是第一次安裝,則使用rpm -ivh,如果是升級,則使用rpm -Uvh。可先下載kernel source。安裝之後,系統會在/usr/src之下新增一個linux-[版本編號]的目錄,並且會將linux-2.*連結到該目錄。
  • 核心升級實做
    • 進入/usr/src/linux-*.*的目錄之下,鍵入make menuconfig,按下enter後即可進入畫面
  • Step 1.make clean
    • 清除所有已經編譯過的物件
  • Step 2.make dep
  • Step 3.make bzImage
    • 將新的核心置於預設的位置
  • 以上3個Step可用一行簡化 make clean dep bzImage
  • Step 4.媥編譯好的核心置於/boot,並改名,名稱當然隨意取啦,但是可以配上日期,比較容易記得。
    • cp ./arch/i386/boot/bzImage /boot/vm2013
  • Step 5.make modules
  • Step 6.make modules_install
  • Step 5 , 6 可以合成一行 make modules modules_install
  • Step 7.建立映象檔
    • /sbin/mkinitrd/boot/initrd-xxx
  • Step 8.設定boot loader
    • 若是你使用的是grub,則在/etc/grub.conf之中加入相同的設定,並指定核心所在的位置
    • 若是你使用的是lili,則需設定 /etc/lilo.conf


chmod 權限修改指令



  • chmod 權限修改指令
    • 用於修改文件屬主和屬組
    • 常用選項
      • R:表遞歸修改
    • 權限表達可以使用符號模式或是絕對模式
      • 符號模式
        • 表達式可以拆分為操作對象、操作符、權限列表3部份
          • 操作對象是用戶和組,使用字母u、g、o和a表示(其中的a表示all)。
          • 操作符表示賦予或放回權限。可以的3個操作符是"+"、"-"、"=",分別表示加入、刪除和賦予權限。
          • 權限列表:讀(r)、寫(w)、執行(x)
        • 範例:
          • chmod c+x aFile.txt
          • chmod go-r aFile.txt
          • chmod ugo+wrx aFile.txt
          • chmod a=wrx aFile.txt
          • 分別設定權限
            chmod u=rwx,g=rw,o=rw sample.log

            所有戶用都只有r的權限
            chmod a=r sample.log
      • 絕對模式
        • 範例:
          • chmod 764 aFile.txt
          • chmod 700 aFile.txt
          • chmod -R 666 test
    • 以上二個設定是相同的
      chmod 644 sample.log        =            chmod u+w sample.log

2013年3月10日 星期日

at,atq,atrm,batch,crontab指令


  • at 指令用於在某一個時間時,執行某一個工作(一次性的工作任務)
    • 選項
      • f:指定一個文件作為任務腳本
      • m:完成任務之後給用戶發送一個MAIL
      • l:列出計劃任務的列表
      • d:刪除指定的計劃任務
    • 指令 
      • sample 1
        • at 23:00
        • cp /etc/passwd /root
        • Ctrl+D (離開)
      • sample 2
        • at 10:10am tomorrow
        • cp -R /file/backup /file/nfs/ &>/dev/null
        • CTRL+D(離開)
      • sample 3
        • at now +5 hour -f /root/exam.sh
      • sample 4
        • at now +5 hour -f ~/exam.sh
    • 指令的時間格式
      • at 7pm Oct 16
      • at now+2 hour
      • at 10:10am tomorrow
      • ...
    • 或是
    • 指令(指定一個file)
      • at -f schedule.task 23:00
    • at指令與crontab指令還有一個很大的不同點,即at指令支援使用現有的環境變量,而cron是不支援的。
    • at指令完成後也會像cron一樣在/var/spool/at中看見執行腳本
    • 如果要禁止用戶使用at指令的話,可在在文件/etc/at.deny中添加該用戶的帳號即可。

-------------------------------------------------------------------------------------------------------
atq 指令(at -l),用來查詢待執行的任務
-------------------------------------------------------------------------------------------------------
atrm 指令,用來刪除待執行的任務
    Step 1 . 先使用 atq 指令查詢所又依務列表;第一欄任就是任務的id號
    Step 2 . atrm 1
-------------------------------------------------------------------------------------------------------
batch 指令功能於 at 相同,但是 batch 可以設置在系統 busy 時執行。
    Step 1 . batch 3:20
                 ctar -czvf /root/abc.tar.gz /etc
                  Ctrl+D (離開)
    Or
    Step 1 . batch -f schedule.task 3:00

    Step 2 . 查詢 batch 的執行任務,也是使用 atq 指令即可。


-------------------------------------------------------------------------------------------------------
crontab 指令,設定週期性的執行任務;讓使用者在特定的時間(包括月、日、時、分、星期)執行特定的指令,你可以在/etc/cron.allow與/etc/cron.deny這2個檔案去限制那些人可或那些人不能執行crontab,在預設是不會有這2個檔案的…但記得哦…一次只有一個會生效哦。

    Step 1 . 你可以在使 vim 編輯 /etc/crontab 檔案
     17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
     12 25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --re    port /etc/cron.daily )
     13 47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --re    port /etc/cron.weekly )
     14 52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --re    port /etc/cron.monthly )

    說明欄位
    分 時 日 月 週,這一個文件的內容可以參考一下鳥哥網站…因為實在是太多啦
  
    Step 2 . crontab -l 用來列出所有個人的排程


  • 常用的選項
    • l:列出所有個人的排程
    • e:編輯個人的排程
    • u:指定使用者

  • 欄位說明
    • 分 時 日 月 星期 指令
    • 範例
      • 5 2 * * 2,4,6 /root/root.sh
        • 每2,4,6週的早上2點5分執行 /root/root.sh
      • 10 8 12 * * /root/root.sh
        • 每月的12日早上8點10分執行/root/root.sh
----編輯記錄
  • 2013/4/23:
    • 補充:
      • at指令相關之選項以及sample
      • at指令的時間格式
      • at指令的權限設定








記錄檔設定 syslog , logrotate 介紹

在各種作系統中有,有效的紀錄是不可缺的,記錄可以讓我們知道事件發生的過程,以及系統處理的方式。對於記錄,我們必須針對性質與嚴重性加以分類,而紀錄在特定的檔案之中。

  • syslog.conf
    • /etc/syslog.conf 是 syslogd 這個常駐程式的主要設定檔,它可以記錄linux的系統資訊,並且分類紀錄到各個檔案之中。
    • 每一個規則包含2個欄位,第1個欄位是訊息的種類,第2個欄位是動作,也就是記錄的方式。2個欄位中間可用空白或是<tab>鍵分隔。以#開頭的一行會被忽略。訊息的種類當中,包含了2個資訊,1是訊息的種類,另1個是嚴重性,當者以 . 分隔;如下所示
      • mail.none
        • 訊息的種類包含了下列的關鍵字。auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security(the same as auth),syslog,user,uucp,local0~local7
          • authpriv:登入系統的訊息,包含管理者首一般使用者的帳號;將消息記錄到只有相關用戶能讀取的文件內
          • cron:計時器的訊息
          • daemon:各種常駐服務程式
          • kern:系統核心
          • local7:開機系統啟動的訊息
          • lpr:列印指令的訊息
          • mail:電子郵件的訊息
          • news:新聞伺服器的訊息
          • user:使用者相關訊息
          • uucp:UNIX-toUNIX Copy Protocol之訊息
          • auth:與用戶登錄,驗証密碼有關的訊息
          • mark:定時發陝消息的時標程式
          • ftp:與ftp守護進程有關的消息
          • ntp:與網絡時間協議相關的消息

        • 嚴重性則包含:debug->info->notice->warning->warn->err->error->crit->alert->emerg->panic ; 
          • 在設置級別的時侯通常不要使用err以下的級別,否則可能大量的消息很快就充滿整個disk,並且還會引起系統性能下降。
          • 還有一個none的級別表程式中未給出選擇的偽級別

        • 如果使用*,則表示所有的種類,或是所有的嚴重性。如mail.*,*.err,*.*
        • 如果有多個重類期嚴重性相同,且使用相同的動作,可用逗號隔開。如
          • uucp,news.crit
        • 若多個種類其嚴重性不全相同,且使用相同的動作,可用分號隔開。如:
          • *.info;mail.none;authpriv.none;cron.none    /var/log/messages
        • news.=err                /var/log/news.err
          • 把關於新聞伺服器的訊息,只要優先權等於會誤的訊息記錄到/var/log/news.err中
        • cron.*  /var/log/cron
          • 所有來於cron的程序消息放入/var/log/cron的檔案中
        • *.info;mail.none;authprive.none;cron.none  /var/log/message
          • *.info表示所有的大於info的消息會記錄到/var/log/message中,其他的mail如上項目雷同。
        • mail.*     @192.168.1.10
          • 將消息發送到192.168.1.10的伺服器上
        • mail.*     @ServerName
        • authprive.*;authprive.!=info       /var/log/authprive.log
          • 將登入系統的所有訊息,統統記錄在此檔案,但是對包含優先權為info的。
    • 日誌消息的格式
      • time        hostname        process    version:informat
        • time:產生的時間
        • hostname:產生日誌的主機
        • process:產生日誌的應用程序
        • version:產生此日誌的應用程序或系統服務版本號
        • infomation:內容
    • 發出消息/記錄/日誌 logger 指令
      • 命令格式
        • logger [option] message
      • 常用選項
        • i:使用logger的pid作為消息的pid
        • p:使用指定選擇域
        • t:使用指定進程的名稱
      • sample
        • logger -i -p local7.err test.sh "Canred Test"
    • 在以上的動作是寫到記錄檔,但這個紀錄檔並不一定是真實的檔案,有可能是終端機,可能是別台主機etc。
      • 本機的檔案
        • /var/log/maillog
      • 終端機或是主機前的console
        • /dev/console , /dev/pts/0
      • 遠端的主機
        • 以@開頭
          • @canredHome

再下來就要介紹一下logrotate了
日誌輪循logrotate,隨著時間越來越長syslogd將新篩選的日誌消息不斷地寫入指定的文件未尾。日誌文件會變得越來越長,占用的disk空間也越來越多。另一方面,如果系統管理員要查看娛一時刻的日誌消息,太大也不便查看,這時就要有一個日誌輪循的功能啦…

  • logrotate是一個循環、壓縮、以及郵寄系統記錄檔的系統程式。
    • 語法如下:logrotate [-dv] [-f] [-s] config_file +
    • 例如執行default的/etc/logrotate.conf,可以執行下行指令
      • logrotate /etc/logrotate.conf
  • logrotate是設計來簡化系統產生的龐大紀錄檔案,它允許自動的循環使用、壓縮、移動以及郵寄記錄檔,當紀錄檔太大時,可以每天、每週、每月的管理
  • 一般面言,logrotate可視為每天執行的例行性工作,其功能如下:
    • -d:開啟除錯模式。在除錯模式之下,紀錄檔將不會有任何的改變
    • -f:強制模制。告訴logrotate強迫循環,即使logrotate本身認為並不需要
    • -m:寄信。告訴logrotate用什麼指令去寄出紀錄檔
    • -s:告訴logrotate使用一個交換狀態的紀錄檔。當我們使用不同的帳號來設定多樣的紀錄檔,這是有用的。預設的狀態紀錄在/var/lib/logrotate/status。
    • --usage:使用量,列出使用者的狀態。
  • 範例1(以下是程式碼哦)
#紀綠檔在循環過後將被壓縮。
compress
#要撐握 /var/log/message 的記錄檔,紀錄再經過5週的循環後將被移除,也
#就是說備存5週,並且在循環後,系統會透過/sbin/killall -HUP syslogd的指令
#來重新啟動syslogd服務
/var/log/message {
    rotate 5
    weekly
    postrotate
    /sbin/killall -HUP syslogd
    endscript 
}
#設定2個紀錄檔案的規則;這2個檔案將進行循環當內容達到100k的時侯,並且
#在遍環5次時,會將檔案寄給管理者,並移除檔案
"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail canred.chen@gmail.com
    size=100k
    sharedscripts
    postrotate
    /sbin/killall -HUP httpd
    endscript
}
#當中每個檔案都是以一個月為基底來做遍環。這被考慮成一個單獨的循環目錄,
#且若是錯誤發生超過1個檔案,亡錄檔將不會被壓縮
#在使用*字元時要特別小心,因為是循環所有檔案
/var/log/news/* {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    postrotate
    kill -HUP `cat /var/run/inn.pid`
    endscript
    nocompress
}

  • 範例2(底下將列出並說明RedHat9中的/etc/logrotate.conf),以下內容是一體看的哦
    • weekly
      • 每週循環一次日誌檔的相關紀紀錄
    • rotate 4
      • 最多保留4週
    • create
      • 清除舊的日誌檔時,會自動產生新的日誌檔
    • compress
      • 將紀錄檔壓縮
    • include /etc/logrotate.d
      • RPM的套件會將相關設定檔置於/etc/logrotate.d/之下
    • /var/log/wtmp{
    •     monthly
    •     carete 0644 root utmp
    •     rotate 1
    • }
----編輯紀錄
  • 2013/4/24:
    • 新增:
      • syslog.conf 訊息種類的設定方式還可以加上"=","!"的用法

gpasswd指令,groupadd ,groups, groupdel


  • 新增用戶組命令groupadd
    • groupadd admin
    • useradd -g admin canred
      • 新增一個canred用戶並加到admin的用戶組中
    • groupadd -g 400 group02
      • 新增一個名為group02的群組;並且指定GID的值為400
      • 參數-g用來指定群組識別碼,0~499請保留給系統使用。若省略此參數,則系統會自動指定GID,從編號500開始找尚未用掉的號碼。
  • 刪除用戶組
    • groupdel admin
    • 在刪除組的時侯要定保沒有user在這一個組中
      • groupdel group02
  • 用戶組的管理
    • 常用選項
      • g:將用戶的私有組改變為指定的組
      • G:為用戶新增附加組,使用逗號分隔。
      • a:將用戶以追加的方式新增到一個附加組
    • 說明:
      • 通常將系統用戶文件中指定的用戶組稱為用戶的私有組
      • 用戶文件中為用戶指定的組稱為用戶的附加組
    • 範例
      • usermod -g user  canred
      • usermod -G admin,dbowner canred
        • 要為用戶附加多個組
      • usermod -aG mis,mes canred
      • useradd group 100
      • add user into group
        • gpasswd -a test100 group100
      • remove
        • gpasswd -d test 100 group100
        • groupadd group001
  • 修改組的名稱
    • groupmod -n group002 group001
  • 修改組的id號
    • groupmod -g 888 group002
  • groups顯示組的資料
    • groups canred
編輯歷程-------------------------------------------------------------------------------------
2013/4/19: 新增用戶組命令groupadd內容補強





2013年3月9日 星期六

grep指令


  • 查找文本工具grep
    • grep是global regular expression print(全局正則表達式打印)的縮寫。
    • grep工作時,總是以行為單位查找。首先將文本的第1行讀入緩陣區并執行查找,如果找到到匹配的字符串,則輸出整行。
    • 常用的選項
      • i:忽略大小寫。
      • n:將結果輸出的同時,也輸出該行的行號。
      • s:在沒有查找到匹配的內容時,不顯示錯誤信息。
      • l:從多個文件中查找時,只輸出找到匹配內容的文件名稱。
      • h:從多個文件中查找時,只輸出匹配的內容,不顯示文件名稱。
      • c:只輸出匹配內容的總行數
      • v:反轉查找,即輸出匹配內容以外的行。
    • 範例:
      • grep "canred" students
      • grep -n "canred" students
      • grep -c "canred" students
      • grep -i "CanRed" students
      • grep -vi "canred" students | grep -vi "eva"
      • 多文件查找
        • grep -l "root" /etc/*
          • 顯示/etc目錄中所有包含有root的文件名
        • grep -h "root" /etc/passwd /etc/shadow
      • 使用grep在命令輸出中查找
        • echo "Welcome to Taiwan" | grep "Taiwan"
      • 使用grep在變量中查找
        • A="Welcome to Taiwan"
        • echo $A | grep "Taiwan"
      • 行首,行尾匹配查找
        • grep '^canred' students
        • grep 'canred$' students
      • 正則表達式查找
        • grep '/9[0-9]' students
        • grep 'c\{3,\}' students
        • grep 'canred\{2\}p$' students
        • ls -l | grep '\.txt$'
      • 使用或、與多匹配模式查找
        • grep -E 'Canred|Eva' students
          • 上面是 或
        • grep 'Canred' students | grep "Eva"
          • 上面是 and ;2者是不一樣的結果
    • grep工具有一個很多的類似的方法如egrep、fgrep、agrep…etc


find 指令


  • find的基本格式
    • find [path] [expressioin]
    • 常用的選項
      • path:find 查找路徑。如果未指定,則默認為當前工作目錄。
      • Expression:用于定義find查找的表達式,表達式通常由選項、測式和動作3類參數組成。
      • 常用的選項說明
        • help:獲得幫助信息
        • depth:先從當前目錄中查找,然后再從當目錄的子目錄中查找
        • maxdepth LEVELS:向下搜索到第LEVELS層目錄,當LEVELS=0時表示只在當前目錄查找。
        • mindepth LEVELS:至少向下搜索LEVELS層目錄
        • mount:不搜索遠程文件系統
        • follow:搜索如果遇到鏈接文件就連鏈接所指向的文件一並檢查。
      • 常用的測試參數
        • name:按文件名查找
        • perm:按文件權限查找
        • type:查找某一類型的文件
        • mtime+n-n:按文件的修改的時間查找,+n表示修改時間距現在n天以前,-n表示修改時間距現在n天以內。
        • atime+n-n:按文件的訪問時間找文件(使用方法同上)
        • size n[c]:查找文件長度為n塊的文件,c表示文件大小為n字節的文件
        • User:按文件屬主查找
        • group:按文件的群組查找
        • nouser:查找沒有有效屬主的文件
        • nogroup:查找沒有有效群組的文件
      • 動作參數指定find命令如何查找和處理查找到的文件,常用的動作有如下4種
        • prune:不在指定目錄中查找
        • print:將查找到的文件輸出到標準輸出
        • exec:對查找到的文件執行exec動作後附帶的shell命令
        • ok:對查找到的文件執行ok動作後附帶的shell命令,在每次執行前將提示用戶是否執行。
    • find有許屬參,大多數情況下,使用該命令都至少要包含一個測式和一個動作,才能完成整個查找任務。
    • 範例:
      • 按文件名稱查找
        • find /etc -name "smb.conf" -print
        • find /etc -name "*.conf" -print
        • find -name "message" -print
          • 上行是在當前的目錄中查找
        • 查找前2個字符是小寫字母,第3個字符是數字,最後.d的文件
          • find /etc -name "[a-z][a-z][0-9].d" -print
        • 使用find命令查找文件時,使用操作符&將其放到後台運行
          • find / -name "*.conf" -print & 
      • 按文件權限查找
        • perm參數可以按照文件的權限進行查,使用此參數時,需要使用8進制表示權限。
          • 8進制的基本說明:4讀的權限;2寫的權限;1執行的權限
        • 查找權限為644的文件
          • find / -perm 644 -print
          • 在當前目錄的file子中查找權限中包點其他用戶可讀、寫、執行的文件
            • find ./file -perm -007 -print
      • 按文件類型查找
        • 查找/dev目錄中的字符設備,其中c很示字符設備
          • find /dev -type c -print
        • 查找目錄/dev中的塊設備文件,其中b表示塊設備文件
          • find /dev -type b -print
        • 查找目錄/etc中除了鏈接文件以外的文件
          • find /etc ! -type l -print
        • 其他的type,其實於ls命令的格式中的文件類型標識一致,d-->目錄;l-->鏈接文件
      • 按文件的時間和大小查找
        • 使用+n限定時間在n天以前;使用-n限定時間在n天以內。
        • 使用-7指定修改時間在7天以內的文件
          • find /etc -mtime -7 -print
        • 使用+1指定修改時間在1天以前的文件
          • find /etc -mtime +1 -print
        • 使用atime -10 指定訪問時間在10天以內的文件
          • find /etc -atime -10 -print
      • 按長度查找文件
        • 當前目錄下查找文件長度大於10MB的文件
          • find . -size +10000000c -print
        • 使用-30 表示文件長度小於30塊(512*30=15kb)的文件
          • find . -size -30 -print
      • 按文件屬主或屬組查找
        • 使用user參查找屬主為canred的文件
          • find / -user canred -print
        • 使用nouser的參數查找沒有有效屬主的文件
          • find / -nouser -print
        • 使用group的參數查找屬組為admin的文件
          • find / -group admin -print
        • 使用nogroup的參數查找沒有有效屬組的文件
          • find / -nogroup -print
      • 忽略目錄參數prune
        • 使用path,prune和name參數指定在除了/etc以外的整個目錄中查找以.conf結尾的配置文件
          • find / -path "/etc" -prune -o -name "*.conf" -print
            • -o是說:將2個不同的參數連接起來
      • 忽略遠程文件系統參數mount
        • 如果系統上掛載有遠程文件系統,搜索視程文件系統不僅要花費大量的網絡資源及時間,這時可以使用mount參數忽略掛載的遠程文件系統
          • 使用mount參數忽略遠程文件系統
            • find / -name "file" -mount -print
            • 注意:在使用prune參數查找文件時,如果同恃使用了depth參數,find會將prune參數忽略
      • 使用exec和ok處理查找到的文件
        • exec、ok參數執行shell命令的格式如下:
          • -exec [shell命令] {} \;
          • -ok [Shell] {} \;
        • 在當前目錄的backup_sys子目錄中,查找修改時間在一周以前,以message開頭的文件然後將找到的文件交給ls -l命令
          • find ./backup_sys -name "message*" -mtime +7 -exec ls -l {} \;
        • 查找修改時間在2週以前的文件,並使用exec參數將找到的文件交給rm命令刪除
          • find ./backup_sys -name "message*" -mtime +14 -exec rm {} \;
          • 也可以把上例改成ok如下
          • find ./backup_sys -name "message*" -mtime +14 -ok rm {} \;
    • 使用xargs命令處理查找到的文件
      • 利用exec 、 ok參數處理查找到的文件時,存在了一些缺陷
        • 系統對參數exec、ok傳遞給shell命令的文件列表長度有一定的限制。當find命令查找到的文件數量很多時,會出現參數列表溢出錯誤。
        • 參數對find命令找到的每一個文件發起一個相應的處理進程,當find命令查找到的文件數量很多時,可能會影響整個系統性能
      • xargs命令的作用是構造一個參數列表並交給命令執行。與參數exec、ok相比,xargs不會一次獲取並處理find找到的所有文件,而是每次只獲取並處理其中的一部份。處理完後再獲取下一部分,直至結束。整個過程xargs都只發起一個處理進程,對系統性能的影響很小。
        • 使用管道將找到的文件列表交給xargs命令分割之後使用rm命令刪除
          • find ./backup_sys -name "message*" -mtime +14 -print | xargs rm
    • find工具應用實例
      • 1.使用find查找需要備份的文件
        • 第一次完成備份
          • tar -czf /backup/file_backup_20130309.tgz /file
        • 第二次之後就是差異備份
          • find /file -type f -mtime -1 -print > /backup/file_list
          • 使用tar命令備份/backup/file_list中記錄的文件
            • tar -czT /backup/file_list -f /backup/file_backup_20130310.tgz
          • 刪除使用過的文件列表
            • rm /backup/file_list
      • 2.刪除過期文件
        • find . -mtime +14 -exec rm {} \;

2013年3月6日 星期三

/etc/security/*目錄的介紹


  • /etc/security/*
    • /etc/security/access.conf
      • 登入權限的控制表
        • 當某人登入時(無論是網路、本機登入),這裡頭的內容就會被檢查,權限這個欄位會決定使用者是否可以登入。
          • 格式   (權限:使用者:來源)
            • 權限只有2種:"+"(允許);"-"(拒絕)
            • 使用者的部份可以是單一使用者,或是多個使用者,或是群組名稱,或是ALL(全部)的字段。
            • 來源的部份,可以是tty(本機),IP address, domain name , 或是ALL(全部),如果要表示一個class C 的IP address,可以用10.1.1. 來表10.1.1.1~10.1.1.254,如果使用NIS,可以以@開頭表示。
          • 範例1:除了帳號supermain,shutown以及sync之外,不允許任何人在本機登入。
            • -:ALL EXCEPT superman shutdown sync:LOCAL
          • 範例2:除了本機以及domain name為.test.com結尾的位址外,不允許擁有特殊權限的群組super登入
            • -:super:ALL EXCEPT LOCAL .test.com
          • 範例3:不允許某些使用者登入
            • -:guest1 guest2 guest3:ALL
    • /etc/security/limits.conf
      • 格式 ( domain type item value )
        • domain:可以是帳號、群組名稱(@群組名稱)、*表示預設值
        • type:有2種可能
          • soft:達到此設定值時,降低優先使用壦
          • hard:達到此設定值時,強制停止
        • item:可以是以下選項
          • core:可使用最大的核心檔案
          • data:可使用最大的資料區段
          • fsize:可建立最大的檔案大小
          • memlock:可鎖定的最大記記憶體
          • nofile:最多可同時開啟的檔案
          • rss:最大的常駐程式
          • stack:最多可做stack的大小
          • cpu:最大可以使用的CPU時間
          • nproc:最多可執行的process
          • as:同時間可開啟的file descriptors
          • maxlogins:同時登入的最多數目
          • priority:執行程序的優先權
          • locks:可鎖定的檔案數目
      • 範例:
        • 受限制的使用者,建立一個limited群組
          • @limited hard core 10240
          • ....
        • 一般使用者
          • * hard cord 10240

2013年3月2日 星期六

顯示並保存文本命令tee


  • tee是一個比較常用的指令,它的作用是將獲取到的數據(tee指令通常是自管道而來的)分為兩個copy,1個copy輸出到標准輸出,另一個copy寫入到指定的文件中。
    • 常用的選項
      • a:以追加的形式將數據寫入文件的結尾
      • i:寫入數據時,不寫入標凖錯誤。
    • 範例
      • ifconfig eth2 | tee eth2_info
      • date + '%Y%m%d %T' | tee -a date_log
      • ls -l ab | tee -ia a.txt


接收用戶輸入指令read

read指令
  • read [[option]parameter] name
    • 常用選項
      • a:將輸入的文本按字段放入數組中(default的分隔符為空格或制表符tab)
      • d:指定結束符,當輸入中出現指定的結束符時,read命令將認為專入已經結束(default的結束符以enter)
      • e:從標凖輸入取時,使用Readline庫獲取輸入(此時用戶可以使退格鍵、方向箭簡單的行編輯操作)
      • n:指定讀取的字符數n,也就是輸入與輸出之間不斷行。
      • p:字符串輸出到標准錯誤,並讀取輸入
      • r:將讀取到的字符串按字段放到不同的變量中
      • s:先鎖住屏幕,然后再從標准輸入中讀取字符;就像是輸入 password的模式。
      • t:指定時間內要輸入完成,不然就結束讀取狀態
      • u:從指定的文件描述符中讀取。
    • 範例
      • echo -n "Please enter your name:";read NAME;echo "Hello $NAME";
      • echo -n "Please enter your friend's name:";read -a NAME;echo "Your friends:${NAME[*]}"
        • Please enter your friend's name: GM Eva Edmund
        • Your friends: GM Eva Edmund
      • echo -n "Please enter your name:";read -d "$" NAME; echo "Hello $NAME"!
      • echo -n "Please enter your message:"; read -e MESS;echo "your message is : $MESS";
      • echo -n "Please enter the four string:";read -r V1 V2 V3 V4;echo -e "first:$V1\nsecond:$V2\nthird:$V3\nfourth:$V4"
      • 如果字段分隔符不是空格,可以通過修改變量IFS的方法重新設置分隔符。下例設定新的分隔符為#,並接收用戶的輸入
        • IFS="#";echo -n "Please enter the four variables:" ;read -r V1 V2 V3 V4;echo -e "first:$V1\nsecond:$V2\nthird:$V3\nfourth:$V4";
          • 注意在修改分隔符時要注意把原的的分隔符保留下來,然後在你的程式執行完後,要把分隔符修改回去。



定位和查找


  • 有時需要快速搜索文件、文檔、命令等,linux為不同的內容提供了不同的快速搜索命令,使用這些快速搜索命令可以幫助使用者在最短時間內找到需要的內容。
    • 搜索指令 which
      • 查找一個命令文件的位置(如需要知道一個軟件啟動命令的具體位置,以便于確定軟件安裝位置),which指令的功能是在當前的環境變量path保存的目錄中,查找參數指定的命令位置并以絕對路徑的方式輸出
        • 查找指令文件ifconfig的位置
          • which ifconfig
        • 查看環境變量path的包含的目錄
          • echo $PATH
    • 文件搜索命令locate
      • locate命令用於快速搜索文件和檔案,其搜尋工作依賴于一個事先建立的索引資料庫,這個索引資料庫每天會自動更新一次,以便于搜集新的文檔。
      • locate指令原自於軟體slocate,不能正常使用此命令的系統可能需要手動安裝此軟件。
      • 由于locate命令並非使用遍歷所有目錄的方法查找文檔,因此可能查找到的結果並不是非常准確。如果要使搜索到的結果更加准確,可以先手動更新索引資料庫,然后再查找文件。
        • 手動更新索引資料庫
          • updatedb
      • 範例
        • 查找一個名為iptables的文件
          • locate iptables
          • locate canre*
    • 特殊文件搜索命令whereis
      • 與前面幾個查找命令相比,whereis更加擅長于查找一些特殊的文件,這些特殊的文件包括2進制文件,這明文件和源代碼等。同locate命令一樣,whereis指令也是通過查詢索引資料庫的方法來搜索文件。
        • whereis iptables
    • 關鍵字搜索命令apropos
      • 在使用linux系統的過程中,許多時侯可能想要完成某個特定的任務,而又不知道應該如何才能完成。這是許多初學者經常遇到的問題。他的功能與man指令的k選項類似,者是從man手冊中查找關鍵字,並將找到的結果顯示出來。
        • 例如要查找與進程相關的內容
          • apropos process

2013年3月1日 星期五

su,sudo 指令,用來切換身份


  • 臨時切換用戶命令 su
    • 指令 : su canred
    • 注意:
      • 在使用su切換身份時,你的環境path是不會自動切換的哦。
      • 在RHEL5.3中,使用su指令雖然可以切換到root的用戶身份,但切換之后使用的環境變量仍然沒有改變(有些系統也可以獲得root用戶的環境變量,但如fedora),因此執行一些管命令時,可能會提示沒有找到指令,此時可以使用輸入指令的全路徑的方式來執行相關命令(例如使用/sbin/ifconfg 替代 ifconfig)

  • whoami指令:用於查看當前的帳號

  • 以root用戶身份運行命令sudo
    • sudo命令工作時,先切換到root用戶,並以root用戶身份執行命令,然后返回當前戶。當前戶使用sudo命令執行的操作取決于root用戶在/etc/sudoers文件中的授權,任何管理命令都需要root授權,否則不能使用sudo執行。
    • sudo命令不提供root用戶的登錄環境,因此上面的命令仍然使用全路徑的方法運行ifconfig命令。


2013年2月28日 星期四

/etc/sysconfig/*目錄的介紹


  • /etc/sysconfig/clock : 時間格式的設定
  • /etc/sysconfig/keyboard : 盤種類的設定
  • /etc/sysconfig/mouse : mouse的設定
  • /etc/sysconfig/network : 網路的設定
    • 是否啟動網路設定
      • NETWORKING = yes|no
      • 主機名稱,在這邊會與/etc/hosts當中設定相同
        • HOSTNAME=canred
      • 是否啟動 IP forwarding 的yes 相當於將 /proc/sys/net/ipv4/ip_forwarding設為1
        • FORWARD_IPV4=yes|no
      •  設定gateway的IP address
        • GATEWAY = geteway ip
      • 設定gateway的裝置名稱,如eth0
        • GATEWAYDEV = gateway device
        • NISDOMAIN = nis domain name
  • /etc/sysconfig/static-routes:如果沒有特別指定,這個檔案是空的
  • /etc/sysconfig/network-scripts/ifup
  • /etc/sysconfig/network-scripts/ifdown
    • 上上的ifup,ifdown分別連結到/sbin/ifup , /sbin/ifdown 。這個指令後面必須要加參數(裝置的名稱eth0,ppp0)
  • /etc/sysconfig/network-scripts/network-functions
    • 這是一個shell script檔,這是一個來源,系統透過它啟動網路上的服務
  • /etc/sysconfig/network-scripts/ifcfg-interfacename
  • /etc/sysconfig/network-scripts/ifcfg-interfacename-clonename
    • 以上的2個檔案 , 第1個是定義介面,如:eth0 ;第2個是介面的別名,這種狀況會發生在一張介面卡上有2個ip address,如eth0:0
    • 一般的內容如下:
      • DEVICE=硬體的名稱,ex : eth0 , eth1 ,ppp etc.
      • IPADDR=IP address
      • NETMASK=子網路遮罩
      • NETWORK=網路,也就是網路中IP address區段的第一個
      • BROADCAST=廣播位址,也就是網路中IP Address區段的最後一個
      • GATEWAY=閘道的位址
      • ONBOOT=yes|no 開機後啟動
      • BOOTPROTO = none | bootp | dhcp (啟動時的網路設定)
  • etc/sysconfig/network-scripts/ifup-post
    • 除了SLIP之外的網路裝置啟動時,都會被呼叫,它會呼叫ifup-routes來啟動所有靜態的路由,以及它的附屬檔案



聯線用戶相關指令


  • 查看聯線用戶命令 who , finger , w , last
    • who 
      • 查看常前系統中的用戶(一般查詢時使用)
      • who指令的選項
        • H:此選項會顯示標題欄位
        • i:顯示閒置的時間
        • T:顯示使用者是否原意接收其他使用者的訊息
          • +:表示可接收write指令所傳送的訊息
          • -:則表示不願接收訊息
          • 使用者可以透會mesg指令來設定自已是否要接收write來的訊息
            • mesg y :表接收
            • mesg n :表不接收
    • finger
      • 查看登錄系統用戶及相關信息
    • w(功能比較強大)
      • 查看正在使用系統的用戶並列出用戶占用系統資源的情況
      • w指令資料輸出格式
        • 第一列的欄位
          • 系統目前的時間
          • 系統啟動後已經過的時間
          • 目前登入此系統的使用者總數
          • 系統平均負載指示:如:"load average:0.12,0.09,0.08";分別表示系統1,5,10分鐘的平均負載率
        • 第二列的欄位
          • user:顯示登入的使用者帳號
          • tty:該使用者登入的終端機代號
          • from:顯示使用者從何處登入系統;":0"表示該使用者從x window下,開啟文字模式登入。
          • login@:表示該使用者是登入時間
          • idle:使用者閒置的時間
          • jcpu:以終端機之代號來區分,該終端機所有相關的程序執行時,所使用cpu時間,此值會不斷的累加。
          • pcpu:cpu執行程式所用的時間,該時間就是執行what欄內的程式所用的時間。
          • what:使用者正在做什麼事。
    • last指令;查看曾登入此系統的使用者的資訊
      • last指令其實是讀取/var/log目錄下的wtmp檔案內容
  • 斷開聯線用戶命令 fuser
    • 在一些特殊情況下,需要對系統進行緊急維擭,這時應該將已經聯線到系統的用戶強制斷開,不且不允許除root以外的用戶登錄;我們可以使用fuser的指令斷開使用者。
      • fuser -k /dev/pts/3
    • 另外還有一個方法可以禁止所有用戶登錄,就是在/etc中新建一個名為nologin的空文件(算是大絕吧)。
----編輯記錄
  • 2013/4/23
    • 新增
      • w指令欄位說明
      • who指令的選項
      • last指令

write指令;向針定的人員發出訊息,mesg指令;talk指令


  • wall指令
    • 將向系統的所有用戶發送關資訊
  • write指令
    • 向root用戶發送一個訊息
      • write root
                               Hello ! 
                               My name is canred.
                               按下ctrl+c退出
      • write test 1 "Hello"
  • mesg指令
    • 用來拒絕收到訊息(非root),root用戶發出來的不可以拒絕
  • talk指令;要先啟動talkd 服
    • vim etc/xinetd.d/ntalk
    • 要修改disable = no
    • service xinetd restart
    • talk test1@localhost tty2

date,clock,hwclock指令,系統中的硬件時鍾


在Linux的系統中有2個時鐘:1是由硬件設備控制的硬件時鐘,另一個是由操作系統控制的係統時鐘,如果需要修改系統時間,就應該同時修改硬件時鐘和系統時鐘。


  • date
    • 修改系統的日期
      • date -s 06/25/08
      • date -s 15:30:23
      • date "%y-%m-%d %T"
      • date -s "2010-10-10 12:12:12"
    • date 還可顯示某檔案的修改時間
      • date -r sample.txt
  • 將當前系統的時鐘寫入硬件時鐘
    • clock -w
  • hwclock設定硬件的時鍾
    • 用來同步硬件時鍾與系統時鍾
      • hwclock --systohc
      • hwclock --set --date="9/22/12 18:18:18"




wc指令用來統計文本文件的字符數、行字符數


  • 許多時侯需要對一個文檔或命令的輸入做一個統計,例如要統計命令的輸出一共有多少行,或者命令輸出、文檔的字數統計等,這時可以使用wc命令來完成這些工作
    • 選項
      • c:字節數
      • m:統計並顯示字符數
      • l:統計全顯示文件的行數
      • L:顯示文件中最長行的長度
      • w:統計并輸出文件的字數
    • 範例
      • wc a.txt
        • 輸出:123 456 789 a.txt
          • 第1組數字:行數
          • 第2組數字:詞數
          • 第3組數字:字節數
      • wc -w a.txt
        • 使用w選項只顯示詞數
      • wc -l a.txt
        • 使用l選項只顯示行數
      • ps aux | grep apache | wc -l
        • 說明:在進程中找有關apache的進程有幾個




2013年2月27日 星期三

命令別名功能


  • 系統定定的別名
    • 你可以使用alias指令列出所有的別名
    canred@canred:~$ alias
    alias
    alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l='ls -CF'
    alias la='ls -A'
    alias ll='ls -alF'
    alias ls='ls --color=auto'
    canred@canred:~$

      • 如果你要保存你的別名功能,可以建立一個新的sh檔案並保存在/etc/profile.d目錄下
        • 內容如下
                                   alias l='ls -CF'
                                   alias la='ls -A'
                                   alias ll='ls -alF'
                                   .......... 


    • 用戶自定義別名
      • alias type='cat'
        • type test.txt 
    • 取消定義的別名
      • unalias type