未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

Linux学習履歴(1)~Linuxとは・シェルの基本機能・ディレクトリの操作・移動とコピー~

Linuxをあまり気にせずに使用してきたので、基礎的なことを学習しようと思い、『Linuxコマンドライン入門』を読んでいこうという趣旨の記事です。

全てをまとめる訳ではないので、ご注意ください。
また、Macユーザーです。
自分が知らなかった部分、使いそうだなと思った部分をピックアップしていきます。

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は、1日目〜2日目の内容についてです。

1日目

Linuxとは

LinuxUNIX系OSコマンドの一つです。

UNIXとは、OS XMicrosoft Windowsと同じくオペレーティングシステム(基本ソフト:OS)のひとつ。

Linuxカーネル部分のみをさす。

カーネル:OSの中心部分

UNIXコマンドではGUIで不得意な処理(拡張子指定のファイル一括コピーなど)を簡単にできるなど、コマンドを扱えるようになれば楽になる作業もある。

シェルスクリプトUNIXのコマンドで記述したプログラム。定期実行も可能

ターミナル・エミュレータ

キャラクタ端末(昔使用されていた、文字しか表示しない端末)をウィンドウシステム上で擬似的に再現したもの

ターミナル・エミュレーターはキャラクタ端末を模したものなので、コマンドの解釈・実行はコマンドインタプリタが行う(UNIXではシェル)

ユーザーが直接カーネルに働きかけることはできず、このシェルを介して、コマンドの実行をカーネルに依頼することになる。

具体例

$ echo Hello
-> Hello  #文字列が表示される
$ echo Atora Yamada
-> Atora Yamada  #引数を2つ以上渡すことも可能
$ echo Atora,Yamada
-> Atora,Yamada  #","で区切ることはできない。引数1つとして認識される。

コマンドにはオプションをつけつことも可能。
複数オプションも可能。

$ cal -j 12 2019  #"-j"オプションで、その年の1月1日からの通算日を表示
$ cal -3j 7 2019  #"-3"と"-j"オプションを同時指定。6から8月分のカレンダーを表示

上記では、オプションの指定にハイフン1つ+略語で表していましたが、ものによってはハイフン2つ+英単語という形式もある(GNU形式のオプション)。

$ ruby --version

ファイルシステム

$ ls [表示するディレクトリのパス]  #ディレクトリもファイルも同じように表示
$ ls -F  #"-F"オプションで、ディレクトリは最後にスラッシュがつくようになる

UNIXでは、ファイル名の先頭がピリオドで始まるファイル(ディレクトリ)は隠しファイルドットファイル)と呼ばれる。このファイルを表示させるには、以下のようなオプションを使用する

$ ls -a

スペースを含むものを指定するには、引数を"引数"もしくは'引数'とする必要がある。そうしないと、複数の引数として認識されてしまう。

$ ls "Atora Yamada"

コピーコマンド

$ cp -i [コピー元のファイルのパス] [コピー先のファイルのパス]   #コピー先での上書きの確認をとりたい場合は、"-i"オプションをつける

削除コマンド

$ rm [削除するファイルのパス]  #rmで削除すると、その時点でディスク上から削除される(ゴミ箱に入る訳ではない)ので、削除の取り消しは不可能

おまけ

cd ~-  #直前にいたディレクトリに行く

option + →  #次の単語へカーソルを移動
option + ←  #前の単語へカーソルを移動
Ctrl + F  #一文字カーソルを進める
Ctrl + B  #一文字カーソルを戻す

2日目

シェルの基本機能

ワイルドカード

*  #任意の0個以上の文字列に一致
?  #任意の1文字と一致

使用例)
$ ls Pictures/?*.???  #Picturesディレクトリの下で、拡張子が3文字のファイル一覧を表示

ワイルドカードやホームディレクトリを表す"~"はそれぞれのコマンドが解釈している訳ではなく、シェルが展開してカーネルに伝達している。

ワイルドカードを名前に含む場合は、引数を"引数"もしくは'引数'とする必要がある。

UNIXでは、普通のファイルだけではなく、ディレクトリ・周辺機器もファイルとして扱うので、単にファイルと表記されていた場合でも、ディレクトリや周辺機器が含まれている可能性がある。

コマンドの入力と出力

入出力先 説明 バイス
標準入力(stdin) 標準的な入力先 キーボード
標準出力(stdout) 標準的な出力先 ターミナルウィンドウ
標準エラー出力(stderr) エラーの標準的な出力先 ターミナルウィンドウ

リダイレクション:標準入力・出力をファイルに変更する機能

標準出力先をファイルにリダイレクトする

[コマンド] > [ファイルのパス]

使用例)
$ cat > name.txt  #name.txtを作成する
Atora <Enter>
Yamada <Enter>
Ctrl + D  #テキスト入力を終了する

$ cat name.txt
Atora
Yamada

存在するファイルに対してリダイレクトすると、ファイルの中身が消去される。
追加するには">>"を用います

$ cat >> name.txt
Taro

$ cat name.txt
Atora
Yamada
Taro

標準入力先をファイルにリダイレクトするのは、すでに引数の概念で使われている。

※標準出力を入力と同じファイルにリダイレクトすると、ファイルの中身が空になるので注意。

コマンドをパイプでつなぐ

パイプ:コマンドの実行結果を別のコマンドに渡してさらに処理を行う機能

$ [コマンド1] | [コマンド2] | [コマンド3] | ....

使用例)
$ last | head | cat -n  #以前にログインしたユーザーの情報(last)のうち、10行文を出力し(head)、行番号を付与する(cat -n)

ディレクトリの操作

$ ls -l  [ディレクトリのパス]  #ディレクトリ一覧の詳細表示
$ ls -l  [ファイルのパス]  #ファイルの詳細表示
$ ls -ld  [ディレクトリのパス]  #ディレクトリ自体の詳細表示
$ ls -lh  #ファイルサイズを単位付きで表示

$ mkdir -p [作成したいディレクトリのパス]  #"-p"オプションをつけることで、途中の存在しないディレクトリも作成しつつ、目的のディレクトリの作成を行える

$ mkdir sample; cd sample  #";"で区切ることで、複数のコマンドを1行で実行できる

$ rm -r [丸ごと削除するディレクトリのパス]  #指定したディレクトリ以下も全て削除
$ rmdir [削除するディレクトリのパス]  #削除するディレクトリ以下が空でないとエラーになる
$ rm -ri [丸ごと削除するディレクトリのパス]  #ディレクトリ以下のファイルを削除するかどうか確認ができる(途中で削除をやめた場合、ディレクトリも削除されない)

おまけ

$ which [コマンド名]  #コマンドの保存先を調べる

移動とコピー

コピー

$ cp -p [コピー元のファイルのパス] [コピー先のファイルのパス]  #ファイルの属性(変更日時やアクセス権限など)を保持したままコピーする
$ cp -R [コピー元のディレクトリ] [コピー先のディレクトリ]  #ディレクトリを丸ごとコピーする。コピー先にコピー元と同じファイルがある場合は上書き、コピー先にしかないファイルはそのまま残る
$ cp -v [コピー元のファイルのパス] [コピー先のファイルのパス]  #コピーされたファイル名が順に表示される

移動

$ mv [元のファイルのパス] [移動先のディレクトリ]

おまけ

はてなブログLinuxコマンドのシンタックスハイライトは、"sh"が対応しています。(確実に綺麗にはハイライトされていませんがすみません)

次の記事へ

atora1992.hatenablog.com