Linuxの主なコマンドまとめ
とある理由でLinuxを基礎の基礎から勉強しないといけなくなったので、それのメモです。
殴り書きみたいな雑なメモです。超メモです。
コマンド
passwd・・・パスワード変更
uname -a・・・ユーザ情報の表示
cal・・・カレンダー
clear・・・画面クリア
man・・・オンラインマニュアル
—–オプション—–
-k 文字列 : キーワードで検索
-f 文字列 : 文字列に一致するマニュアルが何章にあるのか表示する
オンラインマニュアルスクロール方法・・・
space : 次のページを表示
enter : 次の行を表示
b : 前のページを表示
h : ヘルプを表示
q : 終了
/ 文字列 : 文字列を検索
————————–
ls・・・ディレクトリの内容表示
—–オプション—–
-F : ファイルの後ろにファイルタイプを表示
-a : 隠しファイルを表示
-l : 詳細な情報を含めて表示
-d : ディレクトリ自信を表示
-R : サブディレクトリも再帰的に表示
————————–
cat -n・・・テキストファイルの内容を表示
more・・・ページングでテキストファイルを表示。ページの最後まで行くと自動で終了。ページの操作はmanと同じ。文字列検索時は「n」で次を検索。
less・・・moreとほぼ同じ。ページの最後にいっても自動で終了しないという点が違うだけ。
head -数字・・・テキストファイルの先頭から、数字で指定した行数だけ表示。何も指定しないと10行。
tail -数字・・・headの後ろからバージョン。+数字 にすると、指定した行数から最後までを表示する。
grep・・・テキストデータの中から特定の文字列パターンを含む行を表示。正規表現が使える。
—–オプション—–
-v : パターンに一致しない行を表示
-n : 行番号を表示
-l : 一致する行を含んでいるファイル名を表示
-i : 大文字小文字を無視
————————–
touch ファイル名・・・アクセス時刻と修正時刻を変更。新規ファイル名を指定した場合はからのファイルを作成。
mkdir -p・・・-pオプションをつけることで、中間ディレクトリを同時に作成することができる。(mkdir -p aaa/bbb/ccc 的な)
cp・・・ファイルをコピー。-iオプションで、コピー先が既存の場合は上書きの確認表示。コピー先にディレクトリを指定することで、コピー元を複数指定することが可能。「cp コピー元ファイル コピー元ファイル コピー元ファイル コピー先ディレクトリ」的な使い方。-rオプションで、ディレクトリごとコピー可能。
mv・・・ファイルやディレクトリの移動と、ファイルやディレクトリの名前変更。第二引数に現存しないファイルやディレクトリ名を指定した場合は名前の変更となる。
rm・・・ファイルの削除。一度に複数のファイルを指定することも可能。rmdirというコマンドもあり、こちらはディレクトリを削除できるが、中身のないものしか削除できない。rmでディレクトリの中身をすべて削除して、その後rmdirでディレクトリを削除することで、中身の入ったディレクトリを誤って削除してしまうというヒューマンエラーを防げるとか。めんどくさすぎるやろ。
—–オプション—–
-i : 削除して良いかの確認表示
-f : 確認メッセージの非表示
-r : ディレクトリも指定可能になり、中身にファイルがあっても問答無用でディレクトリごと削除する。
————————–
id・・・現在自分がどのユーザでログインしていて、どのグループに所属しているのかを確認する。
chown・・・ファイルの所有者や所属グループを変更。スーパーユーザのみ実行可能。「chown (-R) 新しい所有者設定 ファイル名」の形で指定。-Rオプションを指定すると、指定したディレクトリの中身全てにも変更を反映する。新しい所有者設定では、ユーザ名のみを指定すると所有者のみを変更し、「ユーザ名:グループ名」と指定すると所有者と所属グループを変更し、「 :グループ名」と指定すると所属グループのみを変更する。
chgrp・・・ファイルの所有グループを変更。一般ユーザが変更する場合は、自分が所属しているグループ内での変更しかできない。「chgrp (-R) グループ名 ファイル」みたいな感じ。-Rオプションを指定すると、指定したディレクトリの中身全てにも変更を反映する。
ps・・・システム上で実行中のプロセスの一覧を表示する。
—–オプション—–
a : 全てのプロセスを表示
u : 詳細情報を表示
x : 制御端末のないプロセス情報も表示(?)
全てハイフンなし。「ps ax」みたいな感じ
————————–
pstree・・・実行中のプロセスの一覧をツリー形式で表示。
—–オプション—–
-h : カレントプロセスとその先祖プロセスを強調表示
-H PID(プロセスのID) : 指定したプロセスとその先祖プロセスを強調表示
-P : プロセスIDをつけて表示
————————–
top・・・実行中のプロセスをリアルタイムで表示。
—–オプション—–
-d 秒数 : 更新の間隔を秒単位で指定
-n 数字 : 表示の回数を指定
————————–
kill・・・PIDで指定したプロセスにシグナルを送信する。「-kill シグナル番号(名前) PID …」シグナル番号を省略した場合は15(SIGTERM)が使われる。
pkill・・・プロセス名で指定したプロセスにシグナルを送信する。完全一致ではなく指定した文字列をプロセス名に含むもの(全部?)にシグナルを送信する。「pkill -シグナル番号(名前) プロセス名」
killall・・・pkillのプロセス名完全一致バージョン。
nice・・・プロセスの優先度である「nice値」を指定する。nice値は、低い数字ほど優先度が高くなり、実行速度が速くなる。nice値の範囲は -20~19。
「nice -nice値 コマンド」みたいな感じで指定。nice値の部分を省略するとnice値は10になる。「nice -15 sleep」みたいな感じで指定する。この場合だとnice値は15に設定されるが、マイナスのnice値を設定したい場合は「nice -n nice値 コマンド」の形で指定する。「nice -n -10 sleep」みたいな感じ。ただし、一般ユーザでは0以下の数字を指定することはできない。
renice・・・実行中のプロセスに対してnice値を設定できる。「renice nice値 PID」みたいな感じ。一般ユーザは現在のnice値より高い数値しか指定できない。niceコマンドと違い、nice値はオプションをつけずに直接値を指定する。「renice -10 32613」みたいな感じ。これでnice値は-10になる。rootユーザは-uオプションをつけることで特定のユーザが実行している全プロセスのnice値を変更できる。その時は、「renice nice値 -u ユーザ名」の形で指定する。
jobs・・・バックグラウンドジョブと停止中のジョブを表示
bg %ジョブID・・・指定したジョブをバックグラウンドに以降
fg %ジョブID・・・指定したジョブをフォアグラウンドに以降
telnet・・・リモートホストにアクセスする。「telnet リモートホストのIPアドレス」みたいな感じ。だけど通信が暗号化されないとかで非推奨らしい。
ssh・・・リモートホストへアクセスする。「ssh -l ユーザ名 リモートホストのIP」みたいな感じ。通信が暗号化されるので、telnetじゃなくてこっちを推奨らしい・「 -l ユーザ名」の部分を省略すると、ローカルホストのユーザ名と同じユーザ名でログインを試みる。最初にアクセス継続に関する確認メッセージが表示され、yesとするとリモートホストのホスト公開鍵が送られてきて、保存される。それがあると、次回以降アクセス継続に関するメッセージが表示されない。
ftp・・・FTP(File Transfer Protocol)プロトコルを使用して、ネットワーク経由でファイル転送を行う。「ftp リモートホストのIP」みたいな。ログインするとプロンプトが「ftp>」に変わるが、ログインに失敗した場合でもそうなるらしい。ファイル転送は、サブコマンドを使う。
—–主なサブコマンド—–
cd : リモートホスト上でcdする
pwd : リモートホスト上でpwdする
get ファイル名 : 指定したファイルをローカルにコピーする
mget ファイル名 … : 指定した複数のファイルのローカルにコピー
put ファイル名 : ローカルホスト上にある指定したファイルをリモートホストにコピー
mput ファイル名 : ローカルホスト上にある複数の指定したファイルをリモートホストにコピー
prompt : 対話型プロンプトのon/offを切り替える(デフォルトはon)
binary : ファイルタイプをバイナリに設定
ascii : ファイルタイプをテキストに設定
bye : ftpコマンドを終了
help : ftpのサブコマンドを一覧表示
———————————–
find・・・ファイルを検索する。「find 検索開始ディレクトリ 検索条件 アクション」みたいな感じ。検索開始ディレクトリは、省略するとカレントディレクトリとなる。
—–検索条件——
-name ファイル名 : ファイル名に一致するファイルを検索
-user ユーザ名 : 指定したユーザが所有者のファイルを検索
-mtime -数字 : 指定した日数以内に変更されたファイルを検索
-atime -数字: 指定した日数以内アクセスされたファイルを検索
-size サイズ : ファイルサイズ(ブロック単位(?))で検索
-type タイプ : ファイルの種類で検索 → f : ファイル 、 d : ディレクトリ
検索条件を複数指定するとAND検索になる。
———————–
—–アクション—–
-print : パス名を表示する。アクションを省略した場合はこれがデフォルトで指定される。
-exec コマンド {} ¥; : 指定されたコマンドを実行する。{}部分に検索されたファイル名が展開される。「find -name aaa -exec cat {} ¥;」みたいな感じ。この場合は、aaaの中身をcatで表示することになる。多分。特に{}の中に何か書くわけではないのね。
-maxdepth 数字 : 何階層分検索するのかを指定。
————————-
locate・・・あらかじめ作成されたファイル名のリストを含むファイル名データベースからファイルのパスを検索する。「locate パターン」みたいな感じらしい。パターンが含まれるファイルのリストを表示する。パターンて部分一致ってことかな?
updatedb・・・ファイル名データベースの作成及び更新を行う。オプションもあるらしいけど、単に「updatedb」って言うコマンドを実行するだけでいけるっぽい。rootユーザのみ実行可能。
which・・・エイリアスやPATH変数に含まれるコマンドのパスを表示する。「which ls」みたいな感じ。これで「/bin/ls」とか表示される。
whereis・・・コマンドや設定ファイルのパス、マニュアルページのパスを表示する。「whwreis (オプション) ファイル名」みたいな感じらしい。引数に指定されたファイル名に関する情報を表示する。PATH変数に含まれないものも表示できる。whichの詳細バージョンてことかな?よくわからない。
tar・・・複数のファイルを一つにまとめる「アーカイブ」を行う。
まず、アーカイブを作成するには「tar c(色んなオプション) アーカイブ対象相対パス名…」みたいな感じらしい。
—–オプション—–
c : tarアーカイブを作成(create)する。
v : 詳細情報を表示。作成時にアーカイブ対象となったファイルの一覧を出力する。
f : tarアーカイブの作成先を指定
z : 同時に「gzip」で圧縮
j : 同時に「bzip2」で圧縮
————————–
圧縮を行った場合は、ファイルの拡張子を「.gz」「tgz」「bz2」「tbz」などにしておくと分かりやすくて良いそうです。
「tar cf files.tar aaa.txt bbb.txt」
「tar zcf files.tar.gz aaa.txt bbb.txt」
「tar jcf files.tar.bz2 aaa.txt bbb.txt」
みたいな感じらしいです。
次に、アーカイブの内容を表示するには「tar t(色んなオプション)」みたいな感じらしい。
—–オプション—–
t : tarアーカイブの内容を表示
v : 各ファイルの属性情報などの詳細情報を表示
f : 内容表示をするtarアーカイブファイルのパス名を指定(?)
————————–
「tar tf files.tar」
「tar ztf files.tar.gz」
「tar jtf files.tar.bz2」
みたいな感じらしい。内容表示と同時に圧縮とかできるっぽい。
ちょっとよくわからない部分があるような気がするけどまあいいや。
最後に、tarアーカイブを展開するには「tar x(色んなオプション) 展開対象ファイルのアーカイブデータ内パス名」らしい。
—–オプション—–
x : tarアーカイブを展開(extract)する。
v : 詳細情報の表示
f : 展開に使用するtarアーカイブファイルのパス名を指定(?)
z : tarアーカイブを「gunzip」で圧縮(解凍の間違い?)する
j : tarアーカイブを「bunzip2」で圧縮(解凍の間違い?)する
————————–
展開するときは展開先ディレクトリを指定することはできず、ユーザのカレントディレクトリを基準としてアーカイブデータ内の相対パス名にしたがって展開が行われるのでご注意ください。らしい。よくわからん。アーカイブデータ内の相対パスって何のことだろう。
「tar xvf files.tar」
「tar zxvf files.tar.gz」
「tar jxvf files.tar.bz2」
みたいな感じらしい。もうごちゃごちゃでよくわからん。
file・・・ファイルタイプを判定する。ls -lやls -Fよりも詳しく確認できる。
nl・・・catの行番号あるバージョン
od・・・ファイルの内容を8進数や10進数などで表示
—–オプション—–
-c : asciiで表示
-x : 16進数で表示
-o : 8進数で表示(デフォルト)
————————–
-cで改行コードやタブ文字などの非印字文字を確認できたりらしい。
cut・・・行の一部分を取り出すことができる。取り出す単位は、何番目の文字か、何番目のフィールド(タブで区切ったもの。-dで区切り文字を変えられる)か、が指定できるとか。
—–オプション—–
-c 文字数 : 何文字目を取り出すかを指定
-f フィールド番号 : 何番目のフィールドを取り出すかを指定
-d 区切り文字 : -fオプション使用じ、フィールドの区切り文字を指定する。デフォルトはタブ。
————————–
「cut -f 1,3 aaa.txt」
「cut -d: -f 1,7 aaa.txt」
みたいな。2つ目は、各行をコロンで区切った1番目と7番目のフィールドを表示している。
tr・・・標準入力から文字列を読み込み、指定した文字列で置換する。「tr (オプション) 文字列1 文字列2」みたいな。標準入力ってこれキーボードからの直接入力ではできないっぽい?パイプとかI/Oリダイレクションを使わないといけないかも。
—–オプション—–
-d : 文字列1でマッチした文字列を削除する
-s : 連続するパターン文字列を1文字になるよう圧縮する
————————–
「tr a-z A-Z < aaa.txt」
「tr -d ‘abc’ < aaa.txt」
みたいな感じ。2つ目はなぜか文字列がシングルクォーテーションで囲まれてたけどなくても特に変わらなかった。-sは例がなかったです。
sort・・・行をソートする。デフォルトではアルファベット順に昇順でソートする。「sort (オプション) ファイル…」みたいな。
—–オプション—–
-r : 降順にする
-n : 数字を文字ではなく数字として処理する
————————–
-nがないと、数字は1桁目しか見ないので、100よりも2の方が大きいと判定されるっぽい。
wc・・・テキストファイルのバイト数・単語数・行数を表示する。「wc (オプション) ファイル…」みたいな。
—–オプション—–
-c : バイト数だけを表示
-w : 単語数だけを表示
-l : 行数だけを表示
————————–
xargs・・・標準入力を受け取り、別のコマンドの引数に指定する。「コマンド1 | xargs コマンド2…」みたいな。
例えば、「cat filelist.txt | xargs touch」とすると、filelist.txtの各行に書かれた文字列をファイル名とするファイルが行数の数だけ作成される。これ、パイプ使ってるんだからxargsなしでもできるのでは?と思ってやってみたけどできなかった。パイプだけで行ける場合と、xargsを必要とする場合の区別がよくわからない。パイプは、コアンド2の入力がファイルのものしかダメなのかな?コマンド2の入力が文字列の場合はxargsを使わないといけないとかかな?
sed・・・ファイルの内容を指定した形で編集できる。
「sed (オプション) スクリプト ファイル」
—–主なスクリプト—–
s/文字列1/文字列2/g : 文字列1を文字列2に置換する
数字d : 指定した行番号の行を削除する
——————————–
—–オプション—–
-e : 引数にスクリプトを指定する。このオプションが1つだけで、-fオプションと併用しない場合は省略できる(-fオプションてなんだ・・・)。
-i : ファイルを直接編集する
————————–
「sed -e ‘s/banana/BANANA/g’ aaa.txt」みたいな。出力をファイルにしたいならこの後ろに「> bbb.txt」みたいなのつけましょうね。らしいです。
split・・・ファイルを決まった大きさに分割する。デフォルトでは1000行ずつ分割し、分割してできたファイルには「xaa,xab…」という名前が付けられる。「x」の部分はプレフィックスを指定して変更可能。「split (-l 行数) ファイル名 (プレフィックス)」みたいな。
paste・・・複数指定したファイルの各行を横方向に連結して表示する。「paste ファイル名1 ファイル名2」みたいな。多分連結ってのは各行に対して「ファイル1の1行目【タブ】ファイル2の1行目」みたいな感じで間にタブが入るんだと思う。テキスト見た感じ。それが各行に対して行われる的な。
dd・・・デバイス内のデータを読み取り、指定したファイルへデータを書き出す。デバイス間のデータコピーや固定サイズのファイルを作成できるとか。「dd if=入力元ファイル(デバイスファイル) of=出力先ファイル(デバイスファイル) bs=ブロックサイズ(バイト) count=ブロック数」みたいな感じらしい。
「dd if=/dev/zero of=./aaa bs=1024 count=100」みたいな感じらしい。普通にcpコマンドとかじゃできないのかな?デバイス間だから?よくわかりませぬ。
その他のメモ
ユーザーの命令は、ユーザー→シェル→カーネル という順番でカーネルに渡される。シェルはユーザーごとにコマンド履歴の記憶とか便利な昨日もある。カスタムできる。
コマンドにはバッチ型と対話型がある。Ctrl+dで入力終了の合図。
ファイルの種類
◆通常ファイル
|-テキストファイル : 普通にテキストのファイル
|-バイナリファイル : 画像とか音声とか
|-実行可能ファイル : プログラム系
|-テキスト形式 : テキストの状態のプログラム
|-バイナリ形式 : コンパイル後のファイル
◆ディレクトリファイル : フォルダ的な
◆デバイスファイル : 周辺装置を仮想的なファイルとして扱ったもの
ファイルシステム階層標準化仕様書・・・FHS (Filesystem Hierarchy Standard)
主なディレクトリ
◆/(ルート) ・・・ファイルシステムの頂点
◆/boot・・・起動に必要なファイルがある。カーネル本体のファイルのある。
◆/bin・・・基本コマンドがある
◆/sbin・・・システム管理者向けのコマンドがある
◆/lib・・・共有ライブラリやカーネルモジュール
◆/root・・・スーパーユーザーのホームディレクトリ
◆/dev・・・デバイス用のファイルがある。mouseとか。
◆/etc・・・システム管理用のやつとか起動時に実行されるシェルスクリプトとかがある。
◆/home・・・一般ユーザーのホームディレクトリの起点となる
◆/usr・・・ユーザーが共有する読み込み専用のデータがある。/usr/binとか/usr/share/manみたいな感じでどうのこうの。
◆/var・・・ログファイルなどの可変なファイルがある。
ホームディレククトリとはユーザーごとのホームをディレクトリ。~(チルダ)で表現
chmodコマンドで、ファイルやディレクトリのパーミッションを変更できる。変更できるのは所有者かスーパーユーザのみ。-Rコマンドはディレクトリにのみ指定可能。子ファイルや子ディレクトリも含め再帰的にパーミッションが変更される。
パーミッション指定方法はシンボリックモードと絶対モードの2種類がある。
シンボリックモードは、「chmod <ユーザ><操作><パーミッション> ファイル」みたいな感じで指定する。
ユーザは、ファイル所有者=u、グループ=g、その他=o、すべてのユーザ=aで指定。
操作は、追加=+、削除=-、設定==(イコール)で指定。
パーミッションは、読込=r、書込=w、実行=xで指定。
例えば、ユーザとグループに読込権限を、すべてのユーザから実行権限を削除したい場合は、以下のようになる。
「chmod ug+r,a-x ファイル名」
絶対モードは、「chmod 3桁の数字 ファイル」みたいな感じ。
3桁の数字の左が所有者、真ん中がグループ、右がその他を表している。
読込が4、書込みが2、実行権限が1で、それぞれに設定したいパーミッションの数字を足した数字を指定する。
例えば、所有者にはすべての権限を、グループには読込と書込みを、その他には何も許可しない場合は、以下のようになる。
「chmod 760 ファイル名」
ファイルやディレクトリのデフォルトのパーミッションは、シェルに設定された「umask値」で決定される。umask値には、割りあてたくないパーミッションが設定されており、システムにもともと設定されているファイルやディレクトリに対するパーミッションから、umask値で設定されているパーミッションを削除したものが、デフォルトパーミッションとなる。例えば、システムのデフォルトパーミッションがrw-rw-rw-(666)で、umask値が—-w–w-(022)だった場合、デフォルトのパーミッションはrw-r–r–(644)となる。
umask値の制御はumaskコマンドで行う。引数を指定しなかった場合は現在のumask値が表示される。umask値を027に指定したい場合は、「umask 027」みたいな感じで指定する。ちなみに、この027というumask値は、セキュリティ強化のために行うことの多い設定らしい。
これをコマンドライン上で行った場合、端末が起動している間だけの一時的な設定になり、再起動後も有効にしたい場合は初期設定ファイルに設定されたumask値を変更しなきゃいけないとかなんとか。
コマンドやプログラムを実行した時のプロセスの青々と消滅の流れ
①コマンドを実行するとカーネルにプロセスの生成要求が出される。
②カーネルは実体をコピーして新しいプロセスを生成する。元のプロセスを親プロセス、新しいプロセスを子プロセスと呼ぶ。
③子プロセスに違うプログラムを読み込むため、カーネルにプログラムの読込要求を出す。カーネルはプログラムをプロセスに転送する。
④読み込んだプロセスを実行する。
⑤プロセスはプログラムの実行が終了すると消滅する。
⑥子プロセスがプログラムを実行している間に待機状態だった親プロセスが実行可能状態に戻り、コマンドプロンプトを表示する。
通常、プロセスは処理を終えると自動的に消滅するが、プロセスに対してシグナルを送信することによってもプロセスを終了させることができる。シグラルとは、プロセスにイベントの発生を伝える仕組み。killコマンドに-lオプションをつけると、シグナルの一覧を表示できる。
—–よく使うシグナル—–
1(HUP) : 構成ファイルの再読み込み
2(INT) : 実行中のコマンドへの割り込み(Ctrl-cで使用)
9(KILL) : 強制終了
15(TERM) : 終了(デフォルト)
———————————–
シグナルの送信はkillコマンドやpkillコマンドで実行する。ハングアップしたプロセス(なんらかの問題で入力を受け付けなくなってしまったプロセスのこと?)を終了する場合などに使用。
kill、pkillについては上記のコマンド一覧参照。
シェルには3つの機能がある。
◆対話型機能
ユーザがコマンドを入力するときの作業を便利にする。
・I/Oリダイレクション
・パイプ
・メタキャラクタ
・ヒストリ
・エイリアス
◆環境調整機能
ユーザごとの作業環境をカスタマイズできる。
・環境変数、シェル変数
・環境調整ファイル
◆プログラミング機能
シェルスクリプトが利用可能
ヒストリのコマンド履歴は「~./bash_history」ファイルに保存される。
コマンド置換とは、コマンド実行時、「`(バッククォーテーション)」で囲まれた部分を実行した結果得られる文字列でバッククォーテーションで囲まれた部分を置き換える。
メタキャラクタの打ち消し
◆\(バックスラッシュ)
直後の1文字の意味を打ち消す
◆’文字列'(シングルクォーテーション)
文字列内に含まれる全てのメタキャラクタの意味を打ち消す
◆”文字列”(ダブルクォーテーション)
文字列内に含まれる「\」「$」「`」以外の意味を打ち消す
エイリアス(別名)機能とは、コマンドに別の名前をつける機能。
「alias aaa=’echo hellooo’」ってやると、次回からコマンドラインで「aaa」って入力すると「echo hellooo」が実行され、「hellooo」が表示される。割と便利な気が。aliasコマンドを引数なしで実行することで、現在保存されているエイリアスの一覧が表示される。エイリアスを解除したい時は、unaliasコマンドを使う。「unalias エイリアス名」みたいな感じで、エイリアスを解除することができる。
コマンドラインで設定されたエイリアスは一時的なものであり、端末の電源が落ちると消えてしまう。再起動しても有効のままにしたい場合は、シェルの初期設定ファイルがどうのこうの。
I/Oリダイレクションとは、標準入出力の切り替えを行う機能。本来キーボードから入力をするコマンドなども、これを使えばファイルの内容を読み込ませることができる。「コマンド 0< ファイル」みたいな感じでできる。「0」は入力(stdin)を表す数字で、これで入力をファイルにしますよ的な意味になる。「0」は省略可能。
これと同様に、「コマンド 1> ファイル」にすると、コマンドの実行結果をファイルに出力する。「1」は標準出力(stdout)を意味する。「1>」だと、結果をファイルに上書きする形になり、この部分を「 1>>」にすると、追記となる。「1」は省略可能。
また、「コマンド 2> ファイル」にすると、コマンドでエラーが発生した場合、エラー文の内容をファイルに出力する。「2」は標準エラー出力(stderr)を意味する。「2>」だと、エラー文をファイルに上書きする形となり、この部分を「 2>>」にすると、追記となる。「2」は省略できないので注意。
標準出力と標準エラー出力を同じファイルにしたい場合は「コマンド > ファイル 2>&1」とするらしい。
パイプとは、あるコマンドの標準出力を、次のコマンドの標準入力に渡す機能。「コマンド1 | コマンド2」とすると、コマンド1の出力をコマンド2の入力にすることができる。例えば、「ls | wc -l」とすると、lsコマンドの実行結果の行数をwcコマンドで数え、ファイルやディレクトリの数を知ることができたりする。
「teeコマンド」は、パイプ専用(?)のコマンドで、前のコマンドとパイプでつないで「tee ファイル名」とすると、前のコマンドの実行結果を画面とファイルの両方にすることができる。-aオプションをつけると追記、つけないと上書きとなる。「ls | tee filelist」みたいな感じ。
シェルには環境を調整する項目ごとに変数がある。ユーザが値を代入するとシェルはその値に従って環境を調整する。シェルが扱う変数には、以下の二種類がある。
◆シェル変数
設定されたシェルだけが使用する変数。子プロセスには継承しない。主にシェルの動作環境を整えるためのやつ。
◆環境変数
設定されたシェルとそのシェルで起動したプログラムが使用する変数。子プロセスに継承される。主にユーザが使用するプログラム全般の動作環境を整えるために使用。
—–主なシェル変数—–
PWD : 現在のカレントディレクトリの絶対パス
PATH : コマンド検索パス
HOME : ユーザのホームディレクトリ
PS1 : シェルプロンプト
HISTSIZE : ヒストリ機能の履歴記録数
LANG : 言語情報
——————————–
シェル変数はsetコマンドで一覧表示できる。
「PS1=’aaa’」みたいな感じで実行することで、シェル変数を設定することができる。既存の変数を上書きすることもできるし、新しい変数を作ることもできるっぽい。unsetコマンドで、シェル変数を解除することができる。「unset PS1」みたいな感じ。
—–主な環境変数—–
PWD : 現在のカレントディレクトリの絶対パス
PATH : コマンド検索パス
LD_LIBRARY_PATH : ライブラリ検索パス
HOME : ユーザのホームディレクトリ
LANG : 言語情報
—————————–
環境変数はシェル変数をエクスポートして作成するため、重複するものが多数ある。プログラムのマニュアルや、コマンドのオンラインマニュアルに、それらの処理に使用する環境変数が書かれている。
環境変数はenvコマンドで一覧表示できる。
環境変数を設定するには、まずシェル変数を設定する。その後、exportコマンドで環境変数に設定を反映する。
LANG=ja_JP.UTF-8
export LANG
みたいな。exportした後は、シェル変数の方を変えるだけで自動で環境変数の方も同じものに変わるっぽい。
環境変数も、シェル変数と同じくunsetコマンドで解除できる。
コマンドラインで設定されたシェル変数は一時的なものであり、端末の電源が落ちると消えてしまう。再起動しても有効のままにしたい場合は、シェルの初期設定ファイルがどうのこうの。
コマンドラインで、「$変数名」と入力することで、シェルはその部分を設定された値に置き換えてコマンドを実行する。「mkdir sample.$LOGNAME」みたいな。シェル変数も環境変数もこれでいける。
PATH変数とは、コマンド検索パスを格納する変数。ユーザがコマンドを実行すると、シェルはPATH変数に格納されている「:(コロン)」で区切られたディレクトリを左から順に検索し、最初にマッチしたコマンドを実行する。このため、ユーザはわざわざ絶対パスでコマンドプログラムファイル名を指定しなくても、コマンド名さえ入力すればコマンドが実行できる。
変数などをコマンドライン上で設定した場合、端末エミュレータを再起動すると設定は元に戻ってしまう。シェルを起動した時に毎回同じ設定を使いたい場合は、シェルの初期設定ファイルにシェルを設定するためのコマンドを書いておく。そこに書いたコマンドは、ログイン時もしくはシェル起動時に自動的に実行される。シェルの初期設定ファイル内に記述したコマンドがいつ実行されるかはファイルによって異なる。bashの初期設定ファイルが実行されるタイミングは以下となる。
—–主な初期設定ファイル—–
/etc/profile : ログイン時に実行される。全bashユーザが使用する。スーパーユーザが一般ユーザのために作成しておく。
~/.bash_profile : ログイン時のみ実行する。
~./bash_login : (~/.bash_profileが存在しない時)ログイン時のみ実行する
~/.profile : (~/.bash_profile及び~/.bash_loginが存在しない時)ログイン時のみ実行する。
~/.bashrc : bash起動時に毎回実行する。
~/.bash_logout : ログアウト時に実行する。
—————————————–
例えば、bash起動時にコマンドを実行したい場合、~/.bashrcファイルに以下のように記述する。
PATH=$PATH:/usr/local/bin
export PATH
これで、/usr/local/binのパスが、シェル起動時に自動で通る。
ファイルの圧縮形式には複数ある。
◆UNIX compress形式
compressコマンドでcompress形式で圧縮できる。uncompressコマンドで解凍できる。ファイルは圧縮後、ファイル名.Zという名前のファイルに置き換えられる。-vオプションをつけることで、ファイルが何パーセント圧縮(解凍)されたかを表示できる。
◆gzip(GNU Zip)形式
GNUプロジェクト(?)によって開発された圧縮形式。一般的に圧縮率が高め。UNIX系OSに普及している。gzipコマンドでgzip(GNU Zip)形式で圧縮できる。gunzipコマンドで解凍できる。圧縮後、ファイル名.gzという名前のファイルに置き換えられる。-vで何パーセントの表示。
◆bzip2形式
1996年に公開された、新しい圧縮形式(1996年て新しいのか・・・)。gzip形式やZIP形式と比較しても圧縮率が高いことが多い。bzip2コマンドでbzip2形式で圧縮できる。bunzip2コマンドで解凍。ファイル名はファイル名.bz2という名前のファイルに置き換えられる。-vで何パーセントの表示。
◆ZIP形式
UNIX系のOSだけでなく、WindowsやMacOSなどでも標準対応している圧縮形式。また、アーカイブ(複数のファイルやディレクトリを1つのファイルにまとめる)機能がある。zipコマンドでzipでZIP形式で圧縮できる。unzipコマンドで解凍。ZIP形式の圧縮ファイルを作成するときは圧縮ファイル名の指定が必要。圧縮ファイル名に拡張子つきファイル名が指定されていない場合は、拡張子.zipが自動的に追加される。「zip (オプション) 圧縮後のファイル名 ファイル…」みたいな。複数のファイルも同時に一つにまとめれるっぽい?これがアーカイブ?-vオプションで何パーセントの表示。
コメントを残す