Linuxの基本(その1)

遅くて使いものにならなかったパソコン(OSはWindows)を、1年ほど前に「Linux」にしました
最近、そのパソコンはアップデートもエラーになる状態w
完全に壊れても平気😅

コンピュータのことは、ある程度調べた

壊れても平気なパソコンなので、いろいろ試してみたい!!
とりあえず、「Linux」を勉強してみよう

目次
  1. Linuxについて
  2. 基本的なLinuxコマンド
    1. マニュアル・ファイルの中身を表示
    2. ディレクトリ・ファイル関係のコマンド
    3. findコマンド
  3. 標準入出力について
    1. リダイレクト
    2. パイプ
  4. vi(テキストエディタ)の使い方
  5. ディレクトリ構成

Linuxについて

Linuxは、「UNIXベース」で開発された「POSIX」仕様のOSです
無料で入手可能な、オープンソースソフトウェア(OSS)です

「POSIX」とは、OSに共通の機能などについてのIEEE の標準規格です(OSの互換性のための標準規格)
オープンソースソフトウェア(OSS)とは、ソースコードが公開されていて、一定の条件のもとで誰でも自由に「利用」でき、また「改変・配布」もできるプログラムです

Linuxの主な用途

  • デスクトップOS
  • サーバーOS
  • モバイルOS
  • 組み込みシステム

ディストリビューション・ディストリビュータについて

「本来のLinuxといわれる部分」は「カーネル」部分だけです
コンピュータを動かすには「カーネルをサポートするソフトウェア」や「アプリケーション」も必要です

これらをパックにまとめたものは「ディストリビューション」といいます
開発・配布している企業や団体を「ディストリビュータ」といい、有償と無償があります

ディストリビューションの種類

RedHat系 
RPMというパッケージ管理システム
CLIとして利用することが多く、サーバー向け
RHEL(商用)・CentOS(RHELの商用部分を取り除いて提供されている)など
Debian系 
deb形式によるパッケージ管理
デスクトップやサーバーなど幅広く利用されている
Debian GNU/Linux(コミュニティーで運営)・Ubuntu・など
Slackware系
特にパッケージの管理ツールはなく、スキルが必要です
Slackwareなど

基本的なLinuxコマンド

コマンドラインの便利なショートカットキー

ショートカットキー

「tabキー」でファイル名の予測変換ができます

マニュアル・ファイルの中身を表示

man コマンド名
コマンドのマニュアルを表示する
qで終了
whatis コマンド名でコマンドの説明のみ表示
コマンド –help
使用方法やオプション一覧
less オプション ファイル名
ファイルの中身を1画面で表示する(スクロール表示)
-n オプション 行番号を表示
cat オプション ファイル名
ファイルの中身を表示(複数のファイルは、連結して標準出力に表示します)
-n オプション 行番号を表示

スクロール操作と検索

  • d カーソルの位置から半分画面を進む
  • u カーソルの位置から半分画面を戻る
  • f カーソルの位置から1画面進む
  • b カーソルの位置から1画面戻る
  • / 下に検索(nで下へ(次の結果)・N(前の結果)で上へ)
  • ? 上に検索(nで上へ・Nで下へ)

ディレクトリ・ファイル関係のコマンド

*オプションはコマンドのあとに入力しますが、下記では省略しています

touch ファイル名
ファイルの作成(複数ファイルも可能)
mkdir ディレクトリ名
ディレクトリを作成
-p dir1/dir2 (dir1の中にdir2も作る)
pwd
カレントディレクトリ(現在のディテクトリ)を表示
cd パス
移動
「. /カレント」「.. /1階層上」(相対パス)
「/ ルート」「~/ ホーム」
ls
ディレクトリの中のファイルを表示
-a 隠しファイルも表示
-l 詳細情報を表示
-lt 新いものが上で表示
-ltr 古いものが上で表示
rm ファイル名
ファイルの削除
-f 強制的に削除
-i 削除確認をする
-r ディレクトリを再起的に削除(rmdirは空のディレクトリを削除)
-rf ディレクトリを強制的に削除
mv 移動元 移動先
移動先がディレクトリならば、 指定したファイルを同じ名前でディレクトリに移動
移動先がファイル名ならば、 1つ目ファイル名を2つ目のファイル名に変更
ファイル ・ディレクトリの移動(mv ファイル名1 dir/. ・・dir/に移動)
名前の変更(mv ファイル名1 ファイル名2・・ファイル名2に名前を変更)
-b 移動先に同名のファイルがあれば、バックアップを取ってから上書きする
-n 移動先に同名のファイル(ディレクトリ)があったら上書きしない
cp コピー元のファイル名 コピー先
ファイルをコピー 
コピー先がディレクトリの場合はそのディレクトリ内にコピー
コピー先がファイルの場合はそのファイル名でコピー
-r ディレクトリをコピー
-p パーミッションやタイムスタンプの情報もコピー
ln リンク元ファイル名 リンク名
リンクをはる
オプションがない場合はハードリンク
-s シンボリックリンク

注意1mvやcpで「移動先・コピー先」がディレクトリの場合
「指定したディレクトリが存在しない」場合、ファイル名は「指定したディレクトリ名」に変更されてしまいます
防止するには、ディレクトリ名のあとに「/.」を付けます(ディレクトリにファイルを移すことを明示する)

注意2mvやcpで「移動先・コピー先」がディレクトリの場合
移動先やコピー先に、「同じファイル名」があれば上書きされてしまいます
心配なときは、「-i」で事前確認できます

ハードリンクとシンボリックリンクについて

  • ハードリンク(1つの実体に対してファイルを複数作る、ようするに同じ中身のファイルを複数作れる)
    *「コピー」との違いは、「コピー」は内容が同じ実体が2つになるが、ハードリンクはあくまでも実体は1つです
    リンク元のファイルが削除されても、ファイルの実体にアクセスできる
  • シンボリックリンク(エイリアス・ショートカットとも呼ばれる)
    「ファイルまでのパス」を含んだ「小さなファイル」を作り、そのファイルから実体を参照できるようにする仕組み
    リンク元のファイルが削除されたり、変更されると、ファイルの実体にアクセスできない
    長いパス名を省略したい時に便利(リンク名でアクセスできる)

findコマンド

名前や更新日などで、ファイルやディレクトリを探します

findコマンドは、検索位置から下層のサブディレクトリを含めて検索条件に一致する「ファイル・ディレクトリ」を検索します
(注意)検索位置のパスでファイル名を指定する、サブディレクトリは探しません
そこで、サブディレクトリを含めて検索する時は「-name」オプションをつけて検索条件にファイル名を指定します
find 検索開始ディレクトリ 検索条件 
検索条件の一例

-type ファイルの種類
「f」は通常ファイル 
「l」はシンボリックリンク 
「d」はディレクトリ
-name ファイル名
ファイル名を指定 大文字小文字は区別する
「*と?(ワイルドカード)」が使える(「’’」で囲う)
-iname ファイル名
大文字小文字は区別しない
-mtime
任意の日数に更新されたファイルやディレクトリ
「今日は、0」「昨日は、1」
「10日以内は、-10」「10より前は、+10」
-amin
分数以前にアクセスされたファイルやディレクトリ
「10分以内は、-10」

標準入出力について

標準入出力とは、デフォルト(なにも指定しなかった場合)の「入力元と出力先」です
3つに分類されます

  • 標準入力(stdin)
  • 標準出力 (stdout)
  • 標準エラー出力 (stderr)

「標準入力先」は、「キーボード
「標準出力先と標準エラー出力先」は、「ディスプレイ」です

入出力先の変更や、コマンド同士でデータの受け渡しができます

ちなみに「echoコマンド」は、標準入力を標準出力に返すという命令です
ターミナルに、echo 'Hello'と入力すると、Helloと表示されます

リダイレクト

リダイレクト「>」は、「標準入力・標準出力・標準エラー出力」を切替える機能です
(入力元 > 出力先)
(出力先 < 入力元)

標準出力を「ディスプレイ」でなくて「ファイル」に切替えています

echo 'Hello' > hoge.txt 
#「hoge.txt」ファイルにHelloと書かれます

標準入力を「キーボード」ではなく「/ect/hosts」(ファイル)に、catを標準出力に切替えています
(cat /etc/hostsでも同じ結果です)

cat < /etc/hosts

エラー出力は「2>」です(標準出力の識別子は「1」ですが、「1」は省略できます)

ls /hoge 2> err.txt

「hogeディレクトリ」は存在しないので、lsで表示できません
結果、「err.txt」には「/hogeは見つかりません」のようなエラーメッセージが書かれます

  • 標準入力:0
  • 標準出力:1
  • 標準エラー:2

2>&1は、標準エラーと標準出力を同じ出力先にします

注意「>」で指定するとファイルは上書きされます
追記する時は「>>」にします

余談/dev/null を出力先として指定すると、何も表示されない(非表示にしたい時に利用)

パイプ

パイプ「|」はコマンドをつなげます(複数のコマンドを「|」でつなぐことができます)
「コマンドの標準出力」を「|」で、「次のコマンドの標準入力」にわたします

大量に出力される時は「 | less」 にするとスクロールで確認できます

grepコマンドと組み合わせて使うと便利です
grep オプション パターン 検索ターゲット:「検索ターゲット」から「パターン」の文字列を含む行を抽出する
「検索ターゲット」の代わりに、他のコマンドの出力結果から「文字列」を絞り込む

 ls /bin | grep systemd

余談

  • 「findコマンド」は、名前や更新日などで、ファイルやディレクトリを検索します
  • 「grepコマンド」は、ファイルの中のテキストを正規表現などを使って検索します

vi(テキストエディタ)の使い方

テキストの編集です

テキストを入力するときは、入力モードに切り替え、入力モードからぬけるときは「Esc」を押します

行のコピーや削除などは、コマンドモードのままでもできます

  • vi ファイル名 ファイルを作成して編集
  • 入力モード
    • i 現在のカーソル位置から挿入
    • A カーソルがある行の最後から文字入力
    • O 前の行から入力
    • o 後の行から入力
  • Escコマンドモード
    • x 1文字削除
    • dd 1行削除
    • yy 行コピー
    • y数y 数行コピー
    • G 最終行へ移動
    • p クリップボードの内容を下の行に貼り付ける
    • :w ファイルを保存する。viは終了しない
  • Escでコマンドモード・vi終了
    • :q! セーブせずに終了
    • :wq ファイルを保存し終了

ディレクトリ構成

「FHS」は、Linux(などのUNIX系OS)の標準的なディレクトリ構成を定めた標準仕様です
ほとんどのディストリビューションでは、FHSを元にディレクトリを構成しています(細かい点違いはある)

CD-ROMドライブなどの異なるファイルシステムは、ディレクトリツリーにマウントすることで使用可能になります

一番上は、/ root(ルートディレクトリ)

/bin
基本的なコマンドを格納
/boot
システムの起動時に必要なファイルを格納
/dev
デバイスファイルが保存されいる
/hda 1番目のハードディスク
/hdb 2番目のハードディスク
/pts 仮想端末デバイス
/etc
「設定ファイル」が格納されています
代表的なファイル
「hosts」IPアドレスとホスト名を名前解決する
「profile」シェルの初期設定ファイル
/home
ユーザの作業領域が格納される
ログインしたときに最初にアクセスするディレクトリは/home/ユーザー名
/lib
複数のプログラムで共通に使われるライブラリ(システムの起動時や「/bin」や「/sbin」のコマンドを実行するのに必要なライブラリ)が保存されている
直接アクセスすることは滅多にない
/mnt
ファイルシステムの一時的なマウントポイント用ディレクトリ
/media
CD-ROMなどのリムーバブルメディアのマウントポイント
/opt
パッケージ管理システムでプログラムをインストールする時に使用するディレクトリ
/proc
カーネルやプロセスに関する情報をテキストで表示する仮想ファイルシステム
CPU情報やメモリの使用状況、ネットワーク情報などが参照できます
/root
root用ホームディレクトリ
/sbin
root権限で使用するコマンドが格納されています
/tmp
ファイルなどを一時的に保管するディレクトリ
/srv
システムに提供されたサイト固有のデータ
/usr
ユーザー向けのディレクトリ(/usrディレクトリの下にも同じ構成のサブディレクトリがあります)
「/usr/local」ユー ザが独自にインストールするファイル
「/usr/bin」起動時に必要ない一般ユーザー向けのコマンド
「/usr/sbin」起動時に必要ない管理系のコマンド
「/usr/lib」「/usr/bin・/usr/sbin」に必要な共有ライブラリ
「/usr/share」システムアーキテクチャに依存しないファイル
「/usr/src」ソースコード
/var
ログ・データベース・ウェブサイトなどの動的に変化するファイルを保存しておくディレクトリです

「/bin」「/etc」「/lib」「/sbin」はシステム起動時に必要です

マウントポイントについて

補助記憶装置を使うために、まずハードディスクのパーティションを設定し、パーティション上にファイルシステムを構築し(フォーマット)、そしてマウントします

dfコマンド」で、現在マウントされているファイルシステムのリストを表示できます(どのパーティションがどのディレクトリにマウントしているのか確認できます)
「パーティション」がマウントしている「ディレクトリ」を「マウントポイント」と呼びます

ファイルシステム

Linuxで利用できるファイルシステムには「ext2」「ext3」「ext4」「JFS」「XFS」「ReiserFS」などいろいろあり、デフォルトのファイルシステムは「ext4」のことが多い

「VFS(仮想ファイルシステム)」が、アプリケーションとファイルシステムの中間に介在し、複数のファイルシステムでも同じ使い方ができいます

カーネル内部ではファイルの実体は、inode(ノード番号)を使って管理されています

ls -i」を使えば「inode番号」が表示されます