Showing posts with label bash. Show all posts
Showing posts with label bash. Show all posts

Tuesday, August 3, 2010

bash script測試資料夾是否存在

給未來的裕翔

這很簡單

不過我就是會忘記^^

test -d target-dir

echo $?

0表示存在

1表示不存在

Monday, August 2, 2010

歷史命令混搭風

給未來的裕翔

當我執行某個動作

ex: cp xxxxxxxxxxxxxxxxxx

之後只要!cp

它就會去執行我最近以cp開頭的動作

至於$()則是跟` `一樣, 裡面的動作先執行

剛發現

可以 $(!cp) 耶!

混搭風阿!

不過不能 `!cp`

`` 裡面沒有替換動作的

萬用字元

給未來的裕翔

萬用字元的英文是 wild card

注意: 跟正規不一樣

一般為人所知的是*

代表任意長度的任意字元

而?

代表長度1的任意字元

報告完畢

Friday, July 30, 2010

A台有的套件, B台也要

給未來的裕翔

這是一個我很喜歡的實作題

首先, 在A台電腦把所有安裝的套件名稱存檔

rpm -qa -queryformat "%{NAME}" > a-installed.txt

把a-installed.txt複製到B台電腦後

比較優雅的作法是, 把B台也有的套件從名單濾掉
for package in `cat a-installed.txt`
do
rpm -q $package &> /dev/null || echo $package >> b-not-installed.txt
done

先不管指令的回傳值, 上面那個script的意思是

對a-installed.txt的每個套件名稱

測試B本機有沒有, 以rpm -q來測試, 沒有就當false(先不管回傳值)

兩個指令中間是以||區隔

&&檢查到有false就停

||是檢查到有true就停

對那些不存在B本機的套件, 回傳false, 因此就會執行第二道指令

把它們的名稱echo到b-not-installed.txt裡面

那如果B本機本來有存在數個a-installed.txt裡面的套件呢?

在一開始的rpm -q會回傳true, 然後就沒事了~

這樣產生的b-not-installed.txt就是A有B沒有的

接著, yum似乎不能接受stdin來的input

所以可以利用xargs

cat b-not-installed.txt | xargs sudo yum -y install



sudo yum -y install `cat b-not-installed.txt`

似乎後者較好^^

當然啦, 這是比較優雅的作法, 因為少了上面那個bash script

也是無所謂阿, 已經裝過的會自動略過嘛!

Tuesday, July 27, 2010

pts和virtual console

給未來的裕翔

渾渾噩噩過了24載

對於pts和virtual console的差別, 不想再無所謂了^^

pts是pseudo terminal slave, 也就是在桌面環境開啟的terminal

而virtual console就是Ctrl + Alt + F1~F6的那個東西

至於名稱來源我就不知道啦~

Monday, July 26, 2010

bash的`

給未來的裕翔

剛發現, 在同一行可以用兩次以上的``耶!

ex: mkinitrd --with=raid1 initramfs-raid1-`uname -r`.img `uname -r`

這樣可以製作還有raid1.ko的RAN disk file

Monday, July 19, 2010

快速製作大量使用者

給未來的裕翔

寫一個script

for name in name1 name2 name3 # …
do
useradd $name
echo password | passwd $name –stdin
done

如果使用者實在太大量了

可以把所有使用者另外存一個name-file

name1
name2
name3
blablabla

把原來的script修正為

for name in `cat name-file`
do
useradd $name
echo password | passwd $name –stdin
done

搞定~

Wednesday, July 7, 2010

eval的功能

給未來的裕翔

因為先入為主

之前一直以為bash的eval跟matlab的eval一樣

但這樣又很奇怪~

剛看一下man(早該看了)

發現, eval只是把數行command一起執行而已......

Saturday, June 5, 2010

sh指令

給未來的裕翔

對於沒有執行權限的檔案

與其chmod a+x filename.sh

./filename.sh

直接sh filename.sh更為帥氣!

Monday, April 12, 2010

bash的編輯模式設定

給未來的裕翔

bash可以設定為vi或是 emacs的編輯模式

set -o vi

set -o emacs

Monday, March 29, 2010

shell script: 如何快速複製數個binary所需的shared library到.

給未來的裕翔

如果現在有aaa, bbb, ccc, ddd四個binary

它們有各自需要的shared library, 也許會重複

如果現在我想把它們需要的shared library複製到 .

可使用以下shell script

#!/bin/bash

for bin in aaa bbb ccc ddd
do
cp $(ldd $(which $bin) | cut -d\  -f3) .


done

真是有點小敬佩自己^^

shell script: 如何快速複製幾個我要的binary到.

給未來的裕翔


如果我要複製到 . 的是,aaa, bbb, ccc, ddd


#!/bin/bash

for bin in aaa bbb ccc ddd
do
cp $(which $bin) .
done

Friday, March 19, 2010

臨時取消alias功能

給未來的裕翔

原本在~/.bashrc有另外設定alias df='df -h'

那如果我臨時想要使用原本的df怎辦?

~/.bashrcalias df='df -h'註解掉?

剛google一個更簡單的作法
(本來只知道方法的存在)


\df

快吧^^ 帥吧^^

Thursday, March 11, 2010

alias

給未來的裕翔

強烈建議把以下alias列入你的~/.bashrc

alias df='df -h'
alias grep='grep -n --color=auto'
alias ll='ls -lh'


df-h是把有關partition大小的單位以人類好懂的MB, GB表示

grep-n是把找到關鍵字的那行額外標出行號

grep--color=auto是把找到的關鍵字用特別顏色標出來

ls-h是把有關檔案大小的單位以人類好懂的MB, GB表示

note 1: 不能alias ll='ll -h', 會失敗

note 2: 改完如果希望馬上生效不需要重開機...... 只需source ~/.bashrc即可