タグ

shellに関するHHRのブックマーク (117)

  • 使いやすいシェルスクリプトを書く

    できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})

    HHR
    HHR 2014/05/20
    スクリプトを書く前にまず読みたい
  • 個人的なShellTipsをまとめてみた - UNIX的なアレ

    naoya_itoの火を噴いたシェルtips - Togetter これを読んでふと書きたくなったので。ちなみに僕はbash使っています。 CTRLを使った便利系 まず、UNIXな操作あたり。 キーバインド 意味 CTRL + s キー入力を受け付けなくする 画面出力抑える CTRL + q 上記解除 CTRL + z バックグラウンドに. fgで戻る CTRL + l 画面をクリア。clearと同等 CTRL + c 現在の処理を停止 CTRL + d exitと同等 CTRL + r historyからコマンド検索 emacsっぽいやつ どっちかというとキー操作に近い。基emacs。metaは僕はoptionに割り当ててる。とりあえず触りたい人はESCでOK。 キーバインド 意味 CTRL + a 行頭 CTRL + e 行末 CTRL + f → CTRL + b ← CTRL

    個人的なShellTipsをまとめてみた - UNIX的なアレ
    HHR
    HHR 2014/04/21
    まず読め的な。標準出力からrootでファイルを作りたいときはtee。名前解決にはhostコマンド。バイナリファイルを間違ってcatしたりしてしまってターミナル上の表示がおかしくなった時はreset。
  • naoya_itoの火を噴いたシェルtips - Togetterまとめ

    Naoya Ito @naoya_ito シェルでパスワード入力プロンプトでるじゃないですか。途中まで打って間違えたとするじゃないですか。Ctrl + u 打つとリセットできるの知ってた? 俺は知ってた 2014-04-07 19:40:06

    naoya_itoの火を噴いたシェルtips - Togetterまとめ
    HHR
    HHR 2014/04/21
  • sedコマンドでファイルを上書き編集 – OpenGroove

    標題のテーマ、今までリダイレクト使ってまどろっこしいことしていた。 # sed -e "s/AAA/ZZZ/g" INFILE.txt > OUTFILE.txt # cp OUTFILE.txt INFILE.txt つまり、一度OUTFILE.txtに置換内容を吐き出してから、OUTFILE.txtをオリジナルのINFILE.txtに反映、とするやり方。しかし!-iオプションを使えば断然スマートにできることを今さら知る。 # sed -i -e "s/AAA/ZZZ/g" INFILE.txt これだけで、対象ファイルが上書き編集される。これにはちょっと感動。 以下のようにすればバックアップファイルもとってくれる。-iとダブルクォーテーションの間は詰める。 # sed -i".org" -e "s/AAA/ZZZ/g" INFILE.txt これをどういう時に使いたいかというと、通常の

    HHR
    HHR 2014/04/18
    sed -i".org" -e "s///g"
  • 文字列検索コマンド「grep 2.17」リリース | OSDN Magazine

    GNU Projectのgrep開発チームは2月17日、最新安定版「grep-2.17」をリリースした。パフォーマンスの向上が行われており、「10倍の高速化」が実現されているという。 grepはファイルから特定のパターンを検索するツールで、「global regular expression print」の略。正規表現による検索も可能で、多くのUNIX系システムで使われているほか、Windowsでも動作する。 grep 2.17は1月初めに公開されたバージョン2.16に続く安定版。7週間で8人の開発者より合計19のコミットがあったという。最大の特徴は性能。バッファモードの活用などにより、マルチバイト文字列に対し-iオプションを利用し、\または[が含まれていないパターンを検索する際の速度が10倍高速になったという。-iオプションを利用しない場合は、最大7倍程度の改善が可能だそうだ このほかg

    文字列検索コマンド「grep 2.17」リリース | OSDN Magazine
    HHR
    HHR 2014/02/20
  • ワンライナーでtarバックアップ - harry’s memorandum

    Sourceforge.jp Magazineで連載?中のOne-Linerです。 忘れないように自分が昔から使っているのと新しく覚えたものを備忘録。 http://sourceforge.jp/magazine/09/01/14/0134202 Tarアーカイブとバックアップ 普通のtarとgzip $ tar cvf dir.tar ./dir $ gzip -1 dir.tar GNUtarでtgz $ tar cvzf dir.tgz ./dir GNUtarがない場合をパイプを使って。option '-[1-9]' は 圧縮時間を速くするか圧縮率を上げるか。 $ tar cf - ./dir | gzip -1 > dir.tar.gz もちろんgzipではなく高圧縮のbzip2でもOK. $ tar cf - ./dir | bzip2 -9 > dir.tar.bz2 もちろ

    ワンライナーでtarバックアップ - harry’s memorandum
    HHR
    HHR 2014/02/09
    ddコマンド gzip、ssh、tarでバルクコピー。tarはメタを保持するので便利。(cpでコピーするとシンボリックリンクとかあるとやべーことになるかもしれない
  • OpenSSH のNetcat modeを使う | Webシステム開発/教育ソリューションのタイムインターメディア

    TIM Labsの言い出しっぺなのに、まるで記事を書いていなかったhimuka_kenです。 ネタはヘビーな話題から、夜のおかずまで…あるんですが、なかなか書く時間がありません。 (サボっていると言われたらその通りですが、何か?) さて、メモをしとかないと忘れてしまいそうなのと、割りと社内でも知られていない?ので 記事として残しておきます。 OpenSSH の manを、ある日しげしげと眺めていると、 -W host:port Requests that standard input and output on the client be for- warded to host on port over the secure channel. なんじゃこりゃ?と調べてみると、OpenSSH 5.4から実質netcat の機能を取り込んだ様です。 今までは、踏み台等の特定のホスト経由で多段で

    OpenSSH のNetcat modeを使う | Webシステム開発/教育ソリューションのタイムインターメディア
    HHR
    HHR 2014/02/09
    ssh,netcat,nc,ProxyCommand
  • いい加減、>/dev/null 2>&1と書くのをやめたらどうか (追記あり) · DQNEO日記

    はじめに これから書く内容は、シェルスクリプトをばりばり書いている現場(サーバエンジニアインフラエンジニア)向けのものではありません。 年に数回crontabをいじるような現場(サーバに詳しくないアプリケーションプログラマが多数を占めるような現場とか、Webデザイナや非プログラマがcrontabをおそるおそるいじったりするような現場)を想定しています。 >/dev/null 2>&1 の問題点 この記法の問題点は、「覚えにくい、間違えやすい、間違ってても気づかない」ということです。 初心者を迷わせる要素がこんなにあります。 >/dev/nullは先か後か 1と2はどちらが先か &はどこに書くのか よって下記のように多種多様なミスが起こり得ます。 2>&1 >/dev/null >/dev/null 1>&2 >/dev/null 2>1& >/dev/null &2>1 これをぱっと見て

    いい加減、>/dev/null 2>&1と書くのをやめたらどうか (追記あり) · DQNEO日記
    HHR
    HHR 2014/02/08
  • rsyncで再開可能なファイル転送 - karasuyamatenguの日記

    結論: rsnc --partial --appendで再開可能なファイル転送ができる 転送中に障害が発生 takao$ rsync -av --progress --partial --append bigfile 192.168.1.181:/var/tmp/ bigfile 562823168 52% 43.22MB/s 0:00:11 ^C rsync error: unexplained error (code 130) at rsync.c(541) [sender=3.0.7] 約六割が転送済み takao$ ls -l bigfile /var/tmp/bigfile -r-xrwsr-x 1 www-data www-data 1073709056 2011-11-24 23:48 bigfile -rw------- 1 tengu tengu 605552640 20

    rsyncで再開可能なファイル転送 - karasuyamatenguの日記
    HHR
    HHR 2014/02/08
    rsync --partial --appendは -P にaliasが貼ってある
  • コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ

    不慣れな環境を不意にいじった時にあるあるネタ。 とりあえずー とか言って勢いで書いたsetupスクリプトを実行してみたら意外と時間かかって、 ちょっと目を離した隙にsshの接続が切れちゃいました! 。。。ありますよね。ほんとよくありますよね。 そうなる予感はあったんだ なんて後の祭りです。ふとした油断から、screenもnohupすらも使わずにやってしまって、こんなことに。 shellがHUPしなかったからプロセスは生きてるものの、ログが見れないから進行状況がわからない。 うまく行ってるのかどうかモヤモヤした気持ちのまま、プロセスが終わるのをじっと待つ。。。 まぁ実に切ないです。 こんな時、いつも思うこと。 このプロセスの出力、もっかいstdoutに繋げられたらいいのに。。。 はい。というわけでつなげましょう。 長い前座ですみません。 切り離したプロセスを用意 #!/bin/bash wh

    コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ
    HHR
    HHR 2014/02/06
    gdb
  • layer8.sh

    This domain may be for sale!

    HHR
    HHR 2014/01/27
  • find/xargsを使った検索に便利なコマンド一覧

    業務で楽するためのUNIXテクニック集「検索」編 この記事は2008年~2009年頃に翔泳社で連載していた「業務で楽するためのUNIXテクニック集」の原です。 はじめに この連載では、UNIX系OSをコマンドライン上から効率よく利用するために知っておくべきテクニックや、便利な小技を紹介していきます。 今回は「ファイル・ファイル内容の検索」に関するテクニックを紹介します。 関連記事 シェル制御構造と正規表現の基礎 grepを使った便利なコマンド一覧 find/xargsを使った検索に便利なコマンド一覧 find/xargsを使ったファイル・ディレクトリ名の一括置換/一括作成コマンド一覧 cut、paste、sort、uniq、head、tail、wcを使ったフィルタコマンド一覧 findコマンドを利用した便利なUNIXテクニック例 findコマンドを利用したいくつかの例を紹介しておきます。

    find/xargsを使った検索に便利なコマンド一覧
    HHR
    HHR 2013/09/29
    Permission deniedは2> /dev/nullで非表示にする。空白や特殊文字を含むファイルを正しく処理するため、findコマンドには必ず「-print0」オプションを付け「xargs -0」で受け取る
  • うっかりnohup無しで長時間かかるコマンドを実行したときに後から終了しないようにする - Glide Note

    いつまで経っても終わらないから帰れない… 途中で終了してしまうと困るので、ログアウトしても終了しないように。 作業の流れ Ctrl+Zでコマンドの中断 bgでバックグラウンドに回す jobsでジョブの確認 disownでログアウトしても実行されるようにする 実際のコマンドだと

    HHR
    HHR 2013/09/27
    nohub,disown
  • 私が他人のシェルスクリプトから学んだこと | Yakst

    私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、SSHサーバの2要素認証を簡単にするためのauthy-sshスクリプトに出会った。このスクリプト群を見まわしていて、みんなと共有したいたくさんのクールなことを見つけた。 出力に色付けする 出力文字列を、成功した時は緑に、失敗した時は赤に、警告は黄色に色づけしたいと思うことはたくさんあるだろう。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { e

    私が他人のシェルスクリプトから学んだこと | Yakst
    HHR
    HHR 2013/08/21
    debug関数
  • /bin/sh と /bin/bash の違い - 双六工場日誌

    みなさん、shebang書いてますか! Shebangというのは、スクリプトの最初の一行目に書く、「#!/bin/sh」とか「#!/usr/bin/perl」とかそういうあれです。詳しくはWikipediaさん(シバン (Unix))に聞いてくださいまし。 Twitter見てると、「そもそもこれにshebangなんて名前がついてるの知らなかったよ」という発言も見る不憫な子ではあるのですが、そこに何が書いてあるかで実は動作が違うよってのが今日の題です。それで、はまっていたのを最近見て、まああまりここで引っかかる人はいないと思いつつ、この点を書いた情報を見ないのでまとめてみました。*1 今日取り上げるのは、bashがデフォルト設定になっているLinuxでの「#!/bin/sh」と「#!/bin/bash」のお話。確認はCentOS5, 6で行なっています。 さて、上記の環境の場合、「/bin

    /bin/sh と /bin/bash の違い - 双六工場日誌
    HHR
    HHR 2013/08/20
  • bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌

    @hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/

    bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌
    HHR
    HHR 2013/08/15
    bashのプロセス置換
  • diffで改行コードを無視 - 仙台の山奥で自転車に乗ったり転んだり

    忘れないようにメモ CRLFとLFの差分を無視したい diff --strip-trailing-cr linux.txt windows.txt ディレクトリの差分でも diff -qr --strip-trailing-cr linux windows manで調べてないのでダメかと思ったら、infoであった info diff

    diffで改行コードを無視 - 仙台の山奥で自転車に乗ったり転んだり
    HHR
    HHR 2013/08/12
  • シェルスクリプト マルチスレッドっぽくバックグラウンド処理を同期させる « yukku++

    コマンドの最後に & を付けて、バックグラウンド処理へまわす $! で直前のバックグラウンド処理の pid を取得して変数へ保持 wait $hoe で指定した pid の処理の終了を待つ バックグラウンド処理はおなじみ hoe & で出来る。 この pid を取るには、直後で $! にアクセスすることで参照できる。 wait コマンドは、指定した pid のプロセスが終了するまで待ってくれる。 サンプル #!/bin/sh echo "[info] run multiple background proc." echo "[info] -----------------------------" _dummy_proc(){ sleep $1 ret=`expr $1 % 2` exit $ret } _dummy_proc 2 & pid1=$! _dummy_proc 3 & pid

    HHR
    HHR 2013/07/10
  • シェルスクリプトのデバッグは typeset または declare を使うと良いかも - よんちゅBlog

    はじめに つい最近知った便利なデバッグ方法 (長年シェルスクリプトを書いているのに知らなかった。これが常識だったら恥ずかしい…) シェルスクリプトのデバッグでは echo で変数の中身を見るという原始的な方法をよく使うかと思います。 いわゆる プリントデバッグ というやつですね。 もう少し詳しいデバッグが必要な場合は、 set -x と set +x でデバッグしたい部分を囲むという方法もあります。 今回は プリントデバッグ で使う echo の代わりに typeset or declare を使うと良いというお話です。 プリントデバッグは typeset or declare を使おう typeset or declare は変数宣言などでよく使うコマンドですが、変数の中身を見るのにも使えます。 echo と比べて何が良いのかというと、変数の中身はもちろん変数名や変数の型も表示してくれ、

    シェルスクリプトのデバッグは typeset または declare を使うと良いかも - よんちゅBlog
    HHR
    HHR 2013/07/10
    tips プリントデバッグ
  • digコマンド

    DNSサーバーにドメイン情報を問い合わせて表示する。同様にDNSサーバーにドメイン情報を問い合わせるnslookupコマンドはDNSサーバーからの応答を一部加工した形式で表示するのに対して,digコマンドではDNSサーバーからの応答を基的に加工せずに表示する。対話モードとバッチ・モードの二つのモードがあり,対話モードではコマンドで一つの問い合わせを,バッチ・モードでは一回の実行で複数の問い合わせを行う。

    digコマンド
    HHR
    HHR 2013/06/12
    dns,dig