Linux





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

jsonファイルをターミナル上で(コマンドで)操作するには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-daemon
ibus-setup

以上。
ibus-setupを動かすと設定画面が表示されるのでそこでごにょごにょしてください。

追記: 3/27: ibus-setupのコマンドを入れるとibus-daemonの起動を聞いてくる



2014/03/11

nohup:処理続行

  • nohup ターミナル画面を閉じても処理続行させるコマンド
    • 例: nohup python crawl.py

2013/4/10

script: ログコマンド

    ターミナル上のログを取るコマンド
script ファイル名
    終了はexit もしくは C-d

tmux2clipboard: tmuxからクリップボードへ

   tmux/クリップボード間でのコピペ等 (ref: http://unix.stackexchange.com/questions/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard )
# 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"


2013/3/4

nkf: 文字コード変換

     ファイルの文字コードを変える方法として色々あるけど、(自分は今までemacsで読み込んでctrl-x ret f ret utf-8 ret などとやっていた)
    linuxコマンドで一発変換なんてあったんですね。   
nkf -w TEXT > TEXT.utf8
    上記コマンドでTEXTファイルをutf8に変換したのがTEXT.utf8になる。
    オプションでeucなど他の文字コードにも対応している。

2013/2/4

tmux-session

    先日紹介したtmuxですが、システム(パソコン)を再起動するとセッションが消えるみたいです。
    ↑の人はシェルスクリプトをつかって解決させたり、サードパーティによるアプリでの解決を上げている。

2013/2/3

pm-suspend

  • pm-suspend
    • サスペンド状態に移行
    • pm = PowerManagementの略かな?
      • pm- タブ で他の状態移行候補がでてくる

2013/1/15
  • >> で追加書き出しができる、echo "eeee" >> test
  • ctrl-r で過去歴検索できる。 

2013/1/12
tmux:端末多重接続ソフトウェア
今までsshごとにターミナルにタブを作り使い分けていたがタブのスイッチングなどがマウスなどを使わなくちゃいけない煩わしさから開放してくれるアプリ
【tmux の使い方】
  • 起動:
$ tmux
でtmuxが起動する。
起動するごとにそのセッションを記憶してくれる。
そのセッションに名前をつけることで次回利用からそのセッションの続きからといったことができる。
$ tmux new -s セッションの名前
で、新規にセッションが開始できる。
$ tmux att -t セッション名
これで、既存するセッションに接続できる。
$ tmux list-session
これで、既存するセッションのリストを確認することができる。
(参考サイトではlist-sessionsと複数形で記述されていたがlist-sessionでも使えたのでこれでもOKみたい)
  • 内部:
$ tmux new -s test
で、セッション名:testとして起動すると
・左下に[test]となってセッション名が表示されていること
・その隣に、0: bash*
と表記されていることに注目。

tmux内でtmuxのコマンドを打つときにプレフィックスを打つ必要がある。
デフォ設定だと: Ctrl + b
となっている。以降C-bと表記。
先述の下に セッション名の横に0: bash*と表記されているとあったが
これは ウィンドウの番号:枠の名前 となっている。*で今表示させているウィンドウを表している。
    • ウィンドウ操作:
      • ウィンドウ追加:
        • C-b + c
      • ウィンドウ切り替え:
        • C-b + 枠番号
      • ウィンドウ名変更:
        • 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の勉強中、作成ファイル実行に
$python 007.py 7
などと行なっていた。
しかし、Userにファイル(007.py)の実行権を与えれば
$./007.py 7
で、実行可能なのだが毎度
$chmod 744 007.py
するのも面倒。
ファイル生成時に実行権付与してくれるような便利な設定はないのか探したらファイル新規作成時のパーミッションを変更するにはというページを発見。
$umask 066
などで権限剥奪できるらしい。
しかし、webzoitさんによると「umaskで実行権限を付与することができないことになっている」とあった。
ちゃんちゃん
Comments