Windowsの共有フォルダをマウント

0.はじめに

UbuntuでもWindowsと同じように、他のパソコンのディレクトリを適当なドライブに割り当ててアクセスできるようにしました。

ちなみに、マウントというのは周辺機器をパソコンに認識させることで、ネットワーク上のディレクトリにアクセスできるようにすることもマウントというみたいです。

1.fstabでマウントの設定をする

/etc/fstabというファイルを編集して、自動でマウントしたりroot以外のユーザでもマウントできるようにすることができるようです。

以下を追加しました。

デバイス名 マウントする場所 cifs credentials=パスワードの保存場所,gid=sambashare,file_mode=0770,dir_mode=0770,iocharset=utf8,users,rw,exec,noauto 0 0

だいたい以下のような感じ
//192.168.11.1/hoge /mnt/fuga cifs credentials=/etc/piyo_credntials,gid=sambashare,file_mode=0770,dir_mode=0770,iocharset=utf8,users,rw,exec,noauto 0 0

credentialsで指定するファイルの中身は以下のような書式になります
username=ユーザ名
password=パスワード

指定したオプションの値
credentials = パスワード、ファイル名を記述したファイルの場所を指定
uid = マウントするユーザIDを指定
gid = マウントするグループIDを指定
file_mode = ファイルのパーミッション設定
dir_mode = ディレクトリのパーミッション設定
iocharset = 文字コードの指定
users = 一般のユーザでもマウント・アンマウントできるようにする
rw = 読み書きを可能にする
exec = バイナリを実行可能にする
noauto = 自動でマウントしない。autoの場合は自動でマウントされる

最後の02つは、dumpとファイルシステムチェックを行う場合に0以外を指定するようです。なんか無駄な指定もありそうですが、とりあえず思うように動作したのでいいことにします。

2.マウントコマンド

mountというコマンドでマウントすることができます。mountコマンドの後にマウント場所を指定します。

mount /mnt/fuga

おまけ

自宅で使っているNASがwakeonlanというコマンドを使うと、自動起動ができるようなので、使ってみました。

wakeonlan -i IPアドレス macアドレス

あと、/etc/mtabを参照するとすでにマウントが実行できているかどうかを確認できるようです。このあたりを使って、NASが常時起動していない場合でも自動でマウントすることができるようにできました。


・・・なんかすごく面倒くさいですね。簡単な方法があるような気がするんですが、ちょっと調べてみた感じだと見つかりませんでした。

ufwコマンドを使ってファイアウォールを設定する

0.ufwとは

Linuxで標準的に利用されているiptablesよりも簡単にファイアウォールが設定できるツール。複雑な設定はできないものの、単純な設定を行う場合には有効な模様。

1.デフォルトですべての通信を遮断する

最初にすべての通信を遮断するように設定しておき、許可する通信を追加していきます。

$ ufw default DENY

2.ルールの追加とその削除

allow "ポート番号"とすると許可するポート番号を追加することができます

$ ufw allow 22

/etc/servicesに書かれたサービス名で通信を許可することができます

$ ufw allow ssh

登録されているアプリケーションの単位で指定することも可能です。
アプリケーションの一覧から app list としてアプリケーションを確認して、allowすることで通信を許可することができます

$ ufw app list
$ ufw allow OpenSSH

追加したルールを削除するにはdeleteをつけて実行します

$ ufw delete allow ssh


3.特定のIPアドレスからの接続のみ許可する

from とつけることで、特定のIPアドレスからのみアクセスすることができるようになります

$ ufw allow from 192.168.1.10

特定のIPアドレスがアクセスできるポートを指定することもできます

$ ufw allow from 192.168.1.10 to any port ssh

アプリケーション単位で指定する場合は以下

$ ufw allow from 192.168.1.10 to any app OpenSSH

参考:第76回 Ubuntuのソフトウェアファイアウォール:UFWの利用(1)

他のパソコンからコマンドが実行できるようにしてみました

1.OpenSSHのインストール

apt-get install openssh-server

2.公開鍵、秘密鍵を作成(RSA暗号を使用)

ログインするユーザで公開鍵/秘密鍵のペアを作成します

ssh-keygen -t rsa

途中、鍵のファイルを保存する場所を聞かれるので、とりあえずデフォルトの~/.ssh/id_rsaのままにしておく。

また、パスフレーズを入力するように指示されるので、適当に入力する


3.公開鍵の登録

作成した公開鍵(id_rsa.pub)は、./ssh配下にauthorized_keysという名前で登録する必要がある模様。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

また、他のユーザから参照できないようにアクセス権も変更しておく

chmod 600 ~/.ssh/authorized_keys


4.OpenSSHの起動

/etc/init.d/ssh restart

自動起動する場合にはデーモンに追加

sysv-rc-conf ssh on


5.SSHサーバにアクセスする

作成した秘密鍵(id_rsa)をクライアント側のPCに渡して、SSHサーバにアクセスする。

※WindowsのPuTTYを使用する場合は、PuTTYgenを使って利用できる形式にインポートする必要がある(最新のPuTTYgenを使ったほうがよさげ)

Ubuntuの覚書

プログラムのアップデート(windowsのアップデートみたいな感じ?)

パネルのシステム→アップデート・マネージャから。

端末から実行するには
apt-get update
apt-get upgrade

アプリケーションの追加と削除

パネルのシステム→Synaptic・マネージャから。

端末でインストールされたアプリケーションを確認するには
dpkg -l
dpkg -l [パッケージ名]
(iiはインストール済み、unはインストールされていない)

インストールするには
apt-get instal パッケージ名

アンインストールするには
apt-get remove パッケージ名

debパッケージのインストール / アンインストール

dpkgパッケージ(拡張子.deb)のインストールを行う場合は、オプションの「-i」を使用する

dpkg -i パッケージ名

アンインストールには「-r」を使用する

dpkg -r パッケージ名

デーモン(サービス)の起動と停止
端末からのみ可能?
"sysv-rc-conf"というコマンドでランレベル(コンピュータの動作状態)に応じたデーモンの起動・停止を制御できる

ubuntuのランレベルは以下のようになっている模様
0:シャットダウン
1,S:シングルユーザモード(ネットワークを起動しない)
2-5:マルチユーザモード
6:リブート

IPアドレスの設定
システム→設定→ネットワーク接続で設定

端末からはifupdownというパッケージを使用することで設定可能な模様(試していない)。
"/etc/network/interfaces"を編集する。

起動時にプログラムを起動する(スタートアップ)
設定の自動起動するアプリに追加する。

端末で追加するには、ホームフォルダにある".profile"というファイルに記述することでプログラムを起動できる

隠しファイルの表示
ディレクトリを開いて、メニューの表示から隠しファイルを表示するを選択。

端末から確認する場合は、lsに-aのオプションを付加する
ls -a

ログの確認
ログは /etc/log/ の下にあるファイルに書き込まれる

/var/log/auth.log
認証に関するログ
/var/log/kern.log
カーネルに関するログ
/var/log/syslog.log
システムに関するログ
/var/log/deamon.log

・・・他にも各種デーモンが出力したログもある模様。

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

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ではコピーのことはヤンクと呼びます