タグ

unixに関するzetamattaのブックマーク (97)

  • install(1)コマンドが便利だった件

    はじめに install(1)という、cpとmkdirとchmodを同時に行うような便利コマンドがあることを知りました。 (忘れちゃいましたが、何かのMakefileを見ているときに存在に気付きました) これを使うと、プロビジョニングなどのスクリプトが簡潔に書けるようになりそうです。 ……というわけで使い方のメモがてらまとめてみます。 manの内容まとめ installはBSD版とGNU版があるようですが、ここではGNU版について書きます。 BSD版ではいくつかのオプションが使用できません。(-D はなかったと思う) ちなみにmacの場合は標準でBSD版のinstallが入っており、Coreutilsを入れるとGNU版のinstallが使えるようになります。 4種類の使い方 install [OPTION]... [-T] SOURCE DEST SOURCEをDESTにコピーする。-Tを

  • bashの組込みコマンド自作によるスクリプトの高速化 - Qiita

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - Qiita
    zetamatta
    zetamatta 2017/01/18
    へー。共有ライブラリを使うのか
  • ポータブルなシェルスクリプトを書く - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、19日目の記事です。 うおー、あと 30分で書かないといけねー! 雑な内容ですみません。 今日はポータブルなシェルスクリプトの書き方ついてざっくり語ります。 UNIX 系 OS であれば大抵の OS / バージョンでも動くシェルスクリプト!! (ただし外部コマンドの非互換性の問題は除く) #!/bin/sh で書く POSIX sh でスクリプトを書けば完璧! shebang は #!/bin/sh!! …全然完璧ではありません。Solaris 10 のように /bin/sh が POSIX sh でない残念な OS がまだ生き残っています。 マニュアルにも載っているバグが仕様になったのではないかと思われる謎挙動や未知のバグを回避するのが大変です。 ポータブルにするには #!/bin/sh はまだ推奨できません。

  • fork()は失敗するんだぜ、覚えときな

    fork() can fail: this is important あー、fork()のことね。プロセスがもっとプロセス作るためのやつな。いや、他にもプロセス作る方法はあるけどな。ま、面白い話がもうひとつあるから聞かせてやるよ。 forkは失敗するんだぜ。分かってるか? マジで分かってるか? マジだぜ。forkは失敗するもんだ。mallocと同じさ。失敗することもある。そんなに頻繁にってわけじゃないけどさ、でも失敗したら、無視できっこないぜ。ちっとは脳みそ働かせなきゃならん。 forkが0を返したら、そいつは子プロセスで、親なら正数を返すってことは、みんな知ってるよな。その値は子のpidだ。こいつを保存しといて、あとで使うってわけだ。 失敗を確認しない場合どうなるか知ってるか? そうだよ。お前多分、"-1"(forkのエラー通知)をpidとして扱ってるんだろ。 さて、問題の始まりだ。

    zetamatta
    zetamatta 2014/08/21
    失敗した時、世界が崩壊する。
  • bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌

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

    bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌
  • Just another Ruby porter, 2014-2-c

    ■ cygwin: ~/.ssh/configでControlPathを指定するとエラー cygwinでもsshで多重接続してみたらなぜかエラーになるので調べたら、 なんかいろいろと未実装ということらしい。 Corinna Vinschen - Re: Can not make port forwarding from Cygwin when ControlMaster/ControlP 残念。 ■ AmazonのURLを単純に 今までは javascript:location.href='http://www.amazon.co.jp/dp/'+document.getElementById("ASIN").value; というbookmarkletを使っていたが、どうも最近これだと変換されないときがあって調べてみると、 確かにid="ASIN"がない場合があった。ないときはname="

    zetamatta
    zetamatta 2014/03/15
    GNU grep はそろそろ爆発していいんじゃないかな!
  • Just another Ruby porter, 2014-3-a

    ■ コード美人 これって anarchy golf - A005836なんだよねえ。 zshの解は これをちょっと変更して % repeat 100 a=$[[#2]++i]&&echo $[${a/2/3}] となる。変数を使わないなら % repeat 100 echo $[${${:-$[[#2]++i]}/2/3}] と書けるが、奇しくもサイズは同じだ。 ■ bashの1文字オプションと長いオプション まあ、bashなんてオプションつけて手で動かすことはほとんどないと思うが、 なぜか必要に迫られたりする。 sshでログイン先もzshなんだけど、ちょっとbashを使いたいななんてときに % ssh host bash とするとbashはインタラクティブだと思ってくれないのでプロンプトが出ない。 そこで-iをつけて実行してみると % ssh host bash -i bash: 端末プ

    zetamatta
    zetamatta 2014/03/15
    ほほう>「date +'%Y-%m-%d' -d "-1day month `date +'%Y%m01'`"」
  • test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、15日目の記事です。 書くのが遅れ、ネタは尽きかけ、 マニアックさやニッチさが足りなくなってきているような気がします。 ふつうの内容ですみません。 今日は test, [, [[ コマンドの違いについてざっくり紹介します。 [[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです。 [ は慎重に使わないと様々な罠にかかるため危険です。 (翌日のネタも併わせてどうぞ) test と [ の違い どちらもシェルの組込みコマンドです。名前が違うのと [ は最後の引数を ] にしなければいけない縛りがある以外、 動作まった

    zetamatta
    zetamatta 2014/01/21
    「[[」コマンドを使うべきらしいですよ
  • 私が他人のシェルスクリプトから学んだこと | 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
    zetamatta
    zetamatta 2013/08/22
    クールという言葉も、もう死語になりつつあるな
  • Shebangという謎な事実上業界標準について

    Shebangとは、UNIXのシェルスクリプトの業界標準で、シェルスクリプトの一行目のコメントの、#!を意味する。sheが短母音か長母音か分からなかったので、英語ネイティブにたずねたところ、人によって意見が違う。短母音の方が多数派のようなので、一応シバンが近いものになるだろう。日語版のWikipediaでも、シバンとしている。この機能には他にも多数の名前があるが、もっとも有名なのが、Shebangだそうだ。 その業界標準的な文法は、以下の通り(ただし、後述するように、この文字列の扱いについては違いがある) #! 文字列 [改行] 普通、実行権限のついたファイルは、標準のシェルで実行されるが、このShebangがある場合は、#!から改行までの間の文字列を、後述するバラバラな方法で解釈して、execで実行し、その際の引数には元のシェルスクリプトファイルへのパスが指定される。 問題は、このsh

  • PNGの最適化ツールを探して - jarp,

    ■ 久し振りのGWの谷間出勤 諸般の事情により出勤しているんだけど、電車の一旦ドア閉め乗車がなかったり、 夕の社がなかったりといろいろと新鮮だ。 ■ Ruby 1.4の頃の-eの実装とirb 昨日までのirbはこんな感じになっていた(すでに変更された)。 require "irb" if __FILE__ == $0 IRB.start(__FILE__) else # check -e option if /^-e$/ =~ $0 IRB.start(__FILE__) else IRB.setup(__FILE__) end end この-eオプションのチェックはなんか意味不明なことになってるが、 元々Ruby 1.4の時代はsample/irb.rbでこうなっていた。 require "irb/main" if __FILE__ == $0 IRB.start(__FILE__)

    zetamatta
    zetamatta 2013/05/11
    bashなら「echo $'\u6211\u3005'」 とかいう風に $'~' とやればいいのか。/usr/bin/printf もあり。ちぃ、覚えた
  • 作業効率化!PHPログを確認するシェルスクリプトを作ってみた。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作

    こんにちは。卓司です。 前回のサーバーの負荷を手軽に確認するシェルスクリプトを作ってみた。や、前々回の特定のファイルを一つのディレクトリに移動させるでは、皆様からのあたたかいご指導・ご鞭撻、誠にありがとうございました。 今回もまた、性懲りもなくシェルスクリプトについてまとめさせていただきますので、何かお気づきの点などありましたら大変お手数ではありますが、ご指摘いただけるととても嬉しいです。 1. 経緯 今PHPでプログラミングしてるんです。その時になんかの間違えでERRORが出たり、WARNINGが出たり、NOTICEが出たり。。。 出さないよう出さないよう組んではいるのですが、忘れた頃にポロッと。。。 実装に集中してしまうと中々ログまで気がまわらなくなってしまうんですよね。。。 毎日一回でいいから、ログの中身を見て、最低でもERRORとWARNINGは取り除きたいなって思うんです。。。

    作業効率化!PHPログを確認するシェルスクリプトを作ってみた。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作
    zetamatta
    zetamatta 2012/12/13
    mailコマンドでメールを送信できる環境が必要ですね
  • IDEA * IDEA

    ドットインストール代表のライフハックブログ

    IDEA * IDEA
    zetamatta
    zetamatta 2012/12/01
    直前に打ったコマンドをエディターで開く「fc」は知らなかったな。
  • Just another Ruby porter, 2012-11-b

    ■ How to automatically source zshrc in all open terminals : commandline これは素晴らしい。 trap "source ~/.zshrc" USR1 とすることで開いているすべての端末へ~/.zshrcを読ませることができるわけだ。 コメントにcronでinotifywaitについて書かれているが、 それよりはincronを使ったほうがよさげ。 ■ convertで1ドットずらして重ね合わせる X方向に1ドットずらして重ねると太くなる。 % convert foo.png \( -clone 0 -roll +1+0 \) -compose multiply -composite x: Y方向も重ねたほうがいいか。 % convert foo.png \( -clone 0 -roll +1+0 \) \( -clone

    zetamatta
    zetamatta 2012/11/12
    曰く『trap "source ~/.zshrc" USR1 とすることで開いているすべての端末へ~/.zshrcを読ませることができる』 ― zsh 以外でも使えそうですね!
  • 地雷だらけのrsyncを理解する。 - こせきの技術日記

    rsync -avz --exclude-from=pattern-file --delete SRC/ DEST SRCの末尾に/をつける。たいてい必要。 SRCスラッシュの有無は、mv SRC DEST と mv SRC/* DEST の違いと一緒。スラッシュの後ろに*が省略されているものと考える。 DESTのスラッシュの有無は関係なし。 --dry-run(-n)をつけて試す。 SRC、DESTともローカルのディレクトリを指定して試す。 DESTはまず空ディレクトリで試す。DESTが同期済みだと何が更新されるのか正確にわからないので。 --list-onlyをつけてファイル一覧を得る。 DESTを省略してファイル一覧を得る。 --list-onlyと同じ? --deleteはDESTのファイルを根こそぎ削除する可能性がある。注意。 --delete-excludedは使わない。--d

    地雷だらけのrsyncを理解する。 - こせきの技術日記
    zetamatta
    zetamatta 2012/10/05
    転送先のディレクトリは空にしといた方が安全だよなー
  • cp (UNIX) - Wikipedia

    cpはUNIXのシェル上で入力するコマンドの一種で、ファイルをある場所から別の場所へコピーする。異なるファイルシステム間でもコピーできる。元のファイルはそのまま残り、新しいファイルは同じ名前の場合もあるし、別の名前をつけることもできる。 項目ではPOSIXに定められている仕様を解説する。多くのLinuxシステムで使用しているGNU Core Utilitiesのcpには追加のオプションがある[1]。 1つのファイルを別のファイルにコピーする。 cp [ -f ] [ -H ] [ -i ] [ -p ][ -- ] SourceFile TargetFile ファイルをディレクトリにコピーする。 cp [ -f ] [ -H ] [ -i ] [ -p ] [ -r | -R ] [ -- ] SourceFile ... TargetDirectory ディレクトリを別のディレクトリに

    zetamatta
    zetamatta 2012/09/10
    Wikipedia はゴミタメとか言う人もいるけど、POSIX での cp の定義とかも書いてあったりするので、なんだかんだ言って便利っすよ
  • 本を読む シェルスクリプトでテンポラリファイルの後始末

    プログラム中でテンポラリファイルを作ったときには、最後に削除します。シェルスクリプトだとこんな感じです。 tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX) # ここに処理いろいろ rm "$tmpfile" が、この方法には、「正常終了以外ではテンポラリファイルが削除されない」「シェルスクリプトの終了ステータスが、処理体のものでなく、rm -fのものになる」という2つの弱点があります。 で、シグナル処理とかいろいろなパターンがあるんですが、いまどきだとtrapコマンドで疑似シグナルのEXIT(シグナル0)に後始末処理を入れるのが、正常系でも異常系でも処理できて簡単かと思います。 trap 'rm -f "$tmpfile"' EXIT tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX) # ここに処理いろいろ 正常終了での終了ステータスは

    zetamatta
    zetamatta 2012/08/27
    trap コマンドはいいね!
  • dot file - ときどきの雑記帖 2012 2012年8月(中旬)

    ■_ Zed のおことば Learn Code The Hard Way -- Books And Courses To Learn To Code Can't Code? Learn Design This was originally a comment on a blog post but I thought it'd be a good blog post here too. That other blog post basically is lamenting the fact that it's difficult to learn programming ending with the question, "I want to learn to code. But what if I'm not built to be a coder? Guys, am I missing

    zetamatta
    zetamatta 2012/08/17
    lsで「.」と「..」を表示しないようにするコードをサボって、最初の「.」しかチェックしないようにした結果、バッドノウハウとして隠しファイルには「.」で始まる名前にするが広がってしまったわけか
  • Blogger

    Google のウェブログ公開ツールを使って、テキスト、写真、動画を共有できます。

    zetamatta
    zetamatta 2012/08/15
    なるほど、「tar zcfp - source_dir | cstream -t $((${BW}*1024*1024)) > target_file.tar.gz」か。ちぃ、覚えた
  • crontab -e は「絶対に」使ってはいけない - ろば電子が詰まつてゐる

    今までナチュラルにcrontab -eでcron編集をしていたのだけど、実はこれはとてつもなく危ないやり方だった。ということを、今さら知った。 crontab -rの恐怖 crontabコマンドにはrオプション(Remove)があり、これを実行すると何の警告もなく全てが消え失せる。 macbook:~ ozuma$ crontab -l 15 * * * * /home/ozuma/bin/hoge.sh 0 9 1 * * /home/ozuma/bin/piyo.sh > /dev/null 2>&1 */5 * * * * /home/ozuma/bin/fuga.sh > /dev/null 2>&1 macbook:~ ozuma$ crontab -r macbook:~ ozuma$ crontab -l crontab: no crontab for ozuma macbo

    crontab -e は「絶対に」使ってはいけない - ろば電子が詰まつてゐる
    zetamatta
    zetamatta 2012/07/23
    ワシは「crontabは-eを禁止して、常に外部ファイルを読み込ませればいいよ派」