ps コマンドのオプションが脳内で迷子になるのでまとめる

システムの監視やデバックで使われる ps コマンドですが、よく使うオプションに UNIX 由来のものと、BSD 由来のものがあります (ダッシュを 2 つつける GNU long options というのもある)。
これが非常にややこしくて忘れやすいので出力例とともにまとめ。

環境: WSL2ubuntu で実行しています。
参考: https://man7.org/linux/man-pages/man1/ps.1.html

オプションなしで ps をそのまま出力

現在のユーザーと同じ有効ユーザーID (euid=EUID) を持ち、そのユーザーに関連付けられているすべてのプロセスを表示する

$ ps
    PID TTY          TIME CMD
    325 pts/0    00:00:00 bash
  25458 pts/0    00:00:00 ps

各セクション詳細

name description
PID プロセス ID
TTY プロセスが接続されている端末
TIME プロセスが CPU を使用した累積時間
CMD 実行されているコマンドやプログラム

UNIX 由来

-f オプション

フルフォーマットのリストを表示する
要するに項目が増える
-e と一緒に使われることが多い

$ ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
conpota      325     324  0 16:23 pts/0    00:00:00 -bash
conpota    25448     325  0 18:00 pts/0    00:00:00 ps -f

各セクション詳細

name description
UID プロセス所有者のユーザ ID
PID プロセス ID
PPID 親プロセスの ID
C プロセスの CPU 使用率
STIME プロセスの開始時刻
TTY プロセスが接続されている端末
TIME プロセスが CPU を使用した累積時間
CMD 実行されているコマンドやプログラム

-e オプション

すべてのプロセスを表示する
-f と一緒に使われることが多い

$ ps -e
    PID TTY          TIME CMD
      1 ?        00:01:09 systemd
      2 ?        00:00:00 init-systemd(Ub
      9 ?        00:00:00 init
     44 ?        00:00:00 systemd-journal
     64 ?        00:00:00 systemd-udevd
...略...

-a オプション

セッションリーダー と端末に関連付けられていないプロセスを除くすべてのプロセスを表示

  • セッションリーダー
    • 通常ログインシェルのこと
    • グループ化されたプロセス
  • セッション
    • ログイン - ログアウト間の期間
    • セッション内のプロセスは全て同じ端末に紐付け
~$ ps -a
    PID TTY          TIME CMD
    388 pts/1    00:00:00 bash
  53198 pts/0    00:00:00 ps

-d オプション

セッションリーダーを除くすべてのプロセスを表示
-a と比較すると init-systemd といったシステム関連のプロセスが表示される (これらは端末に関連付けられていないプロセス)

$ ps -d
    PID TTY          TIME CMD
      2 ?        00:00:00 init-systemd(Ub
      9 ?        00:00:00 init
    284 ?        00:00:08 python3.10
    324 ?        00:00:00 Relay(325)
    383 ?        00:00:00 (sd-pam)
    388 pts/1    00:00:00 bash
    407 ?        00:00:33 python3
  53214 pts/0    00:00:00 ps

BSD 由来

a オプション

ターミナルを持つすべてのプロセスを表示する
TTY に項目が増えていることが確認できる

$ ps a
    PID TTY      STAT   TIME COMMAND
    245 hvc0     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear --keep-baud console 115200,38400,9600 vt220
    248 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
    325 pts/0    Ss     0:00 -bash
    326 pts/1    Ss     0:00 /bin/login -f
    388 pts/1    S+     0:00 -bash
 141921 pts/0    R+     0:00 ps a

各セクション詳細

name description
STAT プロセスの状態 (PROCESS STATE CODES で示される)

u オプション

man を確認するに、「Display user-oriented format」ということで、ユーザーを意識したフォーマットになっている
-f に比べてより細かい

$ ps u
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
conpota      325  0.0  0.0   6176  4972 pts/0    Ss   Apr21   0:00 -bash
conpota      388  0.0  0.0   6124  4808 pts/1    S+   Apr21   0:00 -bash
conpota   143765  0.0  0.0   7484  3196 pts/0    R+   02:18   0:00 ps u

各セクション詳細

name description
USER プロセス実行中のユーザー
%CPU プロセスの CPU 使用率
%MEM プロセスのメモリ使用率
VSZ 仮想メモリサイズ
RSS 物理メモリサイズ
START プロセスの開始時刻
COMMAND 実行されているコマンドやプログラム

x オプション

BSD の「ttyを持たなければならない」という制限を解除して、端末がないプロセスも表示できるようになる

$ ps x
    PID TTY      STAT   TIME COMMAND
    325 pts/0    Ss     0:00 -bash
    382 ?        Ss     0:00 /lib/systemd/systemd --user
    383 ?        S      0:00 (sd-pam)
    388 pts/1    S+     0:00 -bash
 147822 pts/0    R+     0:00 ps x

f オプション

プロセスの階層を表示
ps fbash から呼び出されていることがわかる

ps f
    PID TTY      STAT   TIME COMMAND
    388 pts/1    S+     0:00 -bash
    325 pts/0    Ss     0:00 -bash
 151168 pts/0    R+     0:00  \_ ps f

r オプション

実行中のプロセスのみを表示

$ ps r
    PID TTY      STAT   TIME COMMAND
 153018 pts/0    R+     0:00 ps r

マニュアルを見てみると同じアルファベットでも違う動きをするものが結構多いです。
シェルを極める道は長い。

Lubuntu 22.04 にて US キーボードでの日本語入力を可能にする

日本語化されていないディストリビューションをインストールすると、たいてい日本語が入力できないためセットアップの必要があります。
ここでは Lubuntu 22.04 かつ US キーボード環境化での日本語入力環境を設定します。

インプットメソッドフレームワーク Fcitx と 日本語入力メソッド Mozc を使用します。
ほかのよく使われるメソッドとして ibus もありますが、 デフォルトでインストールされている Fcitx で。

Mozc をインストールする

Fcitx 対応の Mozc をインストールする

$ sudo apt install -y fcitx-mozc

Fcitx の設定で Mozc を上位に配置

デスクトップ左下、Lubuntu の鳥のロゴをクリックして [Preferences] - [Fcitx Configuration] - [Input Method] で Mozc が一番上に来るようにする

Image from Gyazo

Mozc のキーレイアウトを English (US) に変更

デスクトップ左下、Lubuntu の鳥のロゴをクリックして [Preferences] - [Fcitx Configuration] - [Input Method] で Mozc を右クリックして English (US) を選択

Image from Gyazo

キーマップに IME の有効化と無効化を登録

デスクトップ左下、Lubuntu の鳥のロゴをクリックして [Preferences] - [MozcSetup] - [Keymap] - [Customize...] で [Mozc keymap editor] を開く
Image from Gyazo
[Mozc keymap editor] でUSキーボードを使用するために IME の切り替えをするための HotKey 設定する
自分は ctrl + space で設定

  • DirectInput (直接入力) - Activate IME
  • Precomposition (入力文字なし) - Deactivate IME

Image from Gyazo


これで日本語入力環境の構築ができました。
できない場合、他の入力フレームワークが競合していたり、キーボードショートカットが競合している可能性があるので確認してみてください。

ThinkPad T480 を US キーボードに換装した話

ThinkPad T480 をご存じですか?

交換可能な外部バッテリーが搭載されている最後の ThinkPad T シリーズです。
他の特徴として

  • メモリが 64GB まで拡張可能
  • 4 コアのインテル第8世代(この世代で初めて 4 コアに)
  • 豊富な交換パーツ

etc...

これ以降に発売された T シリーズ はメモリが LPDDR のため、交換できないものも多々あります。
ということもあり、一部のマニアからは人気であるとの噂も...
Lenovo ThinkPad T480: 最後の PowerBridge - YouTube

今回はこの T480 のキーボード交換をしました。
といっても特に難しいことはありません。
公式が交換動画を出しているのでその通りに作業すれば問題はありません。
ThinkPad T470 / T480 Laptop Keyboard Replacement - YouTube

自分が作業した際には、キーボードを固定しているネジを完全に取り外そうとして何回もトライしましたが、結局とれず...
とりあえず、キーボードを触ってみるかと開いたところ、すんなりと外れました。
どうやらネジは完全に外さなくてもキーボードはとれるようです。

今回使用したパーツはこちら
Lenovo Notebook PC,Tinkpad,t470,t480,t460s,t470s,新モデル用の英語キーボード

2024年3月現在、ヤフオクで2万円以下で買えるので、サブにもおすすめです。

GitHub への認証方法を SSH から https に変更する際の落とし穴

GitHub への認証方法を SSH から https に変更する際の落とし穴

以前、GitHubSSH 接続をしましたが、推奨が https ということで、今回は https で接続しました。   最初から https で設定する人にはそこまで参考にならない記事ですが、SSH で接続した際に .git/config~/.gitconfig の設定を変えた覚えがある人は参考になるかもしれません(要するにこれらの設定が悪さをしていた)。
※ GitHub に SSH で接続する際に詰まったこと - conpot4の日記  ← 自分の場合はこの記事の最後の設定が原因でした。  

目次

環境

SSH の情報を消しておく

SSH の情報が残っているとそれで接続されてしまう可能性があるので削除します。

  • GitHub 上の SSH 公開鍵を削除
  • ~/.ssh/ の公開鍵と秘密鍵を削除
  • ~/.ssh/known_hostsGitHub の情報を削除

git config の設定を確認

以下のコマンドで .git/config に記載されているリモートリポジトリの URL を確認できます。

$ git config remote.origin.url

URL が https なら...

こちらの結果が以下の場合、問題なく https 接続できるはずです。  

https://github.com/<ユーザー名>/<リポジトリ名>.git

駄目な場合は ~/.gitconfig 下の設定を確認 を参照してください。  

URL が SSH なら...

以下の場合は SSH で接続されてしまっています。  

git@github.com:<ユーザー名>/<リポジトリ名>.git

以下のコマンドで .git/config の URL を https に書き換えます。  

$ git remote set-url origin https://github.com/<ユーザー名>/<リポジトリ名>.git

再び git config remote.origin.url コマンドで確認した結果が https に変わっていたら成功、接続できるはずです。   駄目な場合は ~/.gitconfig 下の設定を確認 を参照してください。

~/.gitconfig 下の設定を確認

自分の場合は ~/.gitconfig の以下の設定が悪さをしていました。   SSH 接続に切り替える設定です。   ~/.gitconfig はglobal 設定なので、local 設定の .git/config より優先されます。   したがって、いくら .git/config をいじっても変化がなかったということです。  

[url "github:"]
    InsteadOf = https://github.com/
    InsteadOf = git@github.com:

これを消して完了!

GitHub に SSH で接続する際に詰まったこと

GitHubSSH で接続する際に詰まったこと

プルリクを練習するために Git と GithubSSHhttps で接続する必要がありました。   今回は SSH を用いた際に詰まった箇所(ユーザ名とパスワードを求められてしまう)を書き留めます。詳細な接続手順については省略。  

目次

環境

リモートリポジトリを紐つけてみるが...『パスワード認証は August 13, 2021 に使えなくなったから別の認証にしてね』のメッセージ

ローカルリポジトリにて以下のコマンドを実行して、リモートリポジトリと紐付けます。

$ git remote add origin url

git push を試すと...(-u を付けるとこれ以降は引数を省略可能になる)  

$ git push -u origin main

以下のようなメッセージが表示されます。

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/conpotaaa/saru-pull-request-test.git/'

要約すると...『パスワード認証は August 13, 2021 に使えなくなったから別の認証にしてね』とのことです。

SSH で接続する手順(省略)

SSH を使って GitHub に接続していきます。   以下を参考にして接続がうまくいったらこの記事は読み飛ばして構いません。  

接続の具体的な手順は以下のサイトが参考になります。   GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita  

GitHub の接続とは直接的には関係ありませんが参考になるかと思います。   Mac から さくら VPS の Debian に SSH 接続をする手順 - Tech Potage

詰まった箇所の原因と対処(.git/config の URL 設定を見直し)

結論から言うと、.git/config の URL が https のものになっていたことが原因です。   こちらの記事を参照した前提で話を進めて行きます。    

  GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita  

事象(詰まった箇所)

上記の Qiita を参考に SSH を設定、いざ接続!以下のコマンドを試す。  

$ ssh -T git@github.com

しかし、「ユーザ名とパスワードを求められる」 → 「最初と変わらない」 → 「ssh 接続がうまくいってない...」  

原因と対処

.git/config の以下の部分を修正後のように書き換えてください(パスは各自のリポジトリを参照)。   私の場合 git remote add origin url において、ssh ではなく htttps をしていたため、修正前のようになっていました。    これだと、https で接続しようとしてしまいます。  


修正前

[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 url = https://github.com/conpotaaa/saru-pull-request-test.git #ここだよ
 fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
 remote = origin
 merge = refs/heads/main

修正後

[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 url = github:conpotaaa/saru-pull-request-test.git #ここだよ
 fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
 remote = origin
 merge = refs/heads/main

ssh のパスを取得してくるには GitHub プロジェクトページの以下の部分からコピーできます。



.git/config[remote "origin"]url 部分だけピンポイントで確認するコマンドです。   これで httpsssh かがすぐわかります。    

$ git config remote.origin.url

また、以下のコマンドで .git/config[remote "origin"]urlssh に書き換わります。  

$ git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git

これのほうが楽では...

~/.gitconfig を以下のようにしたほうが簡単だが、設定ファイルをいじれて勉強になったので良し!
ちなみにこれは SSH 接続に切り替える設定です。
global 設定なので、local の設定より優先されます。  

[url "github:"]
    InsteadOf = https://github.com/
    InsteadOf = git@github.com: