ottijpさんの助け合いフォーラム投稿一覧

助け合いフォーラムの投稿
2022/12/18 返信
設定ファイルの読み込む順番に疑問があります

どのOSでもDebian系の/etc/bash.bashrc設定ファイルを読み込む必要があるのでしょうか?

いいえ.
たとえばDebian系のLinux Mintでは,/etc/profileに次のようなコードがあり/etc/bash.bashrcを読み込んでいますが,Red Hat系のCentOSにはそのような行はありません.

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

最初はまず/etc/profileを読み込んだ後~/.bash_profile、その後に/etc/bash.bashrcか/etc/bashrcを読み込む流れと認識していました。
(解説のフローを見るとそう思ってしまったのですが、実際はどうなのでしょうか?)

実際の読み込み順序として,Linux Mintの場合は,

  • /etc/profileの読み込み
    • その中で/etc/bash.bashrcの読み込み
  • ~/.profileの読み込み
    • その中で~/.bashrcの読み込み
  • /etc/bashrcの読み込みは無し)

CentOSの場合は,

  • /etc/profileの読み込み
  • ~/.bash_profileの読み込み
    • その中で~/.bashrcの読み込み
      • その中で/etc/bashrcの読み込み
  • /etc/bash.bashrcの読み込みは無し)

bash自体がどの条件でどのファイルを読み込むかは,man bashのINVOCATIONセクションを見るとわかります.

2022/12/18 投稿
dateのフォーマット間違い

解説に記述されているフォーマットが間違って(manのフォーマットと異なって)います.
このフォーマットだと,2022年を20と省略できるようになってしまいます.

date [MMDDhhmm[CC[YY]][.ss]]

正しくは以下です.

date [MMDDhhmm[[CC]YY][.ss]]
2022/12/10 投稿
解説の間違い

解説にある以下は間違いです.

-uはユーザを指定します。

「uidを変更する」が正しいです.

2022/11/27 投稿
typo

解説における

sytemd-journaldの設定は

は,systemd-journald のtypoかと思います.

2022/07/21 コメント
正解が間違っています
> そこからすると、「正答が間違っている」のではなく「正答選択肢の記述では失敗する場合がある」と言いたいのでしょうか? はい.そうです. > 選択肢の中に「問題の意図通りの結果が得られるコマンド」があるのであればそれは別に不適切ではないと思いますよ。 そうとも考えられます.しかし, https://mondai.ping-t.com/g/posts/142 では,同様に実行時の状況に依存する正答が修正されたので,不適切と捉えるのがよいと考えました.
2022/07/16 投稿
正解が間違っています

*がシェルにより展開されてしまうため,カレントディレクトリにemacsから始まるファイル名のファイルが存在すると,zypper install emacs*zypper in emacs*では「emacs」で始まる名前のパッケージをインストールできないことがあります.

$ touch emacsfile
$ sudo zypper install emacs*
Loading repository data...
Reading installed packages...
'emacsfile' not found in package names. Trying capabilities.
No provider of 'emacsfile' found.
Resolving package dependencies...
Nothing to do.

そこで,正解は以下が正しいと考えます.

  • zypper install "emacs*"
  • zypper in "emacs*"
2022/07/15 投稿
正解が間違っています

whichの出力は絶対パスとは限りません(PATH環境変数の値に依ります).

$ touch cmd
$ chmod +x cmd
$ export PATH=.:$PATH
$ which cmd
./cmd

一方,whereisはPATH環境変数を参照し,PATH環境変数の値に依らず絶対パスになります.

$ touch cmd
$ chmod +x cmd
$ export PATH=.:$PATH
$ whereis cmd
cmd: /tmp/tmp.dBUCuH4J0I/cmd

よって,whereisが正解と考えます.

2022/07/07 コメント
副作用のある正解
なるほど.これが`tr`の学習問題なのであれば確かに`sed`を選択肢に入れるのは不適切ですね. 問題の区分が「ストリーム、パイプ、リダイレクトの使用」とあるので,`tr`に限定する必要はないのだと勘違いしていました. その場合は問題文を変えるほうがよいかもしれませんね.
2022/07/06 投稿
副作用のある正解

「PINGT」を「pingt」に変換

するためにtrコマンドを使っていますが,解説にある

tr [オプション] [文字列1 [文字列2]] < ファイル名

は間違いで,trの引数は文字列ではなく文字セットです.(manコマンドのSYNOPSISも tr [OPTION]... SET1 [SET2] となっています.)
trを使うと,確かに「PINGT」という文字列が「pingt」には変換されますが,それ以外のP,I,N,G,Tのすべての文字がp,i,n,g,tに置き換わってしまいます(副作用があります).

$ cat file.txt
PINGT
POINT
$ tr PINGT pingt < file.txt > hoge.txt
$ cat hoge.txt
pingt
pOint

そこで,正解としてはsedなどを使った以下のようなコマンドのほうが適切と考えます.

cat file.txt | sed s/PINGT/pingt/g > hoge.txt
sed s/PINGT/pingt/g < file.txt > hoge.txt
2022/07/02 投稿
pkill mycommand は正解として不適切ではないでしょうか

killallと異なりpkillの引数はコマンド名ではなくパターンなので,pkill mycommandmycommand2などを実行しているプロセスが存在する場合,それらも終了させてしまうのではないでしょうか.
つまりpkill mycommandは正解として不適切ではないでしょうか.
それとも副作用はあれど「mycommandを実行している全てのプロセスをクリーンアップして終了させたい。」という目的は達成できるから正解ということなのでしょうか.

戻る