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版

   

qiita.com

入門者のLinux 終章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

 

Linuxにはいろいろなディストリビーションがあり、一つのディストリビーションの中にもいろいろなバージョンや派生系があり、インストール方法がある。それらをいろいろなハードウェアに試し、Linuxの多様性を肌で感じること

・多くのスタイルのLinuxに共通する概念や仕組みに関しても理解が深まる

うまくいかないときややり方がわからないときは、思いつく方法をどんどん試すこと
一見無駄に思えることが大切

・答えはコンピュータから自分自身が引き出す

・トラブルを解決する際は、参考にする情報の鮮度に注意すること(バージョンチェックやサイトの更新日時に注意するなど)

 

以上でこの本のまとめはおしまい!

とてもわかりやすいし手も動かせて楽しいのでオススメです。

個人的には見たこと、聞いたこと、使ったことはあったけど意味はよくわかってなかったみたいなところがわかってスッキリでした〜

次はLPICの勉強がんばります〜

入門者のLinux 13章 まとめ

奈佐原顕郎さん「入門者のLinux」より

文字置換のコマンド

sed

大文字小文字変換でよく使うコマンド

tr

単語を辞書順に並べ替える

sort

単語を数える

uniq -c

出現回数の多い順に並び替える

sort -n -r

・nオプションは辞書順でなく、数字の小さい順に並べる
・rオプションは順序をひっくり返す

まとめ

・様々な細々とした仕事について、それぞれのためのソフトウェアをいちいち用意するのはきりがないし、効率も良くない。

Unixは、「その仕事のためのソフト」ではなく「その仕事を構成する部品」たちを提供する(wgetコマンドやconvertコマンドなど)。それらを使いユーザーは自分で「その仕事のためのソフト」をワンライナーシェルスクリプトで組み立てる

UnixCUIは相手の大きさによって怯んだりしない。このことが小さいものから大きいものまでいろいろなコンピュータに搭載されている理由のひとつ

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はフォアグラウンドの略称。シェルの画面の中で実行する
・コマンドを&をつけずに走らせるとフォアグラウンドで実行される

やっぱりバックグラウンドで走らせたいとき(例としてsleep 10コマンド)
「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番から始まる

プロセス強制終了

UnixLinuxはとても安定したOSだが特定のコマンドやアプリケーションがフリーズすることがある。そのときは強制終了する
・ターミナルの中でシェル上で動いているコマンドなら[ctrl]+[c]で強制終了できることが多い

プロセスを直接的に強制終了する
kill プロセスID[ctrl]+[c]ができないときに、別のターミナルを開いて実行中のコマンドのプロセスIDを調べkillする

・別のターミナルすら開けないとき

[ctrl]+[alt]+[F1]を押す場合
GUIのウィンドウ全体が停止し、画面全体が1つのCUIのターミナルになる
・そこでログインし、ps auコマンドを実行してプロセスIDを確認し、killコマンドを打つ
・終わったらログアウトし[ctrl]+[alt]+[F7]を押すと元のGUIの画面に戻る
別のコンピュータからやる場合
・SSHというやり方でトラブルの起きたコンピュータにログインし、ps auしてkillする
killコマンドでも終了できないプロセスがあるとき
$ kill -kill プロセスID

入門者のLinux 11章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

 

コマンドの実体

・シェルの上で走るコマンドは多くの場合それぞれが独立したソフトウェアである
・1つのコマンドに対し、ディレクトリ・ツリーのどこかにその実体(プログラムを格納した実行可能ファイル)が一つ存在する(例外もある)

コマンドの実態を調べる
which ls (lsコマンドの実体がどこにあるか調べている)

実行可能ファイル

パーミッションに実行許可が与えられているファイル
・ほとんどのコマンドの実体は

「/bin」
「/user/bin」
「/sbin」
「/user/sbin」

の4つのどれかの中にある、コマンドと同名の実行可能ファイルである

Unixのコマンドには重要度というか立ち位置的なものがある

ほとんどのLinuxが共通して持っている基本的なコマンド
/bin」「/sbin」
ディストリビューションや設定や構成によって入れたり入れなかったり
「/user/bin」「/user/sbin」

・「bin」の前に「s」が付いているディレクトリにはシステム管理にまつわるコマンドが入る(たぶんsystemのs)

シェルもコマンド

・シェルはコンピュータの上の仕組みであり、シェル自体を動かすプログラムというかコマンドがある

SHELLという名前のシェル変数の内容を調べる
echo $SHELL

・シェル変数はコンピュータを立ち上げたときに自動的に作られる
・現在ユーザーが使っているシェルがなんなのかが記録されている

いろいろなシェル

・普段使っているシェルの実態は/bin/bashである
・「/bin/bash」は「bash(バッシュ)」と呼ばれる有名なシェル
bashはもともと「bourne shell」と呼ばれるシェルから派生して生まれた

Bourne
$ sh

bourne shellではコマンドの履歴機能が使えない

bashの方が使いやすいのでbashに戻りたい
$ exit

・他にzshtcshがある
tcshbashに劣らずポピュラーで特にLinux以外のUnixで使われる

困ること

・シェルが違うと使い方がちょっと違うことがある
・ネットで調べたコマンドがうまく走らないとか、ちょっと古めのUnixのテキストに書いてあることがうまく動かないとかの原因はシェルの違いであることが多い

シェルの組み込みコマンド

which cd

・なにもでてこない(cdコマンドを走らせるための実行可能ファイルが存在しない)
bashが自分の中にcdコマンドを持っている
・cdはbashというシェルの付属品である(シェルの組み込みコマンドである)
・1つのコマンドに1つの実行可能ファイルという原則の例外である

bashの組み込みコマンドを調べる
$ help
シェルで走るコマンドには2種類ある

・独立したコマンド(実行可能ファイルを持ったコマンド)
・シェルの付属品(組み込みコマンド)

特別なシェル変数

・シェルはユーザーの好みや要望に沿えるよう多様な設定ができる

環境変数

・シェル設定などに関する情報を格納している

使用しているシェルにどのようなシェル変数があるか調べる
set | less
今開いている端末のウインドウの横幅(文字数)
COLUMNS
ホームディレクトリの絶対パスを格納する環境変数
HOME
どの言語環境か
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を終了などができる)
・viには挿入モードもある

挿入モード(文字入力できる)の入り方
キーボードのiを押す
挿入モードからコマンドモードへ
Escキー
ファイル保存
:w  + Enter
viの終了
: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}'
応答 100printはデータを表示するというawkが持つコマンド(あくまでawkというコマンドの中で実行されるコマンド)
・$1はawkの標準入力に流れ込んでくるデータの中の左から1番目の項目という意味
awkはデータの切れ目を空白文字(やタブ)で勝手に判断するので注意が必要

awkで計算もできる。計算が複雑になってきたら変数を使う

awkの中で複数のコマンドを順に実行するにはコマンド同士を;で分かち書きする
awkは流れてきたテキストデータをすべての行のそれぞれについて処理する(行ごとに処理を繰り返す)

・{}の前に条件判定を置くことができる

'$1==3{print}'
1項目めが3に等しかったら以下を実行せよ