Linux コマンド集

ファイル/ディレクトリ関連
コマンド 説明
cd [移動先のディレクトリ] ディレクトリ移動
pwd カレントディレクトリの表示
mv [file] [file] ファイル名の変更
touch [file] 空のファイルを作成する
rm [file] ファイルの削除
mkdir [directory] ディレクトリの作成(既に存在するファイル名と同名のディレクトリを作成することはできない)
rmdir [directory] ディレクトリの削除


ファイル/ディレクトリ一覧を表示する
コマンド 説明
ls ファイル・ディレクトリ一覧の表示
ls [directory] 指定したディレクトリ内のファイル・ディレクトリの表示
ls -a [directory] 隠しファイル(.から始まるファイル)も表示
ls -l [directory] ディレクトリのリスト表示
ls [directory] ディレクトリのリスト、パーミッションの表示
ls [file] 指定ファイルの詳細情報を表示
ls -F ファイル・ディレクトリの種別を一覧で表示(ディレクトリは"/"、実行可能ファイルは"*"、シンボリックリンクは"@"、通常ファイルは記号なし)
cp [file/directory] [file/directory] ファイルやディレクトリのコピー(ディレクトリをコピーする場合は、-rオプションを使用する)


ファイルの中身を見る
コマンド 説明
cat [file] ファイルの中身を表示
less [file] ファイルの中身をスクロール表示
head [file] ファイルの先頭のみを表示(初期設定は10行)
tail [file] ファイルの末尾のみを表示(初期設定は10行)


権限を変更する
コマンド 説明
su - rootユーザーに切り替える
su - [user] [user]に切り替える
sudo [コマンド] rootユーザーとしてコマンドを実行する


その他
コマンド 説明
history [オプション] [表示するコマンド数] コマンド入力の履歴を表示する
ctrl + a コマンドラインの行頭にカーソルを移動する
ctrl + e コマンドラインの行末にカーソルを移動する
esc + f 前方に単語1つ分移動する
esc + b 後方に単語1つ分移動する
ctrl + k カーソル位置から行末までを削除する
ctrl + u カーソル位置から行頭までを削除する
ctrl + y 最後に削除した内容を挿入する
source シェルの設定を即座に反映させる
who ログインしているユーザを探す
clear 画面をクリア(消去)にする
diff [-bciqrw] ファイル1 ファイル2 2つのテキストファイルの内容を比較する
ftp リモート・ホストに接続してファイルの送受信を行う
nohup [コマンド] ログアウト後もバックグラウンドでコマンドを実行する
rcp [-prxK] コピー元 コピー先 ネットワーク上の異なるマシン間でファイルをコピーする
scp [オプション] コピー元 コピー先 リモートホストからローカルにファイルをコピーする(暗号化するので安全)
rsh [-xK] [-l ユーザー] ホスト コマンド 指定されたリモート・マシンにコマンドを送り実行させる。
sort ファイル内の行を並び替える
split ファイルを分割して複数の新ファイルを生成する
hostname システムのホスト名を表示する(間違えて変な引数をとると名前を変更してしまうのでuname -aを使ったほうがいい
uname -n ユーザ名を表示する
sed -n 行番号A,行番号Bp file 行番号Aから行番号Bを表示する


grep

grepはファイル中の文字列に対して正規表現を使って検索し表示するLinuxコマンドだ。

オプション 説明
-r ディレクトリ内容も検索対象とする
-n 行番号を表示させる

grepコマンドの詳細まとめました【Linuxコマンド集】

#libディレクトリ以下のファイルの全ての中からaという文字を再帰的に検索する。
$ grep -rn a lib*



再帰的に検索するとは
対象となるディレクトリ内にディレクトリ がある場合は、そのディレクトリ内のファイルも含めて検索を行うということ。

grepの派生コマンド
コマンド 説明
grep 簡単な絞り込みに用いられる
egrep より強力な拡張正規表現(EREs)が使える
fgrep grepやegrepよりも早いが限定的な正規表現しか使えない
zgrep gzipなどで圧縮されたファイルも対象にできる
zegrep zgrep + egrep
zfgrep zgrep + fgrep


find

findは指定した名称のファイルやディレクトリが存在するか正規表現を使って検索し表示するLinuxコマンドだ。

"."を検索開始ディレクトリとして".tt"という文字列を含むファイルをprintする。
$ find . -name "*.tt" -print

findコマンドで覚えておきたい使い方12個(+1個) | 俺的備忘録 〜なんかいろいろ〜

sed

sedはファイルを読み込み、指定されたコマンドに従って文字を変換するLinuxコマンドだ。

#文字を変換した上で、元のファイル内容を上書きする
$ sed -i 's/置換対象文字列/置換後文字列/g' ファイル名


tail

tailはファイルの最終行から数行を表示するコマンドだ。デフォルトだと10行が表示される。

#指定したファイルの最終行から100行を表示する。追記があった場合は、追記の文を表示する(-nオプション)。
$ tail -f -n 100 ファイル名


特定のファイルから特定の文字列を検索する
git log -p -S 文字列 ファイルのパス


特定の文字列を含むファイルを完全一致で検索する
grep -rn -w 文字列 .

cpanでインストールしたモジュールは基本的にホームディレクトリ以下に作成される。


リモートの特定のファイルをローカルに反映させる
git checkout ブランチ名 -- ファイルのパス


ファイルの文字コードの判別をする
nkf --guess ファイル名


CPANモジュールのインストール場所の確認をする
perldoc -l モジュール名


CPANモジュールのバージョンを確認する
perl -lM'モジュール名' -e 'print $モジュール名::VERSION'
# 例
perl -lMImager -e 'print $Imager::VERSION'


デーモンを起動する
service サービス名 start


リモートブランチを削除する
git push --delete origin branch_name


ローカルブランチをマージしたかどうかを問わずに削除する
git branch -D branch_name


特定の行のみ表示する
sed -n 10p file_path


プロセスが使用しているポートを表示する。表示されたポート番号の使用を止める。
lsof -i:ポート番号
kill -9 ポート番号


shift jisで文字化けしているファイルを正常に表示させる。
iconv -f SJIS "ファイル名"


ファイルの文字コードを変換する。
iconv -f sjis -t utf-8 sample.pl -o sample.pl
# オプション
-f : 変換元の文字コード
-t : 変換後の文字コード
-o : 出力するファイル
INPUTFILE : 変換元のファイル名


duコマンドで一番容量を食っているディレクトリを探す
du -sh * | sort -nr


ディスク容量の使用状況を表示
$ df -h


iノード数を表示
$ df -i


ルートディレクトリの各ディレクトリのディスクの利用状況把握
sudo du -sh /*


別ブランチからファイルをコピーする
git checkout <ブランチ名> -- <ファイル名>


ローカルの変更を元に戻す
git checkout <filename>


nkfコマンド

nkf」は「Network Kanji Filter」の略で、LinuxWindowsなど、異なるOS間でテキストデータを交換する際に問題となる文字コードと改行コードを変換するためのコマンドである。

whichコマンド

whichコマンドは、環境変数のPATHに設定されているディレクトリ順に調べ、最初に見つかったコマンドを表示する。PATHに設定されている全ディレクトリを調べるには、-aオプションを使用する。

$ which httpd
/usr/sbin/httpd


インストール済のパッケージ一覧を表示する
$ yum list installed | grep ファイル名


リポジトリ内で利用可能なパッケージを表示する
$ yum list available | grep ファイル名


rpm

rpm」は、Red Hat系のLinuxディストリビューションで使われている“RPMRed Hat Package Manager)パッケージ”を扱うことができるパッケージ管理コマンドである。

2つのファイルの差分を表示する
vimdiff filename1 filename2


作業ブランチの変更を元に戻す
git checkout ファイル名

www.atmarkit.co.jp

ブランチ比較

br1ブランチのfoo/bar.tx と br2ブランチのhoge/fuga.txtを比較する

git diff br1:foo/bar.txt br2:hoge/fuga.txt


ブランチ間で差分のあるファイルの名前とステータスのみ表示
git diff --name-status  feature source/js/


setuidgid

setuidgid は明記されたアカウントの uid と gid で別のプログラムを起動する。

setuidgid account child

account は一つの引数で、child は一つ以上の引数からなる。
setuidgid は account の uid と gid に自身の uid と gid を設定し、全ての補助グループ(supplementary groups)を解除する。 それから child を起動する。


mysql マイグレーション
mysql -uroot DB名 < hoge.sql


ps auxf

プロセスごとの実行状態などを階層構造で表示する。
https://mag.osdn.jp/07/06/19/012222

crontab

crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドはUnixオペレーティングシステム (OS) において、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。

指定したDB名/テーブル名のデータのSELECT文を取得する。
mysqldump -uroot -t --compact --skip-extended-insert DB名 テーブル名 --where="条件" > ファイル名


コンフリクトを解消する
git mergetool ファイル名


コミット前の内容を一時的に避ける
git stash

色々な git stash - Qiita

mysqlのSELECT結果をファイルに出力する
mysql -uroot -e "select * from test where id = 11111¥G" DB_NAME > test.dmp


git logでdiffを表示させる。
git log -p


git log に変更したファイルの簡易情報(ファイル名と変更した行数)を表示する。
git log --stat

git log の option 色々 - Qiita

git addとgit commitを同時に行う。
git commit -a -m "commit message"


git add した後にインデックスと最新のコミットとの変更点を見る。
git diff --cached
git diff --staged


git の管理対象にあるファイルを移動する。
git mv [ファイルのパス] [移動後のファイルのパス]

git を通さないと、移動後のファイルがUntracked file扱いとなりgit addする手間が生じるのでgit mvを使う。同様にrmについてもgit rmを使う。

ステージングエリアから変更を削除する。
git reset

git resetでどのオプション(hard, mixed, soft)を指定すべきか、シチュエーション別に分けてみる - Qiita
--hardを使うことはまずなさそう。
インデックス=ステージ
基本的には--mixedを使うことが多そう。


ファイル内の一部をステージングする。
git add -p


特定のファイルに関するコミットのみ表示させる(diffも)。
git log -p ファイル名


HEAD

HEAD はシンボリックリファレンス(symbolic reference)であり、現在チェックアウトされているブランチ(reference)、またはコミットIDを参照する。

コミットに任意の名前をつける

タグとは、コミットに対して分かりやすい名前を付けたもののことである。コミットのエイリアスと言うこともできる。

git tag -a タグ名 -m 'タグについてのコメント'

GitのTagの使い方 - 30歳からのプログラミング

masterブランチ

一番最後に行われたコミットへの参照のこと

ブランチ間の差分を表示する。
git diff branch1...branch2


fast-forwardマージ

ブランチAと、そこから切ったブランチBがあるとする。BがAでの変更をすべて含むときに行われるマージをfast-forward(早送り)マージという。つまり、分岐後に、元ブランチAにおいて変更がないときに行われるマージのこと。git pushはリモートがローカルをfast-forwardマージとして取り込める前提にたっているので、git rebaseをした結果fast-forwardでなくなった場合はgit push -fすれば良い。

リモートの追跡ブランチ(リモートのブランチではない)とローカルのブランチの両方を表示させる。
git branch -a 


リモートの追跡ブランチを最新の状態に変更する。
git fetch


FETCH_HEADからの新しいコミットを、カレントブランチにマージする。
git merge FETCH_HEAD

git pull = git fetch + git merge FETCH_HEAD

FETCH_HEADがカレントブランチの子孫である場合に限り、マージを許可する。(fast-fowardマージ)
git pull --ff-only


gitによる出力結果においてページ移動をする。

スペースキーで次のページに進み、bで前のページに戻る。

ファイルの特定の行の修正及び追加を誰が行ったか確認する。
git blame [ファイル名]

[Git] blameコマンドで特定の行がいつ変更されたのか調べて、バグの混入を見つける - YoheiM .NET

HEAD の移動履歴を一覧で表示する。
git reflog


他のブランチの特定コミットをブランチに反映する。

誤って目的とは異なるブランチにコミットした時に使える。

git cherry-pick コミットID


git pushを取り消す

git push の取り消し方法 | WWWクリエイターズ
基本的にはgt revertを使おう。

すでにpushされているcommitを打ち消す(もとに戻す)
git revert [commit id]


特定の文字列を含むプロセスをリアルタイムで管理する
top -c | grep [文字列]

Linux負荷監視コマンドまとめ - Qiita

mvでファイル名を変える時にパスを指定するのが面倒な件の解決
$ mv path/to/file/{old_file_name,new_file_name}.txt


gitの追跡対象にあるファイル名を検索
git ls-files *cache*


ターミナルで過去に実行したコマンドの履歴を検索する。
ctrl + r
テーブル名を知るために曖昧検索をする。
show tables LIKE "%文字列%"
指定したカラムの行数を調べる
SELECT COUNT(name) FROM テーブル名


ファイルの行数を出力する
wc -l [ファイル名]


URLを指定してファイルをダウンロードする
curl [url] > [ファイル名]


screenでdeadされているセッションを削除する
screen -wipe

Linux 超基本用語

GUI

GUIとは、グラフィカルユーザインターフェース(Graphical User Interface)の略語。コンピュータへ出す命令や指示等を、ユーザが画面上で視覚的に捉えて行動を指定できるもので、それまで主流であった命令文を入力して実行する方式(CUI)に比べ、直感的に操作できるのが特長。

CUI

CUIとは、キャラクターユーザインターフェース(Character User Interface)の略語。コンピューターにおいて、キーボード入力と文字表示のみを用いる。

通常、コマンドの入力位置などを示すために「プロンプト」と呼ばれる記号が表示されており、コマンドを入力してEnterキーを押すことでコマンドが実行される。

CLI

CLIとは、コマンドラインインターフェース(Command Line Interface)の略語。ユーザに対する情報の表示を文字によって行い、全ての操作はキーボードを用いて行うユーザインターフェースのことを指す。

カーネル

階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。アプリケーションとハードウェアレベルでの実際のデータ処理との間の架け橋である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。Linuxカーネルは直接人間が操作できるようになっていない。

シェル

カーネルのインターフェースとなっているソフトウェアのことを指す。カーネルをユーザーが直接操作すると致命的なエラーが発生することがあるため、シェルを使ってカーネルを操作する。

シェルはカーネルの中に、特別な関数(システムコール)として定義されていて、そのシステムコールをユーザーがコマンドラインを使って操作している。代表的なシェルとしては、sh,csh,bash,tcsh,zshがある。

インターフェース

コンピュータで、異なる機器・装置のあいだを接続して、交信や制御を可能にする装置やソフトウェアのこと。または、コンピュータで、装置と人間との接点である、入出力部分のこと。

ソフトウェアコンポーネント

ソフトウェアコンポーネントとは、部品とは特定の機能を果たす単位で、特に再利用を考えて汎用に開発されたものを指す。

プロンプト

シェルがコマンド入力待ち状態の際に表示される記号のこと。Linuxの場合、一般ユーザの場合のプロンプトは"$"で、スーパーユーザの場合は"#" である。

シェルスクリプト

実行したいコマンド群を事前にファイルに記述しておき、そのファイルをシェルに指定することで一連のコマンドをまとめて実行することができる。このような、一連の操作の流れを記述したファイルのことをシェルスクリプトと呼ぶ。

対話型操作

キーボードからコマンド名を入力してEnterキーを押すことでシェルを操作するように、ユーザがキーボードと画面を利用して直接シェルを操作する方式を対話型操作と呼ぶ。

ターミナルエミュレータ

ユーザにコンピュータへの入出力する画面を提供するソフトウェアのことである。

パス

ユーザがコンピュータへ入出力をする際に利用する専用のソフトウェアのことを指す。目的のディレクトリまでの道筋・経路のことをパスが通っている=対象ディレクトリにあるプログラムがコマンドとして設定されているということである。

/

ルートディレクトリのこと。全てのファイルとディレクトリは、その親を辿って行くとこのルートディレクトリにたどり着く。Linuxディレクトリこいうせいは、ルートディレクトリを頂点とした階層構造になっている。

カレントディレクト

現在自分が位置しているディレクトリのことをカレントディレクトリという。Linuxにログインした直後は、カレントディレクトリはユーザのホームディレクトリになっている(ルートディレクトリではない)。カレントディレクトリを確認する場合は、pwdコマンドを使用する。

絶対パス

ルートディレクトリを起点としてファイルやディレクトリのパスを示すこと。

相対パス

現在のカレントディレクトリを起点として表記されるパスのこと。相対パスで記述する際には、どのディレクトリにもある特別なディレクトリ「.」と「..」が利用できる。

「.」はカレントディレクトリを表す。例えば、カレントディレクトリ内にあるfileというファイルを指定するときに、ファイル名を書いているのかパス名を表記しているのかわからないので、この曖昧さをなくし明示的にパスを指定したいときは、「./file」と書く。

「..」は親ディレクトリを指す。現在のカレントディレクトリから、階層構造を遡って指定するときに使用する。「../../../」とすれば3つ上のディレクトリを指す。また、「../test」とすれば、親ディレクトリ内のtestというディレクトリ、つまりカレントディレクトリと同階層にある別のディレクトリを指すことができる。

~/.hoge

"~"はホームディレクトリのことを指す。すなわち、「/home/user[ユーザ名]/」 = 「~/」となる。~/.hogeはホームディレクトリにある.hogeという隠しファイルのことである。

cd /usrは絶対パスでの指定。cd testは相対パスでの指定。



gitについて

■Gitの概要

Gitは、プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムである。
分散型でないバージョン管理システムでは、サーバー上にある1つのリポジトリを利用者が共同で使用していた。このため、利用者が増えると変更内容が衝突したり、整合性を維持することが大変だった。

Gitでは、ローカル環境にもコードの変更履歴を保存(コミット)することができるので、リモートのサーバーに常に接続する必要がない。このため、ネットワークに接続していなくても作業を行うことができる。

GitHubの概要

GitHubは、Gitの仕組みを利用して、世界中の人々が自分の作品(プログラムコードやデザインデータなど)を保存、公開することができるようにしたWebサービスである。
GitHubのようなGitを利用したWebサービスは、他にもBitbucketやBacklogなど複数存在する。


■Gitの基本用語・コマンド理解

ディレクト
どちらもファイルを分類するための容れ物であり、複数のファイルを保管する場所という意味では「ディレクトリ = フォルダ」と考えて問題ない。
一般的にWindowsMacなどのGUIではフォルダと呼ぶことが多い。一方で、UNIXLinuxなどのCUIでは、フォルダという概念がないのでディレクトリと呼ぶことが多い。

リポジトリ
リポジトリとは、ファイルやディレクトリの状態を記録する場所である。保存された状態は、内容の変更履歴として格納されている。変更履歴を管理したいディレクトリをリポジトリの管理下に置くことで、そのディレクトリ内のファイルやディレクトリの変更履歴を記録することができる。

・リモートリポジトリ
専用のサーバに配置して複数人で共有するためのリポジトリである。

・ローカルリポジトリ
ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリである。

・ワークツリー
Gitの管理下に置かれた、実際に作業をしているディレクトリの領域のことをワークツリーと呼ぶ。

・インデックス
インデックスとは、リポジトリにコミットする準備をするための場所のことである。リポジトリとワークツリーの間に存在する。インデックスがなぜ必要か。

・コミット
ファイルやディレクトリの追加・変更を、リポジトリに記録するにはコミットという操作を行う。コミットを実行すると、リポジトリの内では、前回コミットした時の状態から現在の状態までの差分を記録したコミット(またはリビジョン)と呼ばれるものが作成される。

このコミットは、次の図のように時系列順につながった状態でリポジトリに格納されている。このコミットを最新の物から辿ることで、過去の変更履歴やその内容を知ることができるようになっている。

・リビジョン
コミットによって作られる状態の単位のこと。変更セットをコミットするたびに、新しい「リビジョン」がローカルリポジトリに作成される。厳密には異なるが、"バージョン"のようなもの。

・git clone
指定されたディレクトリに元のリポジトリと同じものを複製するコマンドである。例えば、開発現場に新しく入った人がGithubからソースをコピーして来たい時など、cloneコマンドを使うことになる。

・git fetch
リモートリポジトリで更新された最新情報をローカルリポジトリに持ってきてorgin/masterを更新する。

・git pull
リモートリポジトリから最新の変更履歴をダウンロードしてきて、自分のローカルリポジトリにその内容を取り込む。git pullは、git fetchとgit merge origin/masterまでをまとめて行う。

・git diff
作業ツリーに行われた変更の表示をする。

引数に「比較元」を指定できるがもし比較元を指定しない場合は、デフォルトで「インデックス」を比較元とし、 [インデックス] → [作業ツリー] と比較した際の差分を表示する事になる。

・git checkout -b
作業ブランチを切ってそのブランチに移動する

・git merge
https://nullnote.com/web/git/merge_rebase/#merge

・git tag
git tagの使い方まとめ


f:id:wanwan_bowbow_ilovecat:20180716164245j:plain

■git reset , git checkoutでcommitを戻した時の状態の違い

resetを使うと変更した内容や追加したファイルが付いてくるので、現在の状態を保持したまま前のcommitに戻りたい時に使える。checkoutを使うと変更した内容やファイルは付いてこないので、完全に前のcommitの状態を再現したいときに使える。

ただ、resetでも--hardオプションを使えば完全に前のcommitの状態(ファイルが付いてこない状態)を再現できるが、両者には大きな違いがある。

git checkout
指定されたコミットIDのリビジョンに作業ディレクトリ内のファイルが変更される。ブランチは detached HEAD状態となり、この状態ではコミットなどを行ってもリポジトリに保存されない。元のブランチに戻したい場合は、"git checkout [ブランチ名]"とすればいい。

git reset --hard
現在のブランチのまま、指定されたリビジョンに作業ディレクトリ、ステージング環境、HEADが変わるので、もし作業ディレクトリに編集中のファイルがあったという場合にもその情報は失われてしまう。

また、元々のHEADの状態に戻る場合、git reflogを使うかORGI_HEADを使う必要がある。

文字コードについて

■概要

文字コードとは、文字をコンピューターが扱える数値(16進数)に置き換えた対応表のことである。文字コードは、文字集合文字符号化方式によって構成される。

  1. 文字集合(character set) – 表現したい文字の範囲(”あ”、”い”・・・といった文字の集合体)
  2. 符号化方式(encoding) – 文字集合を構成する個々の文字の表現方法(数値の振り方)

(1)により表現したい文字の範囲を定義してから、(2)により個々の文字をコンピュータ上でどういった数値で表現するかを定義する。

■文字化けとは

本来想定されている文字コードとは異なる文字コードで文字が解釈されると、全く別の文字に変換されてしまったりデータに対応する文字が定義されていなくて表示されなかったりする。このことを文字化けと呼ぶ。

■代表的な文字集合

Unicode
Unicodeとは、プラットフォームやプログラム、言語などに依存しないように、世界中の文字に一意な数値を与える文字コードである。
Unicodeは、大手のコンピュータメーカーが参加して設立された非営利団体Unicodeコンソーシアムによって策定された。

UTF-8,UTF-16,UTF-32等の文字符号化方式が使用される。


JIS X 0208
JIS X 0208は、日本語表記、地名、人名などで用いられる6,879図形文字を含む、主として情報交換用の2バイト符号化文字集合を規定する文字集合である。日本工業規格によって作成された。

EUC-JP,Shift_JIS,ISO-2022=JP等の文字符号化方式が使用される。


ISO/IEC 10646
Unicodeでは表現できない文字空間を表わすことができるという点でUnicodeの上位互換であったが、ISO/IEC 10646:2003/Amd.2:2006でUnicode外の領域は「永久に予約」(permanently reserved)と宣言されたことにより、使用できなくなった。

■代表的な符号化方式

ASCII
ASCIIは、7桁の2進数で表すことのできる整数の数値のそれぞれに、大小のラテン文字や数字、英文でよく使われる約物などを割り当てた文字符号化方式である。
1963年6月17日に、American Standards Association(ASA、後のANSI)によって制定された。

ASCIIの一部の文字や記号のコード番号に各国独自の文字を割り当てて各国版文字コードを作成された。この各国版作成のための枠組みは、ISO 646(現ISO/IEC 646)という規格で定められている。


UTF-8
UTF-8とは、世界的にも最もポピュラーな文字コードで、Unicode用の8ビット符号単位の符号化方式である。UTF-8は、ASCIIと互換性を持たせた規格となっているため、一部の文字はASCIIと全く同じである。

符号単位とは、「その文字符号化形式において、意味を持つ最短のビット数」のことを言い、UTF-8 においては 8 ビット = 1 バイトが意味を持つ最短のビット数である。

ASCIIと同じ部分は1バイトで表現し、そのほかの部分を2〜6バイトで表現する可変長の符号化方式となっている。

2〜6バイトについては、1 バイト目の先頭に 1 がどれだけ続くかで、何バイトで文字を表現しているのかがわかる。また、その後の各バイトの先頭には 10 が付くので、バイトの区切りがわかりやすい。

2バイト : 11xxxxxx 10xxxxxx
3バイト : 111xxxxx 10xxxxxx 10xxxxxx
...


UTF-16
16 ビット符号単位の文字符号化形式である。英数と日本語は共に2バイトで表現される。

UTF-16の場合、2バイトで表現できる文字(0x0000~0xD7FF、0xE000~0xFFFF)はそのまま2バイトで表し、それ以降(0x00000000~0x0010FFFF)の文字は4バイトで表す。


Shift_JIS
Shift-JISコード(SJIS)はMicrosoft社により定められたコードです。WindowsMS-DOSMacで使用されている。

半角文字も全角文字も一律2バイト(16ビット)で扱うので、表示された文字数とバイト数が一致するという特徴がある。また文字の前半の8ビットで半角文字か全角文字を区別することが可能である。


EUC-JP
EUC-JPとは、Extended UNIX Code Packed Format for Japaneseの略称で、UNIX上で日本語の文字を扱う場合によく利用されている文字コードである。
主に、漢字を使用する日本、中国、韓国で用いられており、日本語を扱えるように構成した文字コードEUC-JP、韓国語の場合はEUC-KR、簡体字中国語の場合はEUC-CNとなる。

Perlの処理系における文字列の扱い

Perlにおける文字列の扱いは、大きく2つに分けると「Perl 内部表現」と「バイト列 」に分類出来る。

Perl 内部表現はその名の通り Perl が内部的に利用・保持する文字列のことである。「内部表現」「内部文字列」だとか「flagged utf8」とも呼ばれる。内部表現ではない文字列に関して、Perl はバイト列として扱う。

Perlを使用するにあたって文字化けを防ぐ方法

入り口で decodeして,内部ではすべてflagged utf8で扱い、出口でencodeするという基本を守る。

  • decode – バイト列(外部から入力される文字列)を内部表現に変換する処理を指す。
  • encode – 内部表現を指定したエンコーディング方式によりバイト列に変換する処理を指す。

外部から入力される文字列というのは、具体的には「コマンドライン引数」「ファイル」「標準入力」「環境変数」等を指す。

use utf8;
use Encode 'decode';
use Encode 'encode';

# 外部からの入力(コマンドライン引数)
my $str = shift;

# バイト文字列(外部からの入力)を内部文字列に変換
$str = decode('文字コード', $str);

...

# 内部文字列をUTF-8バイト文字列に変換する場合
$str = encode('文字コード', $str);



参考:
文字コード考え方から理解するUnicodeとUTF-8の違い | ギークを目指して
符号化文字集合と文字符号化方式 - 「プログラマのための文字コード技術入門」を読んだ - $shibayu36->blog;
Perl の文字列エンコーディングの話 | Hachioji.pm 日めくりテックトーク
Encodeモジュール - 日本語などのマルチバイト文字列を適切に処理する - Perlゼミ(サンプルコードPerl入門)

【Linux】パッケージ管理ツールについて

■パッケージ管理ツールとは

パッケージ管理ツールとは、OSへのソフトウェアの導入と削除、依存関係の整理などを行うツールである。ディストリビューション毎に次のようなコマンドがある。

系統 ディストリビューション コマンド
RedHat RedHat Enterprise Linux, CentOS, Fedora, Amazon AMI 等 yum, rpm
Debian Debian,Ubuntu apt-get, apt-cache, dpkg


yumとは

Yellowdog Updater Modified (Yum ヤム)はLinuxRPM Package Managerのパッケージを管理するメタパッケージ管理システムである。
yumデューク大学Linux@DUKEプロジェクトでセス・ヴィダルを始めとするボランティアによって開発された。

RPMとは

RPM(アールピーエム、RPM Package Manager)はRed Hat社が開発したソフトウェアのパッケージを管理するためのシステム (パッケージ管理システム)、及びコマンド。".rpm"拡張子のファイルを利用する。

yumRPMの使い分け
  • yum は内部で rpm を呼び出して、rpm よりもさらに高度な機能を提供しているものなので、yumrpmは決して別個ではない。
  • yum のほうが rpm よりも高機能なので、yum が使える場面では yum を使ったほうが便利。rpmyum が使えない場面で使う

yumRPMの関係は、aptとdpkgの関係と同じ。

yumが使えず、RPMが使える場面

詳細はこちら
Linux の 101 試験対策: RPM および YUM によるパッケージ管理


■Linuxbrew

Mac OS X用のパッケージ管理ツールであるHomebrewをLinux に移植したLinuxbrewというパッケージ管理ツールがある。Linuxbrewには次のようなメリットがある。

  • 実行に root 権限が必要無い
  • LinuxOS X (Mac) で同じパッケージ管理ツールが使える
  • OS のパッケージ管理ツールでは提供されていないソフトウェアでも、見つかる場合がある
  • ホームディレクトリ配下にインストールされるので、不要になった時は削除が簡単

SSHについて

SSHの概要

ネットワークを経由して他のコンピュータ(主にサーバ)に接続し、遠隔操作するための仕組みである。
SSH通信を用いて送られている情報は全て暗号化されている。鍵交換方式を使用する。

■暗号化と復号

インターネットのような誰でもアクセス可能なパブリックなネットワーク上でデータを伝送するためには、第三者にデータを盗み見されたり、改ざんされないようにデータを暗号化して送信することが一般的である。

送信する際にデータを暗号化して、受信した際にデータの復号(暗号データを元に戻す処理)を行う。暗号化や復号は、暗号化アルゴリズムと鍵によって行われる。

共通鍵暗号方式(パスワード認証方式)

暗号化時と復号時に同じ鍵を使用する方式である。

〜通信の流れ〜
1.送信側が、データを「共通鍵」で暗号化し、受信側へ送信する
2.受信側が受け取ったデータを、同じ「共通鍵」で復号化し、データを取得する

■公開暗号鍵方式

暗号化と復号の際に別の鍵を使用する方式である。
暗号化時に使用する鍵を公開鍵、復号化時に使用する鍵を秘密鍵と呼ぶ。
公開鍵はサーバー側に持たせておく鍵であり、秘密鍵はクライアント側で保有する。

〜通信の流れ〜
1.送信側は、受信側が公開している「公開鍵」を取得する。そして取得した「公開鍵」で、送信するデータを暗号化して送信する
2.受信側は、受け取ったデータを「(受信側のみ保持している)秘密鍵」で復号化して、データを取得する

Linuxについて

Linuxの概要

Linuxは簡単にいうと、「Mac OS」や「Windows XP」「Windows 10」などと同じ「OS」である。
主にサーバー用として使用される。

Linuxの特徴

Linuxは、Windowsなどとは異なり、多くのLinuxがある。
リーナス・トーバルズ氏が開発したLinuxと、その他の多くのLinuxを区別するために、前者を「Linuxカーネル」と呼び、後者を「Linuxディストリビューション」と呼ぶ。

■代表的なLinuxディストリビューション

Fedora
最新の技術を積極的に取り込むディストリビューションである。
Red Hat Enterprise Linux (RHEL) のベータ版としての側面もあり、Fedoraの成果がRHELへ取り込まれる。半年ごとに新しいバージョンがリリースされるが、サポート期間が短い。

Red Hat Enterprise Linux (RHEL)
Red Hat社が出している有料LinuxのシェアNo.1のディストリビューションである。
サポート期間が10年であり、業務用として非常に信頼性が高く、公的機関などにも導入の実績がある

CentOS
RHELとの完全互換を目指した無償のLinuxディストリビューションである。
CentOSは、RHELが出しているソースコードを元に商標や商用パッケージ等を除去したものをリビルドしている。

Amazon Linux AMI
Amazonが独自に開発しており、RHELのコードがベースにされているLinuxディストリビューションである。
最初からAWSと連携する為のパッケージが組み込まれている。

Ubuntu
UbuntuDebianというLinuxディストリビューションから派生している。
コンピュータ初心者に対しても丁寧な説明とユーザーインターフェイスが提供されているので初心者に優しいと言われることが多いLinuxディストリビューションである。

Debian
コンピュータ・メーカーやディストリビュータといった特定の企業に依存せず,主に個人が集ったボランティアにより開発・提供されているLinuxディストリビューションである。


使用するLinuxディストリビューションによってコマンドが異なることがあるので、他のLinuxディストリビューションのコマンドを使用しないよう注意が必要。


Linuxコマンド一覧
超初心者のためのLINUXコマンドライン操作覚え書き | Rriver