Linuxにはファイルやディレクトリを管理するための様々なコマンドがあります。
touch ... 空のファイルを作成したり、ファイルのタイムスタンプ(アクセス時刻や修正時刻)を変更する
cp ... ファイルやディレクトリのコピーを行う
mv ... ファイルやディレクトリを移動する、または名前を変更する
rm ... ファイルやディレクトリを削除する
file ... ファイルの種別を表示する
各コマンドには「-ショートオプション」や「--ロングオプション」の形式でオプションを指定できます。
そのため、設問のように「-(ハイフン)」から始まるファイル名を指定すると、シェルによってオプションと認識されコマンドが正常に実行されません。
「-(ハイフン)」から始まるファイル名をオプションとみなされないようにするためには、次のいずれかの方法でコマンドを実行します。
・コマンドに「--」オプションを指定する
「--」オプションはオプションリストを終了し、これ以降の引数をオプション以外のものとして扱います。
・ファイル名にパスを記述する
ディレクトリやファイルの場所を示す絶対パスや相対パス(参考を参照)を記述することで、ファイル名やディレクトリ名と認識されます。
●Linuxではファイル(ディレクトリはファイルの一種)を「ファイルの実体(データ本体)」と「inode」を使用して管理しています。inodeにはファイルの属性や、「ファイルの実体」にアクセスするためのアドレスなどが格納されています。
Linuxには、同じ「ファイルの実体」に対して複数の名前でアクセスできる、リンクという仕組みが2種類。それが「ハードリンク」と「シンボリックリンク」。
【ハードリンク】
ファイルの実体を直接参照するリンクのこと。ファイルを新規作成した場合は、ハードリンクが1つある状態です。
同じ実体を参照するハードリンクは複数作成できます。それらは同じinode番号を持つことになります。
ハードリンクの数とinode番号は「ls -il」コマンドで確認することが出来ます。
ハードリンクを作成するにはlnコマンド(書式:ln 元ファイル リンクファイル)を利用します。
ハードリンクの制限として以下の2点があります。
1. ディレクトリのハードリンクは作成できない
2. 異なるファイルシステム(パーティション)にハードリンクを作成できない
これらの制限はシンボリックリンクを使う事で解決できます。
【シンボリックリンク】 シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。 シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。 シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)