Ubuntuでroot権限使用のために
rootユーザーになるコマンドが紹介されていて
$ su -
Password:
#
#pwd
/root
こういう風に、ちゃんとできたらカレントディレクトリがrootユーザーのホームディレクトリになるらしい。
でも、Ubuntuだと基本suじゃなくてsudoコマンドを使うらしくて
$ sudo -s
これでrootユーザーになる
問題点
これだとカレントディレクトリがrootユーザーのにならない
つまり
$ su
Password:
# pwd
/home/ユーザー名
と同じ状態に。。。
これだとrootユーザー用コマンドの多くが使えないらしい
解決策
sudo su -
こうするとカレントディレクトリが/rootになってくれる
元のユーザーに戻るためには
# exit
カレントディレクトリの謎について
わたしが理解できなかったのは、なぜカレントディレクトリが変えられるパターンと変えられないパターンのsu(またはsudo)があるのか
実務で考えてみる
たとえばなにかのファイルを書き換えたいけど、自分には権限がないとき
sudo -s
を使うと
そのファイルがあるディレクトリまで移動
↓
権限がない!
↓
rootユーザーになればいいじゃん!
↓
sudo -s
↓
そこのディレクトリのままで作業続けられる
一方
sudo su -
を使うと
そのファイルがあるディレクトリまで移動
↓
権限がない!
↓
rootユーザーになればいいじゃん!
↓
sudo su -
↓
ホームディレクトリがrootユーザーのものになってしまったから、そのファイルがあるディレクトリに移動し直し・・・
ということらしい(わかりにくい)
suの -(ハイフン)の意味は、そのユーザーのホームディレクトリにログインするということで、ちょこっとここでroot権限が必要だ〜ってなったときにはディレクトリが変わらないほうがありがたいみたいな感じらしい。
ちなみにホームディレクトリが変わるほうの必要性は、rootユーザー用のコマンドがちゃんと使えるからっぽい
勉強中なので理解が間違ってたら教えてほし
お世話になった引用元2つ
・中島能和 1週間でLPICの基礎が学べる本 第2版
入門者のLinux 終章 まとめ
奈佐原顕郎さん「入門者のLinux」より
・Linuxにはいろいろなディストリビーションがあり、一つのディストリビーションの中にもいろいろなバージョンや派生系があり、インストール方法がある。それらをいろいろなハードウェアに試し、Linuxの多様性を肌で感じること
・多くのスタイルのLinuxに共通する概念や仕組みに関しても理解が深まる
うまくいかないときややり方がわからないときは、思いつく方法をどんどん試すこと
一見無駄に思えることが大切
・答えはコンピュータから自分自身が引き出す
・トラブルを解決する際は、参考にする情報の鮮度に注意すること(バージョンチェックやサイトの更新日時に注意するなど)
以上でこの本のまとめはおしまい!
とてもわかりやすいし手も動かせて楽しいのでオススメです。
個人的には見たこと、聞いたこと、使ったことはあったけど意味はよくわかってなかったみたいなところがわかってスッキリでした〜
次はLPICの勉強がんばります〜
入門者のLinux 13章 まとめ
奈佐原顕郎さん「入門者のLinux」より
文字置換のコマンド
sed
大文字小文字変換でよく使うコマンド
tr
単語を辞書順に並べ替える
sort
単語を数える
uniq -c
出現回数の多い順に並び替える
sort -n -r
・nオプションは辞書順でなく、数字の小さい順に並べる
・rオプションは順序をひっくり返す
まとめ
・様々な細々とした仕事について、それぞれのためのソフトウェアをいちいち用意するのはきりがないし、効率も良くない。
・Unixは、「その仕事のためのソフト」ではなく「その仕事を構成する部品」たちを提供する(wgetコマンドやconvertコマンドなど)。それらを使いユーザーは自分で「その仕事のためのソフト」をワンライナーやシェルスクリプトで組み立てる
・UnixのCUIは相手の大きさによって怯んだりしない。このことが小さいものから大きいものまでいろいろなコンピュータに搭載されている理由のひとつ
・Unixは論理的な整理が可能で、大量のデータを対象とし、自動化が望まれるような仕事に大きな力を発揮する
この章は実践が多いので大変でしたけどその分面白かったです〜
結構この本の中では応用章というかコマンドが少し複雑でした。
入門者のLinux 12章 まとめ
奈佐原顕郎さん「入門者のLinux」より
マルチタスク
・同時に複数の処理をする
$ ps au
・ユーザーのLinuxマシンが今まさに処理している仕事を1行に1つという単位で示している
・個々の行で示されている仕事をプロセスという
・最初の行が表の項目名
・左端のUSERという項目は、そのプロセスを実行したユーザー名
・2番目の項目PIDはプロセスIDで、たくさんあるプロセスを互いに区別するためにある
・3番目の%CPUはCPUの性能のうちどのくらいがそのプロセスに使われているか
・4番目の%MEMはメモリがどのくらいそのプロセスに使われているか
コンピュータの速度が異様に遅いときは3.4番あたりの数値が極端に大きいプロセスがないかどうかチェックするとよい
・9番目のSTARTはそのプロセスが開始された時刻
・10番目のTIMEはそのプロセス実行のためにCPUが費やした時間
・11番目のCOMMANDはそのプロセスを起動したコマンド
バックグラウンドとフォアグラウンド
・シェルでコマンドを走らせるとき、普通はそのコマンドが終わるまでそのシェルでは他のことができない
$ sleep 10
10秒後にプロンプトが出る
ところがこのコマンドの最後に&をつけると
$ sleep 10 &
何か1行表示が出てすぐにプロンプトに戻る
・このときsleep 10というコマンドがシェルの画面の中ではなく、別のところで動いている
コマンドの末尾に&をつけてシェルの画面外で走らせることをバックグラウンドという
$ fg
・fgはフォアグラウンドの略称。シェルの画面の中で実行する
・コマンドを&をつけずに走らせるとフォアグラウンドで実行される
「CTRL」キーを押しながら「z」
↓
^zと表示され、その次の行に[1]+ 停止 と表示されプロンプトが戻る
このときコマンドは一時停止に入る
bgというコマンドを打つとバックグラウンドで再開される
ジョブとプロセス
・sleepのとき、&をつけた場合、結果に[1]というのが出るが、この数値はジョブIDと呼ばれるもの
・ジョブとはまとめて実行されるプロセスの集まり
$ コマンドA | コマンドB | コマンドC のとき
これら全体が1つのジョブであり3つのプロセスの集まりとみなされる
・ジョブの数を増やすとジョブIDも増える
$ sleep 10 & というコマンドを間髪入れずに3回実行すれば
[1]5324
[2]5325
[3]5326
というようにジョブIDの値が1,2,3というふうに増えていき、プロセスIDの値も増えている
・プロセスとジョブは管理するところが違う
・OS全体で統一的に管理されるため多くのプロセスを同時に動かす。それら全てに対し、重複しないようなプロセスIDがつけられるのでしばしば大きな値になる
・そのジョブを実行するシェルで管理されるので大抵コマンドのジョブIDは1番から始まる
プロセス強制終了
・UnixやLinuxはとても安定したOSだが特定のコマンドやアプリケーションがフリーズすることがある。そのときは強制終了する
・ターミナルの中でシェル上で動いているコマンドなら[ctrl]+[c]で強制終了できることが多い
kill プロセスID
・[ctrl]+[c]ができないときに、別のターミナルを開いて実行中のコマンドのプロセスIDを調べkillする
・別のターミナルすら開けないとき
・GUIのウィンドウ全体が停止し、画面全体が1つのCUIのターミナルになる
・そこでログインし、ps auコマンドを実行してプロセスIDを確認し、killコマンドを打つ
・終わったらログアウトし[ctrl]+[alt]+[F7]を押すと元のGUIの画面に戻る
・SSHというやり方でトラブルの起きたコンピュータにログインし、ps auしてkillする
$ kill -kill プロセスID
入門者のLinux 11章 まとめ
奈佐原顕郎さん「入門者のLinux」より
コマンドの実体
・シェルの上で走るコマンドは多くの場合それぞれが独立したソフトウェアである
・1つのコマンドに対し、ディレクトリ・ツリーのどこかにその実体(プログラムを格納した実行可能ファイル)が一つ存在する(例外もある)
which ls (lsコマンドの実体がどこにあるか調べている)
実行可能ファイル
・パーミッションに実行許可が与えられているファイル
・ほとんどのコマンドの実体は
「/bin」
「/user/bin」
「/sbin」
「/user/sbin」
の4つのどれかの中にある、コマンドと同名の実行可能ファイルである
・Unixのコマンドには重要度というか立ち位置的なものがある
「/bin」「/sbin」
「/user/bin」「/user/sbin」
・「bin」の前に「s」が付いているディレクトリにはシステム管理にまつわるコマンドが入る(たぶんsystemのs)
シェルもコマンド
・シェルはコンピュータの上の仕組みであり、シェル自体を動かすプログラムというかコマンドがある
echo $SHELL
・シェル変数はコンピュータを立ち上げたときに自動的に作られる
・現在ユーザーが使っているシェルがなんなのかが記録されている
いろいろなシェル
・普段使っているシェルの実態は/bin/bashである
・「/bin/bash」は「bash(バッシュ)」と呼ばれる有名なシェル
・bashはもともと「bourne shell」と呼ばれるシェルから派生して生まれた
$ sh
・bourne shellではコマンドの履歴機能が使えない
・他にzshやtcshがある
・tcshはbashに劣らずポピュラーで特にLinux以外のUnixで使われる
困ること
・シェルが違うと使い方がちょっと違うことがある
・ネットで調べたコマンドがうまく走らないとか、ちょっと古めのUnixのテキストに書いてあることがうまく動かないとかの原因はシェルの違いであることが多い
シェルの組み込みコマンド
which cd
・なにもでてこない(cdコマンドを走らせるための実行可能ファイルが存在しない)
・bashが自分の中にcdコマンドを持っている
・cdはbashというシェルの付属品である(シェルの組み込みコマンドである)
・1つのコマンドに1つの実行可能ファイルという原則の例外である
$ help
シェルで走るコマンドには2種類ある
・独立したコマンド(実行可能ファイルを持ったコマンド)
・シェルの付属品(組み込みコマンド)
特別なシェル変数
・シェルはユーザーの好みや要望に沿えるよう多様な設定ができる
環境変数
・シェル設定などに関する情報を格納している
set | less
COLUMNS
LANG
・個々のシェル変数・環境変数の内容を表示するときはechoコマンドを使う
・シェル変数・環境変数の中身を見るときは$という記号を頭につけて指定する
コマンドサーチパス
・コマンドの実態が入っている可能性が高いディレクトリに関する情報
・「PATH」という環境変数に格納されている
echo $PATH
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
シェルは6つのディレクトリの中を順番に探して実行可能ファイルを見つける
・「/usr/local/bin」と「/usr/local/sbin」はユーザーの特殊な要望に応えるためのコマンドを入れるところ
・コマンドを普遍的なもの(どんなLinuxにも入っているコマンド)から特殊なもの(用途に応じて入れたり入れなかったりするコマンド)に段階的に分類して、順に「/bin」「/usr/bin」「/usr/local/bin」に入れておくのがUnixの文化
シェルスクリプト
・複数のコマンドをテキストファイルにまとめて実行することができる
$ vi test.sh
・ファイル名「test.sh」の拡張子「.sh」は「sh」というシェルで実行されるシェルスクリプトであるというしるしで、これはそうしなければだめなことというより習慣である
$ chmod +x test.sh
./test.sh
まとめ
・Unixには徹底的に設定可能・カスタマイズ可能な範囲を広くし、それをユーザーの手の届くところに広げておくというポリシーがある
入門者のLinux 10章 まとめ
奈佐原顕郎さん「入門者のLinux」より
Unixで大切なこと
・情報はなるべくテキストファイルで管理する
ワープロとテキストエディターの違い
・文書をいろんな風に飾れる(フォント変更・文字の大きさ変更・色変更・画像挿入など)
・余分な機能が多いため動作が遅く画面のスクロールが多いなど何かと面倒
・文書を単なる文字の集まりとして認識しそれを編集(文字を消したり追加したりする)ためだけのソフト
・テキストファイルを編集することだけに特化した道具
Unixの定番テキストエディター
vi
・Ubuntu Linuxで使いにくいvi(vim-tiny)
・Ubuntu Linuxで使いやすいvi(vim)
・Ubuntu Linuxインストール直後はvim-tinyになっていることが多いのでvimをインストールする
sudo apt-get install vim
vi 編集したいファイル名
・viに入った直後はコマンドモードにいる(テキストの一部を削除・コピペ・ファイル保存・viを終了などができる)
・viには挿入モードもある
キーボードのiを押す
Escキー
:w + Enter
:q + Enter
・Escキーを押してコマンドモードにもどる
・1文字削除は「x」
・1行削除は「dd」
・消しすぎた場合「u」で元に戻せる
・不要な部分を消し去ったら書き換えたいところまでカーソルを移動し「i」キーで挿入
echoとviのファイル作成における違い
・echo:作った後の修正や編集ができない
viをすすめるわけ
・どんなUnixにも入っているとてもよく枯れたソフト
・CUIで動くしとても軽い
・巨大なファイルも編集できる
・汎用性が高い
入門者のLinux 9章 まとめ
奈佐原顕郎さん「入門者のLinux」より
awk
・テキストデータを加工したり処理したりする
・プログラミング言語としての機能を備えており、シンプルで柔軟に出来ているのでワンライナーの部品として活躍する
・どんなコマンドでも標準出力にテキストデータを吐き出すコマンドならawkに流しこめる
・バグが出にくい
echo 100 200
応答 100 200
echo 100 200 | awk '{print $1}'
応答 100
・printはデータを表示するというawkが持つコマンド(あくまでawkというコマンドの中で実行されるコマンド)
・$1はawkの標準入力に流れ込んでくるデータの中の左から1番目の項目という意味
・awkはデータの切れ目を空白文字(やタブ)で勝手に判断するので注意が必要
・awkで計算もできる。計算が複雑になってきたら変数を使う
・awkの中で複数のコマンドを順に実行するにはコマンド同士を;で分かち書きする
・awkは流れてきたテキストデータをすべての行のそれぞれについて処理する(行ごとに処理を繰り返す)
・{}の前に条件判定を置くことができる
'$1==3{print}'
1項目めが3に等しかったら以下を実行せよ