見出し画像

Linuxのトリセツ

Linuxの勉強をはじめる前に


OSの役割
普段の生活の中でパソコンに関して、「Windows」や「Mac」といった言葉を耳にすることがあると思います。「Windows」や「Mac」というのは、OS(Operating System) と呼ばれるものの種類を表しています。
OSとは、コンピュータ(個人向けに限らずサーバーなども含めたコンピュータ全般)を動かすのに必要なソフトウェアのことです。Windows や Macもバージョンアップによって新しいものと入れ替えられるため、簡単に交換できるもののように感じたり、あるいは存在するのが当たり前すぎて特に意識していなかったりする人もいるかもしれません。しかし、OSとアプリケーションはまったく違うものです。
ワープロソフトや表計算ソフトなどは、OSを通してコンピュータとつながっています。アプリケーションは、私たちが目的に応じた作業を行うための道具であり、これらは、OS がなければ利用できません。たとえば銀行のATM にもOS は必要ですし、スマートフォンやタブレットにも専用の OS が入っています。このように、OS は私たちがコンピュータを使ううえでなくてはならない、とても大切なものです。LinuxもそのOSの一種です。

CUI と GUI
OSの見た目の違いとして、キーボードを使ったコマンド(コンピュータと直接やり取りを行うための命令文)の入力によって操作する CUI (Character User Interface) 環境と、マウスを使ってファイルやフォルダを操作するGUI (Graphical User Interface) 環境の大きく2つに分類できます。

初期のOSはみんな CUIでしたが、やがてMacやWindowを代表とするGUIを備えたOSが主流なってきました。GUI は状態や設定方法がわかりやすいのが特徴ですが、CUIにも、必要とするリソース(メモリやディスク領域)が少なくて済む、セキュリティが比較的強固で、処理を自動化しやすいといったメリットがあります。そのため、あえて GUIを採用しなかったり、GUI環境の中でCUIを動かしたりする場合もあります (WindowsのServerCore /コマンドプロンプト/ PowerShell など)。
文字ベースの実行環境をCUI(キャラクターユーザーインターフェイス)といいます。
GUIグラフィックを使用し、ユーザーが直感的に操作できる実行環境をGUI(グラフィカルユーザー
インターフェイス)といいます。

まずは、UNIXというOSの話から始まります。
UNIXは元々、アメリカ AT&T社のベル研究所で開発され、大きく分けて2つの路線で発展してきました。ひとつは、ベル研究所の作ったUNIXを受け継ぐSystem V 系と呼ばれるもので、もうひとつは、カリフォルニア大学バークレー校で開発されたものを受け継ぐBSD系です。
UNIXは、専用のワークステーションなどで動作するものでしたが、これらを個人向けのパソコンで動作するように移植したものをPC-UNIXと呼びます。Linux は PC-UNIXの代表ですが、UNIXのソースコードを流用していないため、UNIX系OS と呼ばれることもあります。
UNIXの他の分類方法としては、研究機関向けに公開された情報をもとに、大手コンピュータメーカーが自社コンピュータ製品向けに商品として開発・販売してきたもの(商用 UNIX)と、有志ユーザーが協力し合って開発を続け、基本的には無償で提供することを前提としているものがあります。

Linuxについて
現在、一般ユーザーが触れる機会が最も多い UNIXといえば、やはりLinuxです。
Linux は、開発当時フィンランドの大学院生だった Linus Torvalds 氏によって開発された
PC-UNIXの一種です。彼が作ったのは OSの核となる「カーネル」の部分です。オープンソースとしてソースコードが無料公開され、現在も、世界中のユーザーによって改良が続けられています。

オープンソース
ソースコード(プログラムの元になるもの)を一般に公開し、誰でも自由に使える状態にすることをオープンソースといいます。企業が開発したソフトウェアの場合、その利益を確保するためにソースコードを非公開にするのが一般的です。
そのため、その企業の利益にそぐわないような開発は行われなくなる反面、企業の責任の範囲内においては手厚いサポートを受けられます。これに対して、オープンソースのソフトウェアは、ユーザーによって支持される限り、迅速かつ効果的な改良や新機能の開発が継続されるというメリットがあります。その一方でサポートやサービス面で行き届かないこともあります。

ディストリビューション
Linux 自体はオープンソースですが、実際は、企業や団体が独自のツールやサポートなどの
サービスを付け加えて、パッケージを作っています。これをディストリビューション(配布形
態)と呼びます。
ディストリビューションには実にたくさんの種類があるのですが、大きく分けて、Debian系、
RedHat 系、slackware 系に分かれます。同じ系統のディストリビューションではパッケージ
管理の方法が共通しています。有名なディストリビューションには、Debian 系の Ubuntu、RedHat 系の CentOS などがあります。 CentOSをベースにして解説を行います。
多くのディストリビューションは無償でインターネットからダウンロードできますが、主に
企業向けに販売してサポートを手厚くしているものもあります。たとえば、RedHat は元々
無償のディストリビューションでしたが、路線変更して有償の Red Hat Enterprise Linux
(RHEL) となりました。

BSD系UNIXについて
BSD とは、カリフォルニア大学バークレー校で開発・配布された UNIX ソフトウェアをルー
ツに持つ OS の総称です。名前も、Berkeley Software Distribution を由来とします。
元々は公開当初のソフトウェアだけを指す言葉でしたが、今ではその流れを汲んで開発が続けられている、FreeBSDやOpenBSD、BSD/OS、NetBSDなどの同系統のOS全般を指すようになりました。
中でも有名なのが、FreeBSDです。FreeBSDは個人でも利用可能なPC-UNIXであり、ソー
スコードは無償で公開されています。
LinuxとBSDでは、ライセンス形態も異なります。Linuxは再配布の際にコードを公開することが義務付けられていますが、BSDが採用しているライセンスでは、著作権さえ正しく表示されていれば、再配布の際にコードを非公開にできることになっています。そのため、商用利用しやすいというメリットがあります。実際、BSD系OSのすべてがフリーで公開されているわけではありません。そのほか、Linux はパソコン対応を中心に開発が進められているのに対して、BSD はさまざまなハード上で動くものが開発されるなど、多岐に渡って展開しています。

コンソールという考え方
LinuxやUNIXのシステムでは、「Linux/UNIXがインストールされたコンピュータ(ホスト)に、ネットワーク経由で複数の別のコンピュータ(端末、ターミナル)から接続して、作業を行う」という利用方法が基本になっています。端末は多くの場合 CUI環境で、ユーザーは端末にコマンドを打ち込んでホストを操作します。このとき、ユーザーからコマンドを受け取ってそれをホストに渡す役割をするのが、コンソールです。

コンピュータを操作するときに使う入出力装置をコンソールといいます。コマンド操作に使う
アプリケーションやOSそのものを、コンソールもしくはコンソールアプリケーションと呼ぶ
こともあります。

一方近年は、LinuxをMac や Windows のように、単独のGUI環境(デスクトップ環境)で利用することも多くなってきています。また、Mac OS は BSD系のUNIX をベースにした。OSになっています。

意外に身近な Linux の世界
Linux は、企業や学校などで導入されることが多いのですが、意外なところでも使われています。たとえば、Linuxで運営されている Web サーバーは、インターネット上にたくさんあります。インターネットを利用している人なら、気づかないうちにLinuxサーバーにアクセスしたことがある人が大半でしょう。
ただ、個人レベルで Linux 環境に直接触れる機会は、確かにあまり多くないかもしれません。
以前は、個人向けのパソコンで Linux 環境を使おうとすると大変な手間がかかりました。ネットワークにつないだりプリンタを利用したりといった周辺環境を整えるのも一苦労で、いざ使えるようになっても操作が難しくて挫折してしまうことが少なくありませんでした。そのため、職場などであらかじめ用意された環境を利用する以外は、一部のマニアが利用するだけの世界だったといっても過言ではありません。ところが、最近はLinuxが普及し、昔なら考えられなかったことですがノートパソコンや仮想環境にも比較的手軽にインストールできるようになるなど、大変身近な存在になりつつあります。
ぜひこの機会に、Linux の世界を体感してみてください。

Linux仮想環境


Linux環境が身近にない場合は、自分で環境を用意しなければなりません。もしLinuxのサーバーにアクセスして利用している場合でも、特別な事情がない限り、管理者権限を与えられていることはないでしょう。しかし、コンピュータを新たに準備してLinux を導入するのは大変な作業ですし、購入費用もかかってしまいます。そこで、Windows の中に Linux の仮想環境を作ることを考えてみます。
仮想環境とは、OS の上でコンピュータのハードウェアをエミュレート(模倣)して、ソフトウェア的にコンピュータを作ることです。このようにして作った仮想上のコンピュータのことを仮想マシン(または仮想PC、仮想サーバー)と呼びます。この仮想マシンに Linux をインストールするのです。仮想環境は手軽なことから、実運用においても、処理性能が低くても構わない場合に利用されることがあります。なお、仮想環境はコンピュータの中にコンピュータを再現するため、仮想環境を構築するコンピュータは、多くのディスク容量、メモリ、CPU性能を必要とします。低い性能のコンピュータでは、仮想環境の中のOSの処理が遅すぎて実用に耐えなかったり、そもそも仮想環境を構築できなかったりするので注意してください。

仮想環境のインストール
Windows 上で Linux を動作させるためには仮想環境が便利です。一例として、Oracle VM VirtualBox のインストールを紹介します。
インストーラーのダウンロード
公式サイト (https://www.virtualbox.org/)にアクセスし、左側のカラムにある [Downloads] リンクをクリックして、最新の [Windows hosts]からインストーラーをダウンロードします。

インストーラーの起動
ダウンロードしたファイルを実行すると、インストールが開始されるので、「Next] ボタンをクリックします。

構成とインストール先の選択
インストール構成とインストール先の選択画面が表示されますが、通常はそのまま[Next] ボタンをクリックしてかまいません。
次に表示される「Custom Setup」画面も、そのまま。[Next] ボタンをクリックします。

ネットワークインターフェイス
インストール中にネットワーク接続がリセットされ、一時的に切断されることの注意画面が表示されます。[Yes] ボタンをクリックして先に進みましょう。

インストール
「Ready to Install」画面が出たら「Instal ボタンをクリックしてインストールを行います。
途中、USBドライバーのインストールを確認する画面が出たら、[インストール]ボタンをクリックします。インストールが終了したら、[Finish]ボタンをクリックしてOracle VM VirtualBox マネージャーを起動します。

仮想マシンの新規作成
Oracle VM VirtualBox マネージャーの起動画面から、[新規]ボタンをクリックして仮想マシンを追加します。

「仮想マシンの作成」画面では、[名前]に「CentOS」や「Ubuntu」などと入力すると、ディストリビューションに応じた設定が行われるので、それを利用します。[マシンフォルダー] も設定できたら、[次へ]ボタンをクリックします。

メモリーサイズは、表示されている値より大きい値を選びましょう (4000MB程度が無難です)。選択できたら「次へ]をクリックします。
次に、仮想ハードディスクについてたずねる画面が出るので、[仮想ハードディスクを作成する]を選択し、[作成]ボタンをクリックします。引き続き表示される画面では、
・ファイルタイプ:[VD]
・可変/固定サイズ:可変サイズ」
・場所とサイズ:任意の場所
・サイズ
を選択し、最後に[作成]をクリックすると、仮想マシンが作成されます。

仮想マシンの起動
Oracle VM VirtualBox マネージャーの起動画面に、作成した仮想マシンが表示されています。
仮想マシンを選択し、[起動]ボタンをクリックすると仮想マシンが起動します。
仮想マシンにはまだOSがインストールされていないため、表示された「起動ハードディスクを選択」画面で、左下のほうにある「フォルダーアイコン」をクリックしてOSインストール用のisoイメージ を選択し、[起動]ボタンをクリックします。

CentOS 8のインストールのポイントを紹介します。
iso イメージのダウンロード
公式サイト(https://www.centos.org/)にアクセスし、上部の [GET CENTOS] をクリックします。
表示された画面で[CentOS Linux DVD ISO] をクリックします。

非常に多くのダウンロードリンクが表示されるので、好きなものをクリックしてください。
iso イメージのダウンロードが開始されます。

DVDメディアの準備
パソコンをはじめ、実際のマシンにインストールする際には、DVD-Rなどのメディアに書き
込んでおく必要があります。お使いの DVD書き込みアプリケーションのマニュアルなどを参
考に、インストール用メディアを作成してください。
仮想マシンでは、メディアを準備する必要はありません。

インストールの開始
実際のマシンではインストールメディアをドライブに入れ、仮想マシンでは起動ディスクとし
iso メディアを選択し、マシンを起動します。インストール方法の選択画面が出るので、[ | ]
キーを押してから [Enter] キーを押して、インストールを開始します。

言語の選択
言語の選択画面が出るので、[日本語]を選択し、[続行]ボタンをクリックします。

インストール先ディスクの設定
「インストール概要」画面が表示されるので、[インストール先]ボタンをクリックします。
仮想環境では、画面サイズが合わずボタンがはみ出すことがありますが、問題ありません。
インストール先のストレージが選択されているのを確認します。
「ストレージの設定]の[自動構成]と[利用可能な領域を追加する]が選択されているのを確認したら、左上の完了]ボタンをクリックし、「概要」画面で[インストールの開始]をクリックします。

インストール中にすること
インストールには時間がかかるため、表示されるボタンをクリックして、root パスワードの
作成とユーザーの作成を行っておきましょう。

rootパスワードの作成
rootのパスワードを入力し、完了]ボタンをクリックします。

インストールの完了
インストールが完了したら、[再起動]ボタンが表示されるのでクリックし、再起動します。
その際、インストールに使ったDVDメディアは取り出しておきましょう。VirtualBox の場
合は、仮想マシンのウィンドウのメニューから、[デバイス] →[光学ドライブ] →[仮想ドライブからディスクを除去] を選択し、再起動してください。

ライセンス
再起動したら、[License Information] ボタンが表示されるのでクリックします。

ライセンスを確認し、問題なければ[ライセンスに同意します。]にチェックを入れ、完了]ボタンをクリックします。最後に[設定の完了]ボタンをクリックすると、CentOSが起動します。

GUI を無効/有効にする
GUIを無効にする
そのままでは GUI の画面になっています。GUI を無効にするには、[アクティビティ]メニューから端末を起動し、以下のコマンドを入力します。

sudo systemctl disable gdm

いったん仮想マシンの電源をオフにして再起動すると、コマンドラインで起動します。

GUI を有効にする
GUI を有効にするには、コンソールにログインして、以下のコマンドを入力します。

sudo systemctl enable gdm

以下のコマンドで再起動すると、GUI が有効になります。

sudo reboot

CentOS 8で日本語入力をする場合、[Windows] キー+ [スペース]キーで入力を日本語に切り替えられますが、かな漢字入力(kkC)が入っていないため、切り替えられない場合があるようです。
そのような場合に、かな漢字入力を導入する手順を解説します。
かな漢字入力のダウンロードとインストール
アプリケーションの一覧から「ソフトウェア]を選択します。
検索ボックスに「ibus-kkc」と入力します。「Kana Kanji」が出てくるのでクリックします。
インストールボタンを押すとインストールが行われます。
途中で管理者のパスワードの入力を求められるので、入力します。
インストールが実行されます。インストールが完了したら必ず OS を再起動してください。

かな漢字入力の追加
[設定から地域と言語] (Regeon & Language) を選択します。
入力ソースの[+] ボタンを押して、入力ソースの追加画面を起動します。
日本語を選択し、「日本語(かな漢字)」を選択して、[追加]ボタンを押します。これで、[Windows] キー+「スペース]キーで、入力を日本語に切り替えられるようになります。


Ubuntu のインストール
Ubuntu のインストールのポイントを紹介します。
isoイメージのダウンロード
公式サイト(https://jp.ubuntu.com/download)にアクセスし、利用するバージョンの「ダウンロード」をクリックすると、ダウンロードが開始されます。

インストール
ダウンロードできたら、CentOS と同様に必要に応じてメディアの準備を行い、インストールを開始します。

日本語の選択
日本語を選択し、[Ubuntuをインストール]ボタンをクリックします。
キーボードレイアウトには日本語が選択されているはずなので、[続ける]ボタンをクリック
ます。
インストールするアプリケーションの選択
すでに選択されている内容でOKです。[続ける]ボタンをクリックします。

ディスクの設定
また、確認ダイアログが出るので、[続ける]ボタンをクリックします。

ユーザーの追加
ユーザー名やパスワードなどを入力し、[続ける]ボタンをクリックします。
国と地域の選択画面が表示されたら、[Tokyo」を選択し、[続ける]ボタンをクリックします。

インストールの完了
インストールが完了したら、[今すぐ再起動する]ボタンをクリックし、再起動します。再起動すると、インストールメディアを取り出したか確認する画面が表示されるので、[Enter] キーを押しましょう。

GUIを無効/有効にする
GUIを無効にする
そのままでは GUIの画面になっています。GUI を無効にするには、[アクティビティ]メニューから端末を起動し、以下のコマンドを入力します。

sudo systemctl set-default multi-user.target

再起動すると、コマンドラインで起動します。

GUIを有効にする
GUI を有効にするには、コンソールにログインして、以下のコマンドを入力します。

sudo systemctl set-defalt graphical.target


以下のコマンドで再起動すると、GUI が有効になります。

sudo reboot

Linuxの決まりごと
Linuxでは、いくつかの決まりごとがあります。まず、ログインとログアウト(ログオンとログオフ)を覚えてください。Windowsでは、電源を入れたら自動的にログインするようにもできますし、シャットダウンを選べば自動的にログアウトして、電源を切るところまでしてくれます。しかしLinuxでは、「誰がいつ使い始めて、いつ使い終わったか」ということが厳密に管理されます。そのため、ログインとログアウトは必ず行わなくてはいけない作業になります。
また、電源を切ったり再起動したりするには、管理者が特別なコマンドを実行する必要があります。これは、Linuxが元々複数の人による利用を前提としたサーバーOSとして設計されており、一般ユーザーが勝手に電源を切れないようになっているためです。


カーネルとシェル
カーネルは OSそのもの、シェルは OS を使いやすくするための機能です。シェルがなければ私たちの意思をカーネルに伝えることはできません。手紙を書くときに、ボールペンや鉛筆、万年筆といった筆記用具を選ぶのと同じように、シェルも目的や使い勝手によって、いろいろな種類の中から選ぶことができます。

ディレクトリ構造とファイル管理
Linuxを学ぶうえで大事なことのひとつが、ディレクトリ構造の考え方です。Linuxでは、すべてのファイルがディレクトリという単位でまとめられ、管理されています。
これは Windowsでも同様なのですが、GUI環境では、視覚的にわかりやすいので、ディレクトリ構造をそれほど意識しなくても作業できます。しかし、Linuxの基本は CUI環境です。CUI環境では、ディレクトリ構造を理解し、常にファイルのありかを把握しておかないと、ちょっとした操作も行えません。慣れないうちは少々ややこしいかもしれませんが、次に進むうえで大切なトピックです。きちんとおさえておきましょう。
また、Linuxでは、拡張子の使い方が Windowsとは少し異なります。Windowsではアプリケーションとの関連付けを主な目的として使われていますが、Linuxではファイルの種類を特定するためにユーザーが独自に指定するという性質が強くなっています。そのため、拡張子がないファイルや、名前が「.」から始まるファイルも存在します。
なお、Linuxでは、「.(ドット)」以降の文字のことを指すのにサフィックスという表現をよく使います。拡張子とサフィックスとは厳密には違うものですが、この本では一般ユーザーにもなじみの深い拡張子という表現を使うことにします。
実際に手を動かすよりも、ひたすら読み進めていくトピックが続くため、飽きてしまうかもしれませんが、投げ出さないでひとつひとつゆっくりとイメージをつかんでください。

コマンドによる操作
GUIとの操作感の違い、注意点について紹介します。
基本はコマンド
「Linuxの勉強をはじめる前に」でも紹介したように、Linuxではキーボードによるコマンド入力がメインになります。マウスでの操作に慣れている人は、キーボードでコマンドを入力す
ることに最初はかなり戸惑いを覚えるかもしれません。

GUI環境では、たとえばファイルをコピーする場合も、どこからどこへコピーするのか、目で確認しながら作業できます。しかし、CUI環境では、視覚的に確認することなく、どこで何をするのかを的確にコマンドで指示しなければなりません。

GUI環境のように、直感的な作業はできません。
そこで、どれだけユーザーがイメージを働かせられるか、ということが重要になってきます。まず自分が今どういう場所にいるのか、周りに何があるのか、という点について確認するところからはじめてみましょう。
コマンドプロンプトとコマンドライン
システムがコマンドの入力を待っている状態を示す記号(>、$、#など)を、プロンプトといいます。また、コマンドを入力する行のことをコマンドラインといい、「コマンドライン(コマンドプロンプト)で入力する」といった言い方をします。

プロンプト
hachi localhost ~$

コマンドライン環境によってユーザー情報などが表示されます。

ログイン/ログアウトとは
ログインとは、あらかじめ与えられた Linux上の利用者名(ユーザーアカウント)とパスワードによって、Linux の各機能を使える状態にすることです。ログアウトとは、すべての作業を終了することです。
Windows の場合は、ユーザーアカウントやパスワードの入力を省略できる場合がありますが、
Linuxでは必ずどのユーザーがログインしているかを確認(認証)します。
パスワードを忘れると、入れません。

新しくLinux環境を作る場合は、自分用のアカウントとパスワードに加え、管理者アカウントのパスワードを決めなければなりません。

実際に、LinuxをCUI環境としてインストールした場合のログインとログアウトの様子をみてみましょう。
ログイン
CentOS LinuxB (Core)
kernel 4.18.8-88.cl8,06_64 on an x86_64

①起動後、「login:」と表示されたら、ユーザーアカウントを入力し、[Enter]キーを押します。
Activate the web console with: systemctl enable --Now cockpit.socket localhost login: hachi

CentOS Linux 8 (Core)
Kernel 4,18.9-89.el8.x86_64 on an x86_64
Activate the web console with: systemctl enable --nou cockpit.socket

②パスワードを求められるので、パスワードを入力して [Enter] キーを押します(パスワードは画面には表示されません)。
localhost login: hachi
Password:
localhost log in: hachi
Password:
Last login: Thu Oct 24 16:03:49 om tty?
[hachi@localhost ]$

③認証が済んだら、ログイン成功です。パスワードが違う場合は、それを知らせるメッセージが表示されます。

Login incorrect(パスワードが違う場合に表示されるメッセージ)

ログアウト
①logoutというコマンドを入力し、[Enter]キーを押します。

hachillocalhost $ logout_

②無事にログアウトが完了するとログイン画面に戻ります。
entos Linux & (Core)
erne 1 4.11.3-35.6 18 x 64 01 x86_64
ctivate the web console with: systemctl enable --now cockpit.socket
ocalhost login: hachi

カーネルとシェル
カーネルとシェルの関係について見ていきます。
カーネルとは
カーネルとは、OSの核になる部分、つまり OSそのもののことです。 Linuxの場合、カーネルは Kernel 4.18.0のように表記されます。Kernelの後に付いている番号が、カーネルのバージョンを表しています。

Linux のようなオープンソースの世界では、異なるバージョンのカーネルが世界中に存在しています。Windows のようにメーカーがサポートしてくれるわけではないので、システムの管理者が、自身の判断で最も安定しているカーネルを選択する必要があります。
5.3.8
14.19.81
4.14.151
3.16.76
自分の目的に合ったカーネルを選びましょう。

シェルとは
シェルは、ユーザーの命令をカーネルに伝える機能を持っています。カーネルはハードウェアと密接に関係しており、ユーザーの命令を直接理解する能力がありません。そこで、シェルという窓口を通して、命令をカーネルに伝える必要があります。
ユーザーはシェルを通してカーネルに命令できます。

シェルにはいくつかの種類があります。代表的なシェルを見ていきましょう。

シェルの種類
シェルには複数の種類があります。代表的なシェルには、次のようなものがあります。

sh
(エスエイチ)
最も基本的なコマンド処理能力を持っているシェルで、bシェルと呼ばれます。動作は高速ですが、機能面では他のシェルに比べて貧弱なため、主にシェルスクリプト の実行環境などに使われることが多いです。

bash(バッシュ)
bシェルを拡張したシェルで、現在ではこちらをbシェルと呼ぶ場合
もあります。Linuxでは標準シェルとして採用されており、最も広く
知られたシェルだといえます。

ksh(ケーシェル)
bシェルを拡張したシェルで、AT&T 社が開発しました。商用 UNIXで使われています。

csh(シーシェル)
主にBSD系で採用されているシェルで、cシェルと呼ばれます。C言語風のコマンド構文を持っているのが特徴です。

tcsh(ティーシーシェル)
cシェルを拡張したシェルで、現在のBSD系OSでは標準のシェルになっています。bashと並んで有名なシェルです。

zsh (ゼットシェル)
bシェルを拡張したシェルですが、tcshの機能も備えています。bシェル系、Cシェル系、どちらの機能も使えますが、その代わり動作が遅いというデメリットがあります。

今回はbash を対象にして話を進めていきます。シェルによってコマンドが異なる場合もあるので、気を付けてください。

シェルの切り替え
シェルは、必要に応じてユーザーが切り替えられます。シェルによって機能に違いがあるため、
まずは普段使うシェルに慣れてから他のシェルを操作してみましょう(環境によっては先ほど
紹介したシェルが用意されていない可能性もあります)。

シェルを切り換えるには、コマンドラインでシェルの名前を入力します。exit コマンドで、元のシェルに戻ります。

シェル shに切り換え
[hachi@localhost /$ sh
sh-4.4%

sh-4.4$ exit
[hachi@localhost / ]$

ファイル
Linux におけるファイルとコマンドの関係について紹介します。
ファイルの種類
ファイルは、一般的にテキストファイルとバイナリファイルに分類できます。
テキストファイル
テキスト(文字)が入力されたファイルです。テキストエディタなどで閲覧や
編集ができます。

バイナリファイル
専用のツールを使わないと閲覧できません。
プログラムやその他のデータを含むファイルです。テキストエディタでは閲覧や編集はできません。

Linuxで扱うファイルは、実行できるファイルとできないファイルの2種類に分けることもできます。
実行できるファイル※パーミッションの設定 が必要です。
プログラミング言語によって特定の処理をするために作られたバイナリファイル。
シェルスクリプトという、コマンドを記述したテキストファイル。


実行できないファイル
データファイルや設定ファイルなど

コマンドの正体
Linux で使用するコマンドは、外部コマンドと内部コマンドの2種類に分けられます。
内部コマンド
シェルの本体が持っているコマンドです。
コマンドはそれぞれがファイルとして保管されています。

外部コマンド
実行ファイルとして個別に保存されているコマンドです。
「実行ファイル名=コマンド名」になります。

ファイルのありか(パス)を指定せず、コマンドだけを入力して[Enter] キーを押すと、シェルがあらかじめ決められた場所にそのコマンドの実行ファイルが存在するか確認しに行きます。ファイルがあればそれを実行し、なければエラーを表示します。
環境設定であらかじめ指定されている場所を探します。

ディレクトリ
ディレクトリの構造や、主なディレクトリについて紹介します。ディレクトリは、Windows でいうフォルダにあたります。

ディレクトリの構造


Linuxでは、ファイルを保存する場所がディレクトリという単位に分けられています。ディレ
クトリは、ツリー構造(階層構造)になっています。たとえば、次のようなイメージです。


親ディレクトリ
ひとつ上のディレクトリを指します。

ルートディレクトリ
すべてのディレクトリの大元であるディレクトリです。

子ディレクトリ
ひとつ下のディレクトリを指します。
子ディレクトリのことをサブディレクトリともいいます。


カレントディレクトリ
現在作業中のディレクトリです。

ホームディレクトリ
ホームディレクトリは、ログインしたユーザーアカウントのスタート地点になる場所です。ホー
ムディレクトリ名は、通常、ユーザー名と同じになります。ホームディレクトリは、ユーザーの活動拠点です。ホームディレクトリの下にディレクトリを作って、データを置いておけます。


主要なディレクトリ
bin
バイナリ形式の実行ファイルやコマンドが保管されています。

dev
デバイス関係のファイルが保管されています。

esc
各種設定ファイルなどさまざまなファイルが保管される場所です。

root
ルートディレクトリとは別に用意された、システム管理者用のホームディレクトリです。

sbin
管理者用のシステム標準コマンドが保管されています。

user
各ユーザーのデータやアプリケーションが保管される場所です。

home
この下にユーザーごとのディレクトリが作られ、そこが各ユーザーのホームディレクトリになります。

var
アプリケーションの記録(ログ) ファイルやメールデータなどが保管される場所です。

パスと拡張子
ファイルを開いたりコマンドを実行したりするには、ファイルの場所を正確に指定しないといけません。この指定方法をパス(Path)といいます。パスは/(スラッシュ)でディレクトリとディレクトリを区切って表します。

拡張子
Linuxでは、原則としてファイル名に拡張子は必要ありません。アプリケーションによっては
特定の拡張子を識別したり、ファイルを作成する際に自動的に付けるものもありますが、基本
的にどういう拡張子を付けるかはユーザー次第です。
neko.txt
data.csvd
diary.html

特別なファイル
Linuxではファイル名の後に拡張子がないものや、ファイル名が「.」から始まるドットファ
イルと呼ばれるファイルもあります(例:.bashrc など)。特にドットファイルは、環境設定
など特殊な用途に使われます(通常は見えないようになっています)。

ファイルシステム
Linux で利用できるファイルシステムの種類と特徴について簡単に紹介します。

ファイルシステムとは
ファイルシステムとは、文字どおりファイルを管理する仕組みのことです。いくつかの種類が
あり、それぞれ機能の違いがあります。サーバーとしてたくさんのデータを扱うのでなければ、
初期設定で指定されたものをそのまま使うのでOKです。

ファイルシステムどうしの互換性
WindowsとLinuxではファイルシステムが異なるため、基本的にそのままではお互いのファイルを利用することはできません。ファイルをやり取りするには、専用のアプリケーションを使うか、互換性のあるファイルフォーマットを使用します。

ファイルシステムの種類
Linuxで使われる主なファイルシステムを簡単に紹介します。

ext4
Linuxの標準ファイルシステムとして採用された ext (EXTended filesystem) の後継です。現在も多くのLinuxディストリビューションのデフォルトのファイルシステムになっています。

JFS
IBMが開発したファイルシステムがベースになっています。Linuxではカーネル 2.6で標準採用されました。旧来のファイルシステムに比べて信頼性の高さとアクセスの速さが特徴です。

XFS
SGI社が開発したファイルシステムを移植したものです。並列入出力の操作に優れています。

仮想ファイルシステム
ファイルは多くの場合、ハードディスクやSSDに格納されますが、メモリの一部をファイルシステムとして使ったものを仮想ファイルシステムといいます。仮想ファイルシステムの例として、tmpfsやdevtmpfsといったものがあります。
仮想ファイルシステムは一時的なファイル置き場として使われます。

ファイルの圧縮と解凍
ファイルを「圧縮する」、または「解凍する」という言葉を耳にすることがあります。これは、
実際にファイルを潰したり溶かしたりしているわけではありません。パソコンの世界で圧縮と
は、「ファイルの中身(データ)をコンパクトに表現するなどして、情報の内容はそのままにデー
タサイズを小さくすること」を指します。また、解凍とは、「圧縮されたファイルを元に戻すこと」を指します。
Linuxではサイズを小さくすることを圧縮、複数のファイルをまとめることをアーカイブと
呼んで区別することがあります。アーカイブされたファイルを元に戻すことを展開と呼びます
が、Windowsで解凍のことを展開と呼ぶ場合があるなど、お互いに用語が混ざり合ってしま
うことも多いようです。
Windowsの圧縮形式としては、ZIPが有名ですが、Linux の場合は、種類が多いうえに、標
準的な圧縮形式についてはあらかじめ対応したコマンドが用意されています。
主なコマンドと働き
gzip /gunzip    圧縮/解凍
zip / unzip   圧縮/解凍
tar    アーカイブ、展開、圧縮、解凍(ひとつのコマンドで対応)

特徴的なのは、tarコマンドで作成されるファイルです。アーカイブするだけなら拡張子が
.tar のファイルが作られますが、さらにオプションを使って圧縮まで行うと.tar.gz のよう
に2つの拡張子が並んだファイルが作られます。

Linuxの基本操作


CUIの環境に慣れていない人が「難しい」と思う理由として、「自分が何をどこでやろうとしているのかが視覚的にわかりづらい」ということが挙げられます。Linuxでは、すべてのファイルはルートディレクトリから派生したディレクトリに収められ、各ディレクトリはツリー構造で管理されています。Windowsのエクスプローラーのようにツリー構造を見ながら操作することができればいいのですが、残念ながらCUIの環境では、そうもいきません。そこで、ユーザーは自分の頭の中で、ツリー構造をイメージしながら作業する必要があります。
Linuxでは、コマンドを実行するにもファイルを見るにも、すべてパス(目的のデータまでの道筋)を使って指示しなければならないため、「パスを正確に書く」ということが操作の大前提になります。パスの書き方について、いくつか例を挙げて紹介しています。頭の中でツリー構造をイメージしながら、パスの書き方を覚えください。

パスの書き方
ファイル指定の基本、相対パスと絶対パスを紹介します。
絶対パスと相対パス
パスの書き方は、ファイルやディレクトリの場所をどの視点で捉えるかによって、2種類に分
けられます。

絶対パス
ルートディレクトリを基点として指定する方法です。この表示方法は、カレントディレクトリ
(現在表示しているディレクトリ)がどこであっても、間違いなく目的のファイルを指定でき
ます。
「/」は、パスの先頭か単独で使う場合、ルートディレクトリを表します。
ルートディレクトリから目的地にたどり着くまでに通るディレクトリを「/」で区切って表します。

相対パス
カレントディレクトリを基点として指定する方法です。

「../」は、ひとつ上のディレクトリ(親ディレクトリ)を表します。
「./」は、カレントディレクトリを表します。

カレントディレクトリの相対パス「./」は、省略可能です。
「~(チルダ)」は、ホームディレクトリを表します。ルートディレクトリを表す「/」などと
同様に、パスの指定に使用できます。


コマンド入力の基本
簡単なコマンドを使って Linuxの操作に慣れることからはじめてみましょう。何事も経験することが大切です。
ただし、ファイルを移動したり削除したりするコマンドを無造作に使うと、トラブルの原因になる可能性があります。最初のうちは、ファイルやディレクトリの情報を見るところからはじめてみるといいでしょう。検索コマンドもいくつか紹介していますので、どんなファイルやディレクトリがあるか、検索してみてください。
なお、一般的に管理者でないユーザーが自由に使えるのは自分のホームディレクトリだけとされています。不用意にいろいろなディレクトリに立ち入ることで、他のユーザーの大切なデータを削除したり書き換えたりしてしまうのを避けるためです。基本的には、「管理者以外は、ホームディレクトリと、その子ディレクトリ”以外の場所ではあまりファイルをいじらない方がよい」と覚えておきましょう。

コマンドの基本
コマンドを入力する際に重要な基本構文と注意事項について見ていきましょう。
コマンドを書くときの決まり
コマンドを入力するときは、次の4つの決まりを守りましょう。
①必ず半角英数字を使用する。
②大文字と小文字の違いを正しく入力する(基本的には小文字)。
③コマンドとオプションの間は半角スペースを空ける。
④入力が終わったら [Enter] キーを押す。

コマンドは、[Enter]キーを押すことで命令として受け付けられます。必ず最後に押してください。

コマンドの基本構文

コマンド入力の基本的な構文には、大きく分けて次の3つのパターンがあります。
1.コマンド
コマンドだけを入力します。複雑なことはできませんが、手軽に使えてすぐに結果を得ること
ができます。

2.コマンド+引数
コマンドには、対象になるファイル名やディレクトリ名(パス)などの文字列(引数)を指定するものがあります。コマンドと引数の間は、半角スペースで区切ります。
コマンド、引数
ls home
コマンドによって、必ず引数を付けなければいけないものと、そうでないものがあります。

3.コマンド+オプション+引数
コマンド オプション 引数
ls -a home

コマンドと、その後ろに続けるオプションや引数(これらをまとめてオプションまたは引数と呼ぶこともあります)の間は、すべて半角スペースで区切ります。

基本的なコマンド
cd コマンド
cd (Change Directory) コマンドは、カレントディレクトリを変更するためのコマンドです。
移動したいディレクトリ名とディレクトリのパスをコマンドの後ろに指定します。
ディレクトリの指定は、相対パスでも絶対パスでもかまいません。
ディレクトリを指定しないで使うと、どこにいてもホームディレクトリに戻ります。

pwdコマンド
pwd (Print Work Directory) コマンドを使うと、カレントディレクトリの絶対パス(自分の今の居場所)を表示できます。
pwd
結果
/home/hachi/data

Is コマンド
ls (List directory) コマンドは、ディレクトリの情報(中にどんなファイルがあるのか)を調べるコマンドです。
ls data
結果
sample1.txt
sample2.txt

ls -l とすると、詳細情報を表示します。
パーミッションも見ることができます。

ls -a とすると、普段は見えないドットファイル も表示します。
.bash profile
exrc
.bashrc .inputrc
.elvisrc .kde
.emacs
.lang
.emacs.el less
.xsession*

mvコマンド
mv (Move file) コマンドは、ファイル名の変更とファイルの移動に使います。
ファイル名を変更する
mvコマンドを使ってファイル名を変更するには、次のように記述します。

mv samplel.txt test.txt
元の名前 変更後の名前

ファイルを移動する
mvコマンドを使ってファイルを移動するには、次のように記述します。

カレントディレクトリ
mv sample.txt data
ファイルの名前 移動先のディレクトリのパス

cpコマンド
cp (CoPy file) コマンドはファイルをコピーするためのコマンドです。
cp sample3.txt data
コピーしたいファイルの名前  コピー先のディレクトリのパス

mkdirコマンド
新しくディレクトリを作るには、mkdir (MaKe DIRectory) コマンドを使います。
mkdir temp
ディレクトリの名前(バス)

rmdirコマンド
空のディレクトリを削除するには、rmdir (ReMove DiRectory) コマンドを使います。
rmdir temp
ディレクトリの名前(バス)

rm(ReMove file) コマンドは、ファイルやディレクトリを削除するときに使います。ファイ
ルを削除するときは次のように記述します。

rm sample3.txt

ファイルやディレクトリが中に入っているディレクトリを中身ごと削除したい場合は、オプ
ション(-r) を付けて次のように記述します。

rm -r temp


catコマンド
cat (conCATenate) コマンドを使うと、ファイルの中身を閲覧できます。
cat samplel.txt
結果
This is sample file.

ファイル名を指定しないと、キーボードの入力待ち状態になり、キーボードで入力した内容を
反復表示します。
入力待ちを解除するには、[Ctrl]キーと[C]キーを押します。

sortコマンド
sort コマンドは、指定したテキストファイルの内容を並び替えて表示します。オプションを
付けないとアルファベット順、-r を付けると逆順に並び替えを行います。
neko.txtの内容
chibi
alex
ran
sham

sort neko.txt
結果
alex
chibi
ran
sham
このようにアルファベット順(昇順)に並び変わります。


grepコマンド
grep (Global Regular Expression Print) コマンドは、複数のファイルの中から文字列を検索するコマンドです。次のように記述します。
yamanotelineの内容
ueno
uguisudani
nippori
nishinippori
tabata

grep nippori yamanoteline

結果
nippori
nishinippori
指定した文字列を含むすべての行が表示されます。

findコマンド
find コマンドは、ファイルを検索するためのコマンドです。ドットファイルも検索できます。
カレントディレクトリ以下に対してファイルを検索するには、次のようにします。
find meibo

次のようにすると、指定した任意のディレクトリ以下を対象にファイルを検索します。
find data meibo
data 検索ディレクトリ  meibo ファイル名または任意の文字列

which コマンドと whereis コマンド
コマンドの収納場所を探すためのコマンドも用意されています。
whichコマンド
whichコマンドは、指定されたコマンドの本体を検索し、その絶対パスを表示します。
lsコマンドを検索してみましょう。
which ls
結果 /bin/ls

whereisコマンド
whereisコマンドはコマンドのパスだけではなく、マニュアルやソースコードなどのパスも同時に調べて表示します。
ls: /bin/ls /usr/share/man/man1/ls.l.gz /usr/share/man/manlp/ls.lp.gz
※ ディレクトリ構成は、ディストリビューションなどによって異なります。

パイプ
複数のコマンドを組み合わせる機能です。
Linux で作業していると、コマンドによって得られた結果を別のコマンドに引き渡したいこと
があります。そんなときは、コマンドとコマンドをつなぎ合わせるパイプ(またはパイプライン)という機能を使います。
異なるコマンドもパイプでつなげられます。
パイプを使ってコマンドどうしをつなぐには、コマンドとコマンドを「|」でつなぎます。
ls | more
コマンド
moreコマンドは、出力結果をページ単位で表示するコマンドです。
»3つ以上のコマンドをつなぐ
パイプは、コマンドが3つ以上あっても接続できます。
コマンドは、いくつでもつなげられます。

試してみよう〜ディレクトリ情報の検索〜
lsコマンドでルートディレクトリを調べた結果を、パイプを使って grepコマンドに引き渡してみましょう。grep コマンドで、引き渡された内容の中から srという文字を含むディレクトリを検索します。
ls / | grep sr
結果
srv usr

ファイル関連のコマンド(1)
more コマンドと less コマンド
テキスト出力のページング
more コマンドと less コマンドは、画面(ページ) を基準にして出力結果を表示(ページング)
します。出力の行数が多い場合に、自動的にスクロールしてしまうのを防げます。
このようなコマンドを総称してページャーと呼びます。

moreコマンド
出力結果が画面に表示しきれない場合、1ページ分が表示されたところで「--More--」と表示され、内部コマンドの入力待ちになります。内部コマンドを入力して、すべての結果を表示し終わると、自動的に終了します。

less コマンド
内部コマンドが more よりも強化されており、簡単な検索やジャンプ移動などが可能です。最後
まで表示しても自動的には終了しないので、「g」を入力して終了します。
表示結果が多くなりそうなときは、less コマンドをパイプします。
$ ls -l /var/log | less

ファイル関連のコマンド(2)
alias/unalias コマンド、In コマンドを紹介します。

エイリアスを作成する
よく使うコマンドの場合、何度も同じ引数やオプションを入力するのは面倒です。alias コマンドを使うと、オプションや引数を含めたコマンドの記述内容そのものに対して、別名(工イリアス)を設定できます。※エイリアスには、既存のコマンド名は使えません。
alias la='ls -a’
上の場合、laがエイリアス -aがコマンド文(「 ’ (シングルクォーテーション)」でくくります。)となります。


[hachi@localhost ~]$ la ←ls -a を実行したのと同じです。
.bash history .bash_profile
.canna
.viminfo diary.txt
.bash_logout .bashrc
.gtkrc data

エイリアスの一覧を表示する
引数やオプションを付けないで alias コマンドを実行すると、現在利用可能なエイリアスを
表示できます。
alias
結果
alias .='cd'
alias la='ls -a'

エイリアスを削除する
エイリアスを解除するには、unalias コマンドを使います。
unalias la

リンクを作成する
In コマンド (LiNk) コマンドは、ファイルやディレクトリに対するリンク(リンクファイル)
を作ります。 Windowsのショートカットのようにリンク先を参照できます。リンクには、シンボリックリンクとハードリンクの2種類があります。
In -s /home/hachi/sample1.txt sample

-s(シンボリックリンク) リンクの種類(なければはードリンク)
/home/hachi/sample1.txt リンクの参照先

sample リンク名

シンボリックリンクとハードリンクの違い
シンボリックリンク =ファイルへの参照
リンクを削除しても元のファイルには影響がありません。
本体を削除するとリンクが切れてしまいます。

ハードリンク=ファイルの実体への参照
通常のファイルは実体とその名前が 1:1の関係です。
ハードリンクを作ると1つのファイルを2つの名前で参照できます。


ファイル関連のコマンド(3)
typeコマンドと stat コマンド、touch コマンドを紹介します。
コマンドの種類を調べる
コマンド名を見ただけでは、それがエイリアスなのか、外部コマンドなのか、内部コマンドなのか見分けがつきません。type コマンドを使うと、コマンドの種類を調べられます。

type コマンド名


外部コマンドの場合
[hachi@localhost ~]$ type ps
ps is /bin/ps

内部コマンドの場合
[hachi@localhost ~]$ type cd
cd is a shell builtin


エイリアスの場合
[ hachi@localhost ~]$ type la
la is aliased to ls -a’

ファイルのタイムスタンプを確認/変更する
ファイルには、更新日時やアクセス日時が記録されています。これらは stat コマンドで
調べられます。
[ hachi@localhost ~]$ stat abc.txt
File: abc.txt
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 13704039 Links: 1
Access: (0664/-rw-rw-r-- ) Uid: ( 1000/ hachi) Gid: ( 1000/ hachi)
Context: unconfined_u: object_r:user_home_t:80
Access: 2019-11-06 11:47:03.901000000 +0900 アクセス日時
Modify: 2019-11-06 11:46:52.382000000 +0900 更新日時
Change: 2019-11-12 17:50:08.152000000 +0900 - 状態が変更された日時
Birth:

※「状態」は、属性が変更されたりすると変更されます。

touch コマンドを使うと、ファイルのタイムスタンプを変更できます。

touch -md "2019-11-12 12:00:00" abc.txt

-m m で更新日時を、a でアクセス日時を変更します。指定しないと現在日時になります
どちらも指定しないと両方修正します。
d dで日時を指定します。指定しないと、現在日時になります。

結果
File: abc.txt
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 13704039 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ hachi) Gid: ( 1000/ hachi)
Context: unconfined u:object_r:user_home_t:s0
Access: 2019-11-06 11:47:03.901000000 +0900
Modify: 2019-11-06 11:46:52.382000000 +0900
Change: 2019-11-12 17:50:08.152000000 +0900
Birth:
ファイル名だけを指定して実行すると、サイズが0の空のファイルを作成します。
touch d.txt
空のd.txt を作成します。

ユーザー関連のコマンド(1)
w コマンド、who コマンド、passwd コマンドを紹介します。

ユーザーのログイン状況を確認する
Linux は複数のユーザーで利用することを前提とした OSですw コマンドは、現在ログイン中のユーザーと、その人が何をしているかの情報を表示します。
w

結果
[ hachi@localhost ~]$ w
11:21:25 up 1 day, 15:51,
USER  TTY  FROM
hachi tty ←ユーザーの利用状況 01:52 0.00s 2.03s 0.10s w
似たコマンドに who コマンドがあります。こちらはユーザー名とログイン日時を表示します。
who
結果
[hachi@localhost ~]$ who
hachi pts/1 2019-11-12 11:08 (192.168.0.2)

管理者がユーザーの利用状況を確認したいときなどに便利です。

パスワードを変更する
passwdコマンドは、ユーザーアカウントのパスワードに関する設定を変更するコマンドです。
普通のユーザーは、自分のユーザーアカウントしか操作できません。

passwd

※セキュリティを守るため、パスワードは設定時にも画面に表示されることはありません

結果
Changing password for hachi
Current password:現在のパスワードを入力
New password:新しいパスワードを入力
Retype new password:- もう一度新しいパスワードを入力
passwd: all authentication tokens updated successfully.
(パスワードの変更が成功したことを伝えるメッセージ)

管理者はすべてのユーザーのパスワードをリセットできます。その場合は、次のようにユーザー
アカウントを指定します。

passwd hachi←パスワードをリセットしたいユーザーアカウント

管理者は特定のユーザーアカウントを無効にしたり、パスワードの有効期限を変えたりす
ることもできます。

ユーザー関連のコマンド(2)
history コマンドを紹介します。また、コマンドの入力に便利なシェルの機能について解説します。
コマンドの履歴を調べる
history コマンドを使うと、過去に入力したコマンドを表示できます。

history 5

5は表示件数。表示件数 (history コマンドを含む)指定しないと、bashでは 500 件までさかのぼります。

結果
299 ls
300 cat homelist.txt
301 cd data
302/cd
303 history 5

数字は履歴番号

「!」と履歴番号を続けて入力してEnter キーを押すと、その番号に対応するコマンドを再び実行できます。
[hachi@localhost ~]$ !299

履歴番号 299 の1s コマンドが再度実行されます。

上下矢印キーを使って履歴をさかのぼることもできます。実行したいコマンドが出てきたら Enterキーを押します。

入力を補佐する機能
bashでは、コマンドやパスを入力する途中でTABキーを押すと、入力する文字列の残りの文字を補完してくれます。
[ hachi@localhost ~]$ cd /home/ha
TABキー
[hachi@localhost ~]$ cd /home/hachi
候補が1つしかない場合は、自動的に表示されます。

候補がいくつかある場合は、TAB キーを2 回押すと候補一覧が表示されます。
[hachi@localhost ~]$ ls /var/1
TAB
TAB
[ hachi@localhost ~]$ ls /var/1lib/ locall lock/ log/←候補一覽

使用するキーは、シェルによって異なります。

ワイルドカード
ワイルドカードと聞いて、ピンと来た人はかなりコマンド入力に慣れている人か、もしくはWindows の検索機能や検索サイトなどをよく使っている人かもしれません。
たとえば、「a からはじまるファイルをすべて検索したい」というときは、「*(アスタリスク)」
を使って次のように記述します。
find a*
「a*」は「頭文字が a であれば、その後の文字は何でもOK」という意味です。「*」のように
「何にでも置き換えられる」特殊記号をワイルドカードといい、トランプのジョーカーのような
使い方ができます。

ワイルドカードには、「*」以外にもいくつか種類があります。たとえば「*」は任意の0個
以上の文字列を表しますが、「?」は任意の1つの文字列になります。そこで、次のように入力
すると、aから始まる2文字の文字列を find コマンドで検索することになります。

find a?

ワイルドカードは、検索文字列の前後どちらに付けても、文字列の中に挟んでもかまいませ
。ワイルドカードは、上手に使えばとても便利なものです。覚えておいてください。

その他の主なワイルドカード
[ ]
[ ]の中の任意の1文字
[dog]
d、o、gという3つの文字
[a-z] aからzまでの、すべてのアルファベット

[^] [ ! ]
[ ]の中の文字列以外の任意の1文字
[^dog][!dog] d、o、g以外の文字

{ }
{ }内で指定されたそれぞれの文字列
{dog, rat}
dog、ratという2つの文字列

より詳しく知りたい方は、こちらの記事で詳しく説明しています。正規表現って何だろう


テキストエディタとは
Linuxを使ううえで欠かせないテキストエディタについて紹介します。
テキストエディタは、テキストファイルを編集するアプリケーションで、Linuxの環境設定ファイルを編集するために必要な、最重要アプリケーションのひとつです。ワープロのようにテキスト(文字)の色や大きさ、レイアウトなどは設定できません。テキストを書いたり消したりすることが目的の、シンプルなアプリケーションです。
Linuxでは、主な設定はテキストファイルに書かれています。そのため、CUI環境では、テキストエディタがなければ環境設定を変えることができません。テキストエディタがシステム管理の命綱だといっても過言ではありません。
viは、Linux でもっとも一般的に使われているテキストエディタで、たいていの環境で最初か
ら利用できるようになっています。Emacs などの高機能なエディタに比べて、vi は特にシン
プルで覚えやすいのが特徴です。


Vim


今回紹介する viは、正確にはVimといって、viのクローン(類似アプリケーション)です。
viのほとんどの機能が使えます。元は“模倣(VilMitation)"の略とされていましたが、改良が進んだ今では、“改良(VilMproved)"の略とされています。
オリジナルのコピーから、改良版へ出世しました。

vi の起動と終了
まずは、vi の起動方法と終了方法を紹介します。
viの起動
viを起動するには、次のようにiコマンドを使います。
viの終了
viを終了するには、[Esc] キーを押してコマンドモードに切り替えます。
左下がINSERTとなっていないことを確認しましょう。
「 :q! 」と入力すると、ファイルを保存しないで viを終了します。

vi のモード変更
vi では、「何をするか」によってモードを変更する必要があります。
モードについて
viには、行う作業に応じて3つのモードが用意されています。まずは、それぞれのモードの位置付けについて、覚えておきましょう。viのコマンドは、小文字か大文字かで動作が異なるので気を付けてください。

コマンドモード(Escキーを押す)
viが命令を待っている状態です。起動した直後はこのモードになります。入力した内容はすべてコマンドと解釈されるので、注意が必要です。コピーや貼り付けなど編集作業が行えます。

インサートモード( i キーを押す)
テキスト入力を行えます。画面の左下に「INSERT」と表示されます。

exモード( : キーを押す)
viの元になった exというエディタのコマンドが使えます。[:]キーに続けてコマンドを入力してから [Enter] キーを押すと、ファイルの保存やviの終了などの特別な処理を行えます。
作業に応じて、正しいモードに切り換えるのを忘れずに!

困ったときは ESC
vi 使っていて、自分がどのモードにいるのかわからなくなってしまったり、編集作業などで混乱してしまったりした場合には、[Esc]キーを押しましょう。たいていの場合はコマンドモー
ドに戻れるので、そこから作業をやり直してみてください。


viの基本操作(1)
ファイルを編集してみましょう。まずは基本操作について紹介します。

ファイル編集はじめの一歩

vi を起動すると、新しい行の左端にカーソルが表示されます。新規作成した場合は画面左上(1
行目の1文字目)、既存のファイルの場合は最終行の次の行の左端などになります。
このように新しいファイルかどうかで書き出しの位置が変わります。

カーソル位置を確認したら、インサートモードに変更します。「i」キーを使う方法を紹介しましたが、インサートモードに切り替えるためのキーは他にもあります。主なキーは次のとおりです。

i カーソルの左隣の位置から文字を入力できる
I(大文字i) カーソルのある行の先頭に文字を入力できる
a カーソルの次(右隣)の位置から文字を入力できる
A カーソルのある行の末尾から文字を入力できる
o カーソルの1行下に行を挿入してそこから文字を入力できる
O カーソルの1行上に行を挿入してそこから文字を入力できる

カーソルの移動
カーソルは、矢印キー(←→)で上下左右に移動します。コマンドモードでは、アルファベットの「k↑」「j↓」「h←」「I(エル)→」でも移動できます。

行の先頭に移動するには「^」、行の末尾に移動するには「$」、ファイル末尾の行の先頭に移
動するには「G」を入力します。

viの基本操作(2)
削除(カット)、コピー、貼り付けの方法について紹介します。
文字を削除 (カット)
1文字を削除(カット)するには、いくつかの方法があります。
コマンドを使わない方法
コマンドを使わず、[Delete] キーや [BackSpace]キーを使って削除する方法です。

コマンドを使う方法
次のコマンドを使うと、1文字ずつ削除できます。
コマンドモードにするのを忘れずに!
x カーソルのある文字を削除
X カーソルの左の文字を削除
J カーソルのある行の改行を削除


行単位の削除(カット)
コマンドモードにして、削除(カット)したい行にカーソルを移動してから、「dd」と入力します。
削除され、下の行が自動的に繰り上がります。

コピー
コピーしたい行にカーソルを移動して、「yy」と入力します。
カーソルがどこにあっても、行全体をコピーします。

貼り付け
カーソルのある文字の後に貼り付ける場合は、「p」を入力します。また、カーソルのある文
字の前に貼り付ける場合は「P」を入力します。
貼り付ける文字が改行を含むときは、行ごと貼り付けられます。

保存と終了
ファイルを保存して終了しましょう。ここでは ex モードで保存、終了する方法を紹介します。
ex モードで保存、終了するには、主に次のコマンドを使います。保存のみ、終了のみを行うコマンドと、保存と終了をまとめて行えるコマンドがあります。
:W 上書き保存
:w  名前を付けて保存
:w! 強制的に上書き保存
:q ファイルを保存しないで終了
:q! ファイルを保存しないで強制終了
:wq ファイルを保存して終了
:wg! ファイルを強制的に上書き保存して終了
保存コマンドだけでは、終了はしません。

Vim で間違って強制終了してしまったら…
Vim は、編集中のデータを一時的に.swpという拡張子がついたファイルに保存しています。操作ミスなどでVim を正しく終了できなかった場合も、.swp ファイルは削除されずに残り、次に同じ名前のファイルを開くときに.swpファイルをどうするか質問されます。
.swp ファイルの内容を生かしたければ、「R」(Recover:回復)か「E」(Edit anyway:強制編集)を入力します。必要なければ、「Q」(Quit:終了)か「A」(Abort:中断)でviを終了します。
不要な.swp ファイルは、rm コマンドで削除してもかまいません。
.swpファイルはfindコマンドなどで見つけられます。

ここからは、Linux の世界のさらに奥深いところまで踏み込んでいくためのノウハウやコマンドを紹介していきます。
まず、コンピュータの世界には、データの「入力」と「出力」という流れがあります。
その中でも一般的なのが、キーボードで「入力」し、ディスプレイにその内容を「出力」(表示)することです。「最も基本的な入出力手段」ということで、キーボードからの入力を標準入力、ディスプレイへの表示を標準出力といいます。
たとえば、たいていのコマンドは、何も指定しなくても実行結果をディスプレイに表示します。これは、標準出力としてディスプレイを使うことがあらかじめ設定されてい
るからです。入出力の手段は、コマンド入力時に指定することもできます。コマンドを使ううで、「何から入力して、何に出力するか」ということはとても重要です。

“操作する”側から“作る”側へ


複数のユーザーが同時に利用することを前提としている Linuxでは、ファイルひとつとっても「誰がどのように利用できるのか」ということまできちんと管理する必要があります。たとえば、システムの設定ファイルを誰でも自由に書き換えられるようだと大変なことになるからです。そこで、パーミッションという仕組みによって、ファイルを利用できるユーザーを制限しています。
これまでは、「ひとつのコマンドを実行して、その結果を得る」という操作を学んできました。しかし、一度にひとつしか命令できないのでは、複雑な操作はできません。そこで、いくつかのコマンドをまとめて実行する仕組みが用意されています。それを、シェルスクリプトと呼びます。
シェルスクリプトとは、ひとつ以上のコマンドをまとめたテキストファイルです。あらかじめ実行手順を書き込んでおけば、一度の命令で複数の動作を実行できます。よく行う作業はシェルスクリプトにしておけば、長い手順を繰り返す手間が省けます。条件分岐などの複雑な処理も可能ですが、基本的な書き方について紹介していきます。

Linuxを知るうえで重要なキーワードに、プロセスがあります。プロセスとは、プログラム処理における作業の1単位です。Linux は複数のプロセスを同時に管理することで、マルチタスクと呼ばれるシステムを実現しています。プロセス管理は、システムを管理するうえでも重要な作業です。
なじみのない言葉も多く登場しますが、ひとつひとつ、ゆっくりと読み進めていきます。

標準入力と標準出力
入力と出力について考えてみましょう。

入力と出力
コンピュータに対してデータを与えることを、「入力」といいます。そして、コンピュータが
処理の結果を返すことを、「出力」といいます。

標準入力、標準出力とは
通常使われる入力方法を標準入力、出力方法を標準出力といいます。一般的には、標準入力装
置がキーボード、標準出力装置がディスプレイになります。
キーボードとディスプレイは入出力に最低限必要なセットです。
cat や grep のように参照先(ファイル名など)を指定するコマンドでは、指定を省略すると、標準入力(キーボード) からの入力待ちになることが多いです 。

標準エラー出力
トラブルが起きてエラー表示(出力)を行う必要がある場合に使う、標準エラー出力というも
のもあります。通常、標準エラー出力は、ディスプレイになります。

標準エラー出力の場合、確実にエラーを確認するには、ディスプレイに設定しておくのが無難
ですが、ファイルに記録(出力)するという使い方もあります。

リダイレクト
標準入出力の入出力先を変更するリダイレクトという機能があります。
標準入力、標準出力、標準エラー出力の入出力先を変更することを、リダイレクト(またはリダイレクション)といいます。

出力先の指定
出力先を指定するには、「>」か「>>」(エラー出力の場合は「2>」か「2>>) を使います。
次のように記述すると、コマンドの実行結果をファイルに保存できます。

コマンド > sample1.txt
> ・・・上書き保存
>>…追加保存

入力元の指定
入力元を指定するには、「<」を使います。次のように記述するとファイルの内容をコマンドに渡すことができます。
コマンド < sample2.txt

たとえば、テキストファイルを並び替えて、その結果を別のファイルに保存する場合、次のように書けます。
sort < samplel.txt > sample2.txt
sortコマンド・・・並び替えの対保存先のパス並び替えを行うコマンドです。

試してみよう〜ディレクトリ情報の書き出し〜
カレントディレクトリに data というディレクトリがあったとします。このディレクトリの情報を、リダイレクトを使って homelist.txt というファイルに保存してみましょう。

①カレントディレクトリで、次のコマンドを実行します。
ls data > homelist.txt

②catコマンドで homelist.txtファイルの内容を確認してみましょう。
[hachi@localhost - ] $ cat homelist.txt
document
sample1.txt

data ディレクトリには、documentとsample1.txt があります。
※環境によって、表示スタイルは若干異なります。

③今度は、「>>」を使って次のコマンドを実行します。
ls data/document >> homelist.txt

④catコマンドで homelist.txtファイルの内容を確認すると、①で書き込んだ内容の後ろに、新しくdocument ディレクトリの内容が追加されていることがわかります。
[ hachi@localhost ~]$ cat homelist.txt
①で書き込んだ内容
document
sample1.txt
②で書き込んだ内容
test1
test2

パーミッションとは


パーミッションとは、ファイルやディレクトリに対してユーザーやグループが持つ権利のことです。保護モード、許可属性、アクセス権(限)ともいいます。
3つの属性
パーミッションには読み込み、書き込み、実行(ディレクトリの移動や検索なども含む)の3つの属性があります。それぞれに、可か不可かを設定します。

3つのユーザーカテゴリ
次の3つのカテゴリに対して、読み込み、書き込み、実行の属性を個別に指定できます。
User
ファイルの所有者(通常は作成者)

Group
User と同じグループのユーザー

Other
その他のユーザー

パーミッションの確認
ls -lで確認できます。

[ hachi@localhost ~]$ ls -1
drwxr-xr-x  2 hachihachi
drwx———  5 hachihachi
-rw-r—r-- 1 hachihachi
-rw-r—r-- 1 hachihachi

パーミッション
左端のブロックが、ファイルの種類(最初の1文字)とパーミッション(残りの9文字)を
表しています。ひとつ抜き出して、さらに詳しく見てみましょう。
- rw- r— r--
先頭の-がファイルの種類

以降、3文字ずつ設定が分かれています。
re-
Userの設定
r—
Other の設定
r—
Group の設定

Userのre-の場合、
r①  -②  -③
①読み込み ②書き込み ③実行権限
となります。

viでテキストファイルを作成すると、「作成した本人 (User) は実行権限がなく、Group や Other に属するユーザーには読み込み権限しかない」という設定になります。各記号の意味は、次のとおりです。

ファイルの種類
通常のファイル
d ディレクトリ

パーミッション
r
読み込み許可
(Readable)
w
書き込み許可
(Writable)
x
実行許可
(eXecutable)
-
不許可(各項目共通)

パーミッションの設定
すべてのファイルやディレクトリには、初期状態でパーミッションが設定されています。
chmod コマンドを使うと、ユーザーが独自にパーミッションを変更できます。

chmod o+w sample.txt

+設定の追加
~設定の削除

=設定の一括変更

ユーザーのカテゴリ
u User
g Group
o Other
a すべてのカテゴリ

例題
(1) 次の情報から、result.gz のパーミッションについて説明してください。
-rw-rw-r— l hachihachi 756 Oct 20 18:46 result.gz

(2) 新規で作成した example.txt というファイルについて、すべてのユーザーに実行権限を追加してください。

解答
(1) UserとGroupは読み込みと書き込みを許可、Otherは読み込みのみ許可
(2) chmod a+x example.txt

数値によるパーミッションの指定
パーミッションは、数値で指定することもできます。各パーミッションを表す数値は、次のとお
りです。
r(読み込み許可)
4
w(書き込み許可)
2
x (実行許可)
1
-(不許可)
0

たとえば、「User はすべての権限を持つが、Group と Other は書き込み権限を持たない」とい
う場合は、次のようになります。
7 5 5
Userの設定
すべてを許可
(1+2+4=7)
Otherの設定
書き込みは不許可。読み込みと実行は許可(1+0+4=5)
Groupの設定
書き込みは不許可。読み込みと実行は許可(1+0+4=5)

chmodコマンドで、数値を使ってパーミッションを指定するには、次のようにします。
Userはすべてを許可、それ以外は読み込みのみ許可

chmod 744 test.sr


シェルスクリプト(1)
一度にたくさんの命令を出すには、シェルスクリプトを使います。
ここではその作り方の基本を紹介します。
シェルスクリプトとは、シェルに対する命令(コマンド)をあらかじめテキストファイルに保
存したものです。複数コマンドを組み合わせた一連の操作を、まとめて実行できます。
簡単なプログラムに近いものが作れます。

シェルスクリプトは、そのままではただのテキストファイルです。シェルスクリプトとして利
用できるようにするには、パーミッションを設定して実行権限を与えます。設定は、chmod
コマンドを使って次のように行います。
実行権限をUser に追加
chmod u+x test.sh


シェルスクリプトの例
たとえば、シェルスクリプトは次のようなものです。
#!/bin/sh
ls /home
#Ask your name
echo Input your name:
read name
echo "Hello $name"

シェルの種別宣言
シェルスクリプトは、シェルによって、作り方や使える機能が違います。そこで、シェルスク
リプトの1行目には、#!に続いて、「どのシェル用のものなのか」を明示します。

命令の実行
home ディレクトリの内容を表示します。

コメント行
# より右はコメントを表します。

echo文
あとに続く文字列をコンソール上に表示します。

read 文
キーボードから入力した内容が nameに入ります。name のようなものを変数といいます。

echo 文の中に変数を書くときは、全体をダブルクォーテーションで囲み、変数はをつけて表します。
/bin/shはもっとも基本的なシェルであるshのパスです。特別なシェルにしない方が汎用性は高
くなります。

シェルスクリプト(2)
実際にシェルスクリプトを作って実行してみましょう。
シェルスクリプトファイルの作成
前のシェルスクリプトを例に、作成の流れを見ていきましょう。

①ファイル名をlshome.sh として、viを起動します。
$ vi lshome.sh

lshome.sh ファイルに、コードを入力します(インサートモード)。

#!/bin/sh
ls /home
#Ask your name
echo Input your name:
read name
echo “Hello $name”

③ Escキーを押して exモードにしたあと、「:wg」と入力し、Enterキーを押します。ファイルが保存され、viが終了してコマンドラインに戻ります。
:wq


パーミッションの設定と実行
パーミッションを設定して、実行してみましょう。

④コマンドラインで上のように入力し、lshome.sh にユーザーの実行権限を追加します。
$ chmod u+x lshome. sh

⑤パスの通っていないコマンドを実行する場合は、左のように相対パスでファイル名を指定する必要があります。Enterキーで実行します。
$ ./lshome.sh

⑥まず、home ディレクトリの内容が表示されます(下記のようなディレクトリ構成という想定です)。続けて「Input your name 」と表示されます。

$ ./lshome.sh
books ehon hachi test
Input your name:

⑦名前を入力してEnter キーを押します。すると、先頭に「Hello,」をつけて値が返
されます。

$ ./lshome.sh
books ehon hachi test
Input your name:
hachi
Hello, hachi

マルチタスクとプロセス制御
Linux におけるタスク処理とプロセス、ジョブの概念について見ていきます。
Linux のタスク処理
Linux は、複数のタスク(システムが行う作業)を同時に行うことができるマルチタスクに対応した OSです。ひとつひとつのタスクはプロセスとも呼ばれ、Linux環境では OS が管理する単位としてプロセスが使われています。プロセスの管理はOSの重要な役割です。

パイプでコマンドどうしをつないだ場合など、ひとつ以上のコマンド(プロセス)の集まりをジョブといいます。ジョブやプロセスは、それぞれ固有の番号を持っています。


ps (Process Status) コマンドは、現在稼働中のプロセスを ID番号付きで一覧表示します。

jobs コマンド
jobs コマンドは、現在稼動中のジョブを番号付きで一覧表示します。
jobs
結果

[1] Stopped vim diary.txt

[2]- Stopped ls -a /home | more

[3]+ Stopped ls -l /home | less

+  1番新しいジョブ
- 2番目に新しいジョブ

killコマンド
何らかの理由で終了できずに残ってしまったプロセスまたはジョブを終了するには、kill コマンを使います(一般ユーザーは、自分が実行したプロセスしか終了できません)。
kill 2444
強制終了させたいときは、「kill -9 プロセスID」のように記述します。


ジョブの中断と再開

実行中のジョブを、一時中断、再開することができます。中断するには、[Ctrl]キーと [Z] キーを押します。たとえば、Vimでdiary.txt を編集中に[Ctrl]キーと[Z]キーを押すと、次のように表示されます。


[1]+ Stopped vim diary.txt
[hachi@localhost /]$

再開するには、fg (Fore Ground) コマンドでジョブ番号を指定して実行します。ジョブ番号を指定しないと、一番新しいジョブを再開します。


パスを通す
よく使うコマンドが入っているディレクトリのパスを、あらかじめ設定しておくと、コマンド名を入力するだけで使えるようになります。これを「パスを通す」といいます。
grepなど、コマンド名だけで実行できるのは、パスが通っているおかげです。

環境変数
Linux には、シェルやコマンドから共通して参照できる、組み込みの変数があります。これを環境変数といいます。変数は、情報を入れておける入れもののようなものです。
環境変数は、env (ENVironment) コマンドで確認できます。

結果(抜粋)
SHELL=/bin/bash {
TERM=xterm-256color
PWD=/home/hachi
LANG=ja_JP.UTF-8
HOME=/home/hachi

PATHの指定
パスを通すためには、PATH 変数にディレクトリのパスを指定します。.bash_profile ファイルで「PATH=パス」と指定しておけば、ログイン時に PATH 変数が設定されます。複数のパスを設定する場合は、「:」でつなぎます。

.bash_profile ファイル

PATH=$PATH: $HOME/bin

新しいPATH変数は、既存のものに「: ホームディレクトリのス/bin」を加えたものになります
既にある環境変数を参照するときは、最初に$をつけます。

.bash_profile ファイルの変更を有効にするには、再ログインするか、source コマンドを実行してドットファイルをもう一度読み込むようにします。
(例:source ~/.bash_profile)

シェル変数
システムの変数には、シェルスクリプトなどで利用されるシェル変数もあります。内容は setコマンドで確認できます。setコマンドは環境変数とシェル変数を表示します。
結果
HISTFILE=/home/hachi/.bash_history
HISTFILESIZE=1000
HISTSIZE%3D1000
PS1='[\u@h ¥W]¥$
PS2='>
シェル変数と環境変数とで同じ名前のものは、片方が変わるともう片方にも反映されます。
PATH 変数もそのような例の1つです。


ユーザー個別の環境設定


ドットファイル
ドットファイルは、ほとんどがシステム管理用の環境設定ファイルです。ドットファイルが ls コマンド(オプションなし)で表示されないのは、不用意に操作してしまう危険を防ぐためです。
ドットファイルの例
新規作成したばかりのユーザーのホームディレクトリで ls -a を実行すると、次のようにドットファイルばかりが表示されます。
例題
[ hachi@localhost"]Z ls -a
.bash_history bash_profile
.bash logout bashrc
.viminfo
.canna
.gtkrc
主な環境設定ファイル
ホームディレクトリ内のシステム関係の環境設定ファイルには、次のようなものがあります
(bashの場合)

ファイル名と内容
.bash_history bash で実行したコマンドの履歴
.bash profile ログイン時に実行される環境設定
.bash_logout ログアウト時に実行される環境設定
.bashrc .bash_profileからの呼び出しやシェル起動時に実行される環境設定
.bash_login .bash_profileがない場合に使用されるログイン時の環境設定
.profile .bash_profile や .bash_login がない場合に使用される
ログイン時の環境設定

※この他、vi (Vim)の記録ファイル (.viminfo) など、アプリケーションごとの環境設定ファイルが保存されている場合もあります。


システム管理のポイントとユーザー管理
本来 UNIX環境では、管理者と一般ユーザーが厳密に分けられているため、一般ユーザーがシステム管理に関する操作をする機会はほとんどありませんでした。しかしLinuxではパソコンや個人用サーバーなどでシステム管理を行う機会が多々あります。
そこで、Linuxにおける一般ユーザーと管理者の違いについて、またユーザーの作り方とグループの概念は必須です。Windowsでも複数のユーザーによって環境を使い分けていたり、管理者アカウントが用意されていたりしますが、Linuxでもユーザー間に厳密な区別が設けられています。

systemd や初期化スクリプト(どちらも Linux起動時に使われるシステムの一部)などについても、概略を見ていきます。なお、ここで紹介している設定ファイル名やディレクトリ名などは、Cent OS 8で使用しているものです。ディストリビューションによって異なる場合があるので、必要に応じて読み替えてください。

システム管理者
スーパーユーザー(root)とは何か、について見ていきます。
ユーザーの種類
Linuxのユーザーは、大きく管理者と一般ユーザーの2つに分けられます。管理者のことをスーパーユーザーといい、アカウント名は root になります。新規にユーザーを作る場合は一般ユーザーとして登録され、管理者とは区別されます。
管理者のことをrootと呼ぶこともあります。
スーパーユーザーは、システムのすべての機能を無制限に使うことができます。Windowsでは、管理者権限を持つアカウントが複数存在することがありますが、Linuxでは、管理者権限を持つアカウントは1つだけです。


ユーザーを切り替える
日常の操作は一般ユーザーで行うことが推奨されます。しかし、急に環境設定を変える必要があるときに、rootでログインし直すのは面倒です。そんなときは、suコマンドを使います。
suコマンド
suコマンド(Switch User) は、ログイン中に別のユーザーに切り替えるためのコマンドです。ユーザーを指定せずに使うと、root としてログインできます。
su-
オプション
- 元のユーザーの環境を引き継がない
なし・・・元のユーザーの環境を引き継ぐ
ありの場合

次のようにすると、指定したユーザーとしてログインできます。一時的に他のユーザーのログ
イン環境で作業したい場合などに便利です。
su ユーザー名

sudoコマンド
「sudo コマンド名」と入力すると、一時的に root の権限でコマンドを実行できます。sudoコマンドを実行するには、wheel グループのメンバーである必要があります。

システム管理について


Linux のシステム管理について紹介していきます。
コシステム起動の流れ
CentOSを例に、Linuxのシステムが起動するまでの大まかな流れ
①電源オン
②カーネルの起動
③systemdの起動
④各種サービスの起動
⑤ログイン
このように目には見えませんが、いろいろなことが行われています。

systemd
CentOSではカーネルが起動すると、systemd という、システム環境を設定するプログラムが起動します。systemd は各種サービスのプロセスを起動します。
systemd が扱うサービスの例
ディスプレイマネージャ (GNOME、X、KDE など)
SSHサービス
FTP サービス
HTTP Web サービス

以前はinitやinittabという仕組みが使われていましたが、CentOS7から変更になりました。

ユニットによる管理
systemd は各サービスをユニットという単位で管理しています。これにより、プロセスが途中で異常終了した場合も、ユニット内では整合性が取れるようになっています。ユニットにはいくつかの種別があります。
ユニットの種別の例
service
デーモンの起動と停止を行うユニット
device
デバイスの検知を行うユニット
target
ユニットをグループ化したもの

ユニットの有効/無効は systemctl コマンドで管理します。パラメーターを付けずに実行すると、ユニットの一覧を表示します。

動作モード
systemd は default.target という target ユニットの情報を元にプロセスを実行していきますが、この内容を切り替えることで、異なるモードで起動することが可能になっています。
targetと働き
poweroff.target システムの終了(シャットダウン)

rescue.target メンテナンス用のモード

multi-user.target マルチユーザーモード

graphical-target  GUIによるマルチユーザーモード

reboot.target システムの再起動

ネットワークコマンド
ネットワーク関係の基本的なコマンドとしてifconfig 、ip、nslookupを紹介します。
ネットワークアダプタの情報の確認
ネットワークアダプタに割り当てられたIPアドレス等の情報を確認するにはifconfigを使います。
ただし、近年は、ifconfigの代わりに、ipコマンドを使うことが推奨されています。
次のように記述します。
ip addt

nslookupコマンド
nslookupコマンドは、指定したDNS名またはIPアドレスに関する情報をDNSサーバーから取得します。
nslookup ホスト名

日時の設定
システムを管理する上でとても重要な、時間の管理について
システムクロック
OSが、内部に持っている時計を、システムクロックといいます。ファイルのタイムスタンプ(作成時間などの記録)やユーザーの利用記録などを正確に管理するためにも、システムクロックの設定は重要です。
基本的には、パソコン本体の時計(RTC: Real Time Clock、またはハードウェアクロックともいう)を基準にします。
date コマンド
date コマンドは、システムクロックの日時を設定、管理するコマンドです。現在の日時を確
認するには、次のようにします。
date
結果
wed Nov 20 09:04:39 JST 2021  <←実行した瞬間の日時が表示されます。

NTPサーバーを使った時刻合わせ
ネットワークにつながっている Linux では、NTP (Network Time Protocol) サーバーという時刻合わせ用のサーバーを利用して定期的に時刻を合わせます。NTPサーバーによる時刻合わせに対応するには、ntpd というデーモンが動作している必要があります。
ntpd は/etc/ntp.confic記述されたNTPサーバーやタイミングの情報を元に時刻合わせを行います。
ntpdateコマンド
ntpdate コマンドは、NTPサーバーに問い合わせて、時刻を同期します。引数には次のように NTPサーバー名を指定します。なお、ntpd が実行中の場合は使えません。
ntpdate ntp.nict.jp(NTP サーバー名)

結果
Sun Oct 20 09:04:39 JST 2021 ←実行した瞬間の日時が表示されます。

ntp.nict.jp は、NICT(情報通信研究機構)のNTPサーバーです。

ユーザーの作成と削除
ユーザーアカウントの作成と削除について紹介します。すべて管理者のみに許された作業です。
まず useradd コマンドを使ってユーザー名を設定します。ユーザー名は、重複できません。
同じ名前のユーザーがいる場合は、その旨を知らせるメッセージが表示されます。mオプションをつけると、ユーザー向けのホームディレクトリも同時に作成します。

useradd -m testuser(ユーザー名)

そして、パスワードを passwd コマンドで設定します。パスワードを設定しないと、セキュリティ上危険です。また、設定によっては、パスワードなしではログインきない場合もあります。

passwd testuser(ユーザー名)

useradaの実行直後は、パスワードは設定されていません。

ユーザーアカウントの削除
ユーザーアカウントの削除には、userdel コマンドを使います。

userdel -r testuser(ユーザー名)

オプション
-r アカウントとそのホームディレクトリを削除
なし・・・アカウントのみを削除


入力ミスなどで違うユーザーを消さないように気をつけてください。

マルチユーザーモードとシングルユーザーモード
Linux には、複数ユーザーで使用するマルチユーザーモードと、管理者 1人だけがログインできるシングルユーザーモードがあります。シングルユーザーモードは、メンテナンスのとき、管理者が安心して作業を行えるように用意されたものです。

グループ管理
新しくグループを作ったり、削除したりする方法
これらの作業を行えるのは、管理者のみです。
グループの作成
グループを作成するには、groupaddコマンドを使います。

groupadd グループ名


ユーザーの登録
ユーザーをグループに登録するには、usermod (USER MODify) コマンドを使います。
ログイン中のユーザーのプライマリグループを変更した場合、変更を有効にするためには再口グインが必要です。

usermod -G グループ名 ユーザー名
オプション
g・・・プライマリグループとして登録
-G…セカンダリグループとして登録
-aG.…セカンダリグループとして追加

セカンダリグループをプライマリグループにするには、newgrpコマンドを使います(一般ユー
ザーは、自分自身についてのみ変更できます)。

newgrp グループ名 ユーザー名

グループの削除
グループを削除するには、groupdel コマンドを使います。プライマリグループに設定しているユーザーがいると、削除できません。

groupdel グループ名

グループの確認
ユーザーがどのグループに所属しているかを確認する方法はいくつかあります。自分のプライマリグループや、そのほか所属しているグループを知るには、id コマンドを使います。

hachi@localhost ~]$ id

ユーザーやグループはそれぞれ固有のID番号を持っています。

groups コマンドを使うと、自分が所属するグループのリストのみを表示できます。

[hachi@localhost ~]Z groups
hachi, kaikei
↑先頭がプライマリグループです

シャットダウン
システムを終了の方法を紹介します。原則として、一般ユーザーはこれらの作業を行えません。
「終了する」ということ「システムを安全に終了して電源を切ること」をシャットダウンといいます。Linux は、常時起動しておくサーバーとして使われることが多いため、こうした作業を行うのは緊急時のみです。
サーバーは、個人のパソコンのように、勝手に終了してはいけません。

shutdown コマンド
shutdown コマンドは、終了を行うコマンドです。実行すると、ログイン中のすべてのユーザーにメッセージが通知されます。使用するには、管理者としてログインする必要があります。
shutdown -h +5 Shutdown At 10:25(ユーザーに通知するメッセージ)

オプション
-h 終了
-r リブート

時間指定
now…今すぐ(終了のみ)
+5…5分後
終了後に電源が自動的に切れるかどうかは、環境によって異なります。

ローカル環境から外の世界へ
他のサーバーと通信する方法を紹介します。元々 Linux は、ネットワークを介してサーバーとクライアントが通信することを前提としているOSですが、個人に普及していくなか、スタンドア
ロンで利用されることも増えてきました。とはいえ、インターネットやクラウドサービスなど、ネットワークを介しての利用がまだまだ主流です。せっかく Linuxに触れたのなら、Linuxの本領発揮ともいえる、ネットワーク上での利用を体験してみましょう。
ここでは、どの環境でもほぼ標準で利用できる2つの通信手段(SSH、SFTP)を取り上げます。CUI環境による利用を前提として、話を進めていきます。

インストールに関するさまざまな手段
アプリケーションを新しくインストールする場合はもちろん、周辺機器を初めて利用する場合もプログラムやデバイスドライバのインストールが必要です。Linux には、アプリケーションやデバイスドライバのインストールからアンインストールまでを管理する、パッケージ管理システムと呼ばれる仕組みが用意されています。この本では、インストールに必要なファイルをアーカイブ (または圧縮)した、いわゆるアーカイブ形式による管理方法のほかに、rpmやdnfといったコマンドを使うシステムも紹介しています。
また、コンソール上でのコマンド操作を中心に紹介していますが、統合デスクトップ環境上で管理用の GUIツールを利用した方が手軽な場合もあります。GUIとCUは表裏一は、お互いにリンクしていますので、どちらか片方だけに目覚するのではなく、機応変に使い分けるようにするとよいでしょう。

SSH による遠隔操作
SSH という、暗号化通信を伴ったリモート接続の基本操作について見ていきます。
SSH とはSSH (Secure SHell)は、ネットワークで接続された他のコンピュータを遠隔操作するためのプロトコルです。通信が暗号化されるので、安全に通信できます。
SSHサーバー
遠隔操作される側です
SSHクライアント
操作する側です
Linuxでは、OpenSSHEいうフリーソフトを使用しています。

sshコマンド
SSHを使ってサーバーに接続するには、ssh コマンドを使います。終了する場合は exit と入力します。初めて接続するサーバーの場合、信頼できる相手かどうかを確認する必要があります。

ssh testman02@sample2.shoeisha.co.jp
  ユーザー名       ホスト名
現在のユーザー名でログインするなら、ホスト名のみでOKです。


結果
新たに発行された接続認証用の暗号キー
認証に失敗してホストと接続できなかったというメッセージ
The authenticity of host '10.10.100.10' can't be established.
RSA key fingerprint is SHA256:v3w9otVxVsTWZ3zRkbZBw4bLs4142kellszpgcMZDZs
Are you sure you want to continue connecting (yes/no)? yes - 接続の確認 (yes を入力)
Warning: Permanently added '10.10.100.10' (RSA) to the list of known hosts.←認証キーがリストに登録されたというメッセージ

この後、パスワードの認証を行います。2回目以降は上のメッセージは表示されません。

結果
testman02@sample2.shoeisha.co.jp's password:←パスワードを入力(表示されません)
Last login: Wed Nov 20 12:57:17 2019 from 192.168.0.96
[testman02@sample2 ~]$

SFTP によるファイル転送
セキュアなファイル転送によく使われる、SFTP の基本操作について紹介します。

SFTP
SFTP(SSH File Transfer Protocol)は、TCP/IPネットワークで接続された他のコンピュータとファイルの転送をセキュアに行うためのプロトコルです。
SFTPサーバー・・・命令を受ける側です
SFTPクライアント・・・命令する側です

以前は、FTPというプロトコルが使われていました。
SFTP接続
SFTPサーバーに接続するには、sftpコマンドを使います(終了するには、quit と入力します)。
sftp user-name@sample1.hachi.co.jp
    ユーザー名   ホスト名

接続後は FTP 用のコマンドを使ってファイルの転送や削除などを行います。ダウンロードには
get コマンド、アップロードには put コマンドを使います。実行例を見てみましょう。
sftp> ls  ←ls コマンドでサーバー上のファイルを確認します
diary.txt  sample.sh
sftp> get diary.txt ←getコマンドでサーバー上のファイルをダウンロードします。
Fetching /home/user-name/diary.txt to diary.txt
/home/user-name/diary.txt 100% 300 18.2KB/s 00:00
sftp> put diary2.txt   ←putコマンドでサーバーにファイルをアップロードします
Uploading diary2.txt to /home/user-name/diary2.txt
ファイルサイズと
diary2.txt
sftp> mkdir new_dir ←mkdirコマンドでディレクトリを作ることもできます
sftp> cd new_dir ←cd コマンドでディレクトリに移動します
ダウンロード先は通常はSFTP接続時のディレクトリです(変更可)。


アプリケーションの導入

入手からインストールの準備まで
Linux 用のアプリケーションは、店頭ではあまり販売されていません。一部の製品は専門業者を介して入手できますが、それ以外はインターネット上で公開されるなどの形で配布されます。
オープンソースソフトウェアの場合、拡張子.tar.gz などのアーカイブファイル形式で配布されることが多く、その中にソフトウェア本体やインストールの手引きなどが入っています。また、ファイル名には一定の法則があります。

sample-1.0.1a-1.tar.gz

sampleプログラム名またはパッケージ名
1.0.1a-1 バージョン
tar.gz  拡張子

準備の流れ
ホームディレクトリ内に、作業用のtmp ディレクトリを作り、そこにファイルを保存します。
ファイルを展開します。コマンドラインで「tar xvzf ファイル名」を実行します(xvzf は展開用のオプション)。
インストールの手引き(テキストファイル)を見つけて、その指示に従います。

インストール
配布ファイルがバイナリ形式の場合、指定の場所にコピーするか、簡単な設定だけで利用でき
ます。これに対して、環境に応じたバイナリファイルを作れるようにソースコードの形態で配
布される場合があります。その場合は、コンパイルという作業が必要です。
コンパイル
コンパイルは、ソースコードを実行可能なバイナリファイルに変換する作業です。一般的な手
順を紹介します。

Makefile の作成
コンパイルは、Makefile という、コンパイルの手順や設定を記述したファイルの内容に従って行われます。Makefileがない場合は、ファイルを展開したディレクトリで configureスクリプトを実行して作成します。Makefile がある場合は、次に進みます。
./configure
configureはパスが通っていないので、相対パスで指定する必要があります。

コンパイルの実行
コンパイルするには、makeコマンドを使います。①と同じディレクトリ内でコマンドを実行すると、Makefileの設定に従って実行ファイルが作成されます。

インストール
コンパイルしたファイルをインストールする場合、make コマンドに install を付けて実行します。インストール作業には、管理者権限が必要な場合があります。

パッケージ管理システム
パッケージ管理システムは、インストールに必要なファイルをひとまとめにしたパッケージファイルを使って、インストールからアンインストールまでを管理します。CentOS 8で採用されている RPM 形式やUbuntuで採用されている deb形式、ほかにも tgz形式などがあります。
管理システムを使うとインストール状態を一括管理できます。
ディストリビューションによってシステムが異なる場合があります。
管理システムを使わないと自分でインストールの状態を管理する必要があります。

依存関係
たとえば、あるアプリケーション(A) のコマンドを実行するのに、別のアプリケーション(B)が持っているファイルが必要だとします。このとき、「Aは B に依存している」といいます。
パッケージ管理システムでは、依存関係も踏まえて管理します。

RPM
RPM (Redhat Package Manager) は、多くのディストリビューションで使えるパッケージ管理システムです。インストールとアンインストールはもちろん、アップグレードまで管理できます。
名前からもわかるように、元々はRed Hat Linux用でした。

インストール(アップグレード)とアンインストール
インストールとアップグレードは、次のように行います。

rpm -ivh sample-1.0.1a-1.rpm

インストールは、GUI上で行うことも可能です。
ivhはオプションを表しています。
オプション
-ivh…新規インストール (vhは進行状況などの詳細表示を行うオプション)
-Uvh…強制的に最新版にアップグレード (未導入のものは新規インストール)
-Fvh…インストール済みパッケージのみ更新

アンインストールは、次のように行います。

rpm -e sample

インストール状態の確認
次のようにすると、RPM 形式のインストール済みパッケージファイルを調べることができま
す。
rpm -qa | grep sample

調査結果の中から sampleという文字を探します
ga.…すべてのインストール済みパッケージ(a)をリストアップ (q)


コマンド名と働きのまとめ


alias エイリアスの作成
unaries エイリアスの削除
cat ファイルの内容表示と連結出力
chgrp  所属グループを変更
chmod パーミッションを変更
chown   ユーザーと所属グループを変更
cp    ディレクトリやファイルのコピー/名前の変更
date  システムの時刻を表示/設定
df  ディスクの使用状況を表示
dnt  インストールやアップデートを管理
du  ファイル/ディレクトリのディスク容量を表示
env  特定のコマンドに対して環境変数を設定
find  ファイルを検索
free  空きメモリと利用メモリを表示
grep 指定した文字列を検索
groupadd  グループを作成
groupdel  グループを削除
groups  ユーザーが属するクループを表示
halt  強制終了
history  ヒストリを表示
id  有効なユーザーIDとグループIDを表示
ifconfig  ネットワークインターフェースを設定する
ip  ルーティング、デバイス、ポリシールーティング、IPトンネルの表示・設定
jobs 実行中のジョブを表示
kill  プロセスやジョブ を終了させる
less テキストファイルを表示する
In リンクファイルを作成
locale ロケールに関する情報を表示
Isディレクトリ内の情報を表示
man  マニュアルの表示
mkdir  ディレクトリを作成
more  テキストファイルを見る
mount  ファイルシステムのマウント
umount  ファイルシステムのアンマウント
mv ファイルやディレクトリを移動ファイル名を変更
newgrp  新たなグループへのログイン
nslooup ネームサーバーへの問い合わせやネットワーク上のホストに関するDNS情報を調べる
passwd   ユーザーのパスワードを変更
pwd  カレントディレクトリの表示
ps  プロセスの情報を表示
rm  ファイルやディレクトリを削除
rmdir  ディレクトリを削除
rpm   パッケージファイのインストールを管理
sftp  安全なファイル転送
shutdown  システムを停止
ssh  SSHでリモートホストに接続
stat  ファイルやファイルシステムの状態の表示
su   別のユーザーに切り替え
sudo   他のユーザとしてコマンド実行
tar   アーカイブファイルへのファイルの格納。
touch   ファイルのアクセス時刻と修正時刻の変更
type  コマンドのバスやタイブを表示
useradd ユーザーを作成
userdel ユーザーを削除
usermod ユーザーの情報を更
w   ログイン中のユーザー情報を表示
whereis   関連するパスを表示
which   コマンドのパス/エイリアスを表示
who   ログオンしているユーザーを表示


この記事が気に入ったらサポートをしてみませんか?