- 投稿日:2019-01-27T22:22:14+09:00
複数NICマシンでのルーティング設定(static route)
はじめに
例えば新しいパソコンを買ってきて家でネットワークにつなぐとき、SSIDとパスワードを入力してつなぐ。DHCPを指定すれば、接続に必要な情報は勝手に登録されるため、IPやデフォルトゲートウェイなどを意識して設定することはない。しかし、仕事で扱うパソコン等であれば、NICを複数枚持っているようなケースも存在する。
昨今色々なスクリプト言語やIDEによってアプリ開発のハードルは下がったように感じるが、ネットワークはまだまだ苦手な人が多い。今回は、特に新しくサーバや端末に固定IPを振って接続するケースで、どうすればよいかをまとめる。
ネットワーク設定の方法
やりがちな間違い
「パソコンにIPを設定する」=「IPやサブネットマスクやデフォルトゲートウェイを設定する」で概ね間違っていないが、複数のNICに対してデフォルトゲートウェイを設定してはいけない。複数のNICにデフォルトゲートウェイを設定してしまうとネットワークが不安定になり、通信ができなくなってしまう。
備考:開発する際の注意
仮に各NICにデフォルトゲートウェイを登録していても、他のNICが有効になっていなければ通信できてしまうこともある。例えば、個別テストのために、ひとつずつケーブルを突き刺した場合である。こうしてテストした場合、いざ全部のケーブルを接続した時点で、全部のNICに設定されたデフォルトゲートウェイが読み込まれ、結果ネットワークが不安定になる。個別の通信試験の段階から、実際に使用するすべてのNICを有効にして望むことが望ましい。
ルーティングの方法:Static Route
異なるネットワークのIPにアクセスするときの出口として必要なのがデフォルトゲートウェイであり、そもそも同じネットワークのIPとしか通信しない場合、デフォルトゲートウェイさえ必要ない。しかし、通常はデフォルトゲートウェイでいいが、特定のサブネットに対しては別のIPを経由したい場合がある。こういうケースでは、static routeを使う。
想定するケース
以下のケースを想定する。
- パソコンの設定
- NIC A
- IP: 192.168.1.10/24
- Gateway: 192.168.1.1/24
- NIC B
- IP: 10.20.30.40/24
- ルーティングについて
- 他のネットワークに通信するとき、通常は192.168.1.1/24を経由する(デフォルトゲートウェイ)
- ただし、サブネット10.50.60.0/24に対しては、10.20.30.50/24(例えばL3スイッチ)を経由したい
このとき、10.50.60.0/24への接続を10.20.30.50/24を経由するようstatic routeで指定する。
Windowsの場合
コマンドプロンプトで
routeコマンドを使用する。$ route add 10.50.60.0/24 mask 255.255.255.0 10.20.30.50削除するときは次のように、
addをdeleteにすれば良い。$ route delete 10.50.60.0/24 mask 255.255.255.0 10.20.30.50この設定をずっと有効にする(再起動してもこの設定が有効になる)ためには、
-pオプションを使用する。$ route -p add 10.50.60.0/24 mask 255.255.255.0 10.20.30.50設定がうまくできたかどうかは、
$ route printで確認できる。
Linux(RHEL)の場合
RHEL(CentOS)の場合、
routeコマンド(ip route)で追加するか、/etc/sysconfig/network-script/route-eth[x]ファイルに記述する(xは、NICに対応するethに合わせて数字を入れる)。今回は後者を紹介する。上記の設定の場合、各ファイルには次のように設定してあるとする。
eth0が192.168.1.10/24のNIC A, eth1が10.20.30.40/24のNIC Bである。/etc/sysconfig/network/ifcfg-eth0DEVICE=eth0 BOOTPROTO=none ONBOOT=yes NETMASK=255.255.255.0 IPADDR=192.168.1.10 GATEWAY=192.168.1.1/etc/sysconfig/network/ifcfg-eth1DEVICE=eth1 BOOTPROTO=none ONBOOT=yes NETMASK=255.255.255.0 IPADDR=10.20.30.40このとき、eht1用(IP=10.20.30.40)に対するファイル
/etc/sysconfig/network-script/route-eth1を追加する。/etc/sysconfig/network-script/route-eth110.50.60.0/24 via 10.20.30.50その後、ネットワークの再起動を行う。
# service network restartおまけ
以上でstatic routeの設定は終わる。最後に、通信するサブネットがごくごく限られているなら、デフォルトゲートウェイを設定せずに、明示的にstatic routeだけにするのもアリだと考える。
- 投稿日:2019-01-27T21:39:59+09:00
ファイルサーバーの内容をtreeコマンドで一覧に
はじめに
社内で他方面から仕事の依頼を受けたり、いくつものversionをもつ企画書を扱ったりで、自然とフォルダの中が汚くなっていくことにストレスを感じることありませんか。というか共有フォルダとか、もはや命名ルールとかあっても汚くなりますよね。
あのフォルダどこだっけ。で困りませんか?
ということで
綺麗にするためには、まずは現状を知ることが大事ですね。今回は現状を知ることだけを記事にします。
やり方
共有ファイルに接続する(winとmac両方と載せていきます。)
> net use \\server01 $ set use \\server01中身を見てみる
> dir \\server01 $ ls \\server01> tree \\server01 $ tree \\server01txtファイルに内容を書き込む
> tree \\server01 > test.txt $ tree \\server01 > test.txtおわり
txtファイルの内容を元に、階層構造の整理を行うきっかけになりました
- 投稿日:2019-01-27T19:58:24+09:00
Oracle Cloud(OCI)のリージョン内yumリポジトリを使ってみた
リージョン内yumリポジトリって?
- Oracle Cloud Infrastructure(OCI)では、Oracle Linuxのyumリポジトリのミラーがリージョン内に用意されているようです。
- これを使うと速くていいね、とのこと
※Service Gatewayを介してプライベート接続できるとかそういう話では(まだ)ない- ココに書いてありました
使えるようにする
既存のリポジトリを退避
[opc@testinstance ~]$ cd /etc/yum.repos.d [opc@testinstance yum.repos.d]$ ll total 36 -rw-r--r--. 1 root root 17684 Jan 11 02:55 public-yum-ol7.repo -rw-r--r--. 1 root root 15423 Dec 17 19:41 public-yum-ol7.repo.orig # 名前変更 [opc@testinstance yum.repos.d]$ sudo mv public-yum-ol7.repo public-yum-ol7.repo.bak [opc@testinstance yum.repos.d]$ ll total 36 -rw-r--r--. 1 root root 17684 Jan 11 02:55 public-yum-ol7.repo.bak # <--★変わってる -rw-r--r--. 1 root root 15423 Dec 17 19:41 public-yum-ol7.repo.origインスタンスのあるリージョンのリポジトリミラーを取ってくる
# 自インスタンスのいるリージョンを調べてREGION変数にいれる [opc@testinstance yum.repos.d]$ export REGION=`curl http://169.254.169.254/opc/v1/instance/ -s | jq -r '.region'| cut -d '-' -f 2` [opc@testinstance yum.repos.d]$ echo $REGION phx # リージョンのリポジトリを取ってくる [opc@testinstance yum.repos.d]$ sudo -E wget http://yum-$REGION.oracle.com/yum-$REGION-ol7.repo --2019-01-27 10:40:57-- http://yum-phx.oracle.com/yum-phx-ol7.repo Resolving yum-phx.oracle.com (yum-phx.oracle.com)... 129.146.100.180 Connecting to yum-phx.oracle.com (yum-phx.oracle.com)|129.146.100.180|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 17396 (17K) [application/octet-stream] Saving to: ‘yum-phx-ol7.repo’ 100%[======================================>] 17,396 --.-K/s in 0s 2019-01-27 10:40:57 (113 MB/s) - ‘yum-phx-ol7.repo’ saved [17396/17396] # 追加されていることを確認 [opc@testinstance yum.repos.d]$ ll total 56 -rw-r--r--. 1 root root 17684 Jan 11 02:55 public-yum-ol7.repo.bak -rw-r--r--. 1 root root 15423 Dec 17 19:41 public-yum-ol7.repo.orig -rw-r--r--. 1 root root 17396 Dec 14 22:26 yum-phx-ol7.repo # <--★取ってこれた※最初のコマンドでなぜリージョン名が取ってこれるのかは以下の記事で説明しました
「Oracle Cloud(OCI)の自インスタンスの情報を取得する方法」
※sudoの"-E"オプションは、環境変数を引き継がせるためのもの($REGIONを渡すため)ol7_oci_includedリポジトリの有効化
# 取ってきたばかりの状態でどうなっているか確認 [opc@testinstance yum.repos.d]$ sed -n 491,496p yum-phx-ol7.repo [ol7_oci_included] name=Oracle Software for OCI users on Oracle Linux $releasever ($basearch) baseurl=http://yum-phx.oracle.com/repo/OracleLinux/OL7/oci/included/$basearch/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle gpgcheck=1 enabled=0 # <--★デフォルトでは無効化されている # リポジトリを指定して有効化 [opc@testinstance yum.repos.d]$ sudo yum-config-manager --enable ol7_oci_included Loaded plugins: langpacks ============================ repo: ol7_oci_included ============================ [ol7_oci_included] async = True bandwidth = 0 base_persistdir = /var/lib/yum/repos/x86_64/7Server baseurl = http://yum-phx.oracle.com/repo/OracleLinux/OL7/oci/included/x86_64/ cache = 0 cachedir = /var/cache/yum/x86_64/7Server/ol7_oci_included check_config_file_age = True compare_providers_priority = 80 cost = 1000 deltarpm_metadata_percentage = 100 deltarpm_percentage = enabled = 1 enablegroups = True exclude = failovermethod = priority ftp_disable_epsv = False gpgcadir = /var/lib/yum/repos/x86_64/7Server/ol7_oci_included/gpgcadir gpgcakey = gpgcheck = True gpgdir = /var/lib/yum/repos/x86_64/7Server/ol7_oci_included/gpgdir gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle hdrdir = /var/cache/yum/x86_64/7Server/ol7_oci_included/headers http_caching = all includepkgs = ip_resolve = keepalive = True keepcache = False mddownloadpolicy = sqlite mdpolicy = group:small mediaid = metadata_expire = 21600 metadata_expire_filter = read-only:present metalink = minrate = 0 mirrorlist = mirrorlist_expire = 86400 name = Oracle Software for OCI users on Oracle Linux 7Server (x86_64) old_base_cache_dir = password = persistdir = /var/lib/yum/repos/x86_64/7Server/ol7_oci_included pkgdir = /var/cache/yum/x86_64/7Server/ol7_oci_included/packages proxy = False proxy_dict = proxy_password = proxy_username = repo_gpgcheck = False retries = 10 skip_if_unavailable = False ssl_check_cert_permissions = True sslcacert = sslclientcert = sslclientkey = sslverify = True throttle = 0 timeout = 30.0 ui_id = ol7_oci_included/x86_64 ui_repoid_vars = releasever, basearch username = # 確認 [opc@testinstance yum.repos.d]$ sed -n 491,496p yum-phx-ol7.repo [ol7_oci_included] name=Oracle Software for OCI users on Oracle Linux $releasever ($basearch) baseurl=http://yum-phx.oracle.com/repo/OracleLinux/OL7/oci/included/$basearch/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle gpgcheck=1 enabled=1 <--★有効化された「使ってみた」の部分は次のエントリで。
> Oracle Cloud(OCI)のIaaSからDbaaSへSQLPlusで接続してみた参考
- Oracle Instant Client RPMs Now Available on Oracle Linux Yum Servers in OCI
- How to connect to Oracle Linux Yum Server
> Connecting To Yum Mirrors in Oracle Cloud Infrastructure (OCI)以上
- 投稿日:2019-01-27T19:26:50+09:00
サーバー側でyarn自体のバージョンをあげる
前段
かつてはyarn自体のバージョンをアップデートするコマンドとして、
yarn self-updateがあったようです。
https://yarnpkg.com/lang/ja/docs/cli/self-update/しかし、残念ながらこのコマンドは利用できないので、別の方法を取らざるえない様子。
ローカルのyarnはbrewで入れていたので、さっくり上がったものの、問題はサーバー側。
調べた限り、サーバー側でyarnのアップデートをしている記事が少なかったので、症例報告としてこの記事を書きます。
下記手順が安全であることや正規の方法であることを保証できませんので、そのつもりでお願いします。私の環境では yarn 0.27.5→1.13.0のアップデートを実施しました。(Amazon Linax)
npmでyarnを入れた場合
私の環境では、後述の理由でnpmを使わずyarnがインストールされていました。
npmで導入した場合、こちらの記事が参考になりそうです。
yarn自体のアップグレードをするyumでyarnを入れた場合
yarn公式ではnpmを使ってyarnを導入することを非推奨としているようです。
注意: npm から Yarn をインストールすることは一般的にはお勧めしません。 Node ベースのパッケージマネージャで Yarn をインストールする場合は、パッケージは署名されておらず、整合性のチェックはベーシックな SHA1 ハッシュのみで行われており、システム全体にまたがるアプリケーションをインストールする場合にはセキュリティリスクとなります。
これらの理由から、使用中の OS に最も適した方法で Yarn をインストールすることを強くお勧めします。
https://yarnpkg.com/ja/docs/install#alternatives-stable今回私が対応した環境でもこの記述に準じて行われており
yarnがyumを使って導入されていました。
なのでsudp yum update yarnでいけるかな...と試して見たんですが、アップデートは走るものの、サーバーを再起動してもversionは変わらないままだったので、下記の方法でアップデートを行いました。ここからは2ステップででアップデートの方法を書きます。
1.古いyarnをアンインストール
2.新しいyarnをインストール1.古いyarnをアンインストール
基本的には下記で導入されたものを打ち消す方向で動くことになります。
https://yarnpkg.com/ja/docs/install#centos-stableまずyarnがどこにあるか調べます。調べるだけです。
$which yarnyum経由でyarnをアンインストールします。
$sudo yum remove yarnyarnがアンインストールされていることを確認するためにyarnのバージョンを表示を試してみます。
$yarn --version①コンソールから「そんなコマンド無いよ」的なことが言われた場合
yarnのアンインストールに成功しています。
次に、かつてyarnをインストールするときにダウンロードしたであろう、yarn.repoを削除します。$cd /etc/yum.repos.d/上記フォルダの中に
yarn.repoが入っていたのでこれを削除しました。$sudo rm -f yarn.repo②平然とyarnのバージョンが帰ってきた場合
yarnのアンインストールが完了していなさそうです。
困ってしまったのでyarnの公式からもリンクされている下記issueを参考にして進めました。
https://github.com/yarnpkg/yarn/issues/1139#issuecomment-441168002まず先ほど
$which yarnで調べた場所を見にいきます。そこに入っているyarnとyarnpkgというファイルを削除してみます。$rm -f yarnpkg $rm -f yarnこれで
$yarn --versionしてもコマンドが通らなくなりました。
yarnが通らなくなったことが確認できたので上記の2ファイルが入っていたディレクトリを削除します。
私の場合.yarnにyarnとyarnpkgが入っていたので削除します。$rm -rf .yarn次に、かつてyarnをインストールするときにダウンロードしたであろう、yarn.repoを削除します。
$cd /etc/yum.repos.d/上記フォルダの中に
yarn.repoが入っていたのでこれを削除しました。$sudo rm -f yarn.repo2.新しいyarnをインストール
基本的に公式のインストールを再びなぞります。
https://yarnpkg.com/ja/docs/install#centos-stable$curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo $sudo yum install yarn $yarn --version 1.13.0であることを確認おわりに
上記でうまくいってしまいましたが、ビギナーズラックだったかもしれません。
あくまで一例として紹介させていただきます。
- 投稿日:2019-01-27T17:04:40+09:00
Microsoft Edge での Kaliダウンロード と VirtualBox での Kali起動 が失敗した話 と その解決方法
はじめに
ハッキング・ラボで体験学習するにあたり、導入にて少々つまづきました。その際の解決方法記事です。
本記事と同様なトラブルで悩んでいる方は、環境によってWindows設定やBIOS設定の名称が違うことがあると思います。適宜読み替えたり、似た機能を推測してトラブル解決へ向けて試行錯誤して頂ければと思います。
体験学習導入でつまづいてしまい、そのまま諦めてしまう方が少しでも減ってくれれば幸いです。
体験学習環境
項目 スペックなど PC Lenovo V310 CPU Intel Corei3-6006U 2.00GHz BIOS(UEFI) Phoenix SecureCore Technology OS Windows10 Home メモリ 8GB(オンボード4GB + 増設4GB) ブラウザ1 Microsoft Edge 17.17134 ブラウザ2 Google Chrome 71.0.3578.98 つまづきポイント
Microsoft EdgeでKali Linuxのダウンロードが行えない
Kali Linux Vbox 64 Bit Ovaファイルのダウンロードで、
Microsoft Edgeはブラウザ上にOVAファイルの中身を表示してしまいダウンロードが行えませんでした。
解決方法
単純ですが、
Chromeを利用してダウンロードを行いました。VirtualBoxでKali Linuxが起動しない
Kali Linuxダウンロード後、VirtualBoxへのインポートを行いKali Linuxを起動すると、VitualBoxからエラーメッセージが表示されたり、Kali Linuxが黒画面のまま先に進まないような状態となりました。
解決方法
Windows10機能の設定とBios機能の設定が影響していました。著者環境でKali Linuxが起動した設定内容を記載します。
種類 設定名 設定内容 Windows10 Windows ハイパーバイザプラットフォーム 未チェック BIOS Intel Virtual Technology Enabled
Windows10 - ハイパーバイザプラットフォーム -
[コントロールパネル]-->[プログラム]-->[プログラムと機能]-->[Windowsの機能の有効化または無効化]から[Windows ハイパーバイザプラットフォーム]設定を行います。
BIOS - Intel Virtual Technology -
[Windows10起動状態からShiftキー押しながら再起動]-->[トラブルシューティング]-->[詳細オプション]-->[UEFI ファームウェア設定]-->[再起動する]からBIOSに移行させ[Intel Virtual Technology]設定を行います。
※BIOS起動方法はいくつかあるようですが難なくBIOS起動行えた方法を記載
- Windows ハイパーバイザプラットフォーム と Intel Virtual Technology 設定の関係性
kali Linux 起動結果 Windows ハイパーバイザプラットフォーム BIOS Intel Virtual Technology 状態 OK 未チェック Enabled 正常起動 NG 未チェック Disabled 仮想マシン"Kali-Linux-2018.4-vbox-amd64"のセッションを開けませんでした NG チェック Enabled 黒画面のまま進まない NG チェック Disabled 仮想マシン"Kali-Linux-2018.4-vbox-amd64"のセッションを開けませんでした 最後に
序盤でつまづきそうな人に少しでもお役に立てる情報であればと思います。
- 投稿日:2019-01-27T14:56:29+09:00
linuxの perf top は簡単なので日常的に使いたい
linuxカーネルにはパフォーマンス計測のための機能がいくつか備わっています。その中でもperf topは使うのが簡単です。日常的にこれを使っていれば、あるプロセスの負荷が異常に高まった場合にその差に気がつくことができます。
インストール
perf topは perf の一部なので、perfをインストールします。perfはカーネルのリリースに強く依存しているので、パッケージがカーネルのリリースごとに分かれています。
ubuntuの場合では、以下のようにすれば適切なパッケージをインストールできます。
sudo apt install linux-tools-`uname -r`使い方
システム全体を計測するとき
sudo perf topシステム全体をおおまかに計測するとき (プログラム、ライブラリごとにまとめて表示)
sudo perf top --sort comm,dso特定のプロセスに注目して計測するとき (例: pid=5749 )
sudo perf top -p 5749表示更新間隔を10秒にする。(表示内容をコピべするには、このほうがやりやすい)
sudo perf top -d 10
- 投稿日:2019-01-27T10:42:24+09:00
【C言語】俺の機関車は遅すぎる ~slコマンドを作ってみた~
【概要】
ターミナルで機関車を動かすことができる
slコマンドを作ってみました。
ただし、オプションまでの実装はしていません。
また、俺の機関車は本家の機関車よりスピードが遅いです(作成後に本家と比較したら遅くて、でもこの方が面白いかなと・・・)。
タイトルはこちらの記事のオマージュです → 俺のlsが遅すぎる本家のコードは一切見ないで、本家の実行結果だけを繰り返し見て作成しました。
(本家のコードはネットにあるかどうか知りません)
[追記] fujitanozomuさんからコメント頂き、下記GitHubにありました。
https://github.com/mtoyoda/sl【準備】
コードを実行するときは
curses.hが必要になります。
インストール方法は下記サイトを参考にしました。
Linux Error: curses.h: No such file or directory Problem Solution【環境】
[vagrant@vagrant-centos65 sl_command]$ cat /etc/centos-release CentOS release 6.5 (Final)【コード】
コンパイルするときは
gcc -o sl sl.c -lcursessl.c#include <stdio.h> #include <curses.h> #include <string.h> void printSL(); int main(int argc, char *argv[]) { // 初期化 initscr(); // カーソルを表示しない curs_set(0); // キー入力された文字を表示しない noecho(); // バッファを使用しない cbreak(); // 機関車出力 printSL(); // 端末制御を終了 endwin(); return 0; } void printSL() { int count = 1; int slScrInCol = 0, slScrOutCol = 0; int lineNum = 0; int colNum = 0; // 現在の画面のサイズ取得 // curses.hで定義されているLINES, COLSだとターミナルのサイズを変更しても // 初期の画面サイズとなってしまうため現在の画面サイズを取得する // colNumは必要ないため、以後使用しない getmaxyx(stdscr, lineNum, colNum); // 機関車を画面中央に表示するため lineNum /= 4; char str[24][1000] = {'0'}; int maxLen = strlen(" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/"); // マジックナンバー6は微調整用 while(COLS + maxLen + 6 - slScrInCol != 0) { strncpy(str[0], " ( ) (@@) ( ) (@) () @@ O @ O @ O", slScrInCol); strncpy(str[1], " (@@@)", slScrInCol); strncpy(str[2], " ( )", slScrInCol); strncpy(str[3], " (@@@@)", slScrInCol); strncpy(str[4], " ( )", slScrInCol); strncpy(str[5], " (@@) ( ) ( ) () (@) @@ @ O @ O @", slScrInCol); strncpy(str[6], " ( )", slScrInCol); strncpy(str[7], " (@@@@)", slScrInCol); strncpy(str[8], " ( )", slScrInCol); strncpy(str[9], " (@@@)", slScrInCol); // 煙突の煙の出力 // 煙と車輪が動く速度は違うため、煙のは車輪に比べて遅く表示する if (count <= 4) { mvprintw(lineNum, COLS-slScrInCol, str[0]); mvprintw(lineNum+1 ,COLS-slScrInCol, str[1]); mvprintw(lineNum+2 ,COLS-slScrInCol, str[2]); mvprintw(lineNum+3 ,COLS-slScrInCol, str[3]); mvprintw(lineNum+4 ,COLS-slScrInCol, ""); mvprintw(lineNum+5 ,COLS-slScrInCol, str[4]); } else { mvprintw(lineNum, COLS-slScrInCol, str[5]); mvprintw(lineNum+1 ,COLS-slScrInCol, str[6]); mvprintw(lineNum+2 ,COLS-slScrInCol, str[7]); mvprintw(lineNum+3 ,COLS-slScrInCol, str[8]); mvprintw(lineNum+4 ,COLS-slScrInCol, ""); mvprintw(lineNum+5 ,COLS-slScrInCol, str[9]); } strncpy(str[10], " ==== ________ ___________", slScrInCol); strncpy(str[11], " _D _| |_______/ \\__I_I_____===__|_________|", slScrInCol); strncpy(str[12], " |(_)--- | H\\________/ | | =|___ ___| _________________", slScrInCol); strncpy(str[13], " / | | H | | | | ||_| |_|| _| \\_____A", slScrInCol); strncpy(str[14], " | | | H |__--------------------| [___] | =| |", slScrInCol); strncpy(str[15], " | ________|___H__/__|_____/[][]~\\_______| | -| |", slScrInCol); strncpy(str[16], " |/ | |-----------i_____I [][] [] D |=======|____|________________________|_", slScrInCol); // 車輪より上部の出力 mvprintw(lineNum+6 , COLS-slScrInCol, str[10]); mvprintw(lineNum+7 , COLS-slScrInCol, str[11]); mvprintw(lineNum+8 , COLS-slScrInCol, str[12]); mvprintw(lineNum+9 , COLS-slScrInCol, str[13]); mvprintw(lineNum+10, COLS-slScrInCol, str[14]); mvprintw(lineNum+11, COLS-slScrInCol, str[16]); mvprintw(lineNum+12, COLS-slScrInCol, str[10]); strncpy(str[17], "__/ =| o |=-O=====O=====O=====O\\ ____Y___________|__|__________________________|_", slScrInCol); strncpy(str[18], " |/-=|___|= || || || |_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol); strncpy(str[19], " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/", slScrInCol); strncpy(str[20], "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_", slScrInCol); strncpy(str[21], " |/-=|___|=O=====O=====O=====O |_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol); strncpy(str[22], " \\_/ \\_O=====O=====O=====O/ \\_/ \\_/ \\_/ \\_/ \\_/", slScrInCol); strncpy(str[23], " |/-=|___|= O=====O=====O=====O|_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol); // 車輪部分の出力 if (count % 4 == 1) { mvprintw(lineNum+13, COLS-slScrInCol, str[17]); mvprintw(lineNum+14, COLS-slScrInCol, str[18]); mvprintw(lineNum+15, COLS-slScrInCol, str[19]); } else if (count % 4 == 2) { mvprintw(lineNum+13, COLS-slScrInCol, str[20]); mvprintw(lineNum+14, COLS-slScrInCol, str[21]); mvprintw(lineNum+15, COLS-slScrInCol, str[19]); } else if (count % 4 == 3) { mvprintw(lineNum+13, COLS-slScrInCol, str[20]); mvprintw(lineNum+14, COLS-slScrInCol, str[18]); mvprintw(lineNum+15, COLS-slScrInCol, str[22]); } else { mvprintw(lineNum+13, COLS-slScrInCol, str[20]); mvprintw(lineNum+14, COLS-slScrInCol, str[23]); mvprintw(lineNum+15, COLS-slScrInCol, str[19]); } // countの数を大きくしないようにするため if (count / 8 == 1) { count = 1; } else { count++; } // 機関車の先頭が画面左から出ていくときの画面出力 if (COLS - slScrInCol <= 0) { if (count <= 4) { mvprintw(lineNum, 0, &str[0][slScrOutCol]); mvprintw(lineNum+1 ,0, &str[1][slScrOutCol]); mvprintw(lineNum+2 ,0, &str[2][slScrOutCol]); mvprintw(lineNum+3 ,0, &str[3][slScrOutCol]); mvprintw(lineNum+4 ,0, ""); mvprintw(lineNum+5 ,0, &str[4][slScrOutCol]); } else { mvprintw(lineNum, 0, &str[5][slScrOutCol]); mvprintw(lineNum+1 ,0, &str[6][slScrOutCol]); mvprintw(lineNum+2 ,0, &str[7][slScrOutCol]); mvprintw(lineNum+3 ,0, &str[8][slScrOutCol]); mvprintw(lineNum+4 ,0, ""); mvprintw(lineNum+5 ,0, &str[9][slScrOutCol]); } mvprintw(lineNum+6 , 0, &str[10][slScrOutCol]); mvprintw(lineNum+7 , 0, &str[11][slScrOutCol]); mvprintw(lineNum+8 , 0, &str[12][slScrOutCol]); mvprintw(lineNum+9 , 0, &str[13][slScrOutCol]); mvprintw(lineNum+10, 0, &str[14][slScrOutCol]); mvprintw(lineNum+11, 0, &str[16][slScrOutCol]); mvprintw(lineNum+12, 0, &str[10][slScrOutCol]); if (count % 4 == 1) { mvprintw(lineNum+13, 0, &str[17][slScrOutCol]); mvprintw(lineNum+14, 0, &str[18][slScrOutCol]); mvprintw(lineNum+15, 0, &str[19][slScrOutCol]); } else if (count % 4 == 2) { mvprintw(lineNum+13, 0, &str[20][slScrOutCol]); mvprintw(lineNum+14, 0, &str[21][slScrOutCol]); mvprintw(lineNum+15, 0, &str[19][slScrOutCol]); } else if (count % 4 == 3) { mvprintw(lineNum+13, 0, &str[20][slScrOutCol]); mvprintw(lineNum+14, 0, &str[18][slScrOutCol]); mvprintw(lineNum+15, 0, &str[22][slScrOutCol]); } else { mvprintw(lineNum+13, 0, &str[20][slScrOutCol]); mvprintw(lineNum+14, 0, &str[23][slScrOutCol]); mvprintw(lineNum+15, 0, &str[19][slScrOutCol]); } slScrOutCol++; } slScrInCol++; // 60ミリ秒待つ usleep(6 * 10000); refresh(); clear(); } }【実行結果】
【俺の機関車】
【本家の機関車】
【参考サイト】
- 投稿日:2019-01-27T10:05:55+09:00
Arch インスコメモ
arch liveのusbメモリからThinkpad x1 carbon 6genにarchをインスコした時の備忘録(UEFIブート)。なお、winは消す
live USBメディアの作成
公式サイト( https://www.archlinux.org/download/ )からISOのDL
ISOのチェックサム$ gpg --keyserver pgp.mit.edu --keyserver-options auto-key-retrieve --verify archlinux-2019.01.01-x86_64.iso.sig gpg: assuming signed data in 'archlinux-2019.01.01-x86_64.iso' gpg: Signature made Wed 02 Jan 2019 12:23:53 AM JST gpg: using RSA key 4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC gpg: requesting key 7F2D434B9741E8AC from hkp server pgp.mit.edu \gpg: key 7F2D434B9741E8AC: 31 signatures not checked due to missing keys gpg: key 7F2D434B9741E8AC: public key "Pierre Schmitz <pierre@archlinux.de>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 gpg: Good signature from "Pierre Schmitz <pierre@archlinux.de>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4AA4 767B BC9C 4B1D 18AE 28B7 7F2D 434B 9741 E8ACデバイスの確認(
sdb1が今回のターゲット)
マウントされていた場合はアンマウントする$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 13M 1 loop /snap/gnome-characters/124 loop1 7:1 0 14.5M 1 loop /snap/gnome-logs/45 loop2 7:2 0 15.1M 1 loop /snap/aws-cli/135 loop3 7:3 0 13M 1 loop /snap/gnome-characters/139 loop4 7:4 0 42.1M 1 loop /snap/gtk-common-themes/701 loop5 7:5 0 87.9M 1 loop /snap/core/5662 loop6 7:6 0 2.3M 1 loop /snap/gnome-calculator/238 loop7 7:7 0 147.3M 1 loop /snap/skype/66 loop8 7:8 0 2.3M 1 loop /snap/gnome-calculator/260 loop9 7:9 0 34.6M 1 loop /snap/gtk-common-themes/818 loop10 7:10 0 89.5M 1 loop /snap/core/6130 loop11 7:11 0 140.7M 1 loop /snap/gnome-3-26-1604/74 loop12 7:12 0 3.7M 1 loop /snap/gnome-system-monitor/57 loop13 7:13 0 140.9M 1 loop /snap/gnome-3-26-1604/70 sdb 8:16 1 7.5G 0 disk ├─sdb1 8:17 1 1.8G 0 part /media/mike/Ubuntu 18.04.1 LTS amd64 └─sdb2 8:18 1 2.3M 0 part nvme0n1 259:0 0 477G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi └─nvme0n1p2 259:2 0 476.4G 0 part /
dev/sdb1をアンマウントする$ umount /dev/sdb $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 13M 1 loop /snap/gnome-characters/124 loop1 7:1 0 14.5M 1 loop /snap/gnome-logs/45 loop2 7:2 0 15.1M 1 loop /snap/aws-cli/135 loop3 7:3 0 13M 1 loop /snap/gnome-characters/139 loop4 7:4 0 42.1M 1 loop /snap/gtk-common-themes/701 loop5 7:5 0 87.9M 1 loop /snap/core/5662 loop6 7:6 0 2.3M 1 loop /snap/gnome-calculator/238 loop7 7:7 0 147.3M 1 loop /snap/skype/66 loop8 7:8 0 2.3M 1 loop /snap/gnome-calculator/260 loop9 7:9 0 34.6M 1 loop /snap/gtk-common-themes/818 loop10 7:10 0 89.5M 1 loop /snap/core/6130 loop11 7:11 0 140.7M 1 loop /snap/gnome-3-26-1604/74 loop12 7:12 0 3.7M 1 loop /snap/gnome-system-monitor/57 loop13 7:13 0 140.9M 1 loop /snap/gnome-3-26-1604/70 sdb 8:16 1 7.5G 0 disk ├─sdb1 8:17 1 1.8G 0 part └─sdb2 8:18 1 2.3M 0 part nvme0n1 259:0 0 477G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi └─nvme0n1p2 259:2 0 476.4G 0 part /ISOを書き込む
$ sudo dd bs=4M if=archlinux-2019.01.01-x86_64.iso of=/dev/sdb status=progress && sync [sudo] password for mike: 150+1 records in 150+1 records out 631242752 bytes (631 MB, 602 MiB) copied, 105.399 s, 6.0 MB/sBIOSの設定
- セキュアブートをオフにする
Security > Secure boot > Secure boot > Disabled- USBメモリの起動優先順位を変更する
そしてLive USBから起動する。
Archのインスコ
ミラーサーバーの国の優先順位を変更
日本とアメリカだと10倍ぐらい速度の差があった# vi /etc/pacman.d/mirrorlist # 日本を最上位に移動する # pacman -Syu # ミラーリストを更新WiFiの設定
まずインターフェイスの確認
wから始まっているのが往々にして無線のネットワークインターフェイス# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:64:86:78:38 brd ff:ff:ff:ff:ff:ff 3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether 20:79:18:d2:ca:1c brd ff:ff:ff:ff:ff:ff
wlp2s0が対象のI/F
ore_oreという名前(任意)のプロファイルを作る# cp /etc/netctl/examples/wireless-wpa /etc/netctl/ore_ore # cat /etc/netctl/ore_ore Description='A simple WPA encrypted wireless connection' Interface=wlan0 Connection=wireless Security=wpa IP=dhcp ESSID='MyNetwork' # Prepend hexadecimal keys with \" # If your key starts with ", write it as '""<key>"' # See also: the section on special quoting rules in netctl.profile(5) Key='WirelessKey' # Uncomment this if your ssid is hidden #Hidden=yes # Set a priority for automatic profile selection #Priority=10
ore_oreプロファイルを修正する
変更するのは次の3点
- Interface: WifiのI/F(この場合は
wlp2s0)- ESSID: wifiのSSID
- Key: WifiのPW
# vi /etc/netctl/ore_ore # ゴニョゴニョ # cat /etc/netctl/ore_ore Description='A simple WPA encrypted wireless connection' Interface=wlp2s0 Connection=wireless Security=wpa IP=dhcp ESSID='XXX' # Prepend hexadecimal keys with \" # If your key starts with ", write it as '""<key>"' # See also: the section on special quoting rules in netctl.profile(5) Key='XXX' # Uncomment this if your ssid is hidden #Hidden=yes # Set a priority for automatic profile selection #Priority=10Wifiに接続する
pingが通れば成功# netctl start ore_ore # 数秒かかる # ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=121 time=8.90 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=121 time=10.1 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=121 time=10.4 ms ...パーテーションの設定
(U)EFIかどうか確認
ディレクトリが存在すればOK# ls /sys/firmware/efi/ config_table efivars esrt fw_platform_size fw_vendor runtime runtime-map systabドライブを探す
ThinkPad X1 carbonはPCIe SSDなのでインターフェイスの名前はnvme0n1で、後ろにp1のようにパーテーション番号がつく。$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 13M 1 loop /snap/gnome-characters/124 loop1 7:1 0 14.5M 1 loop /snap/gnome-logs/45 loop2 7:2 0 15.1M 1 loop /snap/aws-cli/135 loop3 7:3 0 13M 1 loop /snap/gnome-characters/139 loop4 7:4 0 42.1M 1 loop /snap/gtk-common-themes/701 loop5 7:5 0 87.9M 1 loop /snap/core/5662 loop6 7:6 0 2.3M 1 loop /snap/gnome-calculator/238 loop7 7:7 0 147.3M 1 loop /snap/skype/66 loop8 7:8 0 2.3M 1 loop /snap/gnome-calculator/260 loop9 7:9 0 34.6M 1 loop /snap/gtk-common-themes/818 loop10 7:10 0 89.5M 1 loop /snap/core/6130 loop11 7:11 0 140.7M 1 loop /snap/gnome-3-26-1604/74 loop12 7:12 0 3.7M 1 loop /snap/gnome-system-monitor/57 loop13 7:13 0 140.9M 1 loop /snap/gnome-3-26-1604/70 sdb 8:16 1 7.5G 0 disk ├─sdb1 8:17 1 1.8G 0 part /media/mike/Ubuntu 18.04.1 LTS amd64 └─sdb2 8:18 1 2.3M 0 part nvme0n1 259:0 0 477G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi └─nvme0n1p2 259:2 0 476.4G 0 part /UEFIブートなので、GPTパーテーションを作る
下のような感じで書き換える
EF00はEFIパーテーションHEX
8E00は linux LVM (logical volume manager) のHEX
なお、空欄ではEnterキーを押している$ gdisk /dev/nvme0n1 GPT fdisk (gdisk) version 1.0.4 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): y Command (? for help): n Partition number (1-128, default 1): First sector (34-1000215182, default = 2048) or {+-}size{KMGTP}: Last sector (2048-1000215182, default = 1000215182) or {+-}size{KMGTP}: +512MB Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI System' Command (? for help): n Partition number (2-128, default 2): First sector (34-1000215182, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-1000215182, default = 1000215182) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8E00 Changed type of partition to 'Linux LVM' Command (? for help): w # 最後のコマンドはy、全部書き換えるパーテーションの確認
$ fdisk -l /dev/nvme0n1 Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors Disk model: LENSE30512GMSP34MEAT3TA Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 07E88104-29C7-41AE-91AD-379E474EA1C7 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 1050623 1048576 512M EFI System /dev/nvme0n1p2 1050624 1000215182 999164559 476.4G Linux LVMLVMパーテーションの暗号化
LVMパーテーションの暗号化する
暗号はデフォのLUKSを使用する
パスフレーズは覚えておく# cryptsetup luksFormat /dev/nvme0n1p2 # ※p1ではないLVMの中に論理ボリュームを作成する
まずは、LVMを復号化して開く
main_partは任意のデバイスマッパーネームをつける# cryptsetup open --type luks /dev/nmve0n1p2 main_partLVMの中に物理ボリューム(PV)を作成
# pvcreate /dev/mapper/main_partPVの確認
# pvscan PV /dev/mapper/cryptlvm VG main_group lvm2 [476.43 GiB / 0 free] Total: 1 [476.43 GiB] / in use: 1 [476.43 GiB] / in no VG: 0 [0 ] # pvdisplay --- Physical volume --- PV Name /dev/mapper/cryptlvm VG Name main_group PV Size <476.44 GiB / not usable <3.32 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 121967 Free PE 0 Allocated PE 121967 PV UUID D9rfJy-SqUn-I6Ca-PzzO-eb79-E61t-fHkwmuボリュームグループ(VG)を作成
main_groupはVG名 (任意)vgcreate main_group /dev/mapper/main_partVGの確認
# vgscan Reading volume groups from cache. Found volume group "main_group" using metadata type lvm2 # vgdisplay --- Volume group --- VG Name main_group System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 476.43 GiB PE Size 4.00 MiB Total PE 121967 Alloc PE / Size 121967 / 476.43 GiB Free PE / Size 0 / 0 VG UUID LiXnT1-xe6V-dmpZ-r7fs-HZF4-14wT-VrFTy5論理ボリュームを(LV)作成
swapはメモリの半分(8GB)割り当てる
rootは64GB割り当てる
homeは残り全部lvcreate -L8G main_group -n swap lvcreate -L64G main_group -n root lvcreate -l 100%FREE main_group -n homeLVの確認
# lvscan ACTIVE '/dev/main_group/swap' [8.00 GiB] inherit ACTIVE '/dev/main_group/root' [64.00 GiB] inherit ACTIVE '/dev/main_group/home' [404.43 GiB] inherit # lvdisplay --- Logical volume --- LV Path /dev/main_group/swap LV Name swap VG Name main_group LV UUID 79nm1Z-BCbW-Rhra-tryB-7lR9-XsCv-1jHiQD LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:14:18 +0000 LV Status available # open 2 LV Size 8.00 GiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Logical volume --- LV Path /dev/main_group/root LV Name root VG Name main_group LV UUID FqcEYQ-0cUp-BMul-VxND-42Es-BHsE-Yj4zdB LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:14:50 +0000 LV Status available # open 1 LV Size 64.00 GiB Current LE 16384 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:2 --- Logical volume --- LV Path /dev/main_group/home LV Name home VG Name main_group LV UUID VlSY7x-8Q0O-UFQL-rnQT-05xp-inTH-QLCieR LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:15:09 +0000 LV Status available # open 1 LV Size 404.43 GiB Current LE 103535 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3 --- Logical volume --- LV Path /dev/main_group/swap LV Name swap VG Name main_group LV UUID 79nm1Z-BCbW-Rhra-tryB-7lR9-XsCv-1jHiQD LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:14:18 +0000 LV Status available # open 2 LV Size 8.00 GiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Logical volume --- LV Path /dev/main_group/root LV Name root VG Name main_group LV UUID FqcEYQ-0cUp-BMul-VxND-42Es-BHsE-Yj4zdB LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:14:50 +0000 LV Status available # open 1 LV Size 64.00 GiB Current LE 16384 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:2 --- Logical volume --- LV Path /dev/main_group/home LV Name home VG Name main_group LV UUID VlSY7x-8Q0O-UFQL-rnQT-05xp-inTH-QLCieR LV Write Access read/write LV Creation host, time archiso, 2019-01-22 13:15:09 +0000 LV Status available # open 1 LV Size 404.43 GiB Current LE 103535 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3フォーマットとマウント
LVをフォーマットする
マッピングされているので、次のような名前になる
/dev/mapper/VG名-LV名# mkfs.ext4 /dev/mapper/main_group-root # mkfs.ext4 /dev/mapper/main_group-homeスワップも
# mkswap /dev/mapper/main_group-swapLVをマウントする
/mnt/にマウントする# mount /dev/mapper/main_group-root /mnt/ # mkdir /mnt/home # mount /dev/mapper/main_group-home /mnt/home # swapon /dev/mapper/main_group-swapブートローダーをマウントする
# mkdir /mnt/boot/ # mount /dev/nvme0n1p1 /mnt/boot設定し終えるとブロックデバイスはこんな感じ
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 477G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot └─nvme0n1p2 259:2 0 476.4G 0 part └─cryptlvm 254:0 0 476.4G 0 crypt ├─main_group-swap 254:1 0 8G 0 lvm [SWAP] ├─main_group-root 254:2 0 64G 0 lvm / └─main_group-home 254:3 0 404.4G 0 lvm /homeArchのインスコ
baseとbase-develをインスコする
https://www.archlinux.jp/groups/x86_64/base/
https://www.archlinux.jp/groups/x86_64/base-devel/
このpacstrapコマンドでboot以外のフォルダも作られる# pacstrap /mnt/ base base-develマウントの設定ファイルを修正
システム起動時に自動的にマウントするため# genfstab -p /mnt >> /mnt/etc/fstabArchのインスコ (中で作業)
チェンジルートする
# arch-chroot /mnt32bitのインテルのドライバーを入れるため
Miltilibを有効化。下の2行をコメントアウトする# vi etc/pacman.conf [multilib] Include = /etc/pacman.d/mirrorlistインテルのマイクロコードをインスコ
# pacman -Sy intel-ucodeマイクロコードを確認 (のちのち再起動後確認できる)
# dmesg | grep microcode [ 1.703624] microcode: sig=0x806ea, pf=0x80, revision=0x9a [ 1.703917] microcode: Microcode Update Driver: v2.2.Linuxカーネルのコピーをインスコ
# pacman -S linux-headers linux-lts linux-lts-headersinitrdの設定
mkinitcpioはinitrd(initramfs)のイメージを作るためのスクリプト
下の様に修正する# vi /etc/mkinitcpio.conf HOOKS=(base udev autodetect keyboard keymap modconf block encrypt lvm2 filesystems fsck)initramfsを生成する
# mkinitcpio -p linux # mkinitcpio -p linux-lts # linux-lts をインスコした場合はブートローダーの設定
ローダーを作る
GRUBを使わずsystemd-bootを使用するbootctl --path=/boot/ installローダーの設定をする
下のように編集する# vi /boot/loader/loader.conf default arch timeout 3 editor 0arch.confを作成する
arch.confのXXXの伏せ字をblkidのコマンドのUUIDのIDの結果で埋める
PARTUUIDではないので注意する、またクォーテーションは含めない
vi だったらコマンドで (:r !blkid) で結果を読み込める# blkid /dev/nvme0n1p2: UUID="XXX" TYPE="crypto_LUKS" PARTLABEL="Linux LVM" PARTUUID="XXX2" # vi /boot/loader/entries/arch.conf title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img # intel マイクロコードを読み込む initrd /initramfs-linux.img # mkinitcpioで作成したimgを読み込む options cryptdevice=UUID=XXX:cryptlvm root=/dev/mapper/main_group-root quiet rw起動
# umount -R /mnt # shutdown -r now # # ~起動後~ # # rootでログインできればOK再起動後のArchの設定
WiFi
live USBと同じ
ミラーリスト
ミラーリストで日本の優先度を一番にする
# vi /etc/pacman.d/mirrorlist言語
localeの設定
# vi /etc/locale.gen en_US.UTF-8 UTF8 # ←をアンコメントアウト # localectl set-locale LANG=”en_US.UTF-8”時間
時間の同期
# hwclock --systohc --utchostname
host名の追加
echo archer > /etc/hostnamePacman
pacman.confに
ColorとILoveCandyを追加
プログレスバーがpacmanに変わる# vi/etc/pacman.conf # Misc options #UseSyslog Color #TotalDownload CheckSpace #VerbosePkgLists ILoveCandyユーザーの追加
rootのPW変更
# passwdSudoerの設定
wheelグループはどんなコマンドも許可# pacman -S sudo # visudo # 下の2行のコメントを外す ## Uncomment to allow members of group wheel to execute any command # wheel ALL=(ALL) ALL一般ユーザー追加
# useradd -m -G wheel -s /bin/bash mike # passwd mike # reboot # 一応mikeユーザーでログインできることを確認する一応仮想コンソール用ユーザーも追加する
mikeはGUI用のユーザーでnekoはCUI用
万が一mikeで問題が発生した時用に# useradd -m -G wheel -s /bin/bash neko # passwd nekoルートユーザーでログインすることを無効化する
$ sudo passwd -l rootYayのインスコ
$ sudo pacman -S git $ sudo pacman -S make fakeroot # NOTE: これが依存PKG $ git clone https://aur.archlinux.org/yay.git $ cd yay $ makepkg -siVirtual Console
keymap
capslockをctrl化する
https://wiki.archlinux.jp/index.php/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%AE%E7%89%B9%E5%88%A5%E3%81%AA%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%82%AD%E3%83%BC
もとのキーマップをコピーして新しい設定を作る# mkdir -p /usr/local/share/kbd/keymaps # cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/local/share/kbd/keymaps/ # gunzip /usr/local/share/kbd/keymaps/us.map.gzcapslockをctrlに変更
# vi /usr/local/share/kbd/keymaps/us.map ... keycode 58 = Control読み込み
# loadkeys /usr/local/share/kbd/keymaps/us.map起動時に読み込みにする場合
下を追記する# vi /etc/vconsole.conf ... KEYMAP=/usr/local/share/kbd/keymaps/us.mapX
タッチパッドのドライバー
libinputをインスコする
$ pacman -S xf86-input-libinputInstall
インテルドライバーのインスコ
# pacman -S xf86-video-intel lib32-intel-dri lib32-mesa lib32-libglXのインスコ
# pacman -S xorg-server xorg-xinit xorg-apps mesa xtermXが起動するか確認
# startxFont
元ネタ https://www.reddit.com/r/archlinux/comments/5r5ep8/make_your_arch_fonts_beautiful_easily/
フォントインスコ
$ sudo pacman -S ttf-dejavu ttf-liberation noto-fontsプリセットの作成
$ sudo ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d $ sudo ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d $ sudo ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d
/etc/fonts/local.confに下のように設定フィアルを作成する
再起動するとフォントがきれいになっている<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match> <edit mode="prepend" name="family"><string>Noto Sans</string></edit> </match> <match target="pattern"> <test qual="any" name="family"><string>serif</string></test> <edit name="family" mode="assign" binding="same"><string>Noto Serif</string></edit> </match> <match target="pattern"> <test qual="any" name="family"><string>sans-serif</string></test> <edit name="family" mode="assign" binding="same"><string>Noto Sans</string></edit> </match> <match target="pattern"> <test qual="any" name="family"><string>monospace</string></test> <edit name="family" mode="assign" binding="same"><string>Noto Mono</string></edit> </match> </fontconfig>IME
日本語フォントをインスコする
$ pacman -S otf-ipafontFcitxをインスコする
$ pacman -S fcitx fcitx-mozc fcitx-configtool下のように.xinitrcを作成する
$ cat .xinitrc export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=”@im=fcitx”Fcitx configurationで下のように設定して、
再起動するとIMEが使えるようになるadd mozc and prioritize it more over Keyboard English change default keyboard layout to to English(US) Global config > show advance options active input method = lart inactive input method = raltファンクションキー
Fnキーの挙動をインバートするには
Fn+Escを押下すればOK
参考 https://bbs.archlinux.org/viewtopic.php?id=233368Keymap
capslockを無効化する
ログイン中かえたいならsetxkbmap -option ctrl:nocapsでもOK
恒久的に変えたいので、X configuration fileを修正する
/etc/X11/xorg.confを変更せず、自分で設定ファイルを追加する
xorg.confはHWを変更すると壊れやすいため
なお、ファイルの頭の数字は2桁で読み込み順番に関係する
再起動すればXで反映されている# vi /etc/X11/xorg.conf.d/20-keyboard-layout.conf Section "InputClass" Identifier "keyboard_layout" MatchIsKeyboard "on" Option "XkbLayout" "us" Option "XkbOptions" "ctrl:nocaps" EndSectionThinkpad X1 carbon 6gen用の設定
休止状態の設定
もう一度 mkinitcpio.confを編集して
resumeを追加する# vi /etc/mkinitcpio.conf HOOKS=(base udev autodetect keyboard keymap modconf block encrypt lvm2 resume filesystems fsck)initramfsのイメージを生成する
mkinitcpio -p linux # mkinitcpio -p linux-ltsarch.confを以下のように修正する。
resume=/dev/mapper/main_group-swapの設定を追加するtitle Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options cryptdevice=UUID=XXX:cryptlvm root=/dev/mapper/main_group-root resume=/dev/mapper/main_group-swap quiet rwサスペンドの設定
サポートされているサスペンドの設定の確認
# dmesg | grep -i "acpi: (supports" [ 0.979007] ACPI: (supports S0 S4 S5)再起動しBIOSからSleep StateをLinuxに変更する
Config > Power > Sleep State > LinuxSleep StateをLinuxに変更後
S3が追加されている# dmesg | grep -i "acpi: (supports" [ 1.053591] ACPI: (supports S0 S3 S4 S5)CPUのクロックスロットリングの問題
パッチを当てる
CPUのクロック数がおかしいときがあるため# aurman -S lenovo-throttling-fix-git # sudo systemctl enable --now lenovo_fix.serviceBIOS更新
現状のバージョン確認
最近買ったので最新だった# dmidecode -s bios-version N23ET59W (1.34 )もし、上げる場合は、ファームウェアを更新する
fwupdをインスコする# pacman -S fwupdLaptopが電源につなぐ。
BIOSのバージョンあげるのは自己責任で# fwpudmgr refresh # fwpudmgr get-updates # fwupdmgr updateTrim SSD
SSDのTRIMとはHDDでいうデフラグ的なもの
できるか確認。SSDの1行目か2行目に0でない値があれば可能# lsblk --discard NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO nvme0n1 0 512B 2T 0 ├─nvme0n1p1 0 512B 2T 0 └─nvme0n1p2 0 512B 2T 0 └─cryptlvm 0 0B 0B 0 ├─main_group-swap 0 0B 0B 0 ├─main_group-root 0 0B 0B 0 └─main_group-home 0 0B 0B 0定期的なトリミングを有効化する
Ubuntuでもしていないらしいので、する必要もないのかもしれない?# pacman -S utils-linux # systemctl enable fstrim.timerその他
pacmanのメモ
# pacman -S <word> # パッケージインスコ # pacman -R <word> # パッケージ削除 # pacman -Syy # パッケージリストの更新 (`apt update`) # pacman -Syyu # パッケージリストの更新とパッケージ更新 # pacman -Ss <word> # wordでパッケージを検索する # pacman -Qs <word> # wordでローカルでローカルのパッケージを検索する # pacman -Qsi <word> # Qsの詳細 # pacman -Ql # ローカルのパッケージ一覧 # pacman -Syu # パッケージのアップグレード用語
- LVM (Logicl Volume Manager) はブロックデバイスを仮想化する機能。
- PV(物理ボリューム): ようするにハードディスクそのもの
- VG(ボリュームグループ): ようするにRAIDでいうJBOD(スパニング)
- LV(論理グループ): ようするにパーテーション
- ループデバイスは通常のファイルをブロックデバイスとして読み書きできるようにする機能
References
- https://github.com/ejmg/an-idiots-guide-to-installing-arch-on-a-lenovo-carbon-x1-gen-6#installing-arch-and-setting-it-up-to-boot-and-run
- https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89
- https://wiki.archlinux.jp/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2#BIOS.E3.83.BBUEFI_.E3.83.96.E3.83.BC.E3.82.BF.E3.83.96.E3.83.AB_USB
- https://unix.stackexchange.com/questions/89609/arch-linux-live-usb-no-longer-booting-uefi
- https://wiki.archlinux.jp/index.php/Lenovo_ThinkPad_X1_Carbon
- https://blog.amedama.jp/entry/2015/09/24/142537
- https://piro791.blog.so-net.ne.jp/2008-11-04
- https://qiita.com/MoriokaReimen/items/dbe1448ce6c0f80a6ac1
- https://qiita.com/eup42/items/ea927f83e52f8d504427
- http://lfsbookja.osdn.jp/7.10-systemd/chapter07/console.html
- https://bbs.archlinux.org/viewtopic.php?id=234539
- https://lambdalisue.hatenablog.com/entry/2013/09/27/212118
- 投稿日:2019-01-27T09:50:24+09:00
Python内のデフォルトパスを通す方法(Windows, Linux)
やりたいこと
自分のpyファイルを
sysなどのモジュールのようにimportして使いたい。次のような書き方を、
import sys sys.path例えば自分が作った
mypy.pyでもやりたい。import mypy mypy.func()つまり、Pythonの中でパスを通したい。
2019年の今、色んなページにこの方法(全部または一部)が書かれていますが、ちょっとハマってしまったのでQiitaに書きます。
venvで仮想環境を作るほどでもないときに使うのだと思います。方法
PYTHONPATHというPythonが使用する環境変数があります。
PYTHONPATHの値に、自分のpyファイルが置いてあるフォルダのパスを入力すればOKです。
PYTHONPATHの公式の説明が読みたい方は、こちらへ。https://docs.python.jp/3/using/cmdline.html#envvar-PYTHONPATH
Windowsで
PYTHONPATHを新規作成する例えば、自分のpyファイル
mypy.pyがC:\scriptにあるとします。フォルダ構成はこんな感じだとして、
C: \script \mypy.py \mypy2.py \sub-script subpy.pyエクスプローラーを開いて、
左ナビゲーションバーのPCを右クリック > プロパティ > システムの詳細設定 > 環境変数 > 新規
にて環境変数
PYTHONPATHを入力し、値にフォルダのパスを入力します。複数のフォルダを指定したい場合は、
C:\script;C:\script2のように;つなぎです。そして、もし、SpyderやAnaconda Promptを起動していたら、再起動してください(Windowsの再起動は不要です)。
パスが通せたか確認する
その後、
import sys sys.pathを実行すれば、
C:\\scriptがパスに追加されていることが確認できます(\は自動で\\になります)。In[11]: sys.path Out[11]: ['C:\\Users\\maech', 'C:\\script', ... <-- 追加されている自分のpyファイルをimportする
これで、
C:\script\*.pyのすべてのpyファイルがimportできます。# C:\script\mypy.pyをインポート import mypy # mypy.pyに定義したfunc()を使う a = mypy.func() # mypy.pyに定義したクラスmypyのfunc()を使う a = mypy.mypy.func() # この場合は from mypy import mypy とすると a = mypy.func() で呼び出せる # C:\script\mypy2.pyをインポート import mypy2 # C:\script\sub-script\subpy.pyをインポート import sub-script.subpyLinuxでやりたい人
例えば、
~/.bashrcにPYTHONPATHと値を追加してください。複数パスの指定は:つなぎです。詳しくは省略。
参考
PYTHONPATH — 1. コマンドラインと環境 — Python 3.6.5 ドキュメント https://docs.python.jp/3/using/cmdline.html#envvar-PYTHONPATH
Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど) | note.nkmk.me https://note.nkmk.me/python-import-module-search-path/
python - Setting PYTHONPATH on Windows under Anaconda without elevated privileges - Stack Overflow https://stackoverflow.com/questions/43099096/setting-pythonpath-on-windows-under-anaconda-without-elevated-privileges
- 投稿日:2019-01-27T05:16:49+09:00
AWSでDjangoのWEBサーバーを作る(Amazon Linux 2、HTTPS化)
Djangoのウェブサーバーを作ります。ハッカソンとかで良く使うのでメモです。
インスタンスの作成
EC2のダッシュボードを開き、インスタンスを作成します。
イメージはAmazon Linux 2 AMI (HVM), SSD Volume Type - ami-0d7ed3ddb85b521a6を選択しました。インスタンスタイプは
t2.microです。
セキュリティグループの設定で、SSH(22)、HTTP(80)、HTTPS(443)、TCP(8000)用のポートを開放します。キーペアを任意の名前で作成し、できた
.pemファイルをPuTTY genで.ppkファイルに変換します。インスタンスの作成が完了したら、Elastic IPを開き、新しいアドレスを割り当てます。作成したインスタンスにそのIPアドレスを関連付けます。
ドメインを取得
www.{name}.com のValueのところにElastic IPを設定します。
チュートリアル: Amazon Linux 2 に LAMP ウェブサーバーをインストールする
PuTTYでパブリックIPもしくは、DNS名(www.{name}.com)でSSH接続します。ここで.ppkファイルを使います。ユーザー名は
ec2-userです。sudo yum update -y sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 sudo yum install -y httpd mariadb-server sudo systemctl start httpd sudo systemctl enable httpd sudo systemctl is-enabled httpdTest Pageを表示( http://www.{name}.com )します。
sudo usermod -a -G apache ec2-user exitもう一回ログインします。
groups sudo chown -R ec2-user:apache /var/www sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \; find /var/www -type f -exec sudo chmod 0664 {} \;HTTPSに対応させます。(Google Home MiniでWebAPIを使ったアプリ作るときとかに必要だったので)
sudo systemctl is-enabled httpd sudo systemctl start httpd && sudo systemctl enable httpd sudo yum update -y sudo yum install -y mod_sslインスタンスを再起動します。
sudo systemctl restart httpdHTTPSで接続(https://www.{name}.com )します。
プライバシーエラーになりますが、下の詳細設定からアクセスできます。
保護されていないアクセスとなります。CA 署名証明書の取得
付録: Amazon Linux 2 での Let's Encrypt と Certbot の使用を参考にします。
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/ sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm sudo yum-config-manager --enable epel* sudo yum repolist all
/etc/httpd/conf/httpd.confのListen 80の下に追記します。sudo vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName "{name}.com" ServerAlias "www.{name}.com" </VirtualHost>Cerbotを実行します。
sudo systemctl restart httpd sudo yum install -y certbot python2-certbot-apache sudo certbot1."Enter email address (used for urgent renewal and security notices)" というプロンプトが表示されたら、
メールアドレスを入力し、Enter2.Let's Encrypt のサービス利用規約に同意するため、
Aを入力し、Enter3.EFF のメーリングリストに登録するための承認のため、
Yを入力し、Enter4.共通名およびサブジェクト代替名 (SAN) が表示され、
2を入力し、Enter1: {name}.com 2: www.{name}.com5.HTTP クエリを HTTPS にリダイレクトするどうかの確認で、HTTPS 経由の暗号化接続のみ受け入れる場合、
2を入力し、EnterHTTPS( https://www.{name}.com )に安全に接続できることを確かめます。
Certbot を自動化
sudo vi /etc/crontab 39 1,13 * * * root certbot renew --no-self-upgrade sudo systemctl restart crondDjangoやーる
ここからは、LAMP環境作ったのに、Djangoやーるっていう内容です。
Amazon Linux 2にAnacondaをインストールします。wget https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh bash Anaconda3-2018.12-Linux-x86_64.shyesを入力してインストール、最後にyesを入力して.bashrcを生成します。
/home/ec2-user/anaconda3にインストールされました。
Django用にPython3.6環境を作ります。conda create -n django python=3.6condaのコマンドがないと言われたら、
source /home/ec2-user/anaconda3/etc/profile.d/conda.shPATHが通ってないので、
cat /home/ec2-user/.bashrcで確認しましょう。# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions # added by Anaconda3 2018.12 installer # >>> conda init >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$(CONDA_REPORT_ERRORS=false '/home/ec2-user/anaconda3/bin/conda' shell.bash hook 2> /dev/null)" if [ $? -eq 0 ]; then \eval "$__conda_setup" else if [ -f "/home/ec2-user/anaconda3/etc/profile.d/conda.sh" ]; then . "/home/ec2-user/anaconda3/etc/profile.d/conda.sh" CONDA_CHANGEPS1=false conda activate base else \export PATH="/home/ec2-user/anaconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda init <<<
cat /home/ec2-user/.bashrc-anaconda3.bakも確認しましょう。# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functionsAnacondaでdjango環境に入り、Djangoをインストールします。
source activate django (django) pip install django (django) django-admin startproject project_name (django) cd helloworld (django) python manage.py migrate (django) python manage.py runserverもし、activateがないと言われたら、
source /home/ec2-user/anaconda3/bin/activate django次にHTTPSに対応させます。
pip install django-sslserver cd helloworld sudo vi settings.pyDEBUG = False ALLOWED_HOSTS = ['www.{name}.com'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'sslserver', ] SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True
python manage.py runsslserver 0.0.0.0:8000の後に、.crtと.keyを指定する必要があります。/etc/letsencrypt/live/www.{name}.com/以下にあるのですが、.pemファイルになっているので、拡張子を変えてコピペします。sudo cp /etc/letsencrypt/live/www.{name}.com/fullchain.pem /etc/letsencrypt/live/www.{name}.com/fullchain.crt sudo cp /etc/letsencrypt/live/www.{name}.com/privkey.pem /etc/letsencrypt/live/www.{name}.com/privkey.key sudo chmod 755 /etc/letsencrypt/live/ sudo chmod 755 /etc/letsencrypt/live/www.{name}.com/fullchain.crt sudo chmod 755 /etc/letsencrypt/live/www.{name}.com/privkey.key実行してみましょう。
python manage.py runsslserver 0.0.0.0:8000 --certificate /etc/letsencrypt/live/www.{name}.com/fullchain.crt --key /etc/letsencrypt/live/www.{name}.com/privkey.key( https://www.{name}.com:8000/ )に接続します。
Not Found The requested resource was not found on this server.( https://www.{name}.com:8000/admin/ )に接続します。
adminユーザーを作るには、下記のようにします。
(django) [ec2-user@ip-xxx-xx-xx-xx helloworld]$ python manage.py createsuperuser Username (leave blank to use 'ec2-user'): admin Email address: gachi.kumamcn@gmail.com Password: Password (again): Superuser created successfully.HelloWorld
HelloWorldコンテンツを作成します。
views.pyを作成します。
from django.http import HttpResponse def helloworld(req): return HttpResponse('Hello, World !!')settings.pyにhelloworldを追加します。
INSTALLED_APPS = [ .... 'helloworld', ]urls.pyにもhelloworldを追加します。
import helloworld.views urlpatterns = [ path('helloworld/', helloworld.views.helloworld), path('admin/', admin.site.urls), ]実行して、( https://www.{name}.com:8000/helloworld/ )に接続します。
バックグラウンドで実行
バックグラウンドでサーバーを起動します。
末尾に&をつけるだけだと、標準出力されてしまいますので、nohupと&で囲みましょう。nohup python manage.py runsslserver 0.0.0.0:8000 --certificate /etc/letsencrypt/live/www.{name}.com/fullchain.crt --key /etc/letsencrypt/live/www.{name}.com/privkey.key > /dev/null 2>&1 < /dev/null &バックグラウンドのサーバーを停止します。
ps -ef|awk 'BEGIN{}{if(match($8, /python/))system("kill -9 " $2)}END{}'
- 投稿日:2019-01-27T00:39:58+09:00
top コマンドでよく使う or 便利そうな機能
top コマンドと言えば、リソースの状況確認に使えるコマンドですが、実は結構多機能です。今回は、個人的によく使う機能や便利そうだと思う機能を調べたので、まとめました。
対象バージョンは次のとおりです。
$ top -v procps-ng version 3.3.10ヘルプ (h or ? キー)
top コマンド実行中に「h or ?」で、ヘルプを表示できます。top コマンドを終了させずに対話型のコマンドを確認できるので、非常に便利です。
文字列検索 (L キー)
top コマンド実行中に「L -> 文字列入力 -> Enter」で、ヒットした文字列を含むプロセスを上部に表示できます。ヒット部分はハイライトされます。
実行例 (入力キー: L,"cpu",Enter,L,"bash",Enter,L,"20",Enter)
ユーザ毎に監視 (u キー)
top コマンド実行中に「u -> ユーザ名を入力 -> Enter」でユーザ毎のリソース使用状況を監視できます。
プロセスを終了させる (k キー)
top コマンド実行中に「k -> 終了させたい PID 入力 -> Enter」で、入力した PID の プロセスを終了 (SIGTERM シグナルを発行)できます (送信シグナルは変更可)。
実行例 (入力キー: L,"top",k,"16973",Enter,Enter)
コマンドを詳細に表示 (c キー)
top コマンド実行中に「c」で、実行コマンド (COMMAND) をフルパスか、[]付きで表示できます。[]付きは、カーネルモードで動作していることを意味します。
実行例
top - 22:08:04 up 4 days, 6:11, 1 user, load average: 0.61, 0.72, 0.45 ... (略) ... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1516 root 20 0 4367388 654408 107028 S 3.3 8.1 22:27.82 /usr/bin/gnome-shell 19753 root 20 0 790540 39864 29668 S 0.7 0.5 0:02.43 /usr/libexec/gnome-terminal+ 1154 gdm 20 0 845936 25776 18680 S 0.3 0.3 3:09.20 /usr/libexec/gsd-color 20036 root 20 0 162460 4580 3868 R 0.3 0.1 0:00.08 top 2 root 20 0 0 0 0 S 0.0 0.0 0:00.17 [kthreadd] 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H] 6 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [mm_percpu_wq]ソート関連 (<, >, P, M, R キー)
top コマンド実行中に
「<」「>」で、ソート対象のカラムを選択できます。
「P」で、CPU の使用量順にソートできます。
「M」で、メモリの使用量順にソートできます。
「R」で、ソートの昇順/降順を切り替えられます。さらに「z, x, b」で、どのカラムを選択しているのか分かりやすくできます。
z...カラー/モノクロ切り替え
x...選択カラムをハイライト
b...選択カラムのハイライトをより分かり易くする実行例 (入力キー: z,x,b,>,<,<,<,<,<,<,<,<)
ちなみに「Z」で、詳細なカラーリングの設定ができます。
CPU、メモリ、スワップの使用率を視覚的に表示 (t, m キー)
top コマンド実行中に「t -> t」で、CPUの使用率を視覚的(横棒グラフ)に表示できます。同様に「m -> m」で、メモリ、スワップの使用率も視覚的に表示できます。
さらに「z」で、横棒グラフの内訳を分かりやすく表示できます。
CPU コア毎の情報を表示 (1 キー)
top コマンド実行中に「1」で、CPU コア毎の情報を表示できます。デフォルトでは、複数の CPU コア情報が1つに纏められており %Cpu(s) と表示されています。
実行例
top - 22:06:48 up 4 days, 6:10, 1 user, load average: 0.56, 0.74, 0.43 Tasks: 270 total, 1 running, 269 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ★ %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ★ %Cpu2 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ★ %Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ★ ... (略) ...プロセス毎の CPU 使用率を CPU コア数の総使用率で表示 (I キー)
top コマンド実行中に「I (ラージアイ)」で、プロセス毎の CPU 使用率を CPU コア数の総使用率で表示できます。デフォルトでは、プロセス毎に使用している CPU コアの使用率が表示されています。
次の実行例では、CPU コア数が4つのシステムで、CPU に負荷を掛けています($ stress --cpu 1)。%Cpu3、%CPU がそれぞれ 100 になります。%Cpu3 が3番目の CPU コア情報で、%CPU が stress コマンドの CPU 使用率です。
# 1つの CPU コアに負荷を掛ける $ stress --cpu 1 & $ top (1 キー 押下の状態) top - 22:02:01 up 4 days, 6:05, 1 user, load average: 0.96, 0.44, 0.22 Tasks: 272 total, 2 running, 270 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 0.7 us, 0.0 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.7 hi, 0.0 si, 0.0 st %Cpu2 : 0.7 us, 0.0 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ^^^^^^^^ KiB Mem : 8093920 total, 690324 free, 2598136 used, 4805460 buff/cache KiB Swap: 8225788 total, 8043004 free, 182784 used. 4710784 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19817 root 20 0 7904 96 0 R 100.0 0.0 0:39.91 stress ^^^^^^この状態で「I」を押下すると、%CPU が 24.9(約25) と表示されます。これは、stress コマンドの CPU 使用率(100)が4つある CPU コア数の総使用量で表示されている(100/4 = 25)ためです。
top - 22:05:08 up 4 days, 6:08, 1 user, load average: 1.06, 0.77, 0.40 Tasks: 272 total, 2 running, 270 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 8093920 total, 687224 free, 2600356 used, 4806340 buff/cache KiB Swap: 8225788 total, 8043004 free, 182784 used. 4708324 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19817 root 20 0 7904 96 0 R 24.9 0.0 3:46.19 stress ^^^^なお、システムの CPU コア数は、
$ nproc、
$ grep -c processor /proc/cpuinfo、
$ getconf _NPROCESSORS_ONLN、
などからも確認できます。設定を保存 (W キー)
top コマンド実行中に「W」で、前述の設定などを保存(~/.toprcに保存)できます。例えば「z -> W」とすると、top コマンド実行時は常に「z」を押下した(カラーリングされた)状態になります。
設定をリセットする場合は、設定ファイルを削除 ($ rm ~/.toprc) すれば、OK です。













