コマンドを使ってみました

UbuntuでLinuxのコマンドをいろいろと試してみました。
sudo apt-get install manpages-ja
しておくと
man [コマンド]
が日本語になってちょっと便利です。


システム管理
                                                     
内容コマンド
ドライブの使用量を表示するdf -h
プロセスを終了する/ログアウトするexit
2001年12月31日1時1分にシャットダウンするshutdown -h 0112310101
すぐにシャットダウンするshutdown -h now
すぐにリブートするshutdown -r now
メモリやCPUの使用状況を調べるvmstat
カレンダー表示cal
日時表示date
ターミナルで動いているプログラムを調べるps
実行中のプログラムを調べるps alx
プロセスIDをツリー形式で表示するpstree -p
プログラムを終了するkill [プロセスID]
定期的にプログラムを実行するcrontab -e

ファイル管理
                                                                                   
内容コマンド
ファイルの内容表示cat [ファイル名]
現在のディレクトリを確認pwd
ディレクトリ内のサイズを確認するdu -h [ディレクトリ名]
ディレクトリに移動するcd [ディレクトリ名]
ファイル名を一覧表示する(ファイル名でソート)ls -1 [ファイル/ディレクトリ名]
ファイル名を一覧表示する(タイムスタンプでソート)ls -1 --sort=time [ファイル/ディレクトリ名]
ファイル名を一覧表示する(アクセス時間でソート)ls -1 --time=use [ファイル/ディレクトリ名]
ファイル名を一覧表示する(ファイルサイズでソート)ls -1 --sort=size [ファイル/ディレクトリ名]
ファイル名を一覧表示する(拡張子でソート)ls -1 --sort=extension [ファイル/ディレクトリ名]
ファイル名を逆順にソートして一覧表示するls -r1 [ファイル/ディレクトリ名]
ディレクトリを作成するmkdir [ディレクトリ名]
ファイル/ディレクトリをコピーするcp [コピー元] [コピー先]
ファイル/ディレクトリをサブディレクトリを含めてコピーするcp -r [コピー元] [コピー先]
ファイル/ディレクトリを移動するmv [移動元] [移動先]
ファイル/ディレクトリの名前を変更する(※移動と同じ)mv [変更前] [変更後]
ファイルを削除するrm [ファイル名]
ディレクトリを中のファイルを含めて削除するrm -rf [ディレクトリ名]
シンボリックリンク(ショートカット)を作成するln -s [リンク元] [リンク先]
ファイル/ディレクトリを高速に検索する(※ワイルドカード使用不可)locate [ファイル/ディレクトリ名]
ファイル/ディレクトリを検索する(※ワイルドカード使用可)find -name [検索するディレクトリ] [ファイル/ディレクトリ名]
ファイル/ディレクトリを検索した結果をコマンドに渡すfind -name [検索するディレクトリ] [ファイル/ディレクトリ名] -exec [コマンド] {} \;

圧縮・解凍
                   
内容コマンド
tar.gzip形式で圧縮するtar zcvf [圧縮後のファイル名(拡張子.tar.gz)] [圧縮するファイル/ディレクトリ名]
tar.gzip形式を解凍するtar zxvf [解凍するファイル名]
zip形式で圧縮するzip -r [圧縮後のファイル名(拡張子.zip)] [圧縮するファイル/ディレクトリ名]
zip形式を解凍するunzip [解凍するファイル名]

権限管理
                   
内容コマンド
所有者(u)とグループ(g)の権限に読み込み(r)と実行(x)の権限を付加(+)するchmod ug+rx [ファイル/ディレクトリ名]
その他のユーザー(o)の権限から書き込み(w)と実行(x)の権限をサブディレクトリを含めて削除(-)するchmod o-wx -R [ファイル/ディレクトリ名]
ファイルやディレクトリの所有者を変更するchown [変更するユーザ名] [変更するファイル/ディレクトリ名]
ファイルやディレクトリのグループをサブディレクトリを含めて変更するchgrp -R [変更するグループ名] [変更するファイル/ディレクトリ名]/td>

感想
    他にもたくさんのコマンドがあるので、使ったときに追加していこうと思います。
 

シェルを使ってみました


シェルについて

  シェルとは、ユーザーインターフェースのひとつで、コンピュータに指示をだすためのプログラムのことです。Ubuntuでは端末でシェルを使うことが可能で、これによって様々なプログラムの起動や制御ができます。

シェルにはいくつかの種類があるようですが、今回はLinuxで標準実装されているbashの使い方について調べてみました。

コマンドについて

  シェルでコンピュータに指示をだすことをコマンドと呼ぶようです。コマンドには様々な種類があり、"ー"のついたアルファベットで表されるオプションによって動作を細かく指定することができる場合もあります。

入力補完機能

  途中まで入力された内容からコマンドやファイル名が特定可能な場合には、Tabキーを押すことで入力を補完することが出来ます。
また、Tabキーを2回押すことで入力できる候補の一覧を表示することが出来ます

コマンドの履歴

以前に入力したコマンドの履歴を「↑」や「↓」を入力することで呼び出すことが出来ます。

画面のクリア

  Ctrl+l を押すことで画面の文字を消すことができて、ちょっと見やすくなります。

変数

  変数には名前をつけて値を設定することができます。この変数は、シェルの中で使用されるため、シェル変数とも呼ばれています。

 現在設定されているシェル変数の一覧を見るには set というコマンドを実行します。

※ シェル変数の一覧表示
$ set

  変数には名前=値という書式で値を設定することができますが、このとき = の前後に空白を開けることはできません。
変数は大文字と小文字が区別されるので注意が必要です。
文字列もそのまま格納できますが、スペースなどを含む場合には””(ダブルクォート)で囲む必要があります。

※ 変数名=値 で値を設定
$ var=123
$ var=abc
$ var="ls -l"

コマンドの実行結果を格納することもできます。

※ 実行結果の格納
$ var=pwd

 変数の値を参照するには、変数の前に$をつけます。
変数の値を明確にしたい場合には{}で囲む必要があります。

※ $変数名 で変数の値を表示
$ echo $var
$ echo ${var}

 シェル変数とは別に環境変数とよばれる変数も存在しており、env というコマンドで一覧を表示することができます。
環境変数に値を設定する場合には、一度シェル変数を作成した後、export とすることでシェル変数を環境変数にすることができます。

※ 環境変数の表示
$ env

※ 環境変数の設定
VAR="abc"
export VAR

  環境変数は実行中のシェルの中だけでなく、他のシェルやプログラムにも影響を与えるため、変更には注意が必要です。

コマンドサーチパス

  コマンドは環境変数PATHで指定された順番にしたがって実行されます。
(echo $PATH で表示された左側のパスから順に実行されます)
このため、コマンドはPATHで指定された場所に格納する必要があり、同じ名前のコマンドが存在する場合には先に指定されているコマンドが実行されることになります。

パイプ

  パイプという機能を使うとコマンドの結果を次のコマンドに受け渡すことができます。
実行は左から順に行われ、右のコマンドに渡されます。

※ 結果の受け渡し(コマンド1 | コマンド2 | コマンド3 ...)
$ ls --help | more

リダイレクション

  キーボードを使った入力を標準入力、端末を使った画面出力を標準出力、端末を使ったエラー画面の出力を標準エラー出力といい、これらの入力や出力をファイルに変更することをリダイレクションといいます。

実行結果を書き込みたい場合は">"、追加で書き込みたい場合は">>"を使ってファイルに書き出すことが出来ます。
また、エラーは"2>"のように2をつけることでファイルに書き出すことが出来ます。

応用として、画面に実行した結果を出力したくない場合にはリダイレクトでファイルを書き出す場所に /dev/null とすることで捨ててしまうこともできます。

※ ファイルに実行結果を書き込む
$ who > date.txt

※ ファイルに実行結果を追加して書き込む
$ date >> date.txt

※ ファイルにエラー内容を追加して書き込む

$ ./hoge.sh 2>> error.txt

※ ファイルに実行結果とエラー内容を別々に追加して書き込む
$ ./hoge.sh >> success.txt 2>> error.txt

エイリアス

  コマンドに別名をつけて覚えやすく、簡単に使えるようにします。

※ alias 名前='コマンドライン'
$ alias rm='rm -i'

終了ステータス

  最後に実行したコマンドの状態(終了ステータス)は、特殊な変数 $? に設定されます。
設定される値は、正常に終了した場合は0、失敗した場合は0以外になります。

  また、コマンドが成功した場合のみ次のコマンドを実行するには
$ コマンド1 && コマンド2
とし、コマンドが失敗した場合のみ次のコマンドを実行するには
$ コマンド1 || コマンド2
と記述することができます。

ワイルドカード

  ファイル名、ディレクトリ名は、ワイルドカードとよばれる文字列で置き換えることが加能です。
*などの文字を展開してほしくない場合は、シングルクオートでくくります。

※ *  : 0文字以上の任意の文字列に置き換え
※ ?  : 1文字の任意の文字に置き換え
※ [] : 囲まれている任意の1文字に置き換え。[0-9][a-z][A-Z]という指定もできる
※ {} : 囲まれている任意の複数文字に置き換え。カンマで区切って記述する

$ find -name file.*
$ find -name file.???
$ find -name [fF]ile.txt
$ find -name file[0-9a-fA-F].txt
$ find -name fle.{png,jpg,gif}

ジョブの制御
  Ctrl+c を押すことで実行中のコマンドを停止することができます。

シェルスクリプトについて

  テキストファイルに書いたコマンドを、記述した順序に実行することができます。
このテキストファイルをシェルスクリプトと呼びます。

この機能によって、毎回コマンドを記述する必要がなくなり、時間がかかる処理の終了を待つ必要もなくなります。

シェルスクリプトの先頭には、シェル(/bin/sh)で実行することを明示し、実行属性を付与する必要があります。

※ シェルとして実行することを明示
$ !/bin/sh

※ 実行属性を付与必要
$ chmod u+x ファイル名.sh

  シェルスクリプトの実行は、

$ sh ./ファイル名.sh

またはファイル名の記述で行うことができます。

$ ./ファイル名.sh

実行結果はリダイレクトによって知ることが出来ます。

感想
ほかにも、ファイル名などの置き換えや、条件判断や繰り返しなど、いろんな機能があるみたいですが、このあたりは必要になったら調べて追記していきたいと思います。

viを使ってみました

vimの必要性とviの違い

  端末からテキスト形式のファイルを編集するには、テキストベースで動作するエディタが必要です。今回はLinux系のOSで広く使われているvimというテキストエディタを使ってみました。

  vimはviというエディタに機能が追加された高機能なエディタです。2000年以降のOSは、viに代わってvimが標準装備されるようになってきており、Ubuntuでもコマンドラインからviと入力するとvimが起動されました。

メモ帳との違い

メモ帳との大きな違いは、ノーマルモードビジュアルモード挿入モードコマンドモードなどの状態が存在することです。さらにいくつかのモードが存在するようですが、基本的にはこの4つのモードを覚えておけば使えそうな感じです。

  • ノーマルモード
    起動時のモード
    で、編集や移動が可能。他のモードからESCを押すことでこのモードに移行できる
  • ビジュアルモード
    領域選択に特化したモード。ノーマルモードからvをタイプすることでこのモードに移行できる。"-- ビジュアル --"と表示される
  • 挿入モード
    文字の入力が可能。ノーマルモードからi,I,a,Aをタイプすることでこのモードに移行できる。"-- 挿入 --"と表示される
  • コマンドモード
    ファイル操作や検索などが可能。ノーマルモードから":","/"," ?"を押すことで移行できる。画面下部に入力した文字が表示される
よく使う操作

- ファイル -
内容 コマンド
新規作成 :e [存在しないファイル名]
開く :e [ファイル名]
別名で保存 :w [ファイル名]
保存 :w
終了 :q
変更を破棄して終了 q!


編集
内容 コマンド
元に戻す u
やり直す Ctrl + r
切り取り d
一行切り取り dd
クリップボードに切り取り Ctrl + Delete
コピー y
一行コピー yy
クリップボードにコピー Ctrl + Insert
貼り付け(カーソルの左) P
貼り付け(カーソルの右) p
クリップボードから貼り付け Shift + Insert
範囲選択 v(ビジュアルモードに移行)
すべて選択 1GvG(ビジュアルモードに移行)

移動
内容 コマンド
k または ↑
j または ↓
h または ←
l または →
行の先頭に移動 0
行の末尾に移動 $
ファイルの先頭に移動 1G
ファイルの末尾に移動 G
指定行に移動 (指定した行)G
ページを前に移動 Ctrl + f
ページを後ろに移動 Ctrl + b

検索
内容 コマンド
検索 /
次を検索 n
前を検索 N

その他
内容 コマンド
ノーマルモード切替 ESC
インサートモード切替 i(カーソルの左にinsert)
I(行の先頭にinsert)
a(カーソルの右からappend)
A(行の末尾からappend)
ビジュアルモード切替 v
削除 DEL
改行の削除 J

感想
最低限の操作は覚えられたと思うので、ほかにも色々な機能があるのでおいおい覚えていこうと思います


注1:viではコピーのことはヤンクと呼びます

ユーザとグループについて


Windowsとの違い

  Linuxのユーザとグループについてまとめてみました。

なお、ユーザやグループの追加や変更はシステム→システム管理→ユーザとグループからおこなっています。

ユーザとグループについて

  ユーザは一つのパソコンを何人かで使うときに使うもので、マイドキュメントのように自由に使えるディレクトリが /home/<ユーザ名> になっています。

また、ユーザは複数のグループに参加することができ、グループに参加することで特定のファイルやディレクトリにアクセスできる権限を持たせることができます。

 このため、グループを変更することで、他のグループから閲覧や削除ができないディレクトリを作ったり、インターネット接続などのデバイスの使用を制限したりすることができます。




パーミッション(アクセス権)について

  このようにファイルやディレクトリにアクセスできる権限のことをパーミッションといいます。

すべてのファイルやディレクトリには所有者と所有グループが決められており、それ以外のユーザを合わせたそれぞれに「読み込み」「書き込み」「実行」の権限を与えることができます。


■所有者の分類
  • 所有者(Owner権限)
  • 所有グループ(Group権限)
  • その他(Other権限)

■所有者の権限
  • 読み取り
    ファイルの場合は閲覧、ディレクトリの場合は内容を表示することができる
  • 書込み
    ファイルの場合は書き込みや削除、ディレクトリの場合は中にあるファイルやディレクトリを新規作成したり削除したりできる
  • 実行
    ファイルの場合はプログラムとして実行、ディレクトリの場合は移動することができる

パーミッションの表記

  パーミッションを設定する場合は、主に「755」などの3桁の数字で設定します。左の数字が所有者の権限、中の数字が所有グループの権限、右の数字がその他の権限を表します。

  それぞれの桁は、4が読み込み許可2が書き込み許可1が実行許可を表す数字であり、この数字を足し合わせることで権限の組み合わせを表現しています。このため、す
べてを足し合わせた7は読み込み・書き込み・実行のすべての権限があることを示しています。

また、パーミッションを表示する場合は、-rw-r--r--などの表示が用いられ、この場合は"r"が読み込み許可"w"が書き込み許可"x"が実行許可を表し、"-"の表示で許可しないことを示しています。

左から2〜4桁目は所有者の権限、左から5〜7桁目は所有グループの権限、右3桁はその他の権限を表します。
(1桁めはファイルやディレクトリなどを表すのに使用。詳細はlsコマンドの解説などを参照)

■パーミッションの表記
0:---
1:--x
2:-w-
3:-wx
4:r--
5:r-x
6:rw-
7:rwx


sudoについて

  Linuxのディストリビューションによっては、すべてにアクセスできる権限を持ったrootとよばれるユーザが存在している場合がありますが、Ubuntuではrootのユーザは存在していません

このため、Ubuntuで権限を越えた処理を行う際にはsudo(すーどぅー)というコマンドを使って処理を行うことになります。

  sudoはrootの権限を分散してユーザごとに細かく権限を設定することを可能にし、何人かでシステムを管理する場合にもrootのパスワードを共有する必要がなくなるコマンドのことです。

  Ubuntuの初期設定では、sudoというグループadminというグループに所属していれば、sutoした時にすべてのユーザ権限ですべての処理が実行できる大雑把な設定になっています。
インストールした時に作成したユーザはadminというグループに所属しているため、sudoとすることでrootと同様に色々な処理が行えるようになっていたみたいです。



▽参考URL:
パーミッションとは【permission】 - 意味・解説 : IT用語辞典 e-Words

@IT:止められないUNIXサーバのセキュリティ対策 第5回 サービスをセキュアにするための利用制限(3)〜管理者権限の制限のためのsuとsudoの基本〜