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

2010/08/11

Linux 批次改變圖檔大小

  日本拍回來的照片將近一千張,每張都是2048x1536的解晰度,想放到flicker或Picasa 又太佔空間,想到將它們縮到 800x600.不可能一張一張來,找了個批次改變圖檔大小的指令:

find . -iname "*.JPG" | xargs -l -i convert -resize 800x600 {} ../small/{}

  執行前要在圖檔所在目錄的同一層先建一個 small 目錄才能讓轉出來的小檔案放到該目錄. 當然,重點是要有 convert 這個 ImageMagick 工具指令檔,它使用 OpenMP 可以同時轉多個檔.速度是很快的,我的CPU 四核心 都用上了! 

2009/03/30

Ubuntu 中可用的原始碼轉html工具

  寫部落格有時候寫到一些技術文需要附上程式碼,常常看別人網頁中有語法高亮度顯示(syntax highlight),看起來就很美觀。在 Ubuntu (Linux)中應該也有這類工具才對,使用Synaptic (套件管理程式)搜尋了一下列出了幾個供大家參考:  

code2html

最簡單的用法:code2html test1.c test1.html
第一個參數是原始檔名,第二參數是轉換後的 html 檔名,後面再加一個參數 -n 可在每行前面加入行號,如未指定語言,它會自動判斷。

/* test1.c
*/

#include <stdlib.h
#include <stdio.h

int main()
{
printf("Hello, World !\n");
return 0;
}




syntax highlighted by Code2HTML, v. 0.9.1


轉換結果會包含完整的 html tag及多幾行不必要的 created by 資料。請自行刪除。


source-highlight
最簡單的用法:source-highlight -i Hello.java -o test1.html
語法: -i 表示 input file 後面跟著要轉換的原始檔名
-o 表示 output file 後面跟著轉換後的 html 檔名
-n 表示 每行前面加入行號(預設為前補0)

/*
* Hello.java
*/
import java.util.*;
import java.io.*;

public class Hello
{
public void print()
{
System.out.println("Hello");
}

public static void main(String [] argv)
{
Hello hello = new Hello();
System.out.println("Hello ! Java");
hello.print();
}
}

轉換後不含 html tag,可以直接貼上使用。

webcpp
最簡單用法:webcpp infile outfile
參數一為原始檔名,參數二為輸出 html 檔名,後面可再加一個 -l (line number)
讓每行前面加入行號。


以上三種都支援多種語言。 單獨輸入 -h 可以顯示所有參數用法。

如果要網路線上轉換可以使用 http://tohtml.com/ ,還挺好用的。

2008/05/31

gdb xxgdb DDD cgdb kdbg Linux debug 除錯工具心得

在Linux 中C語言寫程式,如果要除錯就沒有Windows 平台那麼方便的IDE開發環境可用.其實其它 UNIX like 如 SCO UNIX, AIX, BSD ... 也是差不多的情形. 但至少還有 gdb 可用, 雖然它是命令列工具,但功能強大. 有興趣的人可以參考 jserv 的gdb介紹工具. 以下整理出自己學習的簡單筆記:


編譯出含除錯資訊的執行檔
gcc -g -o gcc1 gcc1.c

使用 gdb 除錯

gdb gcc1 (gcc1 為示範用的執行檔名)

設定中斷點

b main # 表示 breakpoint 在 main()

b 10 # 表示 breakpoint 設在第 10 行

列出程式碼

l # list 的第一個字母 L

執行下一行 (單步執行)

n # next

執行到一下個中斷點或結束

c # continue

單步執行, 如果有函數會進入

s # step


印出變數值

p # print

xxgdb 是gdb 的圖形介面版, 用法一樣 :

xxgdb gcc1

gdb, xxgdb 都中文顯示都沒有問題. 但換成 DDD 就不行. 其實 gdb 就很夠用了. 尤其是擅長使用鍵盤的人.

另外還有一個 cgdb , 可以將它視為文字模式gdb 加強版, 在除錯過程中上半部視窗可以同步顯示正在執行的程式碼.

cgdb 的缺點是中文會有亂碼. 使用 gdb 配合 -tui 參數有異曲同工之妙.

gdb -tui gcc1

最後壓軸上場的是 kdbg , 不再多說 看圖 :

以上這些除錯工具只有 Kdbg 安裝完會出現在 Ubuntu 應用程式>軟體開發 選單中, 其它的似乎在選單都找不到, 只好到終端機下自行下指令 gdb, ddd, cgdb, xxgdb 了. 其實, 這些工具的源頭還是gdb, 它們只是前端文字或圖形介面. 簡單一點的用 gdb, 喜歡可同步看source code 選 cgdb, 圖形介面的選 kdbg.


回想起十年前在 SCO UNIX 上寫 C 程式只能用 printf 寫 standard output 或是寫到檔案, 執行完再用 log 檔除錯. 那真是件沒效率的事, 如果能有 gdb 就好了.


2008/02/17

shell 中運用date 指令取得日期字串

  工作上會在SunOS 上寫一些shell script 來進行系統維運.常覺得如果要計算日期或取得前一天日期字串很不方便,當然可以運用Perl ,但是寫出來的script 會變得不簡潔.但在 Linux 中的 GNU 版 date 指令卻可以達成.試了幾個好用的參數與用法,記錄起來以後就用得到. 

取得今天的日期與時間字串 (這是最常用的方法,單引號可以省略)   
date '+%Y%m%d'    
執行結果:20080217   

取得時間:   
date '+%H:%M:%S'   
執行結果:17:50:49 
  取得昨天日期   date -d  '-1 day' 或是 date -d  '1 day ago'   
配合格式變成 date +%Y%m%d  -d  '-1 day'
 
  取得前天日期   date -d '-2 days ago' 也可以用 date -d '-2 day' 比較簡潔 
  取得明天日期   date -d '1 day' 
  取得上個月日期   date -d '-1 month' 
  取得上週同一天(七天前)日期   date -d '-1 week'   年月日的參數可以類推.

真的比SunOS 的版本好用太多.這些用法其實在 man page 中也找不到.可以改用 info date 查詢.info 中有詳細的說明.

2008/02/14

sort 排序目錄下的檔案大小

  今天為了工作上將檔案較大的log file找出來竟然浪費不少時間,請了Google 大神一找其實指令很簡單:

ls -l | sort -n -k 5

先用 ls -l 將檔案大小列出來,再丟給 sort 指令將第五個欄位視為數字排序, -k 5 代表第五個資料欄位, -n 表示視為數字排序.sort 指令預設是由小至大排序,如果要改由大至小再加一個參數 -r .也就是 reverse 反向的意思.以上指令變成如下:

ls -l | sort -n -r -k 5

配合 du (disk usage) 可以找出檔案佔用的空間大小

du
| sort -n -r -k 1