ファイルを格納する場所のことをいいます
ディレクトリ フォルダ
特に、Unix系のファイルシステムでは「ディレクトリ」, Windows系のファイルシステムでは「フォルダ」といいます
ディレクトリはルートディレクトリという大本のディレクトリを根とした木構造をしています
出典: https://atmarkit.itmedia.co.jp/ait/articles/1604/08/news019.html
名前 | 記号 | 説明 |
---|---|---|
ルートディレクトリ | / | 基準となるディレクトリ |
ホームディレクトリ | ~ | シェルへのログイン時のディレクトリ |
カレントディレクトリ | . | 自分がいまいるディレクトリ |
親ディレクトリ | .. | カレントディレクトリの一つ上のディレクトリ |
目的のファイル・ディレクトリへの道筋のことです
「どこから道案内をするか?」で二通りの書き方があります
ルートディレクトリからの道筋を絶対パスといいます
例1
/home/shinkan/document/test.txt
カレントディレクトリからの道筋を相対パスといいます
例2 今、ホームディレクトリにいるとして・・・
./document/test.txt
プログラムが書かれたファイルをごにょごにょすると機械語のファイルにできます(詳しくはあとで部員に聞いてね!)
そういう実行ファイルをコマンドといいます。
たとえば...
コマンドを実行するときに、引数というものをとってもらうことができます。
引数はコマンドのあとにスペースをあけて入力します。
なお、この資料に書かれている$
はコマンドを打ってください、という意味です。無視していただいて構いません。
$ (コマンド) (引数1) (引数2) (引数3) ...
例1. Cコンパイラgcc
でC言語ファイルfile.c
をコンパイルする gcc file.c
特に'-'(ハイフン)がついているものをオプションといいます。
例2. -v
、--verbose
をつけるとより詳細な出力をしてくれるよ
例3. -h
、--help
をつけるとヘルプ画面を表示してくれます
この後のコマンドでも引数やオプションを使う場面は多く出てきます
引数に与えたものをそのまま出力する
$ echo hi
hi
$ echo run
run
いまいるディレクトリの場所を表示してくれます
こんな感じ:
$ pwd
/home/ricora/guidance/shinkan
ディレクトリに移動することができます
ここで引数が重要
引数なし cd
はホームディレクトリ
$ cd
$ pwd
/home/ricora
引数つきcd
はその場所があればそこへ
$ cd ../shinkan
$ pwd
/home/shinkan
.(ドット)はいまいるディレクトリ、..(二重ドット)は一つ上のディレクトリという意味
$ cd /home/shinkan
$ pwd
/home/shinkan
いまいるディレクトリにあるファイル一覧を表示してくれます
$ ls
a.out hi.txt shinkan.pdf
引数に-l
や-a
をつけると詳しい出力結果が得られる
$ ls -l
drwxr-xr-x (なんとか) (なんとか) ./
drwxr-xr-x (なんとか) (なんとか) ../
-rwxr-xr-x (なんとか) (なんとか) a.out ...
ディレクトリを作ります
$ mkdir ricora-shinkan
$ ls
... ricora-shinkan ...
ファイルを作ることができるコマンド
$ touch ricora-alg.hs
$ ls
... ricora-alg.hs ...
ファイルの作成日時はls -al
とかで確認できる
ファイルを削除します
$ rm ricora-shinkan-0410.txt
ディレクトリを消すときは-d
オプション、ディレクトリ内も削除するなら-r
オプション
$ rm -rd ricora-shinkan-0410
コマンドのマニュアルを見るコマンド
$ man echo
マニュアルは英語だけど、ググるよりも欲しい情報が確実に載っている
/(スラッシュ)を打つと検索できる
シェルには環境変数というものがあります。printenv
で出力してみよう。シェルの設定をする変数という感じです。
その中にPATH
というものがあります。見つけられなかったらprintenv | grep -e '^PATH'
と打ってみよう
コマンドを打つとき、この$PATH
にある場所を探しにいっています。
新しいコマンドをインストールするとき、この$PATH
にその場所を追記するなどしないと動きません。
これ重要なので覚えておいてください。
聞きっぱなしで飽きたと思うので、実際に手を動かしてみましょう!
スライドは(多分)配布するので、それを見つつやってください。
シェルで'Hello, world!'を出力してみる
出力例:
Hello, world!
ヒント: echo
gcc
のバージョンを確認しよう
C言語のコンパイラ、gcc
のバージョンを確認しましょう。
出力例:
$ gcc --version
gcc (...) 9.x.x
ファイルを作ってみよう
ファイルを作ったらls
を打ってファイルを確認しましょう。
出力例:
$ ls
.. (ファイル名) ..
ヒント: touch
ファイルを削除してみよう
ファイルを削除したらls
を打ってファイルがないことを確認しましょう。
出力例:
$ ls
.. (ファイル名) ..
ヒント: rm
ディレクトリをつくって、その中に移動してみよう
ディレクトリをまず作って、別のコマンドでそのディレクトリに移動しましょう。
出力例:
$ pwd
/home/(username)/.../(つくったディレクトリ名)
ヒント: mkdir
cd
ファイルの中身を出力してみよう
ファイルの中身を出力するには、cat
というコマンドを使います。
出力例:
$ cat
(ファイルの中身)
ディレクトリの中からテキストファイルを検索してみよう
まず、拡張子が.txt
のファイルを作りましょう。
その後、find
というコマンドを使って拡張子が.txt
のファイルを探してみましょう。
出力例:
$ find ...
a.txt ricora.txt ...
ヒント: man find
ワイルドカード(*)
出力結果を標準出力以外に書き出します。
echo
で一行のpython
プログラムを書き、ファイルにリダイレクトしてからpython
プログラムを実行しましょう。
出力結果を別のコマンドに与えます。
(さっきも出てた)例:
$ printenv | grep -e '^PATH'
ls
で出てきたファイルをcat
して、そのバイト数をカウントしてみましょう。
ヒント: xargs
<- ググって、man wc
Linuxでファイルを開くとき、ファイルディスクリプタという数字が与えられます。以下のCプログラムを入力してみてください。
#include<unistd.h>
int main() {
const char buffer[6] = "head\n";
// 0, 1, 2, 3番目のfdに書き込んでみましょう
for (int fd = 0; fd <= 3; fd++) {
write(fd, buffer, 6);
}
// なぜfd = 3のときに出力されないか考えてみましょう。
}