過程が大事

学んだことを適当にアウトプットします

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

f:id:recursive1414:20211018165718p:plain

  • 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

f:id:recursive1414:20211018172850p:plain

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 シンボリックリンクのパス