20200621のLinuxに関する記事は11件です。

LSコマンド実行時の配色変更

背景

WSL2でUbuntuを起動したときのdefaultのdircolors設定が見づらいので見やすい設定に変更したい。

1.dircolorsファイルの準備

lsコマンドを実行したときのディレクトリやファイルの配色は$LS_COLORSという環境変数によって決まる。

% echo $LS_COLORS$ echo $LS_COLORS
no=00:fi=00:di=36:ln=35:pi=30;44:so=35;44:do=35;44:bd=33;44:cd=37;44:or=05;37;41:mi=05;37;41:ex=01;31:*.cmd=01;31:*.exe=01;31:*.com=01;31:*.bat=01;31:*.reg=01;31:*.app=01;31:*.txt=32:*.org=32:*.md=32:*.mkd=32:*.h=32:*.hpp=32:*.c=32:*.C=32:*.cc=32:*.cpp=32:*.cxx=32:*.objc=32:*.cl=32:*.sh=32:*.bash=32:*.csh=32:*.zsh=32:*.el=32:*.vim=32:*.java=32:*.pl=32:*.pm=32:*.py=32:*.rb=32:*.hs=32:*.php=32:*.htm=32:*.html=32:*.shtml=32:*.erb=32:*.haml=32:*.xml=32:*.rdf=32:*.css=32:*.sass=32:*.scss=32:*.less=32:*.js=32:*.coffee=32:*.man=32:*.0=32:*.1=32:*.2=32:*.3=32:*.4=32:*.5=32:*.6=32:*.7=32:*.8=32:*.9=32:*.l=32:*.n=32:*.p=32:*.pod=32:*.tex=32:*.go=32:*.sql=32:*.csv=32:*.sv=32:*.svh=32:*.v=32:*.vh=32:*.vhd=32:*.bmp=33:*.cgm=33:*.dl=33:*.dvi=33:*.emf=33:*.eps=33:*.gif=33:*.jpeg=33:*.jpg=33:*.JPG=33:*.mng=33:*.pbm=33:*.pcx=33:*.pdf=33:*.pgm=33:*.png=33:*.PNG=33:*.ppm=33:*.pps=33:*.ppsx=33:*.ps=33:*.svg=33:*.svgz=33:*.tga=33:*.tif=33:*.tiff=33:*.xbm=33:*.xcf=33:*.xpm=33:*.xwd=33:*.xwd=33:*.yuv=33:*.NEF=33:*.nef=33:*.aac=33:*.au=33:*.flac=33:*.m4a=33:*.mid=33:*.midi=33:*.mka=33:*.mp3=33:*.mpa=33:*.mpeg=33:*.mpg=33:*.ogg=33:*.opus=33:*.ra=33:*.wav=33:*.anx=33:*.asf=33:*.avi=33:*.axv=33:*.flc=33:*.fli=33:*.flv=33:*.gl=33:*.m2v=33:*.m4v=33:*.mkv=33:*.mov=33:*.MOV=33:*.mp4=33:*.mp4v=33:*.mpeg=33:*.mpg=33:*.nuv=33:*.ogm=33:*.ogv=33:*.ogx=33:*.qt=33:*.rm=33:*.rmvb=33:*.swf=33:*.vob=33:*.webm=33:*.wmv=33:*.doc=31:*.docx=31:*.rtf=31:*.odt=31:*.dot=31:*.dotx=31:*.ott=31:*.xls=31:*.xlsx=31:*.ods=31:*.ots=31:*.ppt=31:*.pptx=31:*.odp=31:*.otp=31:*.fla=31:*.psd=31:*.7z=1;35:*.apk=1;35:*.arj=1;35:*.bin=1;35:*.bz=1;35:*.bz2=1;35:*.cab=1;35:*.deb=1;35:*.dmg=1;35:*.gem=1;35:*.gz=1;35:*.iso=1;35:*.jar=1;35:*.msi=1;35:*.rar=1;35:*.rpm=1;35:*.tar=1;35:*.tbz=1;35:*.tbz2=1;35:*.tgz=1;35:*.tx=1;35:*.war=1;35:*.xpi=1;35:*.xz=1;35:*.z=1;35:*.Z=1;35:*.zip=1;35:*.ANSI-30-black=30:*.ANSI-01;30-brblack=01;30:*.ANSI-31-red=31:*.ANSI-01;31-brred=01;31:*.ANSI-32-green=32:*.ANSI-01;32-brgreen=01;32:*.ANSI-33-yellow=33:*.ANSI-01;33-bryellow=01;33:*.ANSI-34-blue=34:*.ANSI-01;34-brblue=01;34:*.ANSI-35-magenta=35:*.ANSI-01;35-brmagenta=01;35:*.ANSI-36-cyan=36:*.ANSI-01;36-brcyan=01;36:*.ANSI-37-white=37:*.ANSI-01;37-brwhite=01;37:*.log=01;32:*~=01;32:*#=01;32:*.bak=01;36:*.BAK=01;36:*.old=01;36:*.OLD=01;36:*.org_archive=01;36:*.off=01;36:*.OFF=01;36:*.dist=01;36:*.DIST=01;36:*.orig=01;36:*.ORIG=01;36:*.swp=01;36:*.swo=01;36:*,v=01;36:*.gpg=34:*.gpg=34:*.pgp=34:*.asc=34:*.3des=34:*.aes=34:*.enc=34:*.sqlite=34:

echoコマンドで設定を編集することも可能だが、下記の様にdircolorsコマンドを用いて.dircolorsファイルを作成/編集するほうがよい。

% dircolors -p > ~/.dircolors // .dircolorsファイルを作成

今回は既に作成済のsolarized テーマを使用した。

% git clone https://github.com/seebi/dircolors-solarized
% cp dircolors-solarized/dircolors.ansi-universal ~/.dircolors

2.設定の反映

下記のコマンドで設定を反映しエイリアスを行えば次回以降から反映される。
.bashrcあたりに記載しておけばよい。

% eval `dircolors ~/.dircolors -b` //.dircolorsファイルを反映
% alias ls='ls --color=auto'

その他

ついでに.bashrc の60行目付近下記の様に変更するとコマンドラインの先頭のあたりの色もみやすくなります。

if [ "colorprompt"=yes];thenPS1=′colorprompt"=yes];thenPS1=′{debian_chroot:+($debian_chroot)}[\033[01;32m]\u@\h[\033[00m]:[\033[00;36m]\w[\033[00m]\$ '
else

参考

https://sig9.hatenablog.com/entry/2017/11/07/000000

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

基本的なLINUXコマンド

基本的なLinuxのコマンド

こんなコマンドあったなーって思い出すのにちょうどいい内容です。
オプションとかは書いていないので詳しく知りたい方は別のサイトで調べたほうがよいです。

コマンドラインでの編集

コマンド 内容
ctrl + b  1文字戻る
ctrl + f  1文字進む
ctrl + a  行頭に移動する
ctrl + e  行末に移動する
ctrl + p,↑ 1つ前(Previous)のコマンドを表示

ファイルとディレクトリの確認

コマンド 内容
pwd カレントディレクトリを表示
cd カレントディレクトリを変更する
ls カレントディレクトリ内のファイルを表示する

ファイル操作

コマンド 内容
mkdir [オプション] <作成するディレクトリ名> ディレクトリを作成する
touch <新しいファイル名1> <新しいファイル名2>... ファイルを作成する
rm [オプション] <削除するファイル名1> <削除するファイル名2>... ファイルを削除する
cat [オプション] <ファイル名> ファイルを表示する
cp [オプション] <コピー元>... <コピー先> ファイルやディレクトリのコピー
mv [オプション] <移動元>... <移動先> ファイルやディレクトリを移動する

ファイルを探す

コマンド 内容
find <検索開始ディレクトリ> <検索条件> <アクション> ファイルを検索

コマンドの内容を調べたいとき

コマンド 内容
man <調べたいコマンド名> きっと教えてくれる

がんばりましょー!

参考(Thanks)

新しいLinuxの教科書

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux LVM RAID

RAID1の実現としては、昔ながらのMDカーネルドライバを使ってRAIDアレイを作りその上でLVM を作る、いわゆるLVM on RAIDと呼ばれる方法もありますが(LVMは作らなくても構わない)、

ここではLVM の機能でミラー化された、LVM RAID volume の作成方法を記します。
LVM は RAID 1/4/5/6/10をサポートしています。
(内部ではMDカーネルドライバを使っている)

ルートで作業します。

対象ディスクは /dev/sde, /dev/sdf

ls -F /dev/sde* /dev/sdf*
/dev/sde /dev/sdf

パーティションの作成

パーティションを削除してディスク全体をLVM管理下に置くことも可能。

gdisk /dev/sde
Command (? for help): p
略
Disk /dev/sde: 3907029168 sectors, 1.8 TiB
Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help): n
略
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Command (? for help): p
Disk /dev/sde: 3907029168 sectors, 1.8 TiB
略
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      3907029134   1.8 TiB     8E00  Linux LVM

Command (? for help): w
略
Do you want to proceed? (Y/N): y
略
The operation has completed successfully.
gdisk /dev/sdf
略

確認

ls -F /dev/sde* /dev/sdf*
/dev/sde /dev/sde1 /dev/sdf /dev/sdf1

PV(Physical Volume)の作成

pvcreate <devices>

pvcreate /dev/sde1 /dev/sdf1
  Physical volume "/dev/sde1" successfully created.
  Physical volume "/dev/sdf1" successfully created.

確認
pvs
pvdisplay

pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sde1     lvm2 ---  <1.82t <1.82t
  /dev/sdf1     lvm2 ---  <1.82t <1.82t

pvdisplay
  "/dev/sde1" is a new physical volume of "<1.82 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sde1
  VG Name               最初は空
  PV Size               <1.82 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               BTiUhz-TssW-6hFv-tr70-QO3Y-QbU3-mpNL8N

  "/dev/sdf1" is a new physical volume of "<1.82 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdf1
  VG Name               最初は空
  PV Size               <1.82 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               6Il3bs-mr2f-46RS-rV5O-Tavu-PPcu-QNofe5

削除
pvremove <devices>

pvremove /dev/sde1 /dev/sdf1

VG(Volume Group)の作成

vgcreate <volume name> <devices>

vgcreate vg1 /dev/sde1 /dev/sdf1
  Volume group "vg1" successfully created

確認
vgs
vgdisplay
vgscan
pvdisplay

vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg1   2   0   0 wz--n- <3.64t <3.64t

vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <3.64 TiB
  PE Size               4.00 MiB
  Total PE              953862
  Alloc PE / Size       0 / 0   
  Free  PE / Size       953862 / <3.64 TiB
  VG UUID               eGU09g-QCWJ-pbCR-a9rf-YtKW-8b9e-BUqIPI

vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg1" using metadata type lvm2

pvdisplay
  --- Physical volume ---
  PV Name               /dev/sde1
  VG Name               vg1   ← VG名
  PV Size               <1.82 TiB / not usable <4.07 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              476931
  Free PE               476931
  Allocated PE          0
  PV UUID               BTiUhz-TssW-6hFv-tr70-QO3Y-QbU3-mpNL8N

  --- Physical volume ---
  PV Name               /dev/sdf1
  VG Name               vg1   ← VG名
  PV Size               <1.82 TiB / not usable <4.07 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              476931
  Free PE               476931
  Allocated PE          0
  PV UUID               6Il3bs-mr2f-46RS-rV5O-Tavu-PPcu-QNofe5

VG名の変更

vgrename <old vg name> <new vg name>

VGの削除

vgremove <vg name>

RAID1 LV(Logical Volume)の作成

lvcreate --type raid1 -m <N> -L <S> -n <LV> <VG>

  • N: ミラー数を指定。ディスクが2台なら1
  • S: LVのサイズを指定
  • LV: 作成したいLV名
  • VG: 使用するVG名(vgcreateで作成したもの)
lvcreate --type raid1 -m 1 -L 1.8T -n lv1 vg1
  Rounding up size to full physical extent 1.80 TiB
  Logical volume "lv1" created.

確認
lvs
lvdisplay

lvs
  LV   VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 rwi-a-r--- 1.80t                                    0.00            

lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                WBAnij-OHQm-8jwT-OV0X-iVAk-9FMT-DpYiXJ
  LV Write Access        read/write
  LV Creation host, time d1, 2020-05-04 21:05:59 +0900
  LV Status              available
  # open                 0
  LV Size                1.80 TiB
  Current LE             471860
  Mirrored volumes       2
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:4

LV名の変更

lvrename /dev/<vg name>/<old lv name> /dev/<vg name>/<new lv name>

LVの削除

lvremove <lv path>

lvremove /dev/vg1/lv1

ファイルシステムの作成

mkfsコマンド <lv path>

mkfs.ext4 /dev/vg1/lv1

LVのマウント

ここではマウントポイントは /disks/raid としています。

mount /dev/vg1/lv1 /disks/raid

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg1-lv1  1.8T   77M  1.7T   1% /disks/raid

fstabに記載

blkid | grep mapper
/dev/mapper/vg1-lv1_rimage_0: UUID="896732c2-ce1b-4edc-889f-c749afcde18f" TYPE="ext4"
/dev/mapper/vg1-lv1_rimage_1: UUID="896732c2-ce1b-4edc-889f-c749afcde18f" TYPE="ext4"
/dev/mapper/vg1-lv1: UUID="896732c2-ce1b-4edc-889f-c749afcde18f" TYPE="ext4"

ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 May  4 20:15 2f0035ec-eb69-4cb1-9a02-7774a7de8c87 -> ../../sdc1
lrwxrwxrwx 1 root root 10 May  4 20:15 4d0dc8c5-4640-4817-becc-966186982c06 -> ../../sda2
lrwxrwxrwx 1 root root 10 May  4 21:13 896732c2-ce1b-4edc-889f-c749afcde18f -> ../../dm-4
lrwxrwxrwx 1 root root 10 May  4 20:15 e3641bda-7386-4330-b325-e57d11f420bb -> ../../sdb1
lrwxrwxrwx 1 root root 10 May  4 20:15 f42dc771-696a-42e7-9f2b-9dbb6057c6b8 -> ../../sdd1
lrwxrwxrwx 1 root root 10 May  4 20:15 FA3B-8EA8 -> ../../sda1

vim /etc/fstab
UUID="896732c2-ce1b-4edc-889f-c749afcde18f"  /disks/raid  ext4  noatime,nodiratime,relatime 0  0

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry PIのコンソール接続し、ロカールIP及びSD情報表示

概要

RaspberryPIでSSHターミナルを起動した際に現在DHCPから配布されているIPアドレスを表示します。
そしてSDカードの容量も表示します。

修正ファイル 「.bashrc」

下記のコマンドでファイルを修正します。
VIを使っていますが、他の編集ツールでも大丈夫です。

vi ~/.bashrc

上記のファイルに以下の内容を追記し、保存します。

echo "==IP Address=="
ip addr | grep "inet " | grep brd | awk '{print $2}' | awk -F/ '{print $1}'
echo ""
echo "==Disk Space=="
df -h

SSHターミナルを起動

ターミナルを起動すると以下の画面のように表示されます。

Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jun 21 08:19:14 2020 from 192.168.1.2

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

==IP Address==
192.168.1.13

==Disk Space==
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  5.8G  7.9G  43% /
devtmpfs        841M     0  841M   0% /dev
tmpfs           970M     0  970M   0% /dev/shm
tmpfs           970M  8.6M  962M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           970M     0  970M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   51M  202M  21% /boot

tmpfs           194M     0  194M   0% /run/user/1000

その他

グローバルのIPも表示したい場合は、下記のコマンドを利用してください。

pi@raspberrypi:~ $ curl globalip.me
219.107.XXX.XXX

終わりに

今日はSSHで接続した場合、「.bashrc」が実行される内容にコマンドを追記してみました。
何より現在使っているディスクの容量が確認できてよかったと思います。
皆さんも表示したい情報がありましたらこのファイルに追記してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry PIのコンソール接続し、ローカルIP及びSD情報表示

概要

RaspberryPIでSSHターミナルを起動した際に現在DHCPから配布されているIPアドレスを表示します。
そしてSDカードの容量も表示します。

修正ファイル 「.bashrc」

下記のコマンドでファイルを修正します。
VIを使っていますが、他の編集ツールでも大丈夫です。

vi ~/.bashrc

上記のファイルに以下の内容を追記し、保存します。

echo "==IP Address=="
ip addr | grep "inet " | grep brd | awk '{print $2}' | awk -F/ '{print $1}'
echo ""
echo "==Disk Space=="
df -h

SSHターミナルを起動

ターミナルを起動すると以下の画面のように表示されます。

Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jun 21 08:19:14 2020 from 192.168.1.2

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

==IP Address==
192.168.1.13

==Disk Space==
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  5.8G  7.9G  43% /
devtmpfs        841M     0  841M   0% /dev
tmpfs           970M     0  970M   0% /dev/shm
tmpfs           970M  8.6M  962M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           970M     0  970M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   51M  202M  21% /boot

tmpfs           194M     0  194M   0% /run/user/1000

その他

グローバルのIPも表示したい場合は、下記のコマンドを利用してください。

pi@raspberrypi:~ $ curl globalip.me
219.107.XXX.XXX

終わりに

今日はSSHで接続した場合、「.bashrc」が実行される内容にコマンドを追記してみました。
何より現在使っているディスクの容量が確認できてよかったと思います。
皆さんも表示したい情報がありましたらこのファイルに追記してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初心者なりに/proc ディレクトリについて調べてみた

概要

Red Hat Enterprise Linux 4: リファレンスガイド - 5.3. /proc/配下のディレクトリ の説明によると

カーネルに関する情報の共通グループは、/proc/ ディレクトリ内のディレクトリ及びサブディレクトリにグループ化されます。

だそうです、あんまり分かりません。
通信用語の基礎知識 - /proc によると

UNIXやPOSIX準拠OS(Linux等)で、プロセス関係の情報が置かれるディレクトリ。
概要
具体的には、procfsをマウントするためのディレクトリ(マウントポイント)である。
UNIX System V、BSD、Linuxなどオペレーティングシステム(OS)を問わずこのディレクトリは存在するが、その内容については各OSのカーネルの仕様に依存しており、相互の互換性などはない。
OSによっては、プロセスの情報だけでなく、カーネルの情報を読み出すこともできる。
Linuxでも、どのディストリビューションにも例外なくあるが、FHSには規定されていない。
特徴
ファイル
ここに置かれた情報は、実際にはファイルとしてその実体は存在しない。
procfsがマウントされていると、PIDのディレクトリがあるように見え、ここから各種プロセスの情報を読み出すことができる。情報は一見ディレクトリやファイルに見えるが、仮想化されたものであって、ディスク上にファイル等がある訳ではない。
UNIXだけでなくLinuxでも同様だが、加えてカーネル内部の情報にアクセスするための情報がある。これも一見ファイルに見えるが、同様にファイルではない。

だそうです
こっちの方が分かりやすいですね

man proc してみるとめちゃくちゃ長いですが、概要は

DESCRIPTION
The proc filesystem is a pseudo-filesystem which provides an interface to kernel data
structures. It is commonly mounted at /proc. Typically, it is mounted automatically by
the system, but it can also be mounted manually using a command such as:

      mount -t proc proc /proc

Most of the files in the proc filesystem are read-only, but some files are writable,
allowing kernel variables to be changed.

DeepL に突っ込むと

説明
proc ファイルシステムはカーネルのデータ構造へのインターフェイスを提供する擬似ファイルシステムです。 一般的には /proc にマウントされます。 通常、システムによって自動的にマウントされますが、以下のようなコマンドを使って手動でマウントすることもできます。

      mount -t proc proc /proc

proc ファイルシステム内のほとんどのファイルは読み込み専用ですが、一部のファイルは書き込み可能で、カーネル変数を変更することができます。

なんとなく分かってきました

プロセスディレクトリ

まず、ls してみると数字のディレクトリが複数あります。
これは実行時大してプロセスが起動していないので少ないですが、
ps してみると同じプロセスIDが確認出来ると思います。

$ ls -al /proc | head
total 4
dr-xr-xr-x 144 root      root                    0 Jun 10 00:59 .
drwxr-xr-x  23 root      root                 4096 Jun 10 00:59 ..
dr-xr-xr-x   9 root      root                    0 Jun 10 00:59 1
dr-xr-xr-x   9 mizutoki_ mizutoki_               0 Jun 10 00:59 10
dr-xr-xr-x   9 mizutoki_ mizutoki_               0 Jun 10 01:15 188
dr-xr-xr-x   9 mizutoki_ mizutoki_               0 Jun 10 01:15 189
dr-xr-xr-x   9 root      root                    0 Jun 10 00:59 8
dr-xr-xr-x   9 root      root                    0 Jun 10 00:59 9
dr-xr-xr-x   2 root      root                    0 Jun 10 00:59 acpi
$ ps
  PID TTY          TIME CMD
   10 pts/0    00:00:00 zsh
  218 pts/0    00:00:00 ps

それぞれのプロセス固有の情報が置かれているのでこれらをプロセスディレクトリと呼ぶそうです。
そして /proc/self は自分のプロセスIDを分かっていなくても、自分自身のプロセスディレクトリにアクセス出来るそうです。

そのプロセスディレクトリの中身を覗いてみます

$ ls -al /proc/10
total 0
dr-xr-xr-x   9 mizutoki_ mizutoki_ 0 Jun 10 00:59 .
dr-xr-xr-x 143 root      root      0 Jun 10 00:59 ..
dr-xr-xr-x   2 mizutoki_ mizutoki_ 0 Jun 10 01:26 attr
-r--------   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 auxv
-r--r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cgroup
--w-------   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 clear_refs
-r--r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cmdline
-rw-r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 comm
-rw-r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 coredump_filter
-r--r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cpuset
lrwxrwxrwx   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 cwd -> /mnt/c/Users/mizutoki_
-r--------   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 environ
lrwxrwxrwx   1 mizutoki_ mizutoki_ 0 Jun 10 00:59 exe -> /bin/zsh
dr-x------   2 mizutoki_ mizutoki_ 0 Jun 10 00:59 fd
dr-x------   2 mizutoki_ mizutoki_ 0 Jun 10 01:26 fdinfo
-rw-r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 gid_map
-r--------   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 io
-r--r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 limits
dr-x------   2 mizutoki_ mizutoki_ 0 Jun 10 01:26 map_files
-r--r--r--   1 mizutoki_ mizutoki_ 0 Jun 10 01:26 maps
.
.
.

ファイル群

理解が容易だったものをいくつか抜粋して見ますと

  • /proc/[pid]/cmdline

プロセスの完全なコマンドラインを保持
例えば、

$ cat /proc/10/cmdline  
-zsh
$ cat /proc/self/cmdline
cat/proc/self/cmdline
  • /proc/[pid]/cwd

プロセスの現在の作業ディレクトリ

  • /proc/[pid]/environ

現在実行中のプログラムが起動された時に設定された最初の環境が含まれている。
この説明だとあまり分かりませんが、cat して見ると環境変数が入っています

* /proc/[pid]/status

/proc/[pid]/stat, /proc/[pid]/statm の情報の多くを、人間が解析しやすい形式で表示する

$ cat /proc/self/status 
Name:   cat
Umask:  0022
State:  R (running)
Tgid:   1035
Ngid:   0
Pid:    1035
PPid:   10
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 64
Groups: 4 20 24 25 27 29 30 44 46 108 114 1000 
NStgid: 1035
NSpid:  1035
NSpgid: 1035
NSsid:  10
VmPeak:     6324 kB
VmSize:     6324 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:       836 kB
VmRSS:       836 kB
RssAnon:              68 kB
RssFile:             768 kB
RssShmem:              0 kB
VmData:      312 kB
VmStk:       140 kB
VmExe:        32 kB
VmLib:      2112 kB
VmPTE:        52 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
Threads:        1
SigQ:   0/102431
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
.
.
.
  • /proc/cpuinfo CPU と アーキテクチャに依存する項目のコレクション
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
stepping        : 10
microcode       : 0xffffffff
cpu MHz         : 3695.998
cache size      : 12288 KB
physical id     : 0
siblings        : 12
core id         : 0
cpu cores       : 6
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 21
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall
.
.
.

他にもたくさんあるので、詳しく知りたい方は man proc を読んでみてください

参照

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntuで5GHz帯アクセスポイントが作成できなかった話

Ubuntuで5GHz帯アクセスポイントが作成できなかった話

要約

Ubuntuで無線LANルーターの代わりが出来ると聞いて試してみたら、5GHz帯が使用できなかった。原因はIntelチップセット用Linuxドライバiwlwifiの仕様。atherosドライバの一部ならいけるらしいが試せていない。

環境

  • OS: Ubuntu 20.04 LTS
  • ハードウェア: 小型PC。WiFiチップはIntel AC7265。インターフェイスはm.2 2230。

現象

  • UbuntuだとGUIからアクセスポイント作成可能ということで、手順に沿ってアクセスポイントを作成した。
  • 2.4GHz帯を指定すると問題なくアクセスポイントとして機能するのに、5GHz帯を指定すると機能しなかった。
  • もちろんハードウェアは2.4GHz, 5GHz両方に対応しているし、設定すれば5GHzのアクセスポイントに問題なく接続できる。

調査結果

Intelのドライバは5GHzアクセスポイントモードが無いという記述があった。確かに紹介されていたリンクには"AP mode on 2.4GHz (on devices driven by iwlmvm)"とあり5GHzと書かれていない。ということは、クライアントモードなら5GHz対応だがアクセスポイントモードには5GHz非対応であると考えられる。

Intel AC7265のページ自体には対応周波数しか書かれていないので、ハードウェアというよりドライバ側の仕様なのだろうか。

上記に至るまでに試したこと

APモード対応確認

上記ページにあったリンク先の記載に従ってiw listでAPに対応可能か確認したら対応していた。2.4GHz帯と5GHz帯でAPモード対応に違いがあるかもと思って調べたが、両周波数に共通の項目だった。

create_apの導入

  • 2.4GHz帯のチャンネル指定では動作して5GHz帯は不可という点は変わらず。
  • 国コードが関係しているという話から、JPを指定すれば変わるかもしれないと思ったがそんなことはなかった。
  • チャンネルを複数指定できるかと思ったができない。
  • 2.4GHz, 5GHzでそれぞれ別々にアクセスポイントをたてられるかと思ったが、 チップセットによって同時に立てられるアクセスポイント数が決まっているとのこと。iw listの結果なのでcreate_apに限った話ではない。

試さなかったこと

カーネル再構築

no IR フラグについての回答カーネルにパッチを当てると出来るみたいなことを書いてあるのだけれど、Debianの話なので少なくともそのまま適用できるものではない。仮に可能だとしても、分析して適用してみようとまでは思えなかった。

無線LANチップの交換

外付けアンテナ(無線アダプタ)を買うぐらいなら小型WiFiルーターを買ったほうがいいわけで、あくまでも内蔵無線LANチップを交換する路線で。

Qualcomm製チップ用ドライバには対応しているものがあるとのことだが、残念ながらそのチップが載ったカードはMini PCI Expressのみで、Amazonではm.2 2230対応のカードは常識的な価格では入手不可能。

あきらめずに調べているとBointec DGF109AというチップにQCA6174A-5のチップが使われていて、さらに探すとMOUSERというところで売っていた。

MOUSER自体はコンシューマー向けではないものの、それなりの会社っぽい(よくはわからない)。ただ、購入しようとすると購入サイトでエラーが頻発すること、4,118円+エクスプレス料金2,000円とそれなりに高額なこと、2.4GHz帯のアクセスポイントは必要なので5GHz帯のアクセスポイントと排他的にしか運用できない仕様であった場合、仮に5GHzで使えても無駄な投資になることなどから注文を断念した。

考察

5GHz帯はDFSなどの問題もありドライバも対応が難しいのかもしれない。

改訂履歴

2020/5/30: 下書き
2020/6/20: 初版

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

大きなサイズのファイルを高速に作る方法

はじめに

空のファイルを作る時、どのようなコマンドを使っているでしょうか?
私の場合は以下のように、ファイルサイズが0であればtouchコマンド、一定のサイズのファイルが必要な場合はddコマンドを使っていました。

ところがddコマンドとは別に、一定のサイズのファイルを作る方法としてfallocateというコマンドがあることを知ったので、両者のパフォーマンスを比較してみました。

[nkojima@akagi sample_files]$ touch sample.txt
[nkojima@akagi sample_files]$ dd if=/dev/zero of=./sample2.txt bs=1K count=1024
1024+0 レコード入力
1024+0 レコード出力
1048576 バイト (1.0 MB) コピーされました、 0.00580267 秒、 181 MB/秒
[nkojima@akagi sample_files]$ ls -lah
合計 1.0M
drwxrwxr-x  2 nkojima nkojima   43  6月 21 12:18 .
drwx------. 5 nkojima nkojima  175  6月 21 12:17 ..
-rw-rw-r--  1 nkojima nkojima    0  6月 21 12:17 sample.txt
-rw-rw-r--  1 nkojima nkojima 1.0M  6月 21 12:18 sample2.txt

テストに使用した環境

  • CPU
  • マザーボード:ASRock H110M-STX
  • メモリ:8GB(4GB×2枚)
  • ストレージ:256GB SSD(NVMe)
  • OS
    • CentOS 7.8(2003)

テスト方法

  • ddコマンドとfallocateコマンドを使って、様々なサイズのファイルを作成して、その処理速度を測定しました。
    • ファイルサイズ:100MB、500MB、1GB、2GB、4GB、8GB、16GB
  • ddコマンドのオプションのブロックサイズ(-bs)は1MBとしました。
  • 処理時間の測定には、以下のようにdateコマンドを使ったため、正確な処理時間でありません。
  • 処理を3回実行して、その平均値をテスト結果としました。
[root@akagi ~]# date; dd if=/dev/zero of=dd.txt bs=1M count=100; date;
2020年  6月 21日 日曜日 12:48:28 JST
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 0.0362178 秒、 2.9 GB/秒
2020年  6月 21日 日曜日 12:48:29 JST
[root@akagi ~]# date; fallocate -l 100m ./fallocate.txt; date;
2020年  6月 21日 日曜日 12:48:52 JST
2020年  6月 21日 日曜日 12:48:52 JST

テスト結果

  • 以下の表を見れば一目瞭然、圧倒的にfallocateコマンドの方が高速でした。
    • swap領域を作る時など、単一の大きなファイルを作る必要があるケースでは、特にfallocateコマンドが有用だと考えられます。
  • ddコマンドは高速なストレージ(NVMe-SSD)を使ってもそれなりに処理時間がかかるので、低速なストレージだとさらに大きな差がつくのではないかと思います。
ファイルサイズ ddコマンドの処理時間(秒) fallocateコマンドの処理時間(秒)
100MB <1 <1
500MB <1 <1
1GB 1 <1
2GB 2 <1
4GB 4 <1
8GB 7 <1
16GB 15 <1

関連記事

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

linux alias 設定メモ./bashrc

linuxのaliasってどうやって設定すんの?

二種類ある。
- 一時的な設定
- 恒久的な設定

一時的な設定

これだとログアウトしたりすると消えてしまう。

shell
alias name='value'

恒久的な設定

homeディレクトリ配下に.bashrcってファイルが隠れているので追記する。

.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
★ここに追記
#例
alias la="ls -a"

alias確認方法

現在登録されているエイリアスはaliasコマンドで確認。

[ec2-user@~]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias la='ls -a'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

経緯

dockerコマンドにエイリアスを設定したかった

同じイメージ名でdocker-compose buildすると<none>:<none>という空のdockerのイメージファイルができてしまう。
上書きしてほしいところだが、いちいち消すしかないみたい。
だが、削除するために下記のコマンドを毎回打つのは面倒。

shell
docker images -f dangling=true -q | xargs docker rmi

コマンドメモ

command detail
docker -f フィルタ
docker -q ID抽出
xargs <commnad> <command> [パイプされた引数1] [引数2] [引数3] ...
docker rmi <imageID> docker イメージ削除

なのでrmidangというエイリアスにする。
dockerのconfigにエイリアスはないようなので、bashに追加することにした。gitみたいに用意してほしい。
ちなみにdanglingは宙ぶらりんの意。

結果

.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
alias la="ls -a"

#docker
##remove dangling images
alias rmidang="docker images -f dangling=true -q | xargs docker rmi"

参考

世の中のエンジニアのalias設定

https://qiita.com/reireias/items/d906ab086c3bc4c22147

aliasと関数で幸せになろう

https://qiita.com/belion_freee/items/528ff57b920d559abf3d
aliasの引数使いたいときは関数を使う

bash起動時の設定ファイル実行順序

https://qiita.com/tatesuke/items/88629e9550b813109964

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

linux alias 設定メモ

linuxのaliasってどうやって設定すんの?

二種類ある。
- 一時的な設定
- 恒久的な設定

一時的な設定

これだとログアウトしたりすると消えてしまう。

shell
alias name='value'

恒久的な設定

homeディレクトリ配下に.bashrcってファイルが隠れているので追記する。

.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
★ここに追記
#例
alias la="ls -a"

alias確認方法

現在登録されているエイリアスはaliasコマンドで確認。

[ec2-user@~]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias la='ls -a'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

経緯

dockerコマンドにエイリアスを設定したかった

同じイメージ名でdocker-compose buildすると<none>:<none>という空のdockerのイメージファイルができてしまう。
上書きしてほしいところだが、いちいち消すしかないみたい。
だが、削除するために下記のコマンドを毎回打つのは面倒。

shell
docker images -f dangling=true -q | xargs docker rmi

コマンドメモ

command detail
docker -f フィルタ
docker -q ID抽出
xargs <commnad> <command> [パイプされた引数1] [引数2] [引数3] ...
docker rmi <imageID> docker イメージ削除

なのでrmidangというエイリアスにする。
dockerのconfigにエイリアスはないようなので、bashに追加することにした。gitみたいに用意してほしい。
ちなみにdanglingは宙ぶらりんの意。

結果

.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
alias la="ls -a"

#docker
##remove dangling images
alias rmidang="docker images -f dangling=true -q | xargs docker rmi"

参考

世の中のエンジニアのalias設定

https://qiita.com/reireias/items/d906ab086c3bc4c22147

aliasと関数で幸せになろう

https://qiita.com/belion_freee/items/528ff57b920d559abf3d
aliasの引数使いたいときは関数を使う

bash起動時の設定ファイル実行順序

https://qiita.com/tatesuke/items/88629e9550b813109964

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerコマンドをlinuxのalias設定に設定する

linuxのalias設定方法

二種類ある。
- 一時的な設定
- 恒久的な設定

一時的な設定

これだとログアウトしたりすると消えてしまう。

shell
alias name='value'

恒久的な設定

homeディレクトリ配下に.bashrcというファイルが隠れているので追記する。

.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
★ここに追記
#例
alias la="ls -a"

alias確認

現在登録されているエイリアスはaliasコマンドで確認。

[ec2-user@~]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias la='ls -a'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

追加したいdockerコマンド

同じイメージ名でdocker-compose buildすると<none>:<none>という空のdockerのイメージファイルができてしまう。
上書きしてほしいところだが、下記のコマンドを打っていちいち消すしかないみたい。

shell
docker images -f dangling=true -q | xargs docker rmi

コマンドメモ

command detail
docker -f フィルタ
docker -q ID抽出
xargs <commnad> <command> [パイプされた引数1] [引数2] [引数3] ...
docker rmi <imageID> docker イメージ削除

削除するために下記のコマンドを毎回打つのは面倒なので、dockerコマンドにエイリアスを設定したかったが、dockerのconfigにエイリアスはないらしい。
しかたなくbashに追加することにした。gitみたいに用意してほしい。

今回はrmidangというエイリアスにする。
ちなみにdanglingは宙ぶらりんの意。

結果

.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
alias la="ls -a"

#docker
##remove dangling images
alias rmidang="docker images -f dangling=true -q | xargs docker rmi"

参考

世の中のエンジニアのalias設定

https://qiita.com/reireias/items/d906ab086c3bc4c22147

aliasと関数で幸せになろう

https://qiita.com/belion_freee/items/528ff57b920d559abf3d
aliasの引数使いたいときは関数を使う

bash起動時の設定ファイル実行順序

https://qiita.com/tatesuke/items/88629e9550b813109964

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む