Mikan OSを自作してみる #2
OS自作ではlixnuコマンドを多用するので今回はコマンドの復習をします。
ファイルの基本操作
ディレクトリの作成
- ディレクトリを作成する
mkdirを使う
mkdir 作成するディレクトリのパス
~/Desktopにtestディレクトリを作成する
$ mkdir ~/Desktop/test
ディレクトリの削除
- ディレクトリを削除する
rmdirを使う
rmdir 削除するディレクトリのパス
しかし、実行するには対象ディレクトリの中身が空でないと実行できない
- ディレクトリを丸ごと削除する
rm -r 削除するディレクトリのパス
- 削除するかどうかを確認する
$ rm -ri 削除するディレクトリのパス
これを実行することで一つ一つ確認しながら削除することができ、削除するファイルと削除しないファイルを選ぶことができる
コマンドの結果をファイルに書き出す
コマンドの結果をファイルに書き出すことをリダイレクトと呼び、記号「 > 」を使う
コマンド > ファイルのパス
- calコマンドの出力をリダイレクトする
$ cal > cal.txt
実行するとカレントディレクトリに「cal.txt」がない場合は作成し、ある場合は上書きをする
- 作成したファイルの中を見る
$ cat cal.txt
- catコマンドとリダイレクションを使用してテキストファイルを作成する
$ cat > mail.txt recursivd@example.com makoto@ecample.com Saori@ecample.com (Ctrl + D で終了)
$ cat mail.txt recursivd@example.com makoto@ecample.com Saori@ecample.com
- リダイレクションを使用したファイルのコピー
「mail.txt」を「myMail.txt」にコピーする
$cat mail.txt > myMail.txt
$ cat Mymail.txt recursivd@example.com makoto@ecample.com Saori@ecample.com
(余談) 普段実行しているコマンド入力は標準入力をファイルにリダイレクトして、データをファイルから読み込んでいる。
$ cat < cal.txt = $ cat cal.txt
- ファイルに追加する 「>>」
「>>」を使うことで上書きではなくファイルに出力を追加することができる
$ cat >> mail.txt yamagata@example.com aaaaaaaa@example.com [ Ctrl + D]
$ cat mail.txt recursivd@example.com makoto@ecample.com Saori@ecample.com yamagata@example.com aaaaaaaa@example.com
コマンドをパイプでつないで実行する
パイプはコマンドの実行結果を別のコマンドに渡してさらに処理を行う機能
2つのコマンドをパイプで結びつける
コマンド1 | コマンド2
- calコマンドの実行結果を「cal.txt」に追加する
$ cal 2021 | cat >> cal.txt # cal 2021を実行し、その出力を cat.txt に追加する
$ cat cal.txt
cal.txtには2021年10月のデータだけだったが2021年のカレンダーも追加された
ファイルのコピー
cp -R コピー元のディレクトリ コピー先のディレクトリ
「~/Desktop/test_2/」の中に「test」ディレクトリをコピーする
$ cp -R ~/Desktop/test ~/Desktop/test_2 $ ls ~/Desktop/test_2/ test
$ ls test example.txt $ cp -R ~/Desktop/test ~/Documents/ $ ls ~ /Documentst/test example.txt
- ディレクトリを丸ごと別の名前でコピーする
$ cp -R ~/Desktop/test/ ~ /Documents/test_sample # testディレクトリをtest_sampleという名前でコピーする
既に「test_sample」ディレクトリが存在するなら下に「test」ディレクトリが作成される
- 特定の複数のファイルをコピーする
$ cp *.txt ~/Documents/text_files/ # カレントディレクトリにある拡張子がtxtのファイル全てをコピーする $ cp ~/Desktop/*.txt ~/Documents/text_files/ # ~/Desktopにある拡張子がtxtのファイル全てをコピーする
*は0文字以上で?は1文字
ファイルの移動
- ファイルの移動
mv 元のファイルのパス 移動先のディレクトリ
「~/mail.txt 」を 「~/Documents/」に移動させる
$ mv ~/mail.txt ~/Documents/ $ls ~/Documents/ mail.txt
mvコマンドは名前の変更もできる
「~/Documents」ディレクトリの下の「mail.txt」を「oldMail.txt」という名前に変更する
$ mv ~/Documents/mail.txt ~/Documents/oldMail.txt
「~/Desktop」ディレクトリ下の「test」ディレクトリを「~/Documents」ディレクトリ下に「Mytest」ディレクトリとして移動
$ mv ~/Desktop/test/ ~/Documents/Mytest/ # ディレクトリの名前を変えて移動 # 同じ名前のディレクトリが存在していた場合は「Mytest」の下に「test」を移動
- 複数のファイルを移動する 「test.txt」と「example.py」を「sample」ディレクトリに移動する
$ mv test.txt example.py sample/ $ ls sample test.txt example.py
シンボリックリンク
シンボリックリンクはショートカットのようなもの
ln -s 元のファイルのパス シンボリックリンクのパス # 元のファイルのパスはシンボリックリンクからの相対パスにするか絶対パスにする
- ファイルのシンボリックリンクの作成
カレントディレクトリのファイル「test.txt」のシンボリックリンクを、カレントディレクトリに「sample.txt」として作成する
$ ln ~s test.txt sample.txt
これで、「test.txt」は「sample.txt」という別名でアクセスできるようになる
カレントディレクトリの中にMikanLoaderPkgという名前で$HOME/workspace/mikanos/MikanLoaderPkgを指すシンボリックリンクを作成する。
$ ln -s ~/workspace/mikanos/MikanLoaderPkg ./ # カレントディレクトリは 「.」
- シンボリックリンクの削除
unlink シンボリックリンクのパス