日々精進

新しく学んだことを書き留めていきます

linux

tail -f の出力をjqで加工する

普通にtail -f | jq '.'のようにjqに渡してもうまくいかなかった。 tailからの出力を1行ずつシェルで切ってjqに渡してやらないといけない。 以下のようにwhile read line...コマンドを使うと1行ずつ渡せる。 tail -f app.log | sed -r "s/\x1B\[([0-9]{1,2}(…

xargsの-Pオプションでマルチプロセス実行

以下のように、xargsに-Pオプションを付けると並列実行できる。 find . -name "*.mpg" -type f -print0 | xargs -0 -I {} -n 1 -P 4 ffmpeg -i {} {}.mp4動画や画像処理などはこれ使うとよさそう。 参考:findとxargsの基本的な使い方 -- ぺけみさお

findコマンドを実行すると「zsh: argument list too long: find」

以下のようなコマンドを実行すると、「zsh: argument list too long: find」と怒られる。 find . -name *.jpgワイルドカードを使う場合はエスケープしないといけない。 find . -name \*.jpg もしくは find . -name "*.jpg"これよく忘れるなぁ。。

sshdの設定を安全に変更する方法

sshdの設定を変更する場合、設定が間違っているとSSHでログイン出来なくなるので危険。 設定を変更した後は以下のコマンドを実行すると、設定が間違っている場合は[FAILED]になる。 service sshd restart 参考:http://open-groove.net/linux/sshd-restart/

postfixの設定画面を再表示する

postfixをGitlabで使うためにインストールしたんだけど、 一度目のインストール時は設定画面をNo Configurationを選択して閉じてしまった。 後から設定し直したい場合は以下を実行するともう一度設定画面を表示できる。 sudo dpkg-reconfigure postfix設定画…

findコマンドを実行した時に邪魔なPermission deniedを表示しないようにする

findを実行すると、以下のようなエラーメッセージが大量にでて邪魔な場合がある。 find: ./private/var/tmp/symantec_error_reportzTax5M: Permission denied以下のようにすると標準エラー出力のみ捨てられるので便利。 ( find . -name query > /dev/tty ) >…

シェルスクリプトでファイルパスの/をエスケープする方法

以下のようにsedで置換するとエスケープできる。 sedは区切り文字として/以外も使えるんだね。 なんなんだこの\の多さは。。 echo $escape_slash | sed s,/,\\\\\\\\\\/,g参考:Sed - How to escape variable number of "/" (slash) ? | Unix Linux Forums |…

通常のgrepの逆である文字列を含まない行を探す

chefでssh-agentプロセスがあったらssh-agentの起動スクリプトをスキップする時に使った。 grepに-vオプションを付けると、ある文字列を含む行を除外できる。 execute "launch ssh-agent" do user "root" action :run command <<-EOC eval `ssh-agent` ./ssh…

使用中のshellを調べる方法

・echo $SHELLを実行する これはシェルを変更しても反映されなかったので不採用。 再起動時しか更新されないのかな? echo $SHELL #=>/bin/bash sudo chsh ec2-user #=>zshに変更 echo $SHELL #=>/bin/bash zshにならない ・sudo su - root -c "cat /etc/pas…

NIC周りのトラブル調査手順

・ifconfig -aで接続されているインターフェースを確認する。eth3はデバイスが存在するけど、 設定されていないということがわかる。 ・以下を実行してインターフェース設定を書いてある設定ファイルを探す cd /etc find . -type f | xargs grep eth0 ・/etc…

特定のフォルダとそのサブフォルダにあるZIPファイルをまとめて解凍する方法

以下のコマンドでできる。 find . -name '*.zip' -exec sh -c 'unzip -d `dirname {}` {}' ';'linuxのコマンドもっと覚えたいなぁ。 参考:shell - Find all zips, and unzip in place - Unix - Stack Overflow

シェルのキーバインド一覧を表示する・切り替える

bindkeyを実行すると、キーバインド一覧が表示される。 キーバインドを以下で変更出来る。 bindkey -e #emacs mode bindkey -v #vim mode自分の環境ではCtl+Aで行頭にカーソル移動できないなーと思っていたら、Vimモードになっていたからでした。 Emacsモー…

前に打ったコマンドをもう一度実行する方法-2

2014-01-08 - 日々精進の続き。 Ctrl+Rでbck-i-searchを使ってコマンドの再実行ができる。 直近のヒットしたコマンドから過去にさかのぼって行きたい場合は、Ctrl+Rを押すと遡れる。 bck-i-searchホント便利だなぁ。 参考:ターミナルからhistory を さかの…

前に打ったコマンドをもう一度実行する方法

前に打ったコマンドをもう一度実行したいことがよくあるので、なるべく省力化したい。 まず.bash_profileに以下を追加して履歴の検索をやりやすくする。 alias hg='history | grep'履歴から再実行するコマンドが見つかったら、履歴番号の頭に!を付けると再実…

ファイルパスの空白をエスケープする

sedで置換すればいい。でもエスケープしてもシェルスクリプトの実行結果がおかしくなることがあるのでなるべく空白は使わない方がいい。 FILE_PATH=$( echo "$FILE_PATH" | sed 's/ /\\ /g' )参考:linux - Unix command to escape spaces - Stack Overflow

iptablesの設定を再起動しても維持する

サーバを再起動するとiptablesの設定が消えるので、 以下をやる必要がある。 iptablesの設定をファイルに保存する。 sudo rm /etc/sysconfig/iptables sudo iptables-save > /etc/sysconfig/iptables起動スクリプトに以下を追加。 sudo iptables-restore < /…

1分以下の間隔でCronを実行する方法

1分おきに実行されるスクリプトを二つ書き、一つは30秒sleepさせる。 * * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )参考:ubuntu - Running a cron every 30 seconds - Stack Overflow

logmonでエラーログ監視

複数のログファイルを簡単に監視できそうなのでlogmonを使って監視することにした。 logmonの使い方は下記記事を見ればわかる。 参考:Amazon EC2でリアルタイムにログ監視をする – logmon – | Developers.IO 以下は上記記事の補足。 インストールは上記記…

lsコマンドのオプション

lsの結果を更新日時の新しい順に並べる。 ls -ltさらにRを付けるとすべてのサブフォルダについてlsした結果が表示される。 ls -ltRlinuxのコマンド便利なのいっぱいあるんだろうなぁ。 Linuxの勉強したくなってきた。

ubuntuでntpdateを実行したり、ntpdを動かしても時刻を同期できない

以下のようなエラーが出る。 sudo ntpdate -d timeserver 12 Dec 15:58:00 ntpdate[30741]: ntpdate 4.2.6p3@1.2290-o Tue Jun 5 20:12:09 UTC 2012 (1) Looking for host timeserver and service ntp Exiting, name server cannot be used: Temporary failu…

proxy経由でapt-getする設定

/etc/apt/apt.conf.d/に80proxyというファイルを作成すればいいらしい。 環境変数見てくれないのかー。 詳細は↓ Ubuntu-Proxy設定 - PukiWiki

ubuntuでtimezoneを変更しようとすると、「locale cannot set lc_ctype to default locale no such file or directory ubuntu」エラー

エラーメッセージからは原因がわかりにくかった。。原因はsudoをつけてなかったこと。 下記のようにsudo をつけたらエラー起きなかった。 sudo dpkg-reconfigure tzdata

起動時にスクリプトを実行させる方法

・/etc/init.d/ の下に実行させたいスクリプトを配置する ・/etc/rc.d/ の下にスクリプトへのシンボリックリンクを置く シンボリックリンクの先頭の文字はSにすること。 起動時にsudo loadkeys jpを実行させると 日本語キーボードが快適に使えていいですね。

指定ファイル名のファイルを全部削除する

以下のコマンドで出来る。 find . -name "*hoge" -exec rm {} \;これなかなか覚えられないなぁ。

コマンドのPathを調べる方法

coffeeなどのコマンドの実行ファイルが実際どこにあるかを調べるにはwhereを使う。 where coffee

cronからコマンドを実行するとcommand not foundになる

原因はcronから実行する場合とシェルから実行する場合では環境変数が違うから。 実行するシェルスクリプトに.bashrcなどを読み込むコマンドを追加しないといけない。 参考:役立つかもしれないメモ cronからshellの呼び出し