linux

2023-03-29 09:57
2023-12-21 13:02

Linux 全般(OS, ネットワーク, etc...)について細かな Q&A を書き連ねていくページ。内容が膨大になった項目は適宜、他のページに切り出す。

OS に関する Q&A

Linux 全般

OS のディストリビューション/バージョンを確認したい

$ cat /etc/system-release
Amazon Linux AMI release 2018.03

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

OS カーネルのバージョンを確認したい

$ uname -a
Linux ip-172-31-3-40 4.14.62-65.117.amzn1.x86_64 #1 SMP Fri Aug 10 20:03:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /proc/version 
Linux version 4.14.62-65.117.amzn1.x86_64 (mockbuild@gobi-build-60009) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #1 SMP Fri Aug 10 20:03:52 UTC 2018

CPU の数を確認したい

see: 物理 CPU、CPU コア、および論理 CPU の数を確認する - Red Hat Customer Portal

# 物理 CPU の数
$ grep physical.id /proc/cpuinfo | sort -u | wc -l
1

# CPU コアの数
$ grep cpu.cores /proc/cpuinfo | sort -u
cpu cores 

# 論理 CPU の数
$ grep processor /proc/cpuinfo | wc -l
1

利用する OS でのパッケージ管理方法を確認したい

  • RedHat 系: パッケージは rpm 形式
    • rpmコマンド: rpm パッケージ単位での管理を行うコマンドで依存関係は自動解決されない(-R, --requires オプションで依存するパッケージ一覧の確認は可能)
    • yum コマンド: リポジトリを参照して依存関係を含めて管理を行う
  • Ubuntu/Debian 系: パッケージは deb 形式
    • dpkg コマンド: deb パッケージ単位での管理を行うコマンドで依存関係は自動解決されない(依存するパッケージ一覧の確認は可能)
    • apt コマンド: リポジトリを参照して依存関係を含めて管理を行う

RedHat 系全般

レポジトリ一覧を確認したい

$ yum repolist
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
repo id                                             repo name                                               status
!amzn2-core/2/x86_64                                Amazon Linux 2 core repository                          28,835
amzn2extra-docker/2/x86_64                          Amazon Extras repo for docker                               72
amzn2extra-kernel-5.10/2/x86_64                     Amazon Extras repo for kernel-5.10                         200
repolist: 29,152

利用可能な rpm パッケージ一覧を確認したい

$ yum list

$ # インストール済みの rpm パッケージ一覧は以下のコマンド
$ yum list installed

rpm パッケージの中身や構造がどうなっているか事前に確認したい

$ yum install --downloadonly --downloaddir=/tmp <package_name>

Linux コマンドに関する Q&A

シェルスクリプト全般

ファイルの各行を for 文でまわしたい

$ cat /tmp/list
hoge
fuga
piyo

$ for line in `cat /tmp/list`;
do 
  echo "$line"; 
done;
hoge
fuga
piyo

bash で beep 音を鳴らしたい

0x07 が BEL にあたるためこれを echo すればよい

$ echo $'\07'
# or 
$ echo -e "\07"

出力した行の内容を書き換えたい

\b にて一文字戻れる

$ echo -ne "hoge"; sleep 1; echo -ne "\b\bya\n";
hoge
# 1 秒経過後
hoya

\r にて先頭の行にもどり書き換えられる

$ echo -ne "loading..."; sleep 1; echo -e "\rcompleted!";
loading...
# 1 秒経過後
completed!

出力の文字色や背景色をつけたい

$ printf '\033[31;47;m%s\033[m\n' '赤色文字+白色背景'
赤色文字+白色背景

処理時間を計測したい

s=`date +%s%3N`

# 処理
# ...

e=`date +%s%3N`
echo $(($e - $s)) # ms

echo コマンド

改行させたくない

$ echo -n hoge
hoge $

エスケープシーケンスシーケンスを取り扱いたい

$ echo "a\tb" #=> エスケープシーケンスとして取り扱われない
a\t
$ echo $'a\tb' #=> $ 始まり + '...' で括る
a	b
$ echo -e "a\tb" #=> これでも良い
a	b

rm コマンド

基本的なオプションが知りたい

  • -r, -R, --recursive: ディレクトリとその配下のファイルを削除する
  • -v, --verbose: 詳細なログを表示する
  • -f, --force: 確認を行わない

awk コマンド

n 番目の値を抽出したい

$ awk '{print $1}'

最大値を計算したい

$ awk '{ if (M<$1) M=$3} END { print M }'

jq コマンド

フォーマットを解除した JSON を出力したい

$ cat /path/to/file | jq -c 

Linux コマンドで XX がしたい

文字列をスペースで split して n 番目の要素だけを抽出したい

$ echo "2023-12-16 '土)" | cut -d " " -f1
2023-12-16
$  echo "2023-12-16 (土)" | cut -d " " -f2
(土)

文字列中の X を Y に置き換えたい

#=> replace
$ echo 2015-05-06 | sed 's/-/\//'
2015/05-06

#=> replaceAll
$ echo 2015-05-06 | sed 's/-/\//g'
2015/05/06

プログラミング言語に関する Q&A

C++

main 関数内で大きなサイズの配列を宣言するとセグフォする

ループ内で変数宣言をするとパフォーマンスは低下するのか

ネットワークに関する Q&A

ssh 関連

sshd からの切断を防ぐ

~/.ssh/config に以下を設定する

Host *
    ServerAliveInterval 120
    ServerAliveCountMax 3

正しい鍵を利用して踏み台サーバーへエージェント転送しているにも関わらず目的のサーバーにログインできない

  • 踏み台サーバーで ssh -L を叩きエージェント転送できているかチェック
  • 転送できていない場合
    • ローカルから ssh -A しているか確認
    • ~/.ssh/config に AddKeysToAgent yes を追加

まとめたい項目リスト

  • rpm パッケージの中身や構造について
  • 実行形式ファイルの中身や構造について
  • デーモンプロセスの組み立てについて

Index

OS に関する Q&A

Linux 全般

OS のディストリビューション/バージョンを確認したい

OS カーネルのバージョンを確認したい

CPU の数を確認したい

利用する OS でのパッケージ管理方法を確認したい

RedHat 系全般

レポジトリ一覧を確認したい

利用可能な rpm パッケージ一覧を確認したい

rpm パッケージの中身や構造がどうなっているか事前に確認したい

Linux コマンドに関する Q&A

シェルスクリプト全般

ファイルの各行を for 文でまわしたい

bash で beep 音を鳴らしたい

出力した行の内容を書き換えたい

出力の文字色や背景色をつけたい

処理時間を計測したい

echo コマンド

改行させたくない

エスケープシーケンスシーケンスを取り扱いたい

rm コマンド

基本的なオプションが知りたい

awk コマンド

n 番目の値を抽出したい

最大値を計算したい

jq コマンド

フォーマットを解除した JSON を出力したい

Linux コマンドで XX がしたい

文字列をスペースで split して n 番目の要素だけを抽出したい

文字列中の X を Y に置き換えたい

プログラミング言語に関する Q&A

C++

main 関数内で大きなサイズの配列を宣言するとセグフォする

ループ内で変数宣言をするとパフォーマンスは低下するのか

ネットワークに関する Q&A

ssh 関連

sshd からの切断を防ぐ

正しい鍵を利用して踏み台サーバーへエージェント転送しているにも関わらず目的のサーバーにログインできない

まとめたい項目リスト

About

ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです

Copyright © 53ningen.com