sort
sortの高速化にLC_ALL=Cをつけるのは有名ですがsortのオプションをつかっても高速化ができるみたいです。
10,000,000(1千万 ) 行のファイルをnumeric-sortしてみました。
$ wc -l 2gm-0000
10000000 2gm-0000
$ time /bin/sort -nrk 3 2gm-0000 > /dev/null
/bin/sort -nrk 3 2gm-0000 > /dev/null 117.28s user 0.36s system 413% cpu 28.477 total
$ time LC_ALL=C /bin/sort -nrk 3 2gm-0000 > /dev/null
LC_ALL=C /bin/sort -nrk 3 2gm-0000 > /dev/null 15.12s user 0.36s system 388% cpu 3.985 total
$ time LC_ALL=C /bin/sort -nrk 3 -S 10G 2gm-0000 > /dev/null
LC_ALL=C /bin/sort -nrk 3 -S 10G 2gm-0000 > /dev/null 14.75s user 0.38s system 372% cpu 4.066 total
$ time LC_ALL=C /bin/sort -nrk 3 -S 10G --parallel 6 2gm-0000
LC_ALL=C /bin/sort -nrk 3 -S 10G --parallel 6 2gm-0000 > /dev/null 12.82s user 0.34s system 269% cpu 4.892 total
$ time LC_ALL=C /bin/sort -nrk 3 -S 10G --parallel 6 --batch-size 1021 2gm-0000 > /dev/null
LC_ALL=C /bin/sort -nrk 3 -S 10G --parallel 6 --batch-size 1021 2gm-0000 > 12.88s user 0.36s system 277% cpu 4.769 total
LC_ALL程の効果はないですが2秒程速まりました。
論文PDF改名
論文ファイルをネットから落としてきてもファイル名がサイト特有の名前になっており、
後に見直そうとしてもファイル名からどのファイルだったか見つけることができないので、
ファイル名を一度に論文のタイトルに書き換えるスクリプトを書いてみました。
以下がそれです。
仕様としてタイトルのスペースをアンダーバーに書き換えるようにしています。
あと、1行目にタイトルが来てることを前提に書いてます。
#!/bin/bash
for pdf_file in ./*pdf
do
title_tmp=`pdftotext $pdf_file - 2> /dev/null| head -1`
title=`echo $title_tmp | sed 's/ /_/g' 2> /dev/null`
mv $pdf_file ${title}.pdf
done
pdfの中身を全部テキスト化してくれるpdftotextというコマンドを利用するのですが、
latex環境などが整っていたら入っているコマンド(多分
最初の7,8文字だけに制限したほうがファイル名がスッキリしてよかったかも
追記(2014/09/10):
上記のままでは日本語非対応である。
2014/08/25
ssh-keygen
文字通り他コンピュータにアクセするときのための秘密鍵、公開鍵の生成するためのコマンドである。
作り方などについてではなく、トラブるしゅーてぃんぐの話。
ssh接続するとき以下のエラーが表示されることがあった。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
これは今まで扱っていたホスト・キーと保持しているキーが異なることによって起こるものらしい。
OSなどのインストールなどで
~/.ssh/known_hostsの中から対象のサーバに対する行を削除すればいいのだが、ファイルが大きすぎたりする場合検索かけたりするのも大変である。
そこで以下のコマンド
ssh-keygen -f "/home/user/.ssh/known_hosts" -R www.site.org
-f でknown_hostsのファイル指定、-Rで対象サーバ名で消せる
2014/07/09
ulimit
リソースを制限するコマンド
しかし、ulimitで入力した設定も再起動後にはリセットされる
ので、/etc/security/limits.confに設定を記述すると、再起動後も有効となる
これでリソースの奪い合いも解消・・・かな?
2014/07/07
paste
2つ以上のファイルを同時に表示するには今までは head などで 最初のなん行かを表示していた
もしくは lessコマンドで交互にファイルを開けては閉じてと・・・
pasteコマンドを使うと1行ずつ各ファイルから読みとり出力してくれる
paste ファイル名1 ファイル名2 ファイル名3 ....
各ファイルから1行ずつ横に並べて表示してくれる
dオプションでデリミタ設定ができるので
-d "\n"を追加することで 各ファイルから1行ずつ縦に表示してくれる
paste -d "\n" ファイル名1
ファイル名2 ファイル名3 ....
2014/06/20
jq
at
予約タスクではcronがあるけど、1回だけのタスクにはatコマンドを使う
2014/04/05
wget
wgetでurl先のファイルを取得できる
オプションは色々と揃っておりクローリングなどに使える
-r で再帰的に取得を行ってくれる/ 取得したファイル内にリンクがあればそれをたどってくれる
-c レジュメ機能 前回やりかけでキャンセル/強制終了してしまった物を途中から再開取得してくれる
2014/03/27
マウント
ファイル・マウントの方法として/etc/fstabにファイル・ポインタを記述して起動時に自動マウントさせる方法と
automountという/etc/auto.masterに記述させる方法もある。
fstabの方は記述されているファイルを起動時に全てマウントしてくる。
一方、automountの方はアクセスするときに取得しに行く
よって、ファイルサーバの負荷分散という意味ではautomountのほうがいいのではと思うが
どうもそうでもないらしい
参考サイトのリンクが見つからない・・・見つかったら貼ります
追記:
sshfsが使える!
2014/03/12
ibus-mozc:日本語入力
Linuxでの日本語環境は充実してきており、デフォルト環境では容易に日本語入力ができる。
しかし、ウィンドウマネージャ(GNOME, KDE, WindowMaker, xmonadなど)を変えた瞬間に使えないようになってしまう。
パッケージマネージャなどで
apt-get(もしくはyum) install ibus-mozc
をインストール
以上。
ibus-setupを動かすと設定画面が表示されるのでそこでごにょごにょしてください。
追記: 3/27: ibus-setupのコマンドを入れるとibus-daemonの起動を聞いてくる
- nohup ターミナル画面を閉じても処理続行させるコマンド
ターミナル上のログを取るコマンド
tmux2clipboard: tmuxからクリップボードへ
# move x clipboard into tmux paste buffer
unbind C-v
bind C-v run "tmux set-buffer \"$(xclip -o -selection clipboard)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
unbind C-c
bind C-c run "tmux save-buffer - | xclip -i -selection clipboard"
ファイルの文字コードを変える方法として色々あるけど、(自分は今までemacsで読み込んでctrl-x ret f ret utf-8 ret などとやっていた)
linuxコマンドで一発変換なんてあったんですね。
nkf -w TEXT > TEXT.utf8
上記コマンドでTEXTファイルをutf8に変換したのがTEXT.utf8になる。
オプションでeucなど他の文字コードにも対応している。
先日紹介したtmuxですが、システム(パソコン)を再起動するとセッションが消えるみたいです。
↑の人はシェルスクリプトをつかって解決させたり、サードパーティによるアプリでの解決を上げている。
- pm-suspend
- サスペンド状態に移行
- pm = PowerManagementの略かな?
2013/1/15
- >> で追加書き出しができる、echo "eeee" >> test
- ctrl-r で過去歴検索できる。
2013/1/12tmux:端末多重接続ソフトウェア
今までsshごとにターミナルにタブを作り使い分けていたがタブのスイッチングなどがマウスなどを使わなくちゃいけない煩わしさから開放してくれるアプリ
【tmux の使い方】
でtmuxが起動する。
起動するごとにそのセッションを記憶してくれる。
そのセッションに名前をつけることで次回利用からそのセッションの続きからといったことができる。
で、新規にセッションが開始できる。
これで、既存するセッションに接続できる。
これで、既存するセッションのリストを確認することができる。
(参考サイトではlist-sessionsと複数形で記述されていたがlist-sessionでも使えたのでこれでもOKみたい)
$ tmux new -s test
で、セッション名:testとして起動すると
・左下に[test]となってセッション名が表示されていること
・その隣に、0: bash*
と表記されていることに注目。
tmux内でtmuxのコマンドを打つときにプレフィックスを打つ必要がある。
デフォ設定だと: Ctrl + b
となっている。以降C-bと表記。
先述の下に セッション名の横に0: bash*と表記されているとあったが
これは ウィンドウの番号:枠の名前 となっている。*で今表示させているウィンドウを表している。
- ウィンドウ操作:
- ウィンドウ追加:
- ウィンドウ切り替え:
- ウィンドウ名変更:
- C-b + , :変更後に下部のリスト上の名前も変更されていることで確認が取れる。
- ウィンドウ終了:
- C-b + b : もしくはそのウィンドウ上のターミナル上でexitと押しても終了することができる。
これ以外にもウィンドウ内部を分割できるpane機能がついてたりとあるが、割愛&各自で調べてください。
起動の項目でも述べたようにtmux終了させてもセッションに再接続できる。そのように終了させるには:
C-b + d
もしくはセッション内全ウィンドウを終了させれば(C-b + b もしくは "exit" on terminal)でセッション自体を終わらせることもできる。
ref: http://arcoleo.org/dsawiki/Wiki.jsp?page=Tmux%20Reference
2013/1/11
フォルダ(ディレクトリ)内に含まれている各ファイルのサイズを表示してくれるコマンド:du
$ du /home/matsumoto/.emacs.d
80
/home/matsumoto/.emacs.d/elpa/twitter-20090422
48
/home/matsumoto/.emacs.d/elpa/gist-0.5
36
/home/matsumoto/.emacs.d/elpa/highlight-parentheses-1.0.1
28
/home/matsumoto/.emacs.d/elpa/highlight-80+-1.0
56
/home/matsumoto/.emacs.d/elpa/json-1.2
348
/home/matsumoto/.emacs.d/elpa/magit-0.8.1
36
/home/matsumoto/.emacs.d/elpa/facebook-0.0.1
44
/home/matsumoto/.emacs.d/elpa/highlight-symbol-1.1
772
/home/matsumoto/.emacs.d/elpa
684
/home/matsumoto/.emacs.d/auto-install
24
/home/matsumoto/.emacs.d/auto-save-list
1516
/home/matsumoto/.emacs.d
これにパイプを通して正規表現フィルタをかけると
$ du /home/matsumoto/.emacs.d | egrep '^[0-9]{3,}.*'
348
/home/matsumoto/.emacs.d/elpa/magit-0.8.1
772
/home/matsumoto/.emacs.d/elpa
684
/home/matsumoto/.emacs.d/auto-install
1516
/home/matsumoto/.emacs.d
と、ある特定ファイルサイズ以上のだけが表示される。
もちろん、ファイル数が多ければ表示に時間がかかる。
参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230748/
2013/1/10
ある文字列ファイルの中身の特定文字列に変更を加えたい時に使えるコマンド:sed
$ sed -e "s/Linux/リナックス/g" source.txt
これでLinuxの文字列がリナックスに変わる。
展開、インストールなどの時に実行中のメッセージが画面に現れる。あれをlogファイルに出力させたい。
そんな時は>コマンドをケツにくっつけてファイル名をその後にくっつければ済む。しかし、それだと画面のメッセージが出力されない。logに保存しつつ、かつ画面にも表示させたい、そんな時に活躍してくれるのが:tee
$ ./configure | tee configure_execute.log
などで./configure時の出力が画面、configure_execute.log両方に出力される。
2012/12/11
Linuxでファイル内の文字列検索にはgrepがあるがディレクトリ内の全ファイルに検索をかけたい時は
$ find ./ | xargs grep "文字列"
が使えるらしい、xargsコマンドは初めて聞くコマンドだ。
コマンドに引数を渡すときに使えるコマンドらしい。
参考:
2012/11/27
pythonの勉強中、作成ファイル実行に
などと行なっていた。
しかし、Userにファイル(007.py)の実行権を与えれば
で、実行可能なのだが毎度
するのも面倒。
などで権限剥奪できるらしい。
しかし、webzoitさんによると「umaskで実行権限を付与することができないことになっている」とあった。
ちゃんちゃん