Linuxの大部分のディストリビューションでは、多くのユーザーがOSとして選択するWindowsやmacOSのように、GUI(グラフィカルユーザインターフェース)での操作に対応しています。
しかしながら、サーバーなどでLinuxが利用される場合や、個人用途でもデスクトップ環境を展開するためのマシンパワーが不足しているような場合には、CUI(キャラクタユーザインターフェース)によるコマンド実行でもPC操作が可能であることは、Linuxの魅力の一つです。
商用のプロジェクトの場合、データセンターに置かれたサーバー上にLinuxOSのインストールを行い、実際の設定は、ターミナル(teraterm等)を使用してリモートで構築する場合が殆どです。リモートターミナルの場合、GUI環境はまず使用できないと思ってください。十中八九、CUI(コマンド)での構築を求められます。
この記事では、Linuxを使い始めた方、これから使おうと考えている方に向けて、「Linuxの基本コマンド」についてご説明します。
ユーザーを切り替えるコマンド「su」
普段、Windows環境でPCを使っている方にとっては「ユーザー」の切り替えというのはそれほど重要な意味を持っているものとは考えないかもしれません。そのような場合には基本的に「誰がそのPCを使っているか」という違いでしかないためです。
しかしながら本来、PCの「ユーザー」という概念は、組織内、あるいは家庭内などの複数の人間が使用する環境において、「誰にどこまでの権限を与えるのか」という意図が含まれていることを考えなければなりません。
suコマンドとは?
「su」は、ログインし直さずに他のユーザーに切り替える(substitute user)コマンドです。
通常、設定変更時に「ログインユーザー」から「スーパーユーザー(rootユーザー)」へスイッチを行い、スーパーユーザー権限で、さまざまなコマンドを実行したい場合に使用します。
コマンドの書式
su[オプション] [ユーザー]
「su」コマンドを使うと、一時的にそのPCのあらゆる機能・設定を管理するための権限である「rootユーザー」へ昇格します。
Linuxでは、ユーザーは必要に応じてこの「su」コマンドを使用して「rootユーザー」へ昇格し、必要な操作を終えたらまた一般ユーザーへ戻ることで、リスクの低減、適切なPC環境のハンドリングを行うことができるのです。「exit」コマンドで元のユーザーに戻ります。
「スーパーユーザー(rootユーザー)」とは、UNIX系のOSにおいて、最高権限を持つ特殊なユーザーアカウントを指す。Windows系OSでいうところの「アドミニストレーター」に該当します。「スーパーユーザー」権限は、Unix系OSにおけるすべての権限を持ちます。その気になれば、システムそのものを破壊できます。
コマンドの主なオプション
- -c(--command):対話シェルは起動せずにコマンドを実行する
- -l(--login):シェルを「ログインシェル」にする
- -s(--shell):実行するシェルを指定する
例)スーパーユーザー(root)へスイッチ後、「exit」コマンドで元のユーザへ戻る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[infusr@CentOS7 ~]$ whoami infusr [infusr@CentOS7 ~]$ id uid=1000(infusr) gid=1000(infusr) groups=1000(infusr),10(wheel) ------------------------------------------------------------ [infusr@CentOS7 ~]$ su - パスワード: 最終ログイン: 2020/03/30 (月) 23:19:21 JST日時 pts/0 [root@CentOS7 ~]# whoami root ------------------------------------------------------------ [root@CentOS7 ~]# id uid=0(root) gid=0(root) groups=0(root) [root@CentOS7 ~]# exit ログアウト ------------------------------------------------------------ [infusr@CentOS7 ~]$ whoami infusr [infusr@CentOS7 ~]$ id uid=1000(infusr) gid=1000(infusr) groups=1000(infusr),10(wheel) |
「su」と「su -」の違いは?
「su」ではカレントディレクトリも環境変数も元のユーザーのものが引き継がれますが、「su -」ではカレントディレクトリや環境変数は変更したユーザーの初期値に設定されます。
「su」を使ってユーザー変更
「su」コマンドにて「root」へスイッチ後、カレントディレクトリを確認します。
$ su
1 2 3 4 5 6 7 8 9 10 |
[infusr@CentOS7 ~]$ whoami infusr [infusr@CentOS7 ~]$ env | grep PWD PWD=/home/infusr 👈 カレントディレクトリ「/home/infusr」 ------------------------------------------------------------ [infusr@CentOS7 ~]$ su [root@CentOS7 infusr]# whoami root [root@CentOS7 infusr]# env | grep PWD PWD=/home/infusr 👈 カレントディレクトリ「/home/infusr」 |
「su」によるユーザー変更の場合は、変更前のユーザー「infusr」の情報を引き継ぎます。
「su -」を使ってユーザー変更
「su -」コマンドにて「root」へスイッチ後、カレントディレクトリを確認します。
$ su -
1 2 3 4 5 6 7 8 9 10 11 |
[infusr@CentOS7 ~]$ whoami infusr [infusr@CentOS7 ~]$ env | grep PWD PWD=/home/infusr 👈 カレントディレクトリ「/home/infusr」 ------------------------------------------------------------ [root@CentOS7 infusr]# su - 最終ログイン: 2020/04/11 (土) 18:01:55 JST日時 pts/0 [root@CentOS7 ~]# whoami root [root@CentOS7 ~]# env | grep PWD PWD=/root 👈 カレントディレクトリ「/root」 |
「su -」によるユーザー変更の場合は、変更前のユーザー「infusr」の情報を引き継がずに初期値で設定されます。
「su」でのユーザー変更では、変更前ユーザーの環境変数を引き継いでしまいます。
思わぬトラブルを避けるためにも、通常は「su -」でユーザー変更を行いましょう。
ログインユーザーを表示する「who」
「who」は、システムにだれがログインしているかを確認するコマンドです。
例えば、OSの設定変更を反映させるために、サーバーの再起動を行う必要があります。ですが、誰がログイン中なのかが分からないと、迂闊にサーバーの再起動が出来きません。
「who」コマンドは、現在ログイン中のユーザーを確認することが出来るコマンドです。
コマンドの書式
who[オプション]
コマンドの主なオプション
- -a(--all):全ての情報を表示する。
- -b(--boot):現在ログインしているシステムが起動した時刻を表示する
- -d(--dead):終了したプロセスを表示する
- -H(--heading):ヘッダ行を表示する
- -l(--login):システムのログインプロセスを表示する
- -m:標準入力に関連付けられたホスト名とユーザーのみを表示する
- -q(--coun):ログイン中のユーザーのログイン名とユーザー数を表示する
- -r(--runlevel):現在のランレベルを表示する
- -s(--short):名前と端末、ログインした時刻のみを表示する
- -u(--users):ログイン以降のアイドルタイム(IDLE列)を表示する
標準入力に関連付けられたホスト名とユーザーのみを表示します。
# who -m
1 2 3 4 5 |
[root@CentOS7 ~]# who -m root pts/0 2020-04-11 12:07 (192.168.109.1) [root@CentOS7 ~]# who -q root ユーザ数=1 |
よく似たコマンド「whoami」
「who」とよく似たコマンドで、自分のユーザー名を表示するコマンド「whoami」があります。現在操作中のユーザー名が知りたいだけなら「whoami」を使う方が、対象が自分に限定される分、分かりやすいと思います。
1 2 |
[root@CentOS7 infusr]# whoami root |
コマンドのフルパスを表示する「which」
「which」は、環境変数PATHから順番にディレクトリを調べて、見つけたコマンドファイルを表示するコマンドです。
例えば、dumpモジュールをインストールしたのはいいが、何処へインストールされたのか分からない場合等、対象のロケーション(格納場所)を取得可能です。
コマンドの書式
which[オプション] コマンド名
コマンドの主なオプション
- -a(--all):環境変数PATHにある全ての実行ファイルを表示する
- -i(--read-alias):標準入力からエイリアスを読み込み、合致したものを表示する
「dump」実行ファイルのパスを表示します。
$ which dump
1 2 |
[root@CentOS7 ~]# which dump /usr/sbin/dump |
ココに注意
「which」コマンドは、環境変数PATHに登録されているディレクトリにある実行可能ファイルを検索の対象とします。検索はPATHに登録していない実行ファイル(独自に作成したシェルスクリプトなど)は対象外となるので注意してください!
ファイルシステムを増設する「mount」
「mount」は、HDDやUSBメモリ、DVD-ROMなどのフォーマット済みの領域(ファイルシステム)を指定したディレクトリ(マウントポイント)と一時的に結び付けてアクセスできるようにするコマンドです
コマンドの書式
mount[オプション] デバイス [マウントポイント]
コマンドの主なオプション
- -a(--all):/etc/fstabに記載がある全てのデバイスをマウントする
- -T(--fstab):/etc/fstabの代わりに使用するファイルを指定する
- -t (--types):マウントするファイルシステムの種類を指定する
- -L ラベル:指定したラベルを持つパーティションをマウントする
- -o(--options):マウントオプション
- -r(--read-only):読み込み専用でマウントする
- -w(--rw、--read-write):読み書き可能な状態でマウントする
- -f(--fake):実際にはマウントしない(実行内容を確認用のフェイクマウント)
- -v(--verbose):動作時のメッセージを詳しく表示する
- -l(--show-labels):マウント済みのデバイスをラベル付きで一覧表示
CentOS7のisoメディアを「/media」へマウントします。
# mount -o loop -t iso9660 CentOS-7-x86_64.iso /media
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@CentOS7 ~]# mount -o loop -t iso9660 CentOS-7-x86_64.iso /media mount: /dev/loop0 is write-protected, mounting read-only ------------------------------------------------------------ [root@CentOS7 ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos-root 17G 9.1G 8.0G 54% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.1M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/loop0 4.3G 4.3G 0 100% /media 👈 CentOS7(iso)がマウントされた |
一般ユーザーにマウント権限を与える場合の書式
例)一般ユーザでCD-ROMのマウントを行う
一般ユーザでCD-ROM を取り扱えるようにするには「/etc/fstab」で設定する必要があります。
[ /etc/fstab ]
/dev/cdrom /media iso9660 user,noauto,ro 0 0
「/etc/fstab」にマウントの設定を書いておくことで、デバイスのみの指定、あるいはマウントポイントのみの指定「mount /dev/cdrom」でマウントできるようになります。
※ 上記の例では、CD-ROM はリードオンリーで「mount」されます。
ファイルシステムのマウントを解除する「umount」
「umount」は、ファイルシステムのマウントを解除(アンマウント)するコマンドです。
コマンドの書式
umount[オプション][マウントポイント]
コマンドの主なオプション
- -a(--all):マウントの状況を記録するファイル
- -A(--all-targets):ネームスペースでマウントされたデバイスをアンマウントする
- -l(--lazy):対象のファイルシステムがbusyでなくなった時点でアンマウントする
- -R(--recursive):再帰的にアンマウントする
- -r(--read-only):アンマウントに失敗した場合、読み出し専用で再マウントする
- -f(--force):強制的にアンマウントする
- -v(--verbose):動作時のメッセージを詳しく表示する
CentOS7のisoメディアを「/media」からアンマウントします。
# umount /media
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@CentOS7 ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos-root 17G 9.1G 8.0G 54% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.0M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/loop0 4.3G 4.3G 0 100% /media 👈 CentOS7のisoがマウントされている ------------------------------------------------------------ [root@CentOS7 ~]# umount /media 👈 マウント解除実行 [root@CentOS7 ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos-root 17G 9.1G 8.0G 54% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.0M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 👈 CentOS7のisoがマウント解除されている |
ディスク容量を確認する「df」
dfコマンドは、ファイルシステムのディスク容量を表示するコマンドです。
コマンドの書式
df[オプション][ファイル]
コマンドの主なオプション
- -h(--human-readable):サイズに応じて読みやすい単位で表示する
- -B(--block-size=サイズ):指定したブロックサイズで表示する
- -k(--kilobytes):キロバイトブロック単位でサイズを表示する
- -m(--megabytes):メガバイトブロック単位でサイズを表示する
- -P(--portability):POSIX出力形式(サイズではなくブロックで表示)
- -i(--inodes):ブロック使用量の代わりにiノード情報を表示する
- -T(--print-type):各ファイルシステムの種類を合わせて表示する
- -t(--type=種類):対象とするフォーマットの種類を指定する
- -x(--exclude-type=種類):対象としないフォーマットの種類を指定する
- -a(--all):ダミーファイルシステムを含めて表示する
ファイルシステムのディスク容量を表示します。
$ df -h
1 2 3 4 5 6 7 8 9 10 |
[root@CentOS7 ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos-root 17G 9.1G 8.0G 54% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.1M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/loop0 4.3G 4.3G 0 100% /media |
ソフトウェアの管理「yum」
Red Hat系のディストリビューションで使われている「RPMパッケージ」を扱うためのパッケージ管理コマンドです。 yumを使用することによって、LinuxでもWindowsと同様に簡単に必要なソフトウェアをインストールして使用することができるようになります。
Windowsであれば、ダブルクリックするだけで「インストーラー」が走りインストールが開始される、というのが一般的ですが、Linuxの場合、特にサーバーで用いられるRed Hat系のOSにおいては、GUI環境が用意されていないケースもあり、コマンドによるソフトウェア管理を行う知識もあると業務においても役立つでしょう。
yumコマンドとは?
ソフトウェアをインストールする際や、削除する際にはこれらのコマンドに対して、既定の追記を行います。
たとえば、インストールであれば「yum install」、削除であれば「yum remove」といった具合です。どのコマンドを使用するかについては、使用しているディストリビューションによって異なります。ここではRedHat系OSの「CentOS」を例に説明をします。
コマンドの書式
yum[オプション] コマンド[パッケージ名]
yumコマンドには、オプションを追記することができます。オプションとは、インストールに際して、あわせて「○○も行ってほしい」削除の際に「○○もしてほしい」という内容です。
たとえば、「●●」というソフトウェアを削除したいというときに「設定ファイルなども含めて完全に削除したい」という場合、コマンドでは「yum remove ●●」とような書き方をします。
パッケージ操作の主なコマンド
- install:パッケージおよびそのパッケージに必要なパッケージをインストールする
- update:指定したパッケージがインストールされている場合、アップデートする
※ パッケージを指定しなかった場合はシステム全体がアップデート対象となる - remove:インストール済パッケージを削除する
その他、yumでインストール可能なパッケージグループの一覧を表示する場合には「yum list 」と言うような具合です。
情報関係の主なコマンド
- info:パッケージもしくはパッケージグループの詳細を表示する
- list:パッケージグループの一覧を表示する
- groups:パッケージグループの情報を表示する
- search:指定した文字列でパッケージの詳細を検索する
また、行いたい動作に合わせてオプションを付記することで、手作業による処理が少なくなり、効率的にLinux・PCの操作を行うことができます。
特に下記に挙げるオプション「-y」などは、シェルスクリプトを作成する上で、自動化を測りたい場合に多用されます。
yumコマンドの主なオプション
- -y(--assumeyes):全ての問い合わせに対し「yes」応答として実行する
- -q(--quiet):実行時にメッセージを出力しない
- -v(--verbose):詳しいメッセージを出力する
例)httpdサービスの導入有無を確認します。
# yum info httpd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@CentOS7 ~]# yum info -y httpd 読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manager This system is not registered with an entitlement server. You can use subscription-manager to register. インストール済みパッケージ 名前 : httpd アーキテクチャー : x86_64 バージョン : 2.4.6 リリース : 80.el7 容量 : 3.7 M リポジトリー : installed 👈 インストール済み 提供元リポジトリー : rhel-cdrom-rhel7-server-iso 要約 : Apache HTTP Server URL : http://httpd.apache.org/ ライセンス : ASL 2.0 説明 : The Apache HTTP Server is a powerful, efficient, and extensible : web server. |
httpdモジュールの導入状況が確認できます。
システムを終了する「shutdown」
「shutdown」コマンドは、システムを終了するためのコマンドです。オプションを組み合わせることで「終了」「再起動」等のタイミングを指定することが可能です。
たとえば、サーバー構築中にどうしても再起動したい場合等、他に接続中のユーザがいるか分からない場合、「shutdown -k」と入力する(ちょっと強引な気もしますが・・)と、大抵の場合、サーバーへ接続中のユーザーやその周辺がざわつきます。
そこで、改めて再起動の告知を行い、安全に再起動を行うことが可能です。
コマンドの書式
shutdown[オプション][時刻]
コマンドの主なオプション
- -h(--halt):システムを終了して電源を切る(デフォルト)
- -r(--reboot):システムを終了して再起動する
- -k:システムを終了せず、ログイン中の端末にメッセージだけを送る
システムを終了せず、ログイン中の端末にメッセージだけを送ります。
# shutdown -k
1 2 3 4 5 6 |
[root@CentOS7 ~]# shutdown -k 👈 システムを終了せず、ログイン中の端末にメッセージだけを送る Shutdown scheduled for 土 2020-04-11 16:37:39 JST, use 'shutdown -c' to cancel. ------------------------------------------------------------ Broadcast message from root@CentOS7.localdomain (Sat 2020-04-11 16:36:39 JST): 👇 「シャットダウンするぞ!」メッセージ! The system is going down for power-off at Sat 2020-04-11 16:37:39 JST! |
※ [Ctr」+「c」でプロンプトへ戻ります。
まとめ
この記事では、サーバーなどで採用事例の多いLinuxのコマンドについてご説明いたしました。
「コマンドは難しそう」というイメージを持つ方も多いかもしれませんが、CUIでの操作は一度覚えてしまえば、かえってGUIでの操作よりも快適でスピーディであることがほとんどです。
コマンドを理解することで、LinuxPCの管理者としての第一歩を踏み出しましょう。
Linux基礎知識(全12記事)
├─Linuxとは何か? Linuxの基本概要を理解しよう!
├─Linuxをインストールし、ログインしてみよう!
├─起動の仕組みとカーネルについて!
├─ディレクトリ構造とファイルシステムについて!
├─ユーザー環境(ユーザー、グループ、パスワード)の設定について!
├─ディレクトリ操作について!
├─ファイル操作について!
├─テキスト操作について!
├─Linuxの基本コマンドを覚えよう!
├─適切なアクセス制御を付与してみよう!
├─リンクとiノードについて理解を深めよう!
└─LVMとは?LVMを理解しよう?