サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
参議院選挙2025
qiita.com/ko1nksm
はじめに Windows ではディレクトリ区切りに Unix 系 OS の / ではなくバックスラッシュ ⧵ を使い、しかも 日本語フォントでは 円マーク ¥ で表示されます。なぜこうなったかは次の独立した 2 つの理由からです。 はるか昔に JIS の文字コードの標準規格はあまり使わない ⧵ を必須の ¥ に置き換えた はるか昔にコマンドのオプション(スイッチ)としてすでに / を使っていた Microsoft は他の OS のやり方を真似するのが嫌だからとか権利侵害になりそうだから ⧵ に変更したなどという根も葉もない噂がありますが、そうではありません。むしろ Microsoft は他の OS のやり方を取り込んだんです。なお、後で解説しますが、Windows は昔からディレクトリ区切りに/ と ⧵ の両方を使えるので Unix 系 OS と互換性がないわけではありません(どっちかと言
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 2025年現在でのおすすめの zip ファイル形式の圧縮・展開(解凍)ソフトについてまとめました。本記事はファイル名を文字化けせずにやり取りできるかを重視しており、使い勝手や対応形式の多さや機能については評価の対象にしていません(が後半におまけで書いています)。一部を除きフリー(無料)で使えます。Lhaplus のような未だに Shift JIS にしか対応していない古いソフトウェアは非推奨としています。今どき Shift JIS を使う必要はありませんし、Shift JIS では一部の漢字や絵文字などを扱えず、Windows
上記の一覧を見るとわかるように、zip ファイルの 解凍機能が zip ファイルのUTF-8ファイル名に対応したのは Windows 7(2012年の修正パッチが必要)からです。しかし修正パッチを当てていない人がいるかも知しないので、Windows 7 は zipファイルの中のUTF-8ファイル名を扱えない可能性があります。延長サポートを含めれば Windows 7 は 2020年1月14日までの長いサポートがあったわけで、Windows の標準機能としては Windows 7 のサポート期間が終了するまでは、UTF-8ファイル名を zip ファイルの中に格納するわけにはいかなかったのでしょう。 そして古い Windows のサポートがようやく終了して、サポート切れの古い Windows を使っているような人もいなくなったであろうこのタイミング(Windows 11 24H2?)でやっと
はじめに macOS では濁点や半濁点が含まれるファイル名でたびたび問題が発生しています。この問題は NFD 問題と言われたり UTF-8-MAC 問題と言われることがありますが、必要な情報が正確に書かれているところは少なく、正しく解説してある所でも情報が古く(主に HFS+ 時代の話に)なっており、読むと逆に混乱してしまう場合があります。 macOS 標準アプリや誰かが作ったアプリであればバグが修正されるまで待つだけですが、自分が作ったアプリやシェルスクリプトなどではこれがどういう問題なのかを理解しなければバグが修正できません。この記事ではそれらを整理し直して、(可能な限り正確に)解説したいと思います。検証は macOS 15.3(補助的に 15.5)で行っています。 この問題は、Mac で作成した zip ファイルを Windows で展開したときに、濁点や半濁点を含むファイルに Wi
【朗報】macOS 15.4でsortコマンドのソート順がまともに修正されました! 〜 マーズとマーキュリーの間にジュピターが割り込んでいた理由sortgrepmacOSUnicodePOSIX はじめに 以前の macOS は sort コマンドで日本語を含む Unicode 文字を正しくソートできませんでした。また grep コマンドでも正規表現の文字の範囲に正しくマッチできないという問題もありました。この記事ではその問題と理由を明らかにし、その原因がどこにあるかを確認します。なおこの問題は 2025年3月31日にリリースされた macOS 15.4 で修正されたようで(ただし別のバグがあります。補足2参照)、この記事に明らかにしている問題は macOS 15.3 以前の話です。 この記事は元々「macOS の sort コマンドのソート順はデタラメだ!」というタイトルだったのですが、
はじめに curl とは対話シェルやシェルスクリプトから HTTP 通信を行うのによく使われるコマンドです。あらゆる環境(100 種類の OS)で動作し、macOS や Windows には標準でインストールされています。商用サポートもあり、互換性は非常に重視され、何年経っても同じ書き方で動きます。非常に長く使われており(1998 年生まれの 27 歳1)、そして古い情報もたくさんあります。この記事ではそういった古い情報を、より簡単で新しい curl コマンドの使い方にアップデートします。最初に結論を書いておくと、 もう -X POST -H "Content-Type: applicatoin/json" なんて書かなくていいですよ。 (記事を読まない人のためのリンク) この記事を書くにあたって以下の記事を参考にしています。この記事が書かれたのは 2015 年、現在はそれから 10 年後
はじめに xargs コマンドの -P オプションを使用すると、指定したコマンドを並列で実行できます。この記事では次期 POSIX (POSIX.1-2024の次、10年後ぐらい)で標準化される予定の -P オプションを使った並列処理についての注意点をまとめます。 シェルスクリプトで簡単に並列処理を行う場合、xargs コマンドを使うのが簡単です。しかし xargs コマンド自体の使い方は難しいということは知っておいてください。(並列処理の話とは関係なく)find | xargs を使ったパターンをよく見かけますが(xargs と同等程度に速い)find -exec {} + を使ったパターンのほうが簡単です(遅い find -exec {} \; と混同しないように)。必要ない場合 xargs コマンドを使わないほうが良いというのは、この記事のもう一つのテーマです。 最も簡単な並列処理の
# 終了処理($1: シグナル名) cleanup() { # 終了処理中に無視するシグナル(他に必要な場合は追加する) trap '' HUP INT QUIT PIPE TERM # ここに終了処理を書く : TODO # 自分自身にシグナルを再送信することでシェルスクリプトを終了する trap - EXIT "$1" [ "$1" = EXIT ] || kill -s "$1" $$ || exit 1 } # トラップするシグナル(他に必要な場合は追加する) for i in EXIT HUP INT QUIT PIPE TERM; do trap 'cleanup '"$i" "$i" done # ここより下に実際のシェルスクリプトの内容を書く : : 自分自身にシグナルを再送信しているところが特徴的だと思いますが、その理由についての解説がこの記事の内容で、POSIX 準拠で
はじめに ls コマンドは、本当は list や list directory contents の略です。list segments の略という説は、現在その根拠が削除されています。 なぜ list segments の略という誤解が広まったのか? Wikipedia に書かれていた真偽不明の情報が発信源です。この情報は 2005 年の 3 月に英語版の Wikipedia に参照リンクなしで追加され、根拠がないことから 2013 年 8 月に削除されています。日本語版の Wikipedia では今も list segments の略であるという説明が残っています。 "list segments" が Wikipedia に追加されたときのコメントには、Multics で使われていた用語であると書かれています。しかし削除されたときのコメントには、Multics では ls を list
プロファイルでできることは環境の設定だけです。シェルの設定は実際にはできないことはないのですが、やっても無意味なことになるのでできないとします。無意味なことになるというのは新しく起動したシェルにはプロファイルで行うシェルの設定は反映されないということです。環境の設定とは、特定のシェルに依存しない初期化処理のことで、その一つが環境変数の設定です。環境変数は OS の機能であってシェルの機能ではありません。環境の設定には、他に stty コマンドによる端末の設定や umask コマンドによる umask の設定などがありますが、プロファイルで設定することはあまりありません。 rc ファイルでは環境の設定とシェルの設定の両方ができます。シェルの設定、例えばプロンプト文字列の設定やシェルの機能を有効にしたり補完スクリプトの読み込みなどは rc ファイルに書きます。つまり、ほとんどのことは rc フ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
ちなみに Space Travel にスコア機能やゲームのなにかを記録する機能はありません。描画は点と線だけで画像ファイルの読み込みなどは行いません。オリジナルの Space Travel は紙テープから起動してオンメモリで動くはずです。何が言いたいかというと Space Travel を動かすためにファイルシステムを作る理由はないということです。紙テープからの起動なんて時間がかかるのでは? と思ったあなたは鋭い。1980 年頃の音楽用のカセットテープをコンピュータの記憶媒体として使っていた時代では、実際にゲームを始める前のロード時間に何分も待っていました。 初期の Unix 開発の技術は Space Travel から学んだ さて、この記事は Space Travel を通して Unix 開発の初期の歴史や、なぜケン・トンプソンは Unix を開発するに至ったのかを知ろうというのが趣旨の
はじめに [ $? -eq 0 ] や [ $? -ne 0 ] は冗長でデメリットしかありません。非常に多く見かける書き方ですが、1979 年に Bourne シェルが広く公開された時からこのようなコードは必要ありませんでした。実際に当時はこのような書き方は使われておらず、このような書き方をしなければならなかった歴史的な経緯などはありません。これはなぜか広まってしまった良くない書き方です。 優れたコードとは無駄がないシンプルなコードです。丁寧なコードとは無駄な処理を書くことではありません。[ $? -eq 0 ] や [ $? -ne 0 ] は書かないほうが、簡単で読みやすくわかりやすくなります。優れた文法を持つシェルは短いコードで正しく動作し、良い書き方は最短の時間と最小の手間で目的を達成することができます。コマンドのエラー処理を簡潔に書くことができるのが、シェル言語の優れている点の
補足1: 上記以降のその他のシェルの歴史 ksh88: 1980年頃に開発開始。一般的に公開されていないが ksh83 や ksh86 もある pdksh: ksh88 クローンで 1987年から1989年頃に開発。その派生版を OpenBSD が採用 bash: 1988年1月に開発開始し、1989年6月に 0.99 がリリース ash: 1989年5月にリリース、その派生版をFreeBSD、NetBSD、Debian系Linux などが採用 zsh: 1990年頃に1.0がリリース ksh93: 1993 年頃に開発開始。ksh88 の大幅強化版だが完全な上位互換ではない 参考: シェルの歴史 総まとめ(種類と系統図)と POSIX の役割 〜 シェルスクリプトの現在・過去・未来 補足2: POSIX 標準化以降 1992 年に POSIX によってシェルの仕様が標準化されました。しか
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに $\color{#e02020}{\huge{\bf{それは単なる「POSIX標準規格書の用語集」じゃい!}}}$ ということで、まことしやかに POSIX がテキストファイルの仕様を決めているかのような噂が流れていますが(私も言ったことがあるかも?)、POSIX に「テキストファイルは末尾に改行を書かなければならない」なんて仕様はありません。また POSIX は「テキストファイルの末尾を改行にすべし」などとも言っていません。POSIX は「3. Definitions(定義)」で 「POSIX 標準規格書の中で使用している『
はじめに grep コマンドや sed コマンドの -e オプションや -E オプションの意味を勘違いしている例を見かけるので訂正です。 -e オプションは正規表現またはスクリプトを追加指定するためのオプションです -E オプションは拡張正規表現モードを有効にするためのオプションです -e と -E は反対の意味を持つオプションではありません。まったく異なる機能を提供しているオプションです。-e オプションは拡張正規表現でも使うことができます。 -e オプションは正規表現の追加指定 まず、なぜ -e オプションというものが作られたのか? それはハイフンで始まる正規表現を指定したり、sed スクリプトを組み立てたりするためです。 grep コマンドの話 例えば grep コマンドで -a という文字列を検索したい場合はどうするでしょうか?
はじめに CUI は英語圏では通用しないようです。CLI という正しい用語を使いましょう。というか CUI のことしか書いていない初心者向け記事、量産させすぎ😡 ❌ CUI (キャラクターユーザーインターフェース)なんて言葉は英語にはありません 🟢 CLI (コマンドラインインターフェース)が正しい用語です 🟢 GUI (グラフィカルユーザーインターフェース)も正しい用語です なんども繰り返されている話題ですが、ふと書きたくなったので書きます。 CLI (コマンドラインインターフェース)ってなに? CLI とはその名の通り、コマンドラインを使ったインターフェースのことです。つまり一般的にはシェルを使うユーザーインターフェースです。よく見るコレ↓です。 コマンドラインインターフェースとは、コマンドラインにコマンドを入力することでコンピュータを使うインターフェースです。ちなみにコマンドと
Twitterとか見て「そうだったのかー」とか言うんじゃなくて、ちゃんと調べてみましょうよ。/usr は元々ユーザーのホームディレクトリをおいていた場所ですよ。/bin などを置いていたシステムディスクの容量が足りなくなったので別ディスクだった /usr 以下を使うようになっただけです。Unix System Resources とかそんな長い名前、後付けに決まってるでしょ? 翻訳は面倒なので、DeepL(の少し手直し)です。 初期の Unix のドキュメントから URLと1972年という年から、おそらく Version 1 Unix (1971) のドキュメントだと思います。ここ 経由で見つけました。 12ページにこのようなものがあります。詳細はよくわかりませんがディレクトリ構造でしょう。 idata: / root 41. 140016 .byte 7,1 9f-.-2 41. <..
FreeBSD では 2024-05-31 に 200112 から 200809 への変更がようやく行われました(一度間違えて 200808 と書いてしまっていますが)。 https://cgit.freebsd.org/src/commit/?id=2e30926a68 https://cgit.freebsd.org/src/commit/?id=6e0278408e macOS は FreeBSD のユーザーランドのコマンドを使用しているため、そのせいで 200112 のままだった可能性も考えられますが、シェルやカーネルは FreeBSD のものではないため、FreeBSD が変更になったからと言って macOS が更新されるとは限らないでしょう。Solaris 10 と 11 ではディレクトリごとに準拠バージョンが異なるバイナリが配置されており以下のようになります。Solaris
期待してる人ががっかりしないように、最初に結論を書いておくと dash、busybox (ash)、mksh、yash、zshにおいて読み込み速度は大幅に速くなりますが **bash においては変わりません。**ただしは使用メモリが減ります。kshは少し速くなりますが逆に使用メモリは大幅に増えます。シェルスクリプトでの読み込み速度を上げるもので、他の言語を使ったりコマンドを呼び出すよりも速くなるわけではありません。 シェルスクリプトでファイルを一行ごとに読み込む時、一般に使われているのは read 関数です。ですが、この read 関数、遅いというわさを聞きました。たしかに一行毎ずつ読み込むのですから cat を使ってファイル全体を読み込むのに比べれば遅いでしょうが、そのままでは一行ずつ処理をすることは出来ません。 さて一行ずつ処理したい場合に使えるのは read 以外どのような方法がある
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに Unix 哲学には DOTADIW: Do One Thing and Do It Well という言葉があります。日本語に訳すと「一つのことをうまくやる」となりますが、しばしば単機能のコマンドを作ることだと勘違いされています。もし勘違いしている人がいるのであれば、ぜひその人に聞いてみてください。なぜ grep コマンドはマッチした行数をカウントする機能を昔から持っているのですかと。昔からある wc コマンドがあれば grep コマンドに行数をカウントする機能をもたせる必要はないのではないかと。 -c Only a count
Unix 哲学的に考えれば、行を並び替える sort コマンドと重複行を取り除く uniq コマンドは別のコマンドであるべきなように思えます。しかし sort コマンドには -u オプションとして uniq コマンドに相当する機能が組み込まれています。なぜそうなっている(そうなってしまった)のかを「ソフトウェア作法(さくほう)」を参照しながらこの記事で明らかにしたいと思います。 関連記事 Unix哲学「一つのことをうまくやる」は単機能のコマンドを作ることではない 「誰」がuniq機能をsortコマンドに組み込んだ!? 熱烈的な Unix 哲学の信者は「どうせ Unix 哲学を理解しない GNU が便利だと思ってオプションを追加したのだろう」と考えるかもしれません。しかし uniq 機能が組み込まれたのは Version 7 Unix、つまり Unix の開発者が組み込んだのです。これは 1
はじめに 多分これはガセネタです。おそらく日本だけで出回っているガセネタです。インタプリタにはそのような定義はありません。インタプリタは「ソースコードを読み込んで意味を解釈して実行するプログラム」 です。「1行ずつ」は些細な間違いとして「機械語に変換する」は完全に間違いです。ある程度詳しい人にとっては常識だと思うのですが。 おそらくコンピュータは機械語しか動かせないから、インタプリタも最終的に機械語に変換しているはずだという間違った思い込みからこのガセネタは広まってしまっているのでしょう。機械語に変換するのは面倒な処理です。速くなるかもしれませんが変換処理しなくて良いのだから普通はしませんよ。 コンパイラとインタプリタの定義 コンパイラとは コンパイラとは、ソースコードを元に実行可能なプログラムを生成するためのプログラムです。ユーザーは(ソースコードではなく)別に生成されたプログラムを実行
「POSIX」という用語が何を指すかですが、昔は POSIX.1 しかなかったので、POSIX.1 のことです。後に POSIX.2 が誕生しました。上記のリストに POSIX.1-2001 の前に空行を入れていますが、これは 1998 年に POSIX を策定していた団体が IEEE から現在の Austin Group (IEEE PASC と The Open Group と ISO/IEC JTC 1/SC 22 のジョイントワーキンググループ)に切り替わる重要なラインです。この後に POSIX.1 シリーズのさまざまな規格と POSIX.2、そしてSUS が統合されました。現在では POSIX.2 は POSIX.1 に統合されています。今は単に POSIX といえば、POSIX.1 しかありません。 Microsoft も Linux も Apple も POSIX API・コ
はじめに シェルスクリプトを遅くする大きな原因は fork と exec です。この二つは OS のインターフェースである fork() 関数と exec() 関数のことで、シェルスクリプトからは、外部コマンドやバックグラウンドプロセスの実行、明示的なサブシェル (...)やコマンド置換 ret=$(...)、パイプの使用などで呼び出されます。 シェル関数はシェルの中で実行される関数であるため、単純にシェル関数を呼び出す場合には fork も exec も行われません。しかしシェル関数の出力を変数に代入しようとコマンド置換(var=$(func))を使うと、exec は行われませんが fork は行われてしまいます。その事に気づかず例えば回数の多いループの中でにコマンド置換を使うことがシェルスクリプトを遅くする原因の一つとなっていました。新しいコマンド置換である「関数置換(仮)」と「値置換
Windows は 1999年12月(ほぼ2000年なので上記では2000年としています)に発売された Windows 2000 まで POSIX サブシステムを搭載していました。2001年8月に発売した Windows XP では POSIX サブシステムを搭載するのをやめましたが、そのときにはもう米国政府の導入要件ではなくなっていました。POSIX が米国政府の導入要件ではないため POSIX サブシステムをやめたのかもしれません。だからといって Windows が POSIX システムとの互換性を諦めたわけではなく、Microsoft Windows Services for UNIX (SFU) という形で POSIX システムというより UNIX との互換性を実現していました。POSIX だけでは足りないからです。後に SFU は Subsystem for UNIX-based
はじめに 30年以上もの長い間 UNIX を支えてきた Bourne シェルも UNIX のサポート終了とともに消え去ろうとしています。みなさん、他のシェルへの移行はお済みでしょうか? 残り一年、まだ移行が済んでいないという人のために、移行のための簡単なガイドラインと各シェルの特徴をまとめました。 関連記事 シェルとUNIXコマンドの未来 ~ これからの10年で起きるシェルスクリプトの変化 残り1年というのはどういうこと? Bourne シェルは POSIX に準拠していない古いシェルです。最初の Bourne シェルは 1979 年に登場し、最終バージョンは 1992 年のものです。ちゃんとしたデータを持っているわけではありませんが、現在 Bourne シェルを使っている最もシェアが高いと思われる UNIX は Solaris 10 です。ただし Solaris 10 では 1989 年
次のページ
このページを最初にブックマークしてみませんか?
『@ko1nksmのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く