はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、本当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?
西村めぐみ Macbook * iPhone * ThinkPad * Blog * Diary * Twitter(nim95) * 連載:[@IT]“応用力”をつけるためのLinux入門 (2016/02~) 連載:[@IT]Linux基本コマンドTips (2016/02~) 新刊:[技術評論社]基本がわかるSQL入門 ──データベース&設計の基礎から楽しく学ぶ (2020/10) 新刊:[技術評論社]Linux+コマンド入門 ──シェルとコマンドライン、基本の力 (2021/4) 新刊:[技術評論社]TCP/IP&ネットワークコマンド入門──プロトコルとインターネット、基本の力[Linux/Windows/macOS対応] (2024/5) ⇒著作リスト 略歴 千葉県出身。東京外国語大学ペルシア語学科中退。MIDIシーケンサーを作ることを夢見て勉強しはじめたプログラミングにはまりソ
「Bot users」の作り方がいくつかあるため、別々に記述しています。簡易なものならWebサーバーは不要ですが、凝ったことをやろうとするとwebhookのためにwebサーバーとして稼働させる必要があります。 最後の「Unfurling links」(リンク展開)はいわゆるbotの自動処理などとは違うのですが、他のものより少し特殊なので別枠として表記しています。 Slackでは上記のような機能をひとまとめのパッケージとしたものを 「Slack App」というようです。 上記の Incoming webhooksや簡易なBotなどはworkspaceに対して単体でも設定できますが、一部の設定は Slack Appでなければ使えないものがあります。 一度単体で作成したBotを、あとから App に変換するようなことはできないようです。 印象としては、自動連携機能はSlack Appに統一してい
■ bash の危険な算術式 _ 使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(本家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。 _ 以下のシェルスクリプトには脆弱性がある。わかるだろうか。 #!/bin/bash # "品目,単価,個数" の形式の CSV を読んで、"品目,合計金額" の形式で出力する csv="foo.csv" while IFS=, read item price num; do echo "$item,$((price*num))" done < "$csv" これ、細工された CSV ファイルを食わせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し
こんにちは、hachi8833です。社内Slackで見かけたmorimorihogeさんの以下の書き込みで目から鱗が落ちました。 ~/.bashrcで何かを出力してしまうと、rsyncなどのsshパイプで問題が生じることがあるそうです。 参考: 知らないとrsyncでもハマるシェル初期化 - Qiita これをきっかけに、できるかぎり一次情報を元になるべく一般的になるようにまとめてみました。 シェルスクリプト(.bashrcや.bash_profileなども含む)はあまりに自由に書けてしまい、LinuxディストリビューションやmacOSによって作法がまちまちだったりするので、外してはいけないポイントがどこかを知りたかったのでした。 対象はbashとsh(Bourne Shell)に限定します。また、デスクトップGUIの設定ファイルについては最小限にとどめます。 bashのmanページ 元記
なぜ? 僕には、Linux、OSをもっとよく知りたいという漠然とした欲求があります いや、じゃあカーネルのコード読めよって話ですがまずは身近な所から始めようと思った所存でございます。 bashとかzshとかは、ソースコードがあまりにも大きすぎるので、小さめのdashでshellがどういう風に作られているかを見ていきたいと思います。 はじめに 前提のスキル(というか僕の経験) Linuxの基礎スキル OpenStack構築やWEBサービス開発で基礎的なLinuxスキルはきっとあるのでしょう 何かしらのプログラミング言語経験 WEBサービスをスクラッチで書いた経験(4年以上前ですが。。) PythonのOSSへのバグパッチ提供 ただ上記を見ていただいて分かるように、C言語を使ってバリバリ商用コードを書いていたわけではないので、文法などは適宜調べながら読んでいきます。完走できるか分かりませんが、
Bashでスクリプトを書く場合のポイントをまとめた Bashなどで書くシェルスクリプトは文法がシンプルで覚えると便利。他のプログラム言語だと何行もかかなければならないファイル操作や中身のデータ処理を、ちょちょいと数行レベルで書けとても強力だ。コマンドとの親和性が高い恩恵だろう1。 旧来バッチ処理で本領を発揮するシェルスクリプトだったが、昨今はDocker(Dockerfileや起動スクリプトなど)で活用される機会も多いだろう。 しかしながら他のプログラム言語ではみられない記法があったり、逆に似た書き方もあったりと、混乱しがちなのもシェルスクリプトの特徴かもしれない。 いちいちGoogle先生に確認するのもめんどうなので、このページに整理した2。 主な参照先(よくお世話になっているページ): UNIXの部屋(68user's page) - http://x68000.q-e-d.net/~
Do you ever get the funny feeling that your computer isn't quite as fast as it should be? I used to feel that way, and then I found GNU Parallel. GNU Parallel is a shell utility for executing jobs in parallel. It can parse multiple inputs, thereby running your script or command against sets of data at the same time. You can use all your CPU at last! If you've ever used xargs, you already know how
Mosh の REPL が Ctrl-D で抜けられないとご指摘いただいていた件。 そもそも Ctrl-D って何だっけ?と立ち止まり調べましたが当たり前すぎて(?)記事にすらなってないので書いておきます。 ユーザーから見た Ctrl-D 入力終了を対話型のプログラムにしらせることに使う。 例えば irb から抜けるとき。 dekisugi% irb irb(main):001:0> puts "Hello" Hello => nil irb(main):002:0> # Ctrl-D で irb から抜ける その対話型プログラムが持つ exit や quit などの終了コマンドを入力するよりも楽ですね。 人によっては Ctrl-C を使う場合もあるかもしれません。(そのプログラムが SIGINT をどう扱っているかに依存するので、Ctrl-c で終了しない場合もよくあります。) 追記 i
AWSを日常的に触っていると、シェルスクリプトを書く機会が山のようにあります。あるんだけれど、どうにも考え方が特殊というか、他の一般的なプログラミング言語とは扱い方が違うというか、使いこなせて無い感を強く持ってました。 そんな折、SoftwareDesign2018年1月号でシェルスクリプト特集があったので、渡りに船とばかり購入して読んでみたところ、むっちゃええ感じの特集だったのでここに紹介いたします。 普段からシェルスクリプト書いているんだけれど、「これで良いんかなぁ」というモヤモヤ感をお持ちの方には有用なヒントが満載の特集だと思いますYO __ (祭) ∧ ∧ Y ( ゚Д゚) Φ[_ソ__y_l〉 シェルスクリプトダワッショイ |_|_| し'´J 以下、コマンド例は、bashを前提としています。 第1章「使えるシェルスクリプトにするために」 最初の章では、「使えるシェ
UEC - UNIXを深く理解し、シェルプログラミングを極めるコミュニティサイト Info インフォメーション イベント情報 / ニュース・プレスリリース ユニケージについて ユニケージ開発手法とは / ユニケージエンジニアとは ユニケージ開発手法 技能検定 / 試験日程 ユニケージ開発手法 教育講座 / 開講日程 ユニケージ開発手法 教育講座レポート 出版物 シェルスクリプトマガジン / 注文 / 取扱書店 / 問合せ USP出版書籍 / 注文 / 取扱書店 / 問合せ Software Design / FreeBSD Expert FreeBSD Weekly Topics / 日経Linux 推薦図書 オススメの定番書 / より上級者を目指す UNIXビギナー向け教本 / UNIXの文化を知る AWK/SEDを習得する / 手元に置きたい実用書 古典を楽しむ UECサイトについて
そのコマンド、grep Linuxのお勉強、CUIの使い方を勉強する際、かなり初期に出てくるであろう grep 。 私は ls, cd に次いで3番目のコマンドとして grep を学んだ記憶があります。 日頃からお世話になっている grep ですが、今日は改めてこのコマンドの奥深さを学んでみたいと思います。 環境はUbuntu 16.04にくっついてた GNU grep 2.25 です。 root@ubuntu16:~# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS" root@ubuntu16:~# grep --version grep (GNU grep) 2.25 Copyrigh
昨日紹介した通り、「新しいシェルプログラミングの教科書」という本を執筆しました。 新しいシェルプログラミングの教科書 作者: 三宅英明出版社/メーカー: SBクリエイティブ発売日: 2017/11/21メディア: 単行本この商品を含むブログを見る 名前のとおり、シェルスクリプトの書き方を解説した本です。 その本を書き始めるのにあたって、どのシェルでシェルスクリプトを書くのかを決める必要がありました。 シェルの種類はいくつもありますが、その中でも有力な候補がBourne Shellとbashです。 Bourne Shellは/bin/shとしてインストールされている、伝統的なシェルです。 bashはたいていのLinuxで標準のシェルとして設定されていて、よく使われているシェルです。 どちらもシェルスクリプトを実装するシェルとしてよく使われます。 両方を解説するという手もありましたが、執筆の負
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く