15
票
承認済み
大文字でない環境変数を利用することに問題はありますか
問題ないです。
仕様
仕様的には、
The name space of environment variable names containing lowercase letters is reserved for applications.
—— Environment Variable Definition
とあり、小文字の環境変数はアプリケーション用に予約されているとのことなので、...
11
票
`ls -a` はなぜ `.` や `..` を表示するんでしょう?
なぜ表示されるかと言えばハードリンクとして実際に.や..という名前でディレクトリが存在しているからのようです。「inode」を確認すると、ディレクトリ名で指定した場合と.とで必ず一致しています(..も同様)。
# ls -id /root
3112961 /root/
# ls -id .
3112961 ./
# cd /tmp
# ls -id /tmp
1703937 /tmp/
# ...
8
票
承認済み
.envファイルがlsコ���ンドの実行結果に表示されない
ls は 先頭に . があるファイルをデフォルトでは表示しません。
このため、 -a / --all オプション、または -A / --almost-all を指定する必要があります。
-a, --all
do not ignore entries starting with .
. から始まる項目を無視しない。
-A, --almost-all
do not ...
8
票
承認済み
ある時刻の、特定の pid のプロセスと、別の時刻における同じ pid のプロセスの同一性の判定はできる?
この記事だと、PIDと開始時間を組み合わせるのが良い、という意見ですね。
Uniquely identifying processes in Linux
Thankfully, the kernel associates another useful piece of information with a process: it’s start time. The combination of ...
5
票
承認済み
ディレクトリのタイムスタンプが更新されるのはどんなとき?
fstype によって違うでしょう。とりあえず今 Linux 環境がないのでウチの hpux の vxfs で試してみました。ディレクトリの更新日付が変わるのは
「そのディレクトリ自体に書き込みがあったとき」すなわち
- ファイルやディレクトリを作ったとき
- ファイルやディレクトリを削除したとき
- ファイル名の変更を行ったとき
$ mkdir hoge
$ ls -ld --full-...
5
票
0バイトのファイルたちのみを定期的に削除するシェルスクリプト
まず、SolarisとLinuxは全く異なるオペレーティングシステムです。使用しているオペレーティングシステムがなんであるかを正しく把握しておく必要があります。
次に使用するfindですがOS付属のもの以外にGNU find等の後からインストールされたものが用意されている場合があります。どのfindを使用するかを把握し、適切なマニュアルを参照する必要があります。不用意な依存関係を排除する意味でも/...
5
票
承認済み
5
票
承認済み
ターミナルの diff で、github のように、行の中で具体的に差分がある部分に色付けをしたい
英語版の How to colorize diff on the command line? にいくつか回答が集まっており、
そのうちの一つに ydiff というツールが紹介されています。
(求めているものは "Word-level diff" と英語では表現��れるようです)
表示例:
また、Git に diff-highlight ...
4
票
承認済み
ディレクトリ内を再帰的に全置換する時の選択肢
4つのコマンドは、それぞれ異なる動作をします。
grep | xargs sed は、同じファイルを二度走査することになる無駄があります。一度の走査で済む他3つのコマンドに比べ、ファイルサイズが大きくなると速度差が出てくるでしょう。
grep | xargs sed と find | xargs sed は、意図しているように動かない可能性があります。...
4
票
`ls -a` はなぜ `.` や `..` を表示するんでしょう?
. 始まりのファイルが「隠しファイル」となった経緯
そもそも、ls に無視されるのが . と .. だけで無く . で始まるファイル全てであるのは、UNIX開発初期に生まれてしまったバグだそうです。
It was in assembler then, but the code in question was equivalent to something like this:
if (...
4
票
承認済み
終了時にUNIXソケットのファイルを削除するようにするのは、なぜですか?
通信する以上はサーバー側とクライアント側がいるわけです。実用に供するシステムでは、マシンの起動時にサーバーソフトウエアが自動起動し、ユーザーの操作によりクライアントが当該サーバーソフトウエアを使う、ということになるかと思います。
でも、バージョンアップとかバックアップとかの理由により一時的にサーバーソフトウェアを停止することもあるでしょう。当然その間はサーバーソフトウエアが使えません。
...
4
票
承認済み
シェルスクリプトで、標準出力が端末の場合に挙動を変化させたい
testコマンドの -t オプションで判定できるようです。
Linux基本コマンドTips(222):【 test 】コマンド(応用編��――文字列の一致などを判定する
testの主なオプションと式(標準入出力の判定)
式 真になる条件
-t 0 標準入力が端末
-t 1 標準出力が端末
-t 2 標準エラー出力が端末
-t 数値 ...
4
票
承認済み
find と sed で複数ファイルを一括置換する場合、「渡す文字列の長さ」と「結果が表示されるまでの速度」には関��がありますか?
どちらが速いかはsedの実装しだいです。素直な正規表現マッチングをしていたらパターンが短い方が速いでしょうし、最適化でBM法を使っていたらパターンが長い方が速いことがあります。
いずれにしても、体感できるような差が出ることは稀ですので、悩んでいる時間があったらどちらでもいいから実行してしまえば良いと思います。
4
票
承認済み
zip 爆弾を、爆発させずにそうであるかどうかを検証する方法はありますか?
unzipコマンドの-lや-Zオプションを使えば、アーカイブを展開せずに中身のファイル一覧や展開後のファイルサイズを確認することができます。
身構えてチェックする必要はありますが、不必要にファイルサイズが大きかったり、ZIPの中にZIPが入れ子になっているようなケースは確認できるのかなと。
4
票
承認済み
N 日前の時刻を取得したい
最近のLinuxであればdateコマンドの--dateオプションにて未来、または過去の日時を
(文字列で)指定して結果を取得できます。
manマニュアルのオプションから抜粋
-d, --date=STRING
「現在」ではなく、STRING で指定された時刻を表示する
例:
> date --date '1 day' # 1日後
> date --date '...
4
票
承認済み
タブ文字をgrepしたい
Bash であれば、シングルクォートの前にドル記号を入れた $'...' 形式の文字列の中に \t を入れると Bash がタブ文字として解釈してくれます。
grep $'\t'
参考
Bash マニュアル 3.1.2.4 ANSI-C Quoting
英語版 Stack Overflow の質問 "grep a tab in UNIX" に対する antimirov さんの回答
4
票
承認済み
シェルを使ってyyyymmdd形式の変数をunixtimeに変換したい。
「--date」に与える引数が空白を挟んで分割されて「--date 2005-01-01」と「00:00」と別れて解釈されているのが原因です。日付文字列をダブルクォーテーションで囲んであげれば良いと思います。
unitime='2005-01-01 00:00' ; date +%s --date "$unitime"
1104505200
4
票
承認済み
linux / unix における、ユーザー固有のアプリケーション設��の、標準的な置き場は?
現在は、XDG Base Directory Specification に従って、環境変数 XDG_CONFIG_HOME が指定するディレクトリ(環境変数が設定されていない場合は $HOME/.config)の下に設定ファイルを置くのが標準的な慣習となっています。
4
票
ターミナルの diff で、github のように、行の中で具体的に差分がある部分に色付けをしたい
すでに回答がついていますが、つい一ヶ月ほど前(2021/4/14)に作成されたnpmライブラリでgit-split-diffsというものも紹介しておきます。自分が使ってみた限りですが、シェル内でGitHubの差分UIをかなり再現しています。
https://github.com/banga/git-split-diffs
DEMO1
Video
DEMO2
Video
3
票
ダブルクォートの中の変数展開は、どこまで正しく動作する?
metropolisさんが回答されている0x00もそうですが、
ファイルの終わりが改行コードでない場合、コピー後のファイル末尾に改行コードが付加されてしまいます。
3
票
承認済み
anacondaの外で環境構築したい
質問のように、AnacondaのPythonが優先的に使用されるのは、Anaconda の bin ディレクトリが、環境変数 PATH に追加されているためです。MacOS の場合は、~/.bash_profileに次のように Anaconda のインストールの時に追加されていると思います。
export PATH="/dir_to_anaconda/anaconda3/bin:$PATH"
...
3
票
承認済み
シンボリックリンク作成時のエラーを解消したい
File exists
"ファイルが既に存在します" というエラーです。
シンボリックリンクで作成しようとしたファイル名が既に存在しているので、別の名前で作成するか既存のファイルをあらかじめリネームしてください。
3
票
承認済み
UNIXドメインソケットのDGRAMにはデータ欠如などあり得るのでしょうか?
仕様上は明記されてませんが、実際の実装ではSTREAMと同じように信頼でき、データ欠如などは無いものと考えてよいのだと思います。
UNIX ドメインデータグラムサービスは信頼できます。メッセージを紛失したり異なった順序で配送することはありません。
—— 書籍『詳解UNIXプログラミング 第3版』の「17.2 UNIX ドメインソケット」より
ほとんどの UNIX の実装では、 UNIX ...
3
票
承認済み
ファイルを予め指定した複数ディレクトリへ上書きコピーしたい
#!/bin/sh
dirs=("/var/www/a" "/var/www/b")
for dest in "${dirs[@]}"
do
cp -fa z.js $dest/z.js
done
3
票
$ sudo su root
・sudoなのにsu?
・「sudo -s」と何が違うのでしょうか?
sudo -sの場合はホームディレクトリが元ユーザーのホームディレクトリになります。それによって、.bashrcなども元のユーザーのものが適用されます。
sudo suやsudo su rootの場合は、ホームディレクトリが/rootになります。それによって、.bashrcはrootのものが適用されます。
・...
3
票
承認済み
$ find . -type f -name '*.php' -exec sed -i 's/a\.php/b\.php/g' {} + で何を置換したかを表示するには?
sedコマンドでは-n -pオプションを指定しない限り、パターンにマッチまたは置換した/しないに関わらず、入力ファイルの中身をすべて表示(出力)します。
そして、grepコマンドのような「マッチしたファイル名を表示する/しない」オプションは無いので、質問のような「置換したファイルを結果に表示させたい」なら関連質問でsayuriさんが回答しているように、...
3
票
タブ文字をgrepしたい
grep $'\t'の方がスマートですが他の制御コードにも使える方法です。
grep "$(echo -n -e \\x09)"
昔風の書き方なら
grep "`echo -n -e \\\x09`"
試した環境
GNU bash, バージョン 4.4.20(1)-release (x86_64-pc-linux-gnu)
grep (GNU grep) 3.1
3
票
タブ文字をgrepしたい
もし、ターミナル上での話であれば(シェルが起動していてコマンド待ち状態であれば)、
Ctrl + v → Tab の順番でキー入力すればタブ文字が直接入力できます。
この方法はbashでない多くのシェルで適用できると思います。
$ grep '[CTRL+v][TAB]' files*
(見た目上はスペースとタブの区別はつかないのでターミナル上では下のような感じに見えます。)
$ grep ' ...
3
票
承認済み
manコマンドの「オンラインのマニュアルページをフォーマットして表示します」とはどういう意味ですか?
「オンライン」という言葉はネットワークに繋がっている状態以外に、単にデジタル化された状態を指すことがあります。
また、Unixシステムのマニュアルに関しては、マニュアルのデータが入っている /usr/share ディレクトリをマシン間で共有する運用も昔はよくありました。
Weblio 「オンラインマニュアル」
3
票
linux / unix における、ユーザー固有のアプリケーション設定の、標準的な置き場は?
伝統的にはマルチユーザーでの利用が前提なので、まずは各ユーザーのホームディレクトリ以下に置けばよくて、単一の設定ファイルで済むなら .APPNAMErc のようにいわゆるドットファイルで名前の末尾に rc を付けて設定ファイルと分かるようにしているケースが多いと思います。
設定ファイルが複数になるようであれば、ホームディレクトリ直下に .APPNAME/ ...
無効化に投票