Linuxコマンドの良くある打ち間違い3選

やまもとやま
2024-03-26
2024-03-26

どうも、やまもとやまです。
LinuxのCUIで作業をしているときに良く使うコマンドたち。
大体手癖でオプション等を覚えているので何も考えずに打つことが多いですが、「あれ。これってどういう書き方が正しいんだっけ」とか「急いで打ったらキー間違えた」とか、そんなこともあります。
というわけで、ありがちなパターンを3つ挙げてみます。

crontab

crontabと言えばもう定番中の定番コマンド。
タスクを定期実行するためには欠かせません。
そしてこのコマンドを選んだ時点で結論が分かる人も多いでしょう。
通常crontabでタスクを編集をしようとすると以下のオプションで実行しますね。

$ crontab -e

これでvi等のエディタで編集することになると思います。
だがしかし、キーボードのeの真横にあるのがr。
ちょっと手がずれてしまうと、こうなります。

$ crontab -r

そして見事にタスクが空になってしまうのでした。。。
怖ろしいですね。気を付けましょう。

tar

これまた定番コマンドのtar。
ファイルをアーカイブするコマンドです。
ディレクトリ「test」を「test.tar」にアーカイブする場合は以下のコマンドになります。

$ tar cf test.tar test

ところで、慣れないうちはtest.tarとtestどっちが先だったっけ?となります。なると思います。僕はなりました。
というわけで実行してみます。

$ tar cf test test.tar
tar: test: Cannot open: Is a directory
tar: Error is not recoverable: exiting now

エラーになりました。
ディレクトリの場合はエラーになるだけで副作用はないのでぎりセーフです。
ではファイルの場合だとどうなるでしょうか?
カレントディレクトリにファイルが2つあったとします。

$ ls -la
total 16
drwxrwxr-x 2 hogehoge hogehoge 4096 Feb 12 15:26 .
drwxrwxr-x 5 hogehoge hogehoge 4096 Oct  4 15:51 ..
-rw-rw-r-- 1 hogehoge hogehoge    8 Feb 12 15:26 a
-rw-rw-r-- 1 hogehoge hogehoge    8 Feb 12 15:26 b

それぞれのファイル内容はこんな感じです。

$ cat a
test000
$ cat b
test999

2つのファイルをアーカイブする場合、(普通はこんなコマンド打たないですが)こんな感じでしょうか。

$ tar cf test.tar *

では指定を逆にしてみます。

$ tar cf * test.tar
tar: test.tar: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

やっぱりエラーになります。そりゃそうだ。
lsしてみます。

$ ls -la
total 24
drwxrwxr-x 2 hogehoge hogehoge  4096 Feb 12 15:26 .
drwxrwxr-x 5 hogehoge hogehoge  4096 Oct  4 15:51 ..
-rw-rw-r-- 1 hogehoge hogehoge 10240 Feb 12 15:28 a
-rw-rw-r-- 1 hogehoge hogehoge     8 Feb 12 15:26 b

あれ、ファイルサイズがおかしいぞ?

$ cat a
b0000664000175300017530000000001014562335024011361 0ustar  hogehogehogehogetest999

あ、壊れた。さようなら。。。
怖いですね。気を付けましょう。

rsync

気を取り直して3選目、最後はrsync。
これまた定番コマンド。
差分同期もできる便利ツールです。
さて、カレントディレクトリ以下が次のような構造だったとします。

.
|-- honban
|   |-- private
|   `-- public
`-- test
    |-- private
    `-- public
        `-- index.html

testのpublicをhonbanのpublicに同期したい!
そんなときはこう打ちます。
honbanの方は最後にスラッシュがなくても良いですね。

$ rsync -av --delete test/public/ honban/public/

ところで、スラッシュありだっけなしだっけ。と思うことってありますよね。。
間違えて書くとこうなります。

$ rsync -av --delete test/public honban/public

.
|-- honban
|   |-- private
|   `-- public
|       `-- public
|           `-- index.html
`-- test
    |-- private
    `-- public
        `-- index.html

honbanのpublicの下にpublicが生えてしまった・・・。
このまま気づかず作業完了してしまうと後々えらいことになるかもしれません。
恐怖ですね。気を付けましょう。

ありがち間違い3選でした

独断と偏見で選んだので、他にもっと良くある間違いがあるかもしれませんね。
またこんなことやるわけないだろう、と思うかもしれませんが、緊急時だったりすると焦ってミスをしてしまうのが人間というもの。
少しでも不安に思ったときは調べるなりしたいですし、急いでいるときほど落ち着いて確認するようにしたいものです。
それではまた!