コマンドメモ」カテゴリーアーカイブ

プロセス置換を使って複数のパイプを受け取る,あるいは一時ファイルを節約する方法

スポンサード リンク

コマンドの実行結果を他のコマンドに渡したいとき,普通はパイプを使って渡す。

 ~ $ paste --help | nl
     1  Usage: paste [OPTION]... [FILE]...
     2  Write lines consisting of the sequentially corresponding lines from
     3  each FILE, separated by TABs, to standard output.
     4  With no FILE, or when FILE is -, read standard input.

     5  Mandatory arguments to long options are mandatory for short options too.
     6    -d, --delimiters=LIST   reuse characters from LIST instead of TABs
     7    -s, --serial            paste one file at a time instead of in parallel
     8        --help     display this help and exit
     9        --version  output version information and exit

    10  Report bugs to <bug-coreutils@gnu.org>.

渡したい実行結果が1つだけならこれで良いのだが,2つ以上渡したいときはどうしたらいいだろうか。
≫ 続きを読む



カテゴリー: コマンドメモ | コメントする

percolを書き換えていい感じにzshで履歴検索できるようにする

スポンサード リンク

percolはインタラクティブに標準入力を行単位でしぼりこむためのpythonスクリプトである。百聞は一見にしかずというし,画像を見て欲しい。

デフォルト設定のpercolでファイルを選択する

デフォルト設定のpercolでファイルを選択する

画像はデフォルトでの挙動だが,Hpercolのカスタマイズについて書く。ちなみにヴァージョンは percol 0.08 のお話。
≫ 続きを読む



カテゴリー: CentOS, Debian, Fedora, Python, コマンドメモ | コメントする

Vimの現在のバッファの中身を外部コマンドでフィルタする方法

スポンサード リンク

Vimで開いているバッファの中身を外部コマンドに渡して,フィルタしたいとする。もちろん,バッファはフィルタ後の内容で置換されて欲しい。

例えば,バッファの中身が

hoge huga

というときに sed -e ‘s/hoge/piyo/’ という外部コマンドを適用して,

piyo huga

に変えたいときは,

:%!sed -e 's/hoge/piyo/'

とexコマンドを打てばよい。

もちろん,今回の例では外部コマンドを呼び出さずとも

:%s/hoge/piyo/

で良いわけだが,任意の外部コマンドを使えるわけだから応用範囲はかなり広いと思う。



カテゴリー: Vim, コマンドメモ | コメントする

[GNU Screen] .screenrc に環境依存の設定を書く方法

zshなどのシェルでは設定ファイル内部で条件分岐を記述できるので,.zshrcに

if [ `hostname` = "hoge" ]; then 
  source $HOME/.zshrc_hoge
fi

と書けば,特定のホストhogeだけで.zshrc_hogeが読み込まれる。もうちょっとエレガント?にしたいなら次のようにも書ける。

[ -f $HOME/.zshrc_`hostname` ] &&  source $HOME/.zshrc_`hostname`

こうして様々な環境用の設定ファイルを統一しておくと,gitやらdropboxで設定ファイルを共有するときに非常に楽だ。マシンによってドットファイルの中身がばらばらで,どれが最新版なのかわからない,なんてことを防げるようになる。

非常に便利なので同じようなことをGNU Screenでもやりたいのだが,残念ながら.screenrcでは条件分岐が書けない。そこで,環境変数を使うことにした。
≫ 続きを読む

カテゴリー: コマンドメモ, シェルスクリプト | コメントする

GNU ScreenでSSH接続したいならキーバインドを作るより,シェルのエイリアスを使おう

GNU Screen上で楽にSSH接続を実現する方法として,多段キーバインドを設定する方法が広く使われている。例えば,以下のサイトのように。

開発版GNU Screenで楽々ウィンドウ管理 – Keep It Simple, Stupid

私は複数あるサーバに ssh し易いよう、以下のような感じでランチャ風に多段キーバインドを定義しています。

# alias for remote login
# override default `^V'(digraph) mapping
bind ^V eval 'command -c rlogin' 'echo "select server category: [0]  [1]Web [2] [3] [4] [5]DB [6] [7]Test [8] [9]"'
bind -c rlogin 1 eval 'command -c rlogin1' 'echo "login to: (1 Web)  [1]websvr1 [2]websvr2"'
bind -c rlogin 5 eval 'command -c rlogin5' 'echo "login to: (5 DB)   [1]dbsvr1  [2]dbsvr2"'
bind -c rlogin 7 eval 'command -c rlogin7' 'echo "login to: (7 Test) [1]testweb [5]testdb [6]testdb2"'

# (1 Web/)
bind -c rlogin1 1 eval 'screen -t websvr1 11 ssh websvr1' '@group Web/'
bind -c rlogin1 2 eval 'screen -t websvr2 13 ssh websvr2' '@group Web/'
bind -c rlogin1 3 eval 'screen -t websvr3 16 ssh websvr3' '@group Web/'

# (5 DB/)
bind -c rlogin5 1 eval 'screen -t dbsvr1 51 ssh dbsvr1' '@group DB/'
bind -c rlogin5 2 eval 'screen -t dbsvr2 55 ssh dbsvr2' '@group DB/'

# (7 Test/)
## (7 Test/TestWeb/)
bind -c rlogin7 1 eval 'screen -t testweb 701 ssh testweb' '@group TestWeb/'

## (7 Test/TestDB/)
bind -c rlogin7 5 eval 'screen -t testdb 750 ssh testdb' '@group TestDB/'
bind -c rlogin7 6 eval 'screen -t testdb2 755 ssh oracle@testdb2' 'encoding eucjp' '@group TestDB/'

こうするとssh接続のためのローカルのシェルは不要で,とってもスマートな感じになる。だがしかし,Screenの多段キーバインドを使ってしまうと,例えば上記のWebsvr1に接続するキーは ^a^V11 となり,決して打ちやすくない。いちいちCtrlキーなんて押したくないよ…… そのうえScreenのbindは一文字しか設定できないからとっても困る。

ということで,僕はシェルのエイリアスを使うことにした。 ≫ 続きを読む

カテゴリー: CUIでいこう, コマンドメモ, シェルスクリプト | コメントする

xargsでワイルドカードを使いたいときはシェルを実行しよう

例えば,

$ ls
1.txt 1.dat 1.dat2
2.txt 2.dat 2.dat2
3.txt 3.dat 3.dat2
4.txt 4.dat 4.dat2
5.txt 5.dat 5.dat2
file.txt

$ cat file.txt
1
2
5

というときに,xargs を使ってfile.txtに書いてある数字で,拡張子が.dat*のファイル(つまり,1.dat, 2.dat, 5.dat, 1.dat2, 2.dat2, 5.dat2)に ls -l を適用したいとする。素直に書くと

$ cat file.txt | xargs -I{} ls -l {}.dat*
zsh: no matches found: {}.dat*

とエラーになる。
≫ 続きを読む

カテゴリー: CentOS, Debian, Fedora, コマンドメモ, シェルスクリプト | コメントする

カレントディレクトリはそのままにssh接続する方法

NFSでファイル共有している場合など,ディレクトリ構造が同じサーバーへssh接続するときに現在のカレントディレクトリを保持したままで,ログインしたいことがある。といってもわかりづらいかもしれない。

つまり,普通は

[user@node01 /home/user/hoge/huga] $ ssh node02
[user@node02 /home/user] $ 

といった形で,ssh接続するとhomeディレクトリに移動されるが,

[user@node01 /home/user/hoge/huga] $ ssh node02
[user@node02 /home/user/hoge/huga] $

となってほしいのである。

さてどうするか。
≫ 続きを読む

カテゴリー: CentOS, Debian, Fedora, コマンドメモ | コメントする

cshのシェルスクリプトで「イベントが見つかりません」のエラーがでるとき

cshのシェルスクリプトを作っていて,「イベントが見つかりません」や「Event not found.」とエラーがでるときは,cshのヒストリ置換が失敗している可能性がある。

もし,シェルスクリプト内部に ! が書き込まれているなら,\ でエスケープしてみることをおすすめする。例えば

echo "#!/bin/csh"

はエラーになるが,

echo "#\!/bin/csh"

とすると正常に実行される。

カテゴリー: Linux, コマンドメモ, シェルスクリプト | コメントする

zshの右プロンプトをメモ書きスペースとして活用する

右プロンプトにメモ書きしよう

右プロンプトにメモ書きしよう


複数のシェルを起動して放置しておくと,どのシェルで何をやっていたか,何のために開きっぱなしにしていたか忘れてしまうことがある。特にGnu Screenでリタッチした直後は酷い。

そんなときはメモを残しておこう。幸い,zshなら右プロンプトという便利なスペースがある。
≫ 続きを読む

カテゴリー: CentOS, Debian, Fedora, コマンドメモ | コメントする

LinuxでディスクI/Oを調べ,I/Oの多いプロセスを特定する方法

なぜかLinuxマシンの動作が重いとき,CPUやメモリの使用量に問題があるならtopコマンドで原因のプロセスを確認できる。

では,HDDへのアクセス過多が問題の場合はどうすればよいか。調べてみたのでメモしておく。
≫ 続きを読む

カテゴリー: CentOS, Debian, コマンドメモ | コメントする