linuxでファイル名がマイナスなファイルが削除できない

事象

誰かが-aというファイルを作成していた。
そのため今まで出くわしたことなかったため、削除しようとするが削除できなかった。

試したコマンド
rm -a
rm \-a
rm "-a"
rm "\-a"
rm '-a'

Gitのリポジトリの改行コードがまばら

事象

Gitのコードがまばらになってしまう

原因

Gitクライアント側の統制が行えていないため

対応方法

各開発者のGitの改行コード設定を確認してもらう

確認方法
git config --show-origin core.autocrlf
設定方法
git config --[system|global|local] core.autocrlf [true|input|false]

補記事項

systemとglobalとlocalの違い

systemはシステム全体、globalは対象ユーザー、localは対象リポジトリのみ

有効パラメータ確認方法
git config --list --show-origin

パラメータ展開

書式 説明
${value} 変数valueの値を展開
${value:-hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開
${value:=hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開し更にvalueに代入
${value:?hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開し更に標準エラー出力
${value:+hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合は空文字として処理
${value:offset} 変数valueの値を展開する際、offsetの位置から展開
${value:offset:length} 変数valueの値を展開する際、offsetの位置から最大length文字分を展開
${!hoge*} ${!hoge@} hogeで始まる全ての変数を、特殊変数IFSの最初の文字(デフォルト空白)で区切って展開
${hoge[*]} ${!hoge[@]} hogeが配列変数であれば、配列hogeの値のリストを展開。hogeが配列でない場合、hogeの値に展開
${!hoge[*]} ${!hoge[@]} hogeが配列変数であれば、配列hogeのキーリストを展開。hogeが配列でない場合、空文字として展開
${#hoge} ${#hoge[*]} ${#hoge[@]} 文字列数、要素数を出力
${hoge#word} ${hoge##word} hogeを展開し、前方からwordに一致した分まで削除して出力、#は最初にマッチした部分までで、##は最後にマッチした部分まで削除
${hoge%word} ${hoge%%word} hogeを展開し、後方からwordに一致した分まで削除して出力、%は最初にマッチした部分までで、%%は最後にマッチした部分まで削除
${hoge/pattern/word} hogeを展開し、patternに一致した最後の部分までをwordに置換してから出力

補記事項

配列の代入と展開結果例
$ value=([0]="zero" [1]="one" [2]="two" [3]="three")
$ echo $value
zero
$ echo ${value[1]}
one
$ echo ${value[*]}
zero one two three
$ echo ${!value[*]}
0 1 2 3
$ value=(["z"]="zero" ["o"]="one" ["tw"]="two" ["th"]="three")
$ echo ${!value[*]}
z o tw th

シェルオプション

シェルの動作を決めるオプションのこと。
setコマンドで設定できるものと、shoptコマンドで設定できるものに分かれている。
(但し、shoptコマンドでもsetコマンド用のシェルオプションは設定可能)
【 set 】コマンド――シェルの設定を確認、変更する:Linux基本コマンドTips(205) - @IT
【 shopt 】コマンド――bashのシェルオプションを表示/設定する:Linux基本コマンドTips(361) - @IT

set -euo pipefail

よくシェバンの後に書かれている。
この指定をシェバンの後に書いておけば、エラー発生時に突っ切らないので安全である。
なお、以下の意味合いがある。

シェルオプション名 オプション略記 効能
errexit -e コマンド実行結果がエラー(=終了ステータスが0以外)の場合、終了
nounset -u パラメータ展開中に未定義変数がある場合、終了
-o シェルオプションを有効化
pipefail パイプラインの戻り値を最後のエラー終了値にする

Linuxのターミナル上のショートカットキー

編集機能(※1)

ショートカットキー 効能 補記事項
Ctrl + B 1文字戻る ←と同じ
Ctrl + F 1文字進む →と同じ
Esc → B 1単語戻る  
Esc → F 1単語進む  
Ctrl + A 行頭に戻る  
Ctrl+ E 行末へ進む  
Ctrl + H カーソルより前方の1文字削除  
Ctrl + D カーソルより後方の1文字削除 Deleteと同じ
Esc → Ctrl + H カーソル前方の1単語削除 Esc → Deleteと同じ
Esc → D カーソル後方の1単語削除  
Ctrl + U カーソルより前方の文字全削除  
Ctrl + K カーソルより後方の文字全削除  
Ctrl + Y 最後に削除したものをペースト  
Ctrl + P 前の履歴を表示 ↑と同じ
Ctrl + N 次の履歴を表示 ↓と同じ
Esc + 履歴の先頭を表示  
Esc + > 履歴の最後を表示  
Ctrl + R インクリメンタルサーチの開始(※2)  
Ctrl + L スクリーンのクリア  
Ctrl + S スクリーンへの出力を一時停止 スクリーンロックとも呼ぶ模様
Ctrl + Q スクリーンへの出力を再開  
Ctrl + Z フォアグランドプロセスを一時停止  
Ctrl + C フォアグランドプロセスを終了  

※1 Escで始まるショートカットは、Windows端末では使い勝手悪い事が多いかもしれない。。
※2 本来的にはCtrl + Rはインクリメンタルサーチ開始という意味でないが、最初はこの方が理解しやすい。

インクリメンタルサーチの利用方法

文字を入力することで履歴とヒットする結果が自動表示
Ctrl + Rで前方検索、Ctrl + Sで後方検索(※3)
ヒットしなかった場合は"failed reverse-i-search"と表示される。
その場合はバックスペースキー等で文字を消せば元に戻れ、そこから入力すると再度検索が行われる。
Enterを押せば実行、Escを押せばコマンドを引き継いだまま戻る、Ctrl + g or Ctrl + cでキャンセル

※3 スクリーンの出力の一時停止に割当たっているため、利用する場合は予め以下を設定する必要有

stty stop undef

補完機能用

ショートカットキー 効能 補記事項
Tab コマンド名、ファイル名、ディレクトリ名の補完  
Esc → ? 補完候補の一覧表示 Tab → Tabと同じ
Ctrl + X → ! コマンド名の補完候補を一覧表示  
Ctrl + X → / ファイル名、ディレクトリ名の補完候補を一覧表示  
Ctrl + X → ~ ユーザー名の補完候補を一覧表示  
Ctrl + X → @ ホスト名の補完候補を一覧表示  
Alt + g(※4) 補完候補まで埋められ、もう一度押すとリスト表示 事前に文字を入力しておく必要有
Ctrl + x → * 補完候補一覧をコマンドラインに展開 事前に文字と*を入力しておく必要有(※5)
Ctrl + x → g 補完候補一覧の表示 事前に文字と*を入力しておく必要有(※5)

※4 M-g と表現されていることが多い

Redmineのチケットが管理者なのに編集できない

事象

管理者権限なのに特定プロジェクトのチケットが編集できない。
チケットの編集ボタンが非活性化されてしまっており、編集画面に遷移できない。
プロジェクトの権限設定、ユーザーのロール設定を色々変更しても全く反応がない。

原因

チケットに紐づく対象プロジェクトを終了させていたから・・・

対応方法

プロジェクトを再開するだけ。。。

嵌った要因

  • 終了プロジェクトは編集できなくなるということ自体忘れてしまっていた
  • 対象プロジェクトおよび親プロジェクトも放置気味プロジェクトだったので忘れてた
  • 対象チケットの親プロジェクトは終了せず、チケット対象のプロジェクトのみ終了していた

自宅でファイル共有にアクセスできない

事象

自宅のPCにHDDを接続して共有の設定を行った。
HDDに接続しているPCからはファイル共有のパスでアクセスするとアクセスできる。
しかし、同じサブネット内のPCからアクセスするとアクセスできない。

原因

カスペルスキーが通信をブロックしていた。

対応方法

以下で解説してくれていた。
support.kaspersky.co.jp
但し、当解説の通りにすると全ての通信をブロック解除してしまう。
自宅で使うのであればこのまま従うのではなく、リモートアドレスのところは”すべてのネットワークアドレス”ではなく、”サブネットアドレス(信頼済みネットワーク)"に変更すべきである。

その他落とし穴

  • 通信元もウイルス駆除ソフトが通信を止めている(このケースは少ないかも)
  • ファイル共有はONにしたが、アクセス許可設定ができていない
  • ログインするユーザー名がアクセス元と先で同じだが、パスワードが違っている
  • SMBの設定が悪さをしている
  • Wi-Fiのセグメント分離がONになっている(2.4GHzと5.0GHzでは別ネットワーク)

もう10年位使っている&更新したばかりなので、例の問題で買い替えるかどうか悩ましい…。実はノートPC買ったらこのライセンスがついてたので、乗り換えることは可能ではあるが…。