顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - wenlien

頁: [1]
1
Hi all:
我想要在shell script 上取得bash歷史指令+時間戳記,
遇到了一些問題,並從網路上找了一些方法。
但是還是有個地方解不開,還請大家不吝指導:

代碼: [選擇]
[admin@Stanley tmp]$cat /tmp/t.sh
#!/bin/bash
export HISTTIMEFORMAT="[%F %T %Z]"
export HISTFILE=~/.bash_history
set -o history
history

引用
== 執行結果 (Prefix的timestamp都是 current time, 但在history內容中, 是有正確的timestamp) ==
[admin@Stanley tmp]$/tmp/t.sh | tail -20
  455  [2013-08-14 02:14:55 UTC]#1376446410
  456  [2013-08-14 02:14:55 UTC]cd /tmp
  457  [2013-08-14 02:14:55 UTC]#1376446412
  458  [2013-08-14 02:14:55 UTC]vi ./t.sh
  459  [2013-08-14 02:14:55 UTC]#1376446422
  460  [2013-08-14 02:14:55 UTC]chmod u+x ./t.sh
  461  [2013-08-14 02:14:55 UTC]#1376446424
  462  [2013-08-14 02:14:55 UTC]./t.sh
  463  [2013-08-14 02:14:55 UTC]#1376446432
  464  [2013-08-14 02:14:55 UTC]history | more
  465  [2013-08-14 02:14:55 UTC]#1376446439
  466  [2013-08-14 02:14:55 UTC]./t.sh | tail -10
  467  [2013-08-14 02:14:55 UTC]#1376446445
  468  [2013-08-14 02:14:55 UTC]history | tail -10
  469  [2013-08-14 02:14:55 UTC]#1376446445
  470  [2013-08-14 02:14:55 UTC]history | tail -10
  471  [2013-08-14 02:14:55 UTC]#1376446479
  472  [2013-08-14 02:14:55 UTC]history | tail -10
  473  [2013-08-14 02:14:55 UTC]#1376446486
  474  [2013-08-14 02:14:55 UTC]/tmp/t.sh | tail -10

引用
== 預期結果 ==
[admin@Stanley tmp]$history | tail -10
  515  [2013-08-14 02:14:30 UTC] history -a
  516  [2013-08-14 02:13:09 UTC] cat /tmp/t.sh
  517  [2013-08-14 02:13:30 UTC] cd /tmp
  518  [2013-08-14 02:13:32 UTC] vi ./t.sh
  519  [2013-08-14 02:13:42 UTC] chmod u+x ./t.sh
  520  [2013-08-14 02:13:44 UTC] ./t.sh
  521  [2013-08-14 02:13:52 UTC] history | more
  522  [2013-08-14 02:13:59 UTC] ./t.sh | tail -10
  523  [2013-08-14 02:14:05 UTC] history | tail -10
  524  [2013-08-14 02:14:39 UTC] history | tail -10

請問我少了什麼東西呢?

My Environment:
[admin@Stanley tmp]$bash --version
GNU bash, version 4.1.0(2)-release

感謝~

2
Hi all:

一般我們在deploy war檔到tomcat時,都會放在webapps下。
想請問一下,可以不要放在webapps下嗎?
有沒有什麼參數可以support這個?

Thanks~

3
有一天,有個朋友問我要如何用bash寫一個有timeout限制的menu。
我覺得很有趣就寫了一個sample給他。
後來功能就越加越多~

Finally, 決定拿出來跟大家分享(野人獻曝),any feed back is welcome~

PS. 我的環境是Ubuntu 10.04

代碼: [選擇]
#!/bin/bash

##############################################
##
## for menu utility
##
## author: Stanley Huang
## licence: Creative Commons Attribution-Share Alike 3.0 Taiwan License
## last release reversion: 0.1
## last modify date: 2010/08/04 15:30
## change list:
##   01. 2010/08/04 15:30, Stanley Huang. Build.
##
##############################################

showUsage() {
  cat <<EOF
Usage:
  $0
     [-e] (expert mode)
     [-h] (help menu)
     [-t] timeout_sec (default timeout = $nTimeout sec)
     [-c] no. of columns to display (default no. of column = $nColumn)
     [-w] column wide (default column wide = $nWide)
     [-m] menu file
Ex.
  $0
  $0 -e
  $0 -h
  $0 -t 10
  $0 -c 3
  $0 -w 10
  $0 -m /tmp/t.menu
EOF
}

pak2c() {
  read -n 1 -p "Press any key to continue..." pak2c
}

checkItemExist() {
  local sItem=$1
  grep "^$sFilter$sItem$sMenuActSeparator" $sMenuFile > /dev/null 2>&1
  return $?
}

checkItemNotExist() {
  local sItem=$1
  checkItemExist $sItem
  if [ $? -eq 0 ]
  then
    return 1
  else
    return 0
  fi
}

getHeader() {
  local sHeader="`grep "^$sHeaderFilter" $sMenuFile | head -1 | cut -d' ' -f2-`"
  echo $sHeader
}

setHeader() {
  while true
  do
    read -p "Please enter your header: " sNewHeader
    [ ! -z "$sNewHeader" ] && break
  done
  sHeader=$sNewHeader
  if [ `grep -c "^$sHeaderFilter" $sMenuFile` -ne 0 ]
  then
    perl -pi -e "s/^$sHeaderFilter.*$/$sHeaderFilter$sNewHeader/" $sMenuFile
  else
    echo "$sHeaderFilter$sNewHeader" >> $sMenuFile
  fi
}

buildMenu() {
  clear
  declare -i nColumn=$1
  declare -i nWide=$2
  declare -i nCount=0
  declare -i nMod=0
  declare    sCount=""

  printf -- "$sOuterSeparatorLine\n" && \
  printf -- "        `getHeader`\n" && \
  printf -- "$sOuterSeparatorLine\n" && \

  while read fItem item
  do
    nCount=$nCount+1 && sCount=$nCount && [ $isExpert -eq 0 ] && sCount=.
    aMenu[$nCount]="`echo $item | awk -F$sMenuActSeparator '{print($1)}'`"
    aActs[$nCount]="`echo $item | awk -F$sMenuActSeparator '{print($2)}'`"
   
    fDisable=`echo $fItem | sed -e 's/[^*]//g'`
    printf "%${#nTotalCount}s) %${nWide}s%1s" $sCount ${aMenu[$nCount]} $fDisable
   
    nMod=$nCount%$nColumn
    if [ $nMod -eq 0 ]
    then
      printf "\n";
    else
      printf " ";
    fi
  done <<EOF
`grep "^$sFilter" $sMenuFile ## disable display with sorting`
EOF
  #### `grep "^$sFilter" $sMenuFile | sort -k 2 ## display with sorting`
  [ $nMod -ne 0 ] &&  printf "\n"

  printf -- "$sOuterSeparatorLine\n" && \
  if [ "$isExpert" -eq 0 ]
  then
    printf "%${#nTotalCount}s) %${nWide}s\n" "a" "(A)dd"
    printf "%${#nTotalCount}s) %${nWide}s\n" "c" "(C)hange name"
    printf "%${#nTotalCount}s) %${nWide}s%s\n" "d" "(D)isable" ", marked *"
    printf "%${#nTotalCount}s) %${nWide}s\n" "e" "(E)nable"
    printf "%${#nTotalCount}s) %${nWide}s\n" "h" "set (H)eader"
    printf "%${#nTotalCount}s) %${nWide}s\n" "m" "(M)odify"
    printf "%${#nTotalCount}s) %${nWide}s\n" "r" "(R)emove"
    printf "%${#nTotalCount}s) %${nWide}s\n" "s" "(S)ort data"
    printf "%${#nTotalCount}s) %${nWide}s\n" "v" "(V)iew cmd"
    printf -- "$sInnerSeparatorLine\n"
    printf "%${#nTotalCount}s) %${nWide}s\n" "n" "(N)ormal mode"
  else
    printf "%${#nTotalCount}s) %${nWide}s\n" "e" "(E)xpert mode"
  fi
  printf "%${#nTotalCount}s) %${nWide}s\n" "q" "(Q)uit"
  printf -- "$sOuterSeparatorLine\n"
}

## Usage:
##   repeat [character] [line size]
## Ex.
##   repeat x 100
repeat() {
  [ $# -lt 2 ] && return 1
  sChar=${1:0:1}
  nSize=$2
  printf -vch  "%${nSize}s" ""
  printf "%s\n" "${ch// /$sChar}"
}

############################################# main

clear
set -o noglob
declare -i nDefaultTimeout=10
declare -i nExpertTimeout=65535
declare -i nTimeout=$nDefaultTimeout
declare -i isExpert=1
declare -a aMenu
declare -a aActs
declare    sMenuActSeparator=":"
declare    sFilter=""
declare -i nTotalCount=0
declare -i nDefaultColumn=1
declare -i nExpertColumn=3
declare -i nColumn=$nDefaultColumn
declare -i nWide=16
declare -i nActionWide=20
declare    sMenuFile=$0 ## default menu file is program itself.

declare -i nSeparatorLength=30
declare    sOuterSeparatorLine=`repeat = $nSeparatorLength`
declare    sInnerSeparatorLine=`repeat - $nSeparatorLength`

while getopts ":ehc:t:w:m:" opt
do
  case $opt in
  e)
    isExpert=0
    ;;
  h)
    showUsage
    exit 0
    ;;
  c)
    nDefaultColumn=$OPTARG
    ;;
  m)
    sMenuFile=$OPTARG
    ;;
  t)
    nDefaultTimeout=$OPTARG
    ;;
  w)
    nWide=$OPTARG
    ;;
  :)
    echo "The option ($opt) without parameters, exit program..."
    showUsage
    exit 1
    ;;
  \?)
    echo "Not such option($OPTARG), exit program..."
    showUsage
    exit 1
    ;;
  esac
done

sEnableFilter="#@ "
sDisableFilter="#\* "
sNormalFilter=$sEnableFilter
sExpertFilter="#[@*][ ]"
sExpertFilter4Perl="(#[@*][ ])"
sHeaderFilter="#\^ "
if [ $isExpert -eq 0 ]
then
  sFilter=$sExpertFilter
  nTimeout=$nExpertTimeout
  nColumn=$nExpertColumn
else
  sFilter=$sEnableFilter
  nTimeout=$nDefaultTimeout
  nColumn=$nDefaultColumn
fi
nTotalCount=`grep -c "^$sFilter" $sMenuFile`

while true
do
  buildMenu $nColumn $nWide
  declare -i nChoice
  declare    sChoice
  declare -i fRead=0
  declare    sItem=""

  while true
  do
    echo -n "Please enter your choice ($nTimeout secs to timeout): "
    read -t $nTimeout sChoice || fRead=$?

    #### special events
    [ $fRead -eq 142 ] && echo "Time out..." && exit 0
    [ $isExpert -eq 1 ] && [ $sChoice == 'e' ] && $0 -e -t $nDefaultTimeout -m $sMenuFile && exit 0
    [ $isExpert -eq 0 ] && [ $sChoice == 'n' ] && $0 -t $nDefaultTimeout -m $sMenuFile && exit 0
    [ $sChoice == 'q' ] && exit 0

    #### choice reactions
    nChoice=$sChoice
    [ -z "$sChoice" ] && buildMenu $nColumn $nWide && continue
    [ $isExpert -eq 1 ] && ( [ $nChoice -le 0 ] || [ $nChoice -gt $nTotalCount ] ) && continue
    [ $isExpert -eq 0 ] && ( [ $sChoice == "0" ] || [ $nChoice -ne 0 ] ) && continue
    break
  done

  case "$sChoice" in
  a)
    while true
    do
      read -p "Please enter the item you want to add: " sItem
      [ -z $sItem ] && break
      checkItemExist "$sItem" || break
      echo "Item ($sItem) exist!!"
    done

    if [ ! -z $sItem ]
    then
      read -p "Please enter the action of the item you added: " sAct
      if [ ! -z $sAct ]
      then
        echo "$sEnableFilter$sItem$sMenuActSeparator$sAct" >> $sMenuFile
        echo "Add item ($sItem) done..."
      fi
    fi
    ;;
  c)
    while true
    do
      read -p "Please enter the item you want to rename: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      read -p "Please enter the new name of the item: " sNewItemName
      perl -pi -e "s/^$sExpertFilter4Perl$sItem$sMenuActSeparator.*$/\1$sNewItemName$sMenuActSeparator$sAct/" $sMenuFile
      echo "change item name ($sItem -> $sNewItemName) done..."
    fi
    ;;
  d)
    while true
    do
      read -p "Please enter the item you want to disable: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      perl -pi -e "s/^$sEnableFilter$sItem$sMenuActSeparator/$sDisableFilter$sItem$sMenuActSeparator/" $sMenuFile
      echo "disable item ($sItem) done..."
    fi
    ;;
  e)
    while true
    do
      read -p "Please enter the item you want to enable: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      perl -pi -e "s/^$sDisableFilter$sItem$sMenuActSeparator/$sEnableFilter$sItem$sMenuActSeparator/" $sMenuFile
      echo "enable item ($sItem) done..."
    else
      echo "sItem is empty..."
    fi
    ;;
  h)
    setHeader
    ;;
  m)
    while true
    do
      read -p "Please enter the item you want to modify: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      read -p "Please enter the action of the item: " sAct
      perl -pi -e "s/^$sExpertFilter4Perl$sItem$sMenuActSeparator.*$/\1$sItem$sMenuActSeparator$sAct/" $sMenuFile
      echo "modify item ($sItem) done..."
    fi
    ;;
  r)
    while true
    do
      read -p "Please enter the item you want to remove: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      perl -pi -e "s/^$sExpertFilter$sItem$sMenuActSeparator.*\n$//" $sMenuFile
      echo "remove item ($sItem) done..."
    fi
    ;;
  s)
    cp $sMenuFile $sMenuFile.bak ## backup first
    declare -i nEOS=`grep -n '#### \*\*\* Data \*\*\*$' $sMenuFile | cut -d: -f1`
    declare -i nBOD=$nEOS+1 ## not work for Ubuntu
    declare -i nLOD=`wc -l $sMenuFile | awk '{print($1)}'`-$nEOS
    [ $nEOS -eq 0 ] && exit 0
    head -$nEOS $sMenuFile > /tmp/$$.main
    ##tail +$nBOD $sMenuFile | sed -e "s/^#[@*][ ]*$//" | sed -e "/^$/d" | sort -k 2 > /tmp/$$.data ## not work for Ubuntu
    tail -$nLOD $sMenuFile | sed -e "s/^$sExpertFilter*$//" | sed -e "/^$/d" | sort -k 2 > /tmp/$$.data
    cat /tmp/$$.main /tmp/$$.data > $sMenuFile
    rm /tmp/$$.main /tmp/$$.data
    echo "Sorting data done, please restart your program..."
    ;;
  v)
    while true
    do
      read -p "Please enter the item you want to view: " sItem
      [ -z $sItem ] && break
      checkItemNotExist "$sItem" || break
      echo "Item ($sItem) doesnot exist!!"
    done

    if [ ! -z $sItem ]
    then
      grep "^$sExpertFilter$sItem$sMenuActSeparator" $sMenuFile | awk -F"$sMenuActSeparator" '{print("Command:",$2)}'
    fi
    ;;
  "")
    ;;
  *)
    if [ $isExpert -eq 1 ] ## 1 for not expert mode!
    then   
      OLD_IFS=$IFS
      IFS=';'
      for sCmdOpts in ${aActs[$nChoice]}
      do
        echo "Execute Command: $sCmdOpts"
        eval $sCmdOpts
      done
      IFS=$OLD_IFS
    else
      continue
    fi     
    ;;
  esac
  pak2c
done

echo "End of process..."

exit
exit
exit

####
#### Menu item:
####   Use '#@ ', '#* ' at the begin of the line for setting menu item
####   #^ header(title)
####   #@ enable items
####   #* disable items
#### Ex.
####   #@ item
#### PS.
####   Do not modify the data below, use option "-e" (export mode) to modify.
####
#### *** Header ***
#^ My Menu
####
#### *** Data ***
#@ apple:echo "this an apple"
#@ banana:echo "this an banana"
#@ ls:ls
#@ id:id
#@ pwd:pwd
#@ stanley:id;pwd;ls -al;ls ./;echo 1 2 3;pwd;id

4
Hi all:

如果要將軟體deployment到Linux的機器上,
有沒有建議的opensource deployment軟體可以用。
之前在Windows平台上,我都是用InstallShield。


5
無意中發現一本好書,
有興趣學習進階SQL的人可以去看看.

http://www.delightpress.com.tw/book.aspx?book_id=sknd00002

regards,

Stanley Huang


6
Linux 討論版 / [請益] polkitd 一問
« 於: 2010-06-07 23:37 »
各位大大們你好:

我在裝完Ubuntu 10.04 之後,
發現有一個process (polkitd) 一直在吃掉我的記憶後,
最終他占用很大的記憶體, 讓我的系統慢到不行.
我曾試著把他kill掉, 但是他還是被系統重新啟動.
所以, 想問:
1. 請問這樣的情形是daemon的bug嗎?
2. 這個daemon很重要嗎? 可以把他關掉嗎?
3. 請問該如何關掉他?

感謝.

Stanley Huang

7
Hi all:

我的環境如下:
$ uname -a
Linux Stanley-Desktop 2.6.18-164.15.1.el5 #1 SMP Wed Mar 17 11:30:06 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
$ django-admin.py --version
1.2 beta 1
$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ mysql
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 426
Server version: 5.1.44-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

我在Python on Django上syncdb時, 會出現"Segmentation fault",

$ python ./manage.py syncdb
Creating table django_session
Creating table django_site
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table myApp1_category
Creating table myApp1_article

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Segmentation fault
$

請問有人有遇過類似的裝況嗎?
我曾想過要用gdb來debug, 但是沒有頭緒...方便給個方向要如何debug, 以找出這個問題的root cause.

感謝~


8
肉腳版 / 請教ubuntu中文輸入法的問題。
« 於: 2010-03-21 15:18 »
我裝了ubuntu 9.10,
我在登入時選擇中文介面,可以正常輸入中文。
但是在登入英文介面時,會有下列一些狀況:
1. 按control space時,不會出現新酷音的工具列.
2. 嘗試輸入中文時,感覺上很像有輸入法在"接"我的input,唯一的差別是,接到的內容還是"英文"字母, 並不是注音符號.
3. 當我"確認"輸入完畢後,果不其然,直接把英文直接貼到編輯工具上.

請問,我要如何解決這樣的問題,才能在英文環境中正常輸入中文.

Thanks.

regards,

Stanley Huang

9
各位大大請問一下:
我從網路上找到把ext3 upgrade到ext4的方法.
文章中有提到下完tune4fs的指令後, 要下e4fsck.
後來我發現沒有作fsck也可以正常開機/掛載.
所以, 想請問fsck是一定要做的嗎?
從ext3轉換成ext4, 我以為tune4fs的指令可能花我一點時間,
結果指令下完幾乎馬上完成指令, 另我驚訝一下!!
這樣對嗎? ( 我是對 root device 作tune4fs, 裡面有不少資料. )

regards,

Stanley Huang

10
程式討論版 / 請推薦網頁編輯軟體~
« 於: 2010-03-13 20:17 »
Hi all:
最近要敎一個朋友(外國人)的小孩(15歲)網頁設計.
先從HTML/UI設計學起, 如果他學的很有興趣, 才會進階學程式語言.
所以想請問一下有沒有推薦的軟體.
我有幾個想法:
1. OpenSource
2. 英文介面
3. 要有UI拖拉的功能

這讓我想到 Dreamwaver 這套軟體, 應該會很符合我的想法.
只可惜, 它不是OpenSource軟體~~

請推薦一下吧~

Thanks.

regards,

Stanley Huang

11
Hi all:

最近工作上的需要,會需要我去monitor Red Hat 5的效能。
我想知道有沒有專門介紹System Performance Tuning/System Tunable Parameters的書籍可以參考。
或是其他深入介紹Red Hat Linux的書/website or else。

Thanks for your kindly assistance~

regards,

Stanley Huang

12
肉腳版 / 請推薦Python IDE tools, Thanks~
« 於: 2010-02-15 11:04 »
請問各位大大, 有沒有推薦的Python IDE tools.

regards,

Stanley Huang

13
站長大大們你好~~

小弟一時不注意, 在study-area註冊了兩個帳號.
因為我都是在firefox上save帳號密碼,
加上我有多台電腦, 所以一直都沒有注意到我用兩個帳號在po文章. sorry again.

為了不要浪費資源, 所以我想把其中一個帳號砍掉.
試問, 如果我將帳號砍掉, 我之前post的文章是否還會存在.
if yes, 那下次如果有人故意跟我註冊相同帳號, 設定相同顯示名稱,
是否會造成混淆, 造成不必要的誤會呢?

any suggestion?

Thanks for your kindly response.

PS. 我將在近日揮劍自宮, 不是啦, 是自我了斷... :P

regards,

Stanley Huang

14
Hi all:

如果要把windows xp 換成 windows 7,
( 這裡指的"換", 可以為"upgrade", 或是重新裝一個windows7 )
如果考量軟體的相容性, 應該選32 or 64 位元的windows7?
會建議直接upgrade嗎?

regards,

Stanley Huang

15
Hi all:
最近又有人再問我這個問題~~

簡單說明一下, 他是一個unix系統管理員, 但是由於他要處理的工作很多,
所以他希望可以學一個程式語言, 來協助開發一些小程式, 以簡化他的工作.
跟大多數的SA一樣, 他從borne shell (sh) 開始學起.
但是, 他覺得borne shell不是很powerful(因為他有時還是會需要作一些運算, 字串的處理...etc)
所以想換個script, 所以他跑來問我這個問題.

雖然這已經是一個老問題了, 但是隨著語言一直推陳出新, 也一直在改變/進步,
一年前的best choice, 也許不是你心中的最佳選擇了.
所以, 大家來串連一下吧!

我先說一下我個人的使用情況:
基本上, 我個人在使用的語言是(bash + perl).
我把百分之八十用bash, 百分之二十用perl.
當初這兩個語言, 都是因為專案需要, 所以才去學的.
沿用至今, 也習慣了~

那你呢?

regards,

Stanley Huang

頁: [1]