- 投稿日:2020-08-24T23:57:43+09:00
Linux初心者がやらかしたConfig編集ミス3点
なんだかんだでLinuxの業務経験が1年半になったので今までにやらかした
(死にかけた)経験を書いていきます。
特に最近はオンプレだとBIOSレベルで操作できてたのが、クラウドだとできず詰みかけるパターンも多いです。(救えるパターンもあり)やらかし防止と、リカバリ含め傷を最小限に抑えられればと思います。
※本記事はRHEL7,CentOS7を前提とします。ざっくりと筆者の経歴
- 高専時代:Linuxによる自宅サーバ運用歴2年(何も理解してなかった)
- 最近:Linux業務経験1年半
- LPICレベル1所持
- 応用情報技術者
- 業務歴は6年くらい(Linuxやる前は、Windows,Networkが中心でした)
SElinuxの編集ミスで死亡
SElinuxの無効化を行うために、コンフィグファイル(/etc/selinux/config)を修正。
本来は「SELINUX=disabled」とすべき所を、
誤って「SELINUXTYPE=disabled」としてしまった。
またはタイプミスなど。
詳細はこちらで紹介されてるので割愛。
https://qiita.com/daisuke0115/items/4b0ed3a5888cf81efd0abiosレベルでマシンに接続できる環境なら良いですが、AWSなどのクラウドだと詰みかけます。
→別EC2に該当のEBSをマウントして編集で救えます。
http://blog.serverworks.co.jp/tech/2020/04/14/post-82871/ただし、国産クラウドみたいに?ディスクの付け替えが容易に行えない場合は詰みます。
バックアップから戻す、もしくは再構築が必要になります。対策
こればかりはコピペで行って、更にとかやると安心。
cat /etc/selinux/config | grep SELINUX=disabledfstabの編集ミスで死亡
正しい例
/dev/sda3 /home xfs defaults,nofail 0 2自分の場合は途中のxfsを書き忘れて再起動し、ssh接続不可に。。
これもやってしまった場合、上述と同じ方法で救えます。
が自分が触ってたクラウド環境はそれが使えず、バックアップから復元しました。対策
sudo mount -aでエラーが無いことを確認してから再起動を行う。
俺は構築の勢いでそのエラーを無視して再起動してしまったんだ。。ユルシテ
余談
クラウドサーバーの追加ディスクマウント時はnofailオプションを!
https://inaba-serverdesign.jp/blog/20170210/cloud_disk_mount_fstab_nofail.htmlにあるようにnofailをつけましょう。
root sshの許可で死亡
(編集ミスとはまた少し違う気もしますが)
原則サーバに置いて、rootのsshは無効です。
稀に閉域環境下では便器性などで一時的に有効化されているケースもあります。
自分の場合はついそれに慣れてしまい、検証として立てて頂いた、公開サーバでも変更してしまいました...→クラウドサービス(Azure)のアタック検知により発覚し変更。パスワードは複雑なので事なきを得た。
※AWSは公開鍵認証固定ですが、AzureはSSH公開鍵認証と文字列認証が選べるようです。対策
- 操作するサーバが誰がアクセスできる状態か認識する。
- 社内ネットワークのみなのか
- 情報を知っていればどこでもアクセスできるのか
- 公開サーバで文字列認証は極力使用しない。使用する場合はユーザ名を複雑にする。
- 公開サーバとはいえ可能であればセキュリティグループでSSHは接続元を絞る。
番外編:AWSのEC2誤削除
検証サーバをさー停止するかってと思って操作してたら終了を選択していた。
terminated と表示される画面と、真っ青になる俺
対策
終了保護を有効にしましょう。
あとはAMI、スナップショットの取得、場合によってはIAMレベルでの制御を行いましょう。今回は何もしてなかったので3時間くらいかけ構築し直しました。。検証用サーバとはいえ痛い。
フェールセーフと言う考え方
今回の失敗を受け改めて意識しました。
フェイルセーフ(フェールセーフ、フェイルセイフ、英語: fail safe)とは、なんらかの装置・システムにおいて、誤操作・誤動作による障害が発生した場合、常に安全に制御すること。 またはそうなるような設計手法で信頼性設計のひとつ。 これは装置やシステムが『必ず故障する』ということを前提にしたものである。
https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%BB%E3%83%BC%E3%83%95情報処理の試験でよく出ますが、システムを設計する上では必要な考え方です。
そのままフェールセーフの考え方を取り込む。というよりは「人間は必ず失敗する」ので、失敗を前提に作業する。という意識が大事です。
(細かく言うと対策によっては別の信頼性設計だったりしますが割愛)今回のケースだと、以下を考えましょう。
- 誤操作を仕組み的に減らす
- 再起動後適応等の場合は、記載したようにチェックを入れる。
- 本番作業は開発・ステージング環境で実績のある作業手順を使う、オペレーター、チェッカーの2名体制で行う。
- 手動でConfigを編集せずに、Ansibleなどの構成管理ツールを使う。
- 誤操作が起きてもバックアップなどにより元の状態に復元できるようにする。
- Configを編集するときはシステムバックアップを取得する。
- システムバックアップに加え、業務データなどを別途バックアップする。
- 誤操作が発生しても、業務影響を最小限に抑える。
- 本番作業の場合は、サービス時間外に作業を行う。
- (操作に対するリスクを理解すること)←フェールセーフとは違いますが大事であり、これが一番経験が物を言ったり...
日常生活にも応用ができて、いい例が出ないですが...
- 雨が降ってもいいように折りたたみ傘をいつも持ち歩く
- 自分はリップクリーム必須なので、職場、鞄など使う場所に置いておく。
- 当日の朝は理想の時間に起きれない可能性があるから、前日のうちに荷物を準備する。
- お米を炊いたあと冷凍を忘れないように、手間だけど後回しにせず食事前に必ず済ませるとか。
クラウドサービスは気軽に起動停止できる分、コンソールから(BIOSレベル)の作業ができずトラブル時逆に面倒なときもあります。
失敗例や、オペレーション時のリスク想像とかにより、製造業で言うヒヤリハットのように防げるミスは事前に防いで行きましょう。本番環境でやらかしちゃった人 Advent Calendar 2019
https://qiita.com/advent-calendar/2019/yarakashi-production
- 投稿日:2020-08-24T23:19:38+09:00
今さら聞けないDNSの基礎知識
今回はDNSの基本的な仕組みを改めて確認しようと思い、下記書籍の内容を一部まとめました。
非常にわかりやすく、体系的に知識を習得できました。DNSとは
DNSにおける階層化と委任
ドメイン名に対応する形で管理範囲を階層化し、管理を委任することで管理を分散する。
委任によって管理を任された範囲を「ゾーン」と呼ぶ。ゾーンを委任するためには、サブドメインを作ることから始める。
サブドメインは、委任元で作られる。
それぞれのゾーンの管理者は、「ネームサーバー」というサーバーで情報を管理する。ネームサーバーに保存される情報は下記2つ。
- そのゾーンに存在するホストのドメイン名とIPアドレス
- 委任の情報
- 委任先のネームサーバーの情報
親は子の委任の情報を管理し、委任先を案内する役割を持つ。
委任先をルートから順にたどり、最終的にドメインのIPアドレスを管理するネームサーバーにたどり着く仕組みが基本的な動作になる。
DNSとレジストリの関係
ドメイン名とDNSによる階層構造を導入した場合、それぞれの階層を管理する管理者(レジストリ)が必要になる。
レジストリが担う責任は下記。
- 自分が委任されたゾーンを管理する
- ゾーンを委任した場合、そのゾーンを委任した人が誰かを管理する
レジストリとは
レジストリの役割
ドメイン名を使うためには、レジストリに対して「このドメイン名を使いたい」という登録申請を行う。
レジストリの主な役割は下記。
- 登録情報を蓄積し管理する登録簿「レジストリデーターベース」を運用する。
- Whoisサービスの提供
- 自身の管理するドメイン名の情報をWhoisサービスで提供する。
- ネームサーバーの運用
Whoisとその役割
Whoisは、ドメイン名やIPアドレスのレジストリが、管理する情報をインターネットに公開し、利用者が参照できるようにするサービス。
レジストリ・レジストラモデル
ドメイン名の登録管理を、下記の通り分離する。
- ドメイン名の一元管理を行う役割を担うレジストリ
- ドメイン名登録者からの申請を取り次ぐレジストラ
登録されるドメイン名を一意に保ちつつ、価格やサービスにおける多様性を確保するため。
ドメイン名を使えるようにする
登録したドメイン名を使ってWebサイトにアクセスできるようにするためには、ネームサーバーを登録する必要がある。
最近では、ネームサーバーを提供する事業者のサービスを利用することも一般的。
自分でネームサーバー(以下、NS)を運用する場合は下記。
- 自分のドメイン名を取り扱うNSをインターネット上で動かす
- このNSはインターネットのどこからでもアクセスできるようにする必要がある
- 指定したドメイン名の情報をNSに設定する
- NSがインターネットから聞かれたことに答えられるか確認する
名前解決
階層構造取る場合に、子の情報を参照する際は、親が子に委任しているという情報を返す必要がある。
実際に階層構造をたどって名前解決すると、負荷と時間がかかる。
そこで、名前解決を担当する別サーバーを準備し、名前解決を代行する仕組みが考えられた。一定時間、代行サーバーは名前解決の情報を保持する。
時間内に代行サーバーに要求がこれば、保持している情報を返す。名前解決に必要なこと
委任元(親)が応答する委任先(子)のNS情報のことを、委任情報という。
正しい委任情報が登録されなければ、名前解決ができなくなってしまう。
DNSの構成要素
- 情報がほしい人
- 名前解決をする人
- 情報を提供する人
上記をそれぞれ、下記と呼ぶ。
- スタブリゾルバー
- フルリゾルバー、フルサービスリゾルバー
- 権威サーバー
スタブリゾルバー
PCやスマホの機器上で動作し、フルリゾルバーに名前解決を依頼する。
スタブリゾルバーからフルリゾルバーへ名前解決を依頼することを、「名前解決要求」という。
スタブには「末端」という意味がある。フルリゾルバー
主な役割は下記。
- 名前解決の実行
- 名前解決の際に得られた情報を蓄積する
- しばらくの間蓄積する仕組みのことを、「キャッシュ」という
権威サーバー
権威サーバーは自分が委任を受けたゾーンの情報と、自分が委任しているゾーンの委任情報を保持する。
これまでNSとよんでいたサーバーが、権威サーバー。自分が保持している情報のみを応答する。
ゾーン内の情報と、委任情報のみを応答する。スタブリゾルバーやフルリゾルバーは問い合わせの際、知りたい情報の名前(ドメイン名)と種類(タイプ)を指定する。
権威サーバーはそのゾーンの設定内容(ゾーンデータ)を「リリースレコード」という形で保持する。
リソースレコードは、「ドメイン名」「タイプ」「クラス」という3種類の情報で構成される。リソースレコード
よく使われるリソースレコードのタイプは下記。
- A
- IPv4アドレス
- AAAA
- IPv6アドレス
- NS
- そのゾーンの権威サーバーのホスト名
- MX
- そのドメイン宛の電子メールの配送先と優先度
冗長化
権威サーバーは複数台置かれることが普通。
冗長性の向上と負荷分散を図るため。
同一ゾーン内のどの権威サーバーに問い合わせても、同じ応答を得ることができる。
この仕組を「ゾーン転送」と呼ぶ。ゾーン転送では、ゾーンデータを持つ権威サーバーがコピー元となり、コピー先の権威サーバーにゾーンデータをコピーする。
コピー元となるサーバーを「プライマリサーバー」、コピー先となるサーバーを「セカンダリサーバー」と呼ぶ。権威サーバーが複数ある場合、フルリゾルバーはどの権威サーバーにアクセスすべきだろうか。
RTT(Round Trip Time)が短い権威サーバーに優先的に問い合わせる。
正引きと逆引き
ドメイン名に対応するIPアドレスを検索することを、「正引き」と呼ぶ。
その逆は「逆引き」。リソースレコードの情報
SOA
委任により分割されたゾーンの境目をゾーンカットといい、ゾーンカットの小ゾーン側では、ゾーンカットのドメイン名をゾーン頂点という。
jp
がexample.jp
を委任している場合、example.jp
というドメイン名はゾーン頂点になる。
ゾーン頂点には、SOA(Start of Authority)リソースレコードを設定する。
委任されたゾーンを管理する際に必要な情報を設定する。NS
委任に関する情報を設定する。
ゾーンカットの親側と、子側の双方のゾーンに設定する必要がある。自分のゾーンのNSリソースレコードと、子側双方を設定する。
NSリソースレコードには、ゾーンの権威サーバーのホスト名を設定する。
ゾーンを管理する権威サーバーが複数ある場合、全てを列挙する。権威サーバーについては、必要に応じてAレコードやAAAAレコードを登録する。
MX
設定したドメイン名のメールを受け取れるようにするための情報も、そのゾーンの権威サーバーへ設定する。
MXレコードには、メールサーバーの優先順位が符号なしの数値で設定されている。リストの中で最も小さい値のメールサーバーから順に、メールの配送を試みる。
- 投稿日:2020-08-24T23:17:28+09:00
[Linux]よく使うLinuxコマンド(フォルダ操作編)
よく使うLinuxコマンド
まだ学習し始めて数ヶ月ですが、ここまででよく使ったコマンドをアウトプット代りに書いていきますので、学習し始めたばかりの人などの参考になればと思います。
今回はフォルダ操作について、書いていきます。ファイル操作は別のページで書きます。カレントディレクトリを表示
$ pwdカレントディレクトリのファイル情報を表示
$ lsオプションで、ファイルの一覧をリスト表示したり、更新時間順に並べるなどの詳細を設定できます。
ls -l ファイル一覧(詳細)をリスト表示する
ls -t リストをファイルの更新時間順に並べる
ls -r リストを降順に並べる
ls -ltr ファイル一覧を更新時間の降順で並べるディレクトリを新規作成
これでaaaというファイルが作成できました。
$ mkdir aaa現在の作業ディレクトリを移動
cd (移動先指定なし)ホームディレクトリへ移動する
cd . カレントディレクトリへ移動する
cd .. 1つ上のディレクトリへ移動するディレクトリを削除
ディレクトリを削除しますが、中身が空でないディレクトリは削除できません。
$ rmdir aaa
- 投稿日:2020-08-24T22:49:48+09:00
Linux 環境構築について(CentOS)
後輩に共有する為の記事となります。
やる事は二つだけ
1.VMware virtualBOXをインストール
2.CentOS iosをダウンロード
- 投稿日:2020-08-24T22:49:48+09:00
Linux 環境構築について(VMware VirtualBOX)
後輩に共有する為の記事となります。
やる事は二つだけ
1.VMware virtualBOXをインストール
2.CentOS isoをダウンロードここでは1を説明します
①https://www.virtualbox.org/ でDownloadをクリック
④Custom setupが出てきますが、デフォルトの設定で問題ないのでnextをクリック
⑤Warning:Network Interfacesが出てきますが、YESで次へ
⑥Ready to Installが出てくるので、installをクリック
これでインストールされて、デスクトップ上にアイコンが表示されると思います。
もしくはダウンロードフォルダとかにあったりすると思います。
VitualBOXは仮想マシンです。
windowsとかmacで違うOS使って、勉強する時に使えますよ。次CentOS落としましょう→その2
- 投稿日:2020-08-24T22:49:48+09:00
Linux 環境構築について(VirtualBOX)
後輩に共有する為の記事となります。
やる事は二つだけ
1.VirtualBOXをインストール
2.CentOS isoをダウンロードここでは1を説明します
①https://www.virtualbox.org/ でDownloadをクリック
④Custom setupが出てきますが、デフォルトの設定で問題ないのでnextをクリック
⑤Warning:Network Interfacesが出てきますが、YESで次へ
⑥Ready to Installが出てくるので、installをクリック
これでインストールされて、デスクトップ上にアイコンが表示されると思います。
もしくはダウンロードフォルダとかにあったりすると思います。
VitualBOXは仮想マシンです。
Windowsとかmacで違うOS使って、勉強する時に使えますよ。次CentOSを落としましょう→その2
- 投稿日:2020-08-24T17:39:12+09:00
journalctrlで見切れるのを改行して見えるようにする
journalctl -e --no-pager
-e
は最新のみ
- 投稿日:2020-08-24T17:01:56+09:00
TunedのOracle Database用プロファイルを試す
Red Hat Enterprise Linux / CentOSのチューニング機能にTunedがあります。Tunedはプロファイルを選択することで典型的なワークロードに適したチューニングを行うことができます。この記事ではOracle Database用のプロファイルoracleを使ってどのような設定が行われるのかを検証します。
インストール
Oracle Database用のプロファイルはtuned-profiles-oracleパッケージで提供されます。下記の例ではCentOS 8.2に対してtuned-profiles-oracle-2.13.0-6.el8パッケージを導入しています。
# rpm -ivh tuned-profiles-oracle-2.13.0-6.el8.noarch.rpm warning: tuned-profiles-oracle-2.13.0-6.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:tuned-profiles-oracle-2.13.0-6.el################################# [100%] #インストールが完了すると、以下のファイルが作成されます。
ディレクトリ ファイル 説明 /usr/lib/tuned/oracle tuned.conf Oracle Database用プロファイル設定 /usr/share/man/man7 tuned-profiles-oracle.7.gz オンライン・マニュアル インストールを確認するにはtuned-admコマンドを実行します。一覧にoracleプロファイルが確認できます。
# tuned-adm list Available profiles: - accelerator-performance - Throughput performance based tuning with disabled higher latency STOP states - balanced - General non-specialized tuned profile - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - intel-sst - Configure for Intel Speed Select Base Frequency - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - oracle - Optimize for Oracle RDBMS - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: virtual-guest #プロファイルの設定
仮想環境におけるデフォルトのプロファイルはvirtual-guestです。現在のプロファイルを確認するには、tuned-adm activeコマンドを実行します。oracleプロファイルに変更する場合はtuned-adm profile oracleコマンドを実行します。下記の例ではプロファイルの変更により、カーネル・パラメータvm.swappinessがどのように変化するかを確認しています。
# tuned-adm active Current active profile: virtual-guest # sysctl -a | grep swappiness vm.swappiness = 30 # tuned-adm profile oracle # sysctl -a | grep swappiness vm.swappiness = 10 #virtual-guestとの違い
デフォルトのプロファイルvirtual-guestとoracleがどのように違うかを確認します。プロファイルの定義ファイルは/usr/lib/tuned/virtual-guest/tuned.confと/usr/lib/tuned/oracle/tuned.confです。どちらもthroughput-performanceプロファイルをインクルードしているため、違いはカーネル・パラメーターとトランスペアレントHugePagesの設定のみとなります。
カーネル・パラメータ virtual-guest oracle 備考 fs.aio-max-nr - 1048576 Oracle Databaseインストール要件 fs.file-max - 6815744 Oracle Databaseインストール要件 kernel.panic_on_oops - 1 kernel.sem - 250 32000 100 128 Oracle Databaseインストール要件 kernel.shmall - 1073741824 Oracle Databaseインストール要件以上 kernel.shmmax - 4398046511104 Oracle Databaseインストール要件以上 kernel.shmmni - 4096 Oracle Databaseインストール要件 net.core.rmem_default - 262144 Oracle Databaseインストール要件 net.core.rmem_max - 4194304 Oracle Databaseインストール要件 net.core.wmem_default - 262144 Oracle Databaseインストール要件 net.core.wmem_max - 1048576 Oracle Databaseインストール要件 net.ipv4.ip_local_port_range - 9000 65499 Oracle Databaseインストール要件 vm.dirty_background_ratio - 3 vm.dirty_expire_centisecs - 500 vm.dirty_ratio 30 40 vm.dirty_writeback_centisecs - 100 vm.swappiness 30 10
vm設定 virtual-guest oracle 備考 transparent_hugepages - never Oracle Databaseインストール推奨値 oracleプロファイルのファイル内容
/usr/lib/tuned/oracle/tuned.conf ファイルの内容です。
# # tuned configuration # [main] summary=Optimize for Oracle RDBMS include=throughput-performance [sysctl] vm.swappiness = 10 vm.dirty_background_ratio = 3 vm.dirty_ratio = 40 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 kernel.shmmax = 4398046511104 kernel.shmall = 1073741824 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65499 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 kernel.panic_on_oops = 1 [vm] transparent_hugepages=neverマニュアル
- 投稿日:2020-08-24T16:14:42+09:00
cgroups(Control Groups)
cgroups(Control Groups)とは
- プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能
- プロセスとスレッドをグループ化して管理する技術
- グループに階層構造を適用することができ、体系的にリソース管理ができる。
項目 説明 cpu CPUの使用量制限 cpuacct CPUの使用量統計情報提供 cpuset CPUやメモリの配置制御 memory メモリやスワップ(Swap)の使用量制 devices デバイスに対するアクセス制御 freezer グループ内プロセス停止及び再開 net_cls ネットワーク制御 blkio ブロックデバイスの入出力量の制御
- 投稿日:2020-08-24T12:03:04+09:00
namespaceとは
namespaceとは
リナックスオブジェクトに名前を付けて同じ名前のオブジェクトを1つとして管理すること
6つの独立環境
Linuxのオブジェクトに名前を付けることで以下のような6つの独立された環境を構築できます。
PID namespace
- プロセスに与えられたユニークなIDを指す。これを利用してプロセスを隔離できる。
- namespace異なる場合はアクセスができない。
Network namespace
- ネットワークリソース(IPアドレス、ポート番号、Routing Tableなど)がnamespaceごとに独立に与えられる。
- この機能を利用するとOS上で使用中のPortがあってもコンテナ内で同じPortを使用できる。
UID namespace
- ユーザーID(UID)とグループID(GID)をnamespaceごとに区分(独立に持っていける)
- コンテナではルート権限を持っていてもポストの管理権限を持てないように隔離する機能。
- namespace内とホストOS上で異なるUID、GIDを持つことができる。
MOUNT namespace
- Linuxでデバイスを認識するためマウントが必要。
- マウント:コンピュータにつながっている機器及び記憶装置をOSに認識させ、使用可能状態にすること
- ファイルシステムなどマウントされたデバイスをnamespaceごとに隔離。
- ホストOSとnamespaceが異なるファイルシステムのツリーを持つことができる。
UTS namespace
- namespaceごとにホスト名やドメイン名を独自に持つことができる。(独自に設定可能)
IPC namespace
- プロセス間通信(IPC:Inter Process Communication)オブジェクトをnamespaceごとに独立的に持つことができる。
- 共有メモリ(Shared Memory)、セマフォ(Semaphore)、メッセージキュー(Message Queue)などを独立的に使用。
- 投稿日:2020-08-24T11:18:26+09:00
本番環境やテスト環境のインフラで同一IPのサーバにSSHするときにREMOTE HOST IDENTIFICATION HAS CHANGEDエラーを発生させないように、known_hostsファイルを環境ごとに用意する方法
- 投稿日:2020-08-24T10:34:22+09:00
LINUXのファイルとプロセスについて
ファイルとプロセスの管理
ハードリンクとシンボリックリンクについて
ほとんどのOSはファイルやディレクトリに別名を付けて、異なる名前で同一ファイルにアクセスできる仕組みが幾つかあります.LINUXでいうと、ハードリンクとシンボリックリンクの2種類です。
話しの流れ上、先にiノードについて触れます。すべてのファイルはiノード番号という重複のない番号が割り当てられており、そこにはファイル種別やサイズ、アクセス権などが記録されています.
ここから本題に入りますと、ハードリンクは、ディスク上に保存さえているデータが1つでも、それを参照するファイルが複数あれば、それぞれのファイル名からそのデータを参照できます.ただし、元ファイルと作成したファイルに割り当てられるiノード番号は変わりません。つまり、どちらかを変更したらどっちも変わるのです。
続いて、シンボリックリンクは、リンク元を指すポインタ自身です。このため、リンク元だけ削除することができてしまい、こうなるとシンボリックリンクからはリンク元を参照不可となります。リンクの作成
構文:ln [オプション] {リンク元} {リンクファイル名}
オプション -s を付ければシンボリックリンクで、付けなければハードリンクを作成できる.※シンボリックリンク自体をコピーしたい場合は、cp -dを用いる.
プロセスの監視
プロセスとは、OSがプログラムを管理する際の基本単位です。
構文:ps [オプション]
オプションは -ef あたりをよく使っています。
top - 18:04:13 up 17 days, 1:47, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020488k total, 816472k used, 204016k free, 186292k buffers
Swap: 2064376k total, 0k used, 2064376k free, 369096k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1874 root 20 0 433m 39m 9536 S 0.3 3.9 24:51.55 java
1 root 20 0 19360 1544 1224 S 0.0 0.2 0:01.25 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0