53ningen.com

@gomi_ningen's Website

who コマンドと w コマンドの違い

whow って何が違うのかよくわからなかったので man で確認した

who コマンド

$ man who
NAME
       who - show who is logged on

...

$ who
ec2-user pts/0        2019-02-03 15:26 (xx.xx.xx.xx)
ec2-user pts/1        2019-02-03 15:26 (xx.xx.xx.xx)

w コマンド

$ man w
NAME
       w - Show who is logged on and what they are doing.
...

$ w
 15:30:18 up 60 days, 10:17,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ec2-user pts/0    xx.xx.xx.xx   ...
Read More

RHEL7系における時刻

情報ソース: Chapter 3. Configuring the Date and Time - Red Hat Customer Portal

コンピュータはだいたい次の 2 つの時刻を持ちます:

  • リアルタイムクロック(ハードウェアクロック/CMOSクロック): OSから独立し、コンピュータの電源を落としても稼働するマザーボード上の回路に組み込まれているクロック
  • システムクロック(ソフトウェアクロック): カーネルによって管理されている、システムの起動時にリアルタイムクロックから初期化され、その後独立した時を刻むクロック

システムクロックは常に UTC でデータを保持し、アプリケーションにより必要に応じてローカルタイムに変換される。

システムクロックに保持されるデータは次の2つ:

...

Read More

Hello, World カーネルモジュール

超技術書典で買った LINUX カーネルモジュール自作入門 を参考にしつつ、自作カーネルモジュールの Hello, World までをやってみました。参考書籍として Linux カーネル Hacks なんかも参照しながら、カーネルまわりに入門した。

  • Linux カーネルはモノリシック
  • ただしモジュール機能がある
    • ファイルシステム、デバイスドライバなどはモジュール単位でカーネル空間に動的に追加・削除が可能
    • Linux カーネル空間に動的に組み込み可能なバイナリ入るは .ko の拡張子を持つ
  • カーネルモジュールの作成方法は以下の 2 通り   - カーネルソースツリーに含まれる機能をモジュールとして作成する   - 独自機能をモジュールとして作成する

以下では独自カーネルモジュールを作成してみる

[amazon template=wishlist&asin=4873115019]

環境と...

Read More

inode を枯渇させる

ファイルシステムと inode

  • ファイルシステムにより、ブロックデバイスのファイル管理を構造的に取り扱える
  • ファイルはブロックの集まりに名前をつけたものにすぎない
  • 一般的には木構造でファイル/ディレクトリを取り扱う
  • ファイルシステムにより、ブロックデバイスの仕様を知らなくてもファイルにアクセスできたり、権限管理ができたりする
  • inode はファイルシステムオブジェクトのメタデータを保持するデータ構造

ext4 の inode を使い果たす

  • ext4 は最初に inode 1つあたりのデータのバイト数を指定して作る(bytes-per-inode)
  • 空のファイルを大量に作ると inode が枯渇して楽しい(?)
    • Let's get started!
$ # inode の空きを確認
$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
devtmpfs       124891    456 124435    1% /dev
tmpfs         ...
Read More

ファイルシステムのマウント

情報ソース:

  • パーティションやリムーバブルデバイス上にあるファイルシステムをディレクトリツリーないの特定のポイントであるマウントポイントに接続すること
  • ファイルシステムをマウントするには mount コマンドを使う
    • device はブロックデバイスへの完全パス(ex: /dev/sda3)やボリュームラベルを指定する
  • mount -a/etc/fatab に書かれているファイルシステムについてすべてマウントするという動き
SYNOPSIS
  mount [-lhV]
  mount -a [-fFnrsvw] [-t vfstype] ...
Read More

ファイルを open したまま各種システムコールを呼び出すとどうなるか

会社にて、インフラ屋さんからアプリケーション屋さんまでわりと多分野の数人が集まって「ふつうの Linux プログラミング」という本を輪読しています。各章、それぞれのメンバーが知っていることと知らないことがうまくばらけていて、良い輪読になっています。

また、分野違いの人ならではの視点からの疑問や知識が輪読中に飛び出してきて、なかなか有意義です。業務経験〜10 年くらいの人たちで寄ってたかって読むと良い本ではないかなと思いますので、ぜひ読んでみてください。

[amazon template=wishlist&asin=4797386479]

さて、この本の第 10 章の練習問題には「ファイルを open() して、close() する前にそのファイルを rename() すると何が起きるでしょうか。unlink() はどうか、別のファイルを rename() するとどうなるか、実験して調べなさい」(230p.より引用)というものがあります。

この問題をみたときに私自身は logrotate などの設定をした...

Read More

ストレージとファイルシステム

Linux のしくみの第7章をよみつつ、気になりどころをまとめたり、手元のマシンで実験したりしてみました。

[amazon template=wishlist&asin=477419607X]

ファイルシステムをなぜ使うのか

  • データの位置と内容の対応関係を管理したい
    • ストレージに記録されているのはあたりまえではあるが基本的にはデータの列
    • したがって、0番地から100番地には秘密のメモ、101番地から259番地はメールなどといった具合に、データと内容の対応関係を覚えていなければならない
    • この役割を担うのがファイルシステム
  • 複数の用途で使われるシステムに対して、用途に応じてディスク割り当てを絞りたい
    • システムタスク動作中に、ディスクが枯渇してしまうとシステムに深刻な影響が発生するが、クォータをわけるとシステム動作に必要な領域を仕組みで確保できる
    • また特定のユーザーが大量にディスクを消費して、他のユーザーの利用に支障がでることを防ぎたいなど(ext4, XFS のユーザークォータ、...
Read More

プロセスはどのようにスケジューリングされるのか

Linux のしくみの プロセススケジューラの章の内容、まあそうですよね...と思いつつ実際に手元マシンで実験してみたことはなかったのでやってみました。ついでに、たまたま気が向いたので結果をグラフ化してまとめておきました。gnuplot 使うの 4 年ぶり以上だ...。

[amazon template=wishlist&asin=477419607X]

実験内容

  • 複数のプロセスを生成して、それぞれのプロセスにおいてループを回して、ユーザーモードの負荷をかけたとき、どのように各プロセスが実行されるかを観察する
    • 測定の際は、複数の論理 CPU にまたがって実行されないよう taskset コマンドで実行する論理 CPU を指定する
  • 実際に本に書かれていたことが正しいか自分の環境で実験してみた
  • 本のコードは、わりと真面目に良い感じの実験結果が得られるような処理やエラー処理が丁寧に書かれていた
    • 写経が面倒なので、本質的なふるまいはかわらないように適当にコードを書いて実験してみた
    • 雑なコード...
Read More

コンピュータシステムとプロセスの概要

Linux のしくみを読んで、気になった点、ちょっと深い情報が欲しいなと思い調べた点、ポイントとしてまとめておきたいと思った点、実際に自分の手を動かしてやってみた実験結果などをメモ。

[amazon template=wishlist&asin=477419607X]

コンピュータシステムの概要

  • 種類が同じデバイスは、デバイスドライバを通して同じインターフェースで操作
  • CPU やメモリなどリソースはカーネルが管理している
    • プロセス管理システム
    • プロセススケジューラ
    • メモリ管理システム
    • デバイスドライバ
  • ストレージはデバイスドライバを通じて直接命令することができるが、通常はファイルシステムを介してアクセスする
    • ファイルシステム

CPU のモード遷移

  • CPU の動作モードにはユーザーモードとカーネルモードがある
  • プロセスは通常ユーザーモードで動作しているが、システムコールが発行されると、CPU に割り込みというイベントが発生し、これによりカーネルモードに遷移...
Read More

GNU-Coreutils touch コマンドの実装を読む

<p> 基本的に <code>utime(2)</code> を使えば良さそうなので、実装が楽そうだし、自分で書いて見つつ、GNU-Coreutils の実装を眺めてみるかなという気持ちになったので挑戦。<code>utime(2)</code> は次のようなインターフェースを持っている。</p>
#include <sys/types.h>
#include <utime.h>

int utime(const char *path, struct utimbuf *buf);

struct utimbuf {
    time_t actime;
    time_t modtime;
}
<h3>基本的な実装</h3> <p>単純に actime と modtime を更新してやればよいので、次のように書けば良さそう</p>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <utime.h>

int main(int...
Read More

Copyright © 53ningen.com