顯示具有 Linux 標籤的文章。 顯示所有文章
顯示具有 Linux 標籤的文章。 顯示所有文章

2012年7月26日 星期四

Redirect Background Program Ouput

要將一個背景程式的輸出Redirect到一個檔案去,如果是用以下的方法是沒用的。
# ./program & > log.txt

正確的方式應該是先Redirect後再丟到背景執行,如下:
# ./program > log.txt 2>&1 &

2011年3月5日 星期六

bwm-ng

蠻簡單實用的網路流量檢視的軟體。
bwm-ng (Bandwidth Monitor NG)

2011年2月19日 星期六

修正桌面資料夾名稱

最近發現許多新版Linux在安裝完後,如果選擇中文系統,會發現桌面資料夾的名稱真的變成"桌面"而不是Desktop。雖說看起來很中文用桌面這個名稱很適合,但若需要使用到Console來操作時,就變得很麻煩,更改回Desktop方式如下:

# mv ~/桌面 ~/Desktop
編輯以下檔案
# vim ~/.config/user-dirs.dirs

XDG_DESKTOP_DIR="$HOME/Desktop"

2010年7月14日 星期三

Server Load Balance

HAProxy可以讓我們簡單架設一個Load Balance的機器。Debian架設方法如下:

# apt-get install haproxy

若要啟用,記得修改/etc/default/haproxy的設定檔
# vim /etc/default/haproxy
Enabled=1

接著便是依據實際環境對Load Balance的設定檔(/etc/haproxy/haproxy.cfg)做修改,可參考此網站

global
    maxconn 10000
    user    haproxy
    group   haproxy
    daemon
    nbproc  8
   
defaults
    log           global
    mode          http
    option        httplog
    option        dontlognull
    retries       3
    option        redispatch
    option        httpclose
    maxconn       32768
    contimeout    5000
    clitimeout    30000
    srvtimeout    30000
 

listen            web-server
    bind          0.0.0.0:80
    balance       roundrobin
    server        w1 192.168.1.1:80 weight 3 check
    server        w2 192.168.1.2:80 weight 3 check
    option        httpchk GET /index.html

    option        redispatch
    option        forwardfor

最後,啟動Service
# /etc/init.d/haproxy start

2010年6月26日 星期六

update-rc.d

寫了一支Daemon程式,除了在/etc/init.d/rc.local上寫入欲執行的指令外,也可以利用[Debian]update-rc.d指令,更新各runlevel下要執行的script。
首先要產生一個init.d script來執行我們要執行的Daemon,我們可以利用/etc/init.d/skeleton來當做修改的範本。

# cp /etc/ init.d/skeleton /etc/init.d/myservice
# chmod a+x /etc/init.d/myservice

接著便是修改myservice script,部份修改如下:
# vim /etc/init.d/myservice
DESC="Daemon的描述"
NAME=Daemon的檔名
DAEMON=Daemon所在絕對路徑
PIDFILE=/var/run$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

最後便是利用update-rc.d指令,更新各runlevel服務啟動設定
# cd /etc/init.d
# update-rc.d myservice defaults

defaults參數設定服務在runlevel為2,3,4,5啟動,runlevel為0,1,6為停止。若要詳細的設定,請參考man update-rc.d

2010年6月20日 星期日

update-alternatives for gcc

update-alternatives提供了程式版本切換管道,以下將教學如何將gcc也加入到此管理系統。

假設系統已安裝gcc-4.1, g++-4.1, gcc-4.3, g++-4.3

# update-alternatives --remove-all gcc
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 41 --slave /usr/bin/g++ g++ /usr/bin/g++-4.3 --slave /usr/bin/gcov gcov /usr/bin/g++-4.3
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 41 --slave /usr/bin/g++ g++ /usr/bin/g++-4.1 --slave /usr/bin/gcov gcov /usr/bin/g++-4.1

顯示所有的版本
# update-alternatives --display gcc

設定所要選擇的版本
# update-alternatives --config gcc

2010年5月30日 星期日

vim同時編輯多個檔案

vim也具有同時開啟及編輯多個檔案的能力:

介紹兩種方法:

第一種是同時開啟多個檔案
# vim -p file1 file2

操作指令如下:
:tabe file3 開啟一個新分頁file3檔案
:tabn 編輯下一個檔案
:tabp 編輯前一個檔案

若覺得切換分頁麻煩可以在vimrc設定
nmap <F3>:tabn<ENTER>
nmap <F4>:tabp<ENTER>
如此便可用F3、F4鍵來快速切換分頁

第二種則類似分割視窗的作法
在vim命令模式
:sp file2

畫面便會被分割,切換檔案方式如下:
[ctrl]+w+[↓↑]

2010年5月27日 星期四

Linux上偵測Memory Leak

Memory leak一不小心就會發生,往往很難去發現。在Linux有開發程式,可以利用Valgrind這套軟體來偵測程式是否有Leak發生。

Valgrind不僅可偵測Memory Leak,也可以偵測Invalid Pointer和使用未初始化的變數。

Debian:
# apt-get install valgrind

使用方法:
# valgrind --tool=memcheck --leak-check=yes 欲執行的程式

詳細說明

2010年5月15日 星期六

exim4外寄郵件伺服器

在Debian如何透過exim4設定外寄郵件伺服器來寄信(以gmail以及hotmail為例)

# dpkg-reconfigure exim4-config

在smarthost的設定填入對應的值
gmail
smtp.gmail.com::587
hotmail
smtp.live.com

# vim /etc/exim4/passwd.client
gmail
gmail-smtp.1.google.com:帳號@gmail.com:密碼
*.google.com:帳號:密碼
smtp.gmail.com:帳號@gmail.com:密碼

hotmail
smtp.live.com:帳號@hotmail.com:密碼

重新讀取設定
# /etc/init.d/exim4 reload

2010年4月8日 星期四

mutt寄信

在Linux用指令來寄信並加上附件,可以用mutt來完成。

指令: mutt -a 附件檔案 -s 主旨 收件者,例:
# mutt -a attachement.txt -s "Hello Mutt" test@test.com

寄件者的Email可以設定在~/.muttrc
my_hdr From: Name <E-Mail>

2010年3月7日 星期日

F2 重新命名

在Windows作業系統,在圖示按兩下便可以更改檔名,然而在Linux下的桌面環境,點兩下卻是沒有回應,要按右鍵屬性去修改,感覺有些麻煩。現在才發現有一個更快的方法,那就是F2鍵就如同在圖示點兩下,Windows也適用。

2009年12月17日 星期四

格式化輸出

今天在寫Shell script時,需要用到格式化輸出,例如要串接001~100,可以用for迴圈加上printf達成:

for number in $(seq 1 100)
do
format=`printf %.03d $number`
# Do something else
done

2009年10月27日 星期二

CMake簡單範例

CMake是一個軟體建構工具,可以幫我們產生MakeFile。以下就用簡單的範例來呈現:
我們有三個檔案main.cpp hello.cpp hello.h和三個CMakeLists.txt
分別位於

|-- CMakeLists.txt
|-- lib
| |-- CMakeLists.txt
| |-- hello.cpp
| |-- hello.h
|-- src
|-- CMakeLists.txt
|-- main.cpp

hello.h
void hello();
hello.cpp
#include "hello.h"
#include <iostream>
void hello() {
std::cout << "Hello CMake!" << std::endl;
}

main.cpp
#include "hello.h"
int main() {
hello();
return 0;
}

最上層的CMakeLists.txt
PROJECT (HELLO)
# 加入兩個子資料夾(src後面bin的意思是將src的輸出放到bin資料夾)
ADD_SUBDIRECTORY (src bin)
ADD_SUBDIRECTORY (lib)

lib/CMakeLists.txt
# 將hello.cpp編譯成static library
ADD_LIBRARY (HelloLibrary hello.cpp)

src/CMakeLists.txt
INCLUDE_DIRECTORIES (${HELLO_SOURCE_DIR}/lib)
SET (HELLO_SRCS main.cpp)
ADD_EXECUTABLE (HelloCMake HELLO_SRCS)
TARGET_LINK_LIBRARIES (HelloCMake HelloLibrary)

在執行cmake前,我們可以在最上層先建立一個目錄(例如:build),然後到build目錄下執行cmake,如此cmake後產生的資料皆會在build資料夾裡。
# mkdir build
# cd build
# cmake ../
# make

若順利的話,便可在bin找到HelloCMake執行檔,在lib可找到libHelloLibrary.a

2009年10月24日 星期六

FastCGI

FastCGI是一個網頁伺服器端應用程式介面,CGI有一個很大的缺點就是CGI程式每次執行就會產生一個新的process,當同時很多人上線時,會對伺服器造成很大負擔;而FastCGI程式是常駐型的CGI程式,不會因為Http_Request結束而終止。

在Debian 5安裝Apache2 + FastCGI
# apt-get install apache2 libapache2-mod-fastcgi
# /etc/init.d/apache2 restart

接著用c寫一個helloFCGI的程式來驗証:
#include "fcgi_stdio.h"
#include <stdlib.h>

int main()
{
int count = 0;
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n"
"\r\n"
"<title>Hello FastCGI</title>"
"<h1>Hello FastCGI</h1>"
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_NAME"));
}
return 0;
}

編譯時要加上-lfcgi參數
# gcc -lfcgi -o helloFCGI.fcgi helloFCGI.c

將helloFCGI.fcgi放到所設定的FastCGI執行的資料夾內(Debian安裝好的預設資料夾在/usr/lib/cgi-bin),在網頁執行http://localhost/cgi-bin/helloFCGI.fcgi即可看到結果。

2009年9月26日 星期六

update-alternatives

Debian提供了update-alternatives的工具,可以用來管理套件的版本。例如:系統有三套Java的套件GIJ、GCJ和Sun Java,如何能自由且快速的切換不同版本。

首先,先看一下java指令的路徑
#which java
/usr/bin/java

# ls -l /usr/bin/java
/usr/bin/java -> /etc/alternatives/java
# ls -l /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-gcj/jre/bin/java

我們可以看到java的指令用一個symbolic link連到/etc/alternatives/java,而/etc/alternatives/java又是一個symbolic link連到/usr/lib/jvm/java-gcj/jre/bin/java。
所以update-alternatives就是將/etc/alternatives/java改掉。

# update-alternatives --display java
java - status is auto.
link currently points to /usr/lib/jvm/java-gcj/jre/bin/java
/usr/bin/gij-4.2 - priority 42
slave java.1.gz: /usr/share/man/man1/gij-4.2.1.gz
/usr/lib/jvm/java-gcj/jre/bin/java - priority 1042
/usr/lib/jvm/java-6-sun/jre/bin/java - priority 63
slave java.1.gz: /usr/lib/jvm/java-6-sun-1.6.0.00/jre/man/man1/java.1.gz
Current `best' version is /usr/lib/jvm/java-gcj/jre/bin/java.

可以看到目前系統有gcj和Sun Java,由於status是auto,而gcj的優先權最高,所以可以最下面顯示目前最佳的版本是gcj。若要改變成java-6-sun:

# update-alternatives --config java

即可選擇java-6-sun。

2009年9月22日 星期二

ldd

ldd可以用來顯示每個程式所使用到的shared library。ldd其實是一個shell script而不是執行檔。

在linux,我們可以將程式編譯成靜態連結或是動態連結,在這以hello.c來解釋。

#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}

用gcc編譯
# gcc hello.c -o hello
則會產生hello的執行檔,而其預設是使用動態連結的方式:

用file指令來檢視其屬性
# file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

用ldd來檢視共用了哪些shared library
# ldd hello
linux-gate.so.1 => (0xb7f6a000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dfd000)
/lib/ld-linux.so.2 (0xb7f6b000)

此外,此檔案的大小為
# ls -l hello
-rwxr-xr-x 1 howard howard 6256 2008-09-30 00:00 hello

上述為程式使用動態連結,我們也可以將程式編譯成靜態連結:
# gcc -static hello.c -o hello

用file來檢視,可以看到顯示為靜態連結
# file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.8, not stripped

用ldd來檢視,自然沒使用到任何shared library
# ldd hello
not a dynamic executable

再來檢視檔案的大小
# ls -l hello
-rwxr-xr-x 1 howard howard 564881 2008-09-30 00:07 hello

我們可以看到檔案大小為564881 Bytes,相對於之前用動態連結只用了6256 Bytes,足足大上快一百倍。可見使用動態連結能大大節省空間。

2009年6月5日 星期五

Debian GNU/Linux 5.0

將近要一年沒有碰Linux了,之前用的Debian GNU/Linux 5.0 (Lenny)都從測試版變成穩定版了。一時興起,決定再來重灌一下Debian。但這次不再選擇使用測試版本,雖說測試版本有許多較新的軟體可以使用,但更新頻率實在是太高了,有時正常的系統更新後就感覺變的怪怪的,然後就要花很多時間去搜集資料把問題解決。

在安裝完後,通常我都會先做以下幾步驟:
  • 調整系統字型
  • 更新顯示卡驅動程式
  • 安裝gcin,並且新增嘸蝦米輸入法
  • GNOME-Look.org找尋想要的桌布與佈景主題
  • 調整登入畫面
  • 安裝PCMan (主要用來PTT)
  • 安裝Audacious (聽音樂必備)
  • 安裝aMSN
另外,由於感覺桌面顯示的圖示有點大,也順手將它變小。可在組態編輯器或在終端機輸入gconf-editor進入,選擇apps -> nautilus -> icon_view裡的default_zoom_levelstandard改為small即可。

以下即為安裝後的畫面