20200224のLinuxに関する記事は24件です。

LVM構成のCentOS7でシャットダウンに時間が掛かる。

はじめに

CentOS7でシャットダウンに時間が掛かる事象が発生。shutdown -h nowを実行して、
真っ黒画面に遷移した後、真っ黒画面の状態で90秒程停滞し、その後停止する。

真っ黒画面の状態でESCを押すと、下記のようなメッセージが確認できた。

A stop job is running for LVM2 metadata daemon

メッセージを検索すると、シャットダウン時に発生するLVMのバグらしい。

lvmetadの無効化

2.02.187でfixされているようだが、2020/02/24時点、CentOS7向けの
lvm2パッケージは2.02.185が最新のようだったので、lvmetadを無効化して
対処する。/etc/lvm/lvm.confを下記のように変更すると、lvmetadを無効化できる。

"変更前"
        use_lvmetad = 0
"変更後"
        use_lvmetad = 1

再度OSをシャットダウンして、すんなり落ちれば対処完了。

参考

sourceware.org - lvm2.git / commitdiff
Red Hat -メタデータデーモン (LVMETAD)

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

【Linuxコマンド】 man コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 man コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

man コマンドとは

各コマンドのマニュアルを確認する為のLinuxコマンドです。
"man" は "manual"の略です。

コマンドの使い方

$ man '確認したいコマンド'

# cd コマンドを確認する例
$ man cd

man コマンドのオプション一覧

オプション 説明
-a 対象のすべてのマニュアルの表示
-d デバッグモードで表示
-k マニュアルの検索
-K マニュアルの本文で検索
-P pagerの指定
-c コンフィグファイルを指定

-P オプション

# cd コマンドのマニュアルをcatを使い表示する
$ man -P cat cd

その他のLinuxコマンドのオプション一覧

cp

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 cp コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 cp コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

cp コマンドとは

ファイルやディレクトリをコピーする時に使うLinuxコマンドです。
"cp"は"copy"の略です。

コマンドの使い方

$ cp コピー元 コピー先

#同じディレクトリ内にコピー
$ cp test.txt test2.txt

#別のディレクトリ(testディレクトリ)へコピー
$ cp test.txt /home/hoge/test2/test2.txt

#別のディレクトリ(testディレクトリ)へ同じ名前でコピー
$ cp コピー元 コピー先のディレクトリ名
$ cp test.txt test2

#複数ファイルをコピー
$ cp コピー元その1 コピー元その2 コピー先のディレクトリ名
$ cp test.txt test2.txt test3

cp コマンドのオプション一覧

オプション 説明
-a 元ファイルの属性とディレクトリの構成を保持してコピーする。
-b 上書きされるファイルのバックアップを作成する
-d シンボリックリンクをコピーする際に実体をコピーする
-f コピー先に同じ名前のファイルがある際に警告なしで上書きをする。
-i 上書きされるファイルがある際に確認が入る。
-l ハードリンクを作成する
-P ディレクトリ構造ごとコピーする
-p 元のファイルのオーナー、グループ、パーミション、タイムスタンプを保持
-r コピー元にディレクトリを指定した場合、再帰的に(サブディレクトリも含めて)コピーする
-s コピーの代わりにシンボリックリンクを作成する
-u 保存先が同じファイル名のファイルだったとき、タイムスタンプを確認して、新しいor同じだったときコピーしない。
-v 実行内容を表示

-rオプション

/home/hoge
#ディレクトリごとコピーする
$ cp -r コピー元ディレクトリ コピー先ディレクトリ

#testディレクトリをtest2ディレクトリ配下へコピー
$ cp -r test /home/hoge/test2

-sオプション

#シンボリックリンクを作成する
$ cp -s 元ファイル シンボリックリンク

#test.txtのシンボリックリンクを作成
$ cp -s test.txt test_symbolic.txt

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 touch コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 touch コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

touch コマンドとは

タイムスタンプを変更するためのLinuxコマンドです。
また、存在しないファイル名を指定することで、ファイルを新規作成する機能も持っています。

コマンドの使い方

$ touch ファイル名

#testファイルのタイムスタンプを現在にする
$ touch test.txt

#存在しないファイル名を指定してファイル新規作成
$ touch testoooooooo.txt

touchコマンドのオプション一覧

オプション 説明
-d 日時を指定する
-c ファイルを新規作成しない
-r 指定したファイルのタイムスタンプに合わせる
-a 最終アクセス日時のみ変更する
-m 最終更新日時のみ変更する
-h シンボリックリンクの場合、リンク先ではなくシンボリックそのもののタイムスタンプを変更する

-d オプション

$ touch -d 日付 ファイル名

#ファイルtest.txtのタイムスタンプを2020年1月1日21:30に指定する。
$ touch -d "2020-1-1 21:30" test.txt

-c オプション

$ touch -c ファイル名

#ファイルtest.txtのファイルが存在しなければ新規作成、存在していればタイムスタンプを書き換える。
$ touch -c test.txt

-r オプション

$ touch -r 既存のファイル名 対象ファイル名

#ファイルtest.txtのタイムスタンプをファイルtest2.txtのタイムスタンプと同一にする。
$ touch -r test2.txt test.txt

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 less コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 less コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

less コマンドとは

ファイルの中身を確認する為のLinuxコマンドです。

コマンドの使い方

/home/hoge
$ less '確認したいファイル名'

# hoge fileを確認する例
$ less hoge

man コマンドのオプション一覧

オプション 説明
-F 1画面以下の行しかないファイルの場合lessを終了する      
--help ヘルプ画面の表示
-i 検索時に大文字小文字の判別をしない
-N 行番号の表示
-r エスケープシーケンスをそのまま出力する
-R 色以外のエスケープシーケンスをそのまま出力する
-S 折り返しせず表示し、横にもスクロールできるようにする
--version バージョンを表示する
-X 画面をclearせずに最後の状態を保ったままlessを終了する

-X オプション

/home/hoge
# 終了時の画面を維持する
$ less -X hoge.txt
hogehoge #内容が残ったままです

--version オプション

# less コマンドのバージョンを確認する
$ less --version

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 mkdir コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 mkdir コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

mkdir コマンドとは

ディレクトリを新規作成するLinuxコマンドです。
"mkdir" は "make directory"の略です。

コマンドの使い方

$ mkdir ディレクトリ名

#hogeディレクトリ作成
$ mkdir hoge

mkdirコマンドのオプション一覧

オプション 説明
-m パーミッションを指定しディレクトリを作成する
-p エラーを表示せず記述したディレクトリが存在しなければ作成する
-v ディレクトリを作成した結果のメッセージを表示する

-m オプション

$ mkdir -m パーミッション指定 ディレクトリ名

#パーミッションが666のhogeディレクトリを作成する。
$ mkdir -m 666 hoge

-p オプション

mkdirは作成しようとしているディレクトリが存在していると、エラーになりディレクトリが作成されない。ディレクトリがすでにあるにもかかわらず再度作成すると、そのディレクトリ内容も削除されてしまうからです。また、mkdirは作成する親ディレクトリが存在していなくてもエラーになり子ディレクトリが作成されません。
これらを解決するのが-pオプションです。-pを指定することで、ディレクトリが存在していてもエラーメッセージを表示せず、現在あるディレクトリはそのままにして新規に作成することはなく子ディレクトリを作成することができます。

$ mkdir -p ディレクトリ名

#現在hogeディレクトリがある場合は無視し、ない場合はhogeディレクトリを作成する。
$ mkdir -p hoge

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 rm コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 rm コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

rm コマンドとは

ファイルやディレクトリを削除するLinuxコマンドです。
"rm" は "remove"の略です。

コマンドの使い方

/home/hoge
# ディレクトリの中身の確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

# hoge.txt を削除する
$ rm hoge.txt

# 削除されていることの確認
$ ls -l
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

man コマンドのオプション一覧

オプション 説明
-f エラーメッセージを表示せず実行する(危険)      
-i 削除前に確認する
-I 削除対象が4つ以上のときのみ、削除前に確認する      
-r ディレクトリも削除対象に含める
-v 削除の詳細を表示する      

-i オプション

/home/hoge
# ディレクトリの中身の確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

# hoge.txt を削除する
$ rm -i hoge.txt
remove hoge.txt? (y or n) y

# 削除されていることの確認
$ ls -l
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

-r オプション

/home/hoge
# ディレクトリの中身の確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

# hoge.txt を削除する
$ rm -r test

# 削除されていることの確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

-v オプション

/home/hoge
# ディレクトリの中身の確認
$ ls -v
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

# hoge.txt を削除する
$ rm -v hoge.txt
mooooo.tx

# 削除されていることの確認
$ ls -l
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2

-rf オプション(破滅の魔法)

※ 以下の作業は危険ですので絶対に真似しないで下さい。
実際には警告が出るようになっていますが、実行される際は自己責任でお願いします。

/
# 破滅してみる
$ cd /
$ sudo rm -rf /

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 cat コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 cat コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

cat コマンドとは

ファイル内容を標準出力するコマンドです。
"cat" は "concatenate"の略です。
"concatnate"=「連結する」なので本来は
「ファイル内容を標準出力する」というより「ファイル内容を連結して標準出力する」と言った方が丁寧かもしれません。

catコマンドの使い方

/home/hoge
$ cat 対象ファイル

catコマンドのオプション一覧

オプション 説明
-n 行番号をつけて出力
-b blank(空白行)を入れずに行番号をつけて出力
-s 連続した空白行を1行の空白行にまとめて出力
-E 各行の末尾に"$"をつけて出力
-T タブを"^I"に置換して出力

-nオプション

行番号をつけて出力。

オプションなしの場合は

/home/hoge/test
$ cat test.txt
hoge
hogehoge

hogehogehoge



hogehogehogehoge

-nオプションをつけると以下のように出力されます。

/home/hoge/test
$ cat -n test.txt
     1  hoge
     2  hogehoge
     3
     4  hogehogehoge
     5
     6
     7
     8  hogehogehogehoge
     9

-bオプション

blank(空白行)を入れずに行番号をつけて出力。

/home/hoge/test
$ cat -b test.txt
     1  hoge
     2  hogehoge

     3  hogehogehoge



     4  hogehogehogehoge

-sオプション

連続した空白行を1行の空白行にまとめて出力

/home/hoge/test
$ cat -s test.txt
hoge
hogehoge

hogehogehoge

hogehogehogehoge

ちなみに、-sと-nを組み合わせると↓

/home/hoge/test
$ cat -ns test.txt
     1  hoge
     2  hogehoge
     3
     4  hogehogehoge
     5
     6  hogehogehogehoge
     7

-Eオプション

各行の末尾に"$"をつけて出力
あとで"$"をカンマに置換して配列にしたりするときなんかに便利だったりします。

/home/hoge/test
$ cat test.txt
hoge$
hogehoge$
$
hogehogehoge$
$
$
$
hogehogehogehoge$
$

-Eオプション

タブを"^I"に置換して出力

以下の場合が

/home/hoge/test
$ cat ex.txt
hoge
    hogehoge
        hogehogehoge

↓こうなります。

/home/hoge/test
$ cat ex.txt
hoge
^Ihogehoge
^I^Ihogehogehoge

catコマンドの連結出力

複数のファイルを連結させて出力します。(本来のcat)

/home/hoge/test
$ cat hoge.txt
hoge

$ cat hoge2.txt
hogehoge

$ cat hoge3.txt
hogehogehoge


$ cat hoge.txt hoge2.txt hoge3.txt
hoge
hogehoge
hogehogehoge

また、連結させたものを新しいファイルとして作成できます。

/home/hoge/test
$ cat hoge.txt
hoge

$ cat hoge2.txt
hogehoge

$ cat hoge3.txt
hogehogehoge

# 3ファイルをsuperhogeとして作成
$ cat hoge.txt hoge2.txt hoge3.txt > superhoge

$ cat superhoge
hoge
hogehoge
hogehogehoge

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 ls コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 ls コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

ls コマンドとは

ファイルやディレクトリの情報を表示するためのコマンドです。
"ls" は "list directory contents"の略です。

lsコマンドの使い方

/home/hoge
$ ls 
test hoge.txt test2 

lsコマンドのオプション一覧

オプション 説明
-a 全て表示
-l 詳細表示
-1 リストを縦に並べる
-r 逆順表示
-t 更新時間順に表示
-S ファイルサイズ順でソートする
-X 拡張子順(ごと)に並べる
-R ディレクトリ内容を再帰的に表示
--full-time タイムスタンプの詳細を表示する
-h 単位を読みやすい形式で表示する
-k KB単位で表示する
-F ディレクトリ名の後に ' / ', 実行可能なファイル名の後に ' * ' をつける

-aオプション

ファイル名の先頭にピリオドがつく隠しファイルも表示。

/home/hoge
$ ls -a
test hoge.txt test2 .hidden

-lオプション

ファイルの詳細を表示。

/home/hoge
$ ls -l
-rw-r--r-- 1 root root   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 root root 4096 Feb 24 17:14 test
drwxr-xr-x 2 root root 4096 Feb 24 17:15 test2

詳細の見方ですが、一行目で説明すると

項目 説明
-rw-r--r-- ファイルの種類(左1文字)+パーミッション
1 ハードリンクの数
root 所有者
root 所有グループ
11 ファイルのサイズ
Feb 24 17:11 作成日時
hoge.txt ファイル名

-Rオプション

ディレクトリ内容を再帰的に表示。

/home/hoge
$ ls -R
hoge.txt test test2

./test
test.txt ex.txt test.log

./test2
test2.txt ex2.txt test2.log

-hオプション

ファイルサイズの単位をいい感じによろしくやってくれます。

/home/hoge
$ ls -lh
-rw-r--r-- 1 root root  11B Feb 24 17:11 hoge.txt
drwxr-xr-x 2 root root 4.0K Feb 24 17:14 test
drwxr-xr-x 2 root root 4.0K Feb 24 17:15 test2

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 cd コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 cd コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

cd コマンドとは

ディレクトリを移動するLinuxコマンドです。
"cd" は "change directory"の略です。

cdコマンド 使い方一覧

ルートディレクトリへ移動

/home/hoge
$ cd /

ホームディレクトリへ移動

/
$ cd ~

↑↓同じ意味です。

/
$ cd 

相対パスでの移動

相対パスとは

現在いるディレクトリから見たパスのことです。

/home
$ cd hoge

絶対パスでの移動

絶対パスとは

全体の一番上から見たパスのことです。

/home/hoge
$ cd /test

1つ上の階層

/home/hoge/test
$ cd ..

2つ上の階層へ移動

/home/hoge
$ cd ../..

1つ上の階層のtaroディレクトリへ移動

/home/hoge
$ cd ../taro

-Pオプション

移動先のディレクトリがシンボリックリンクだった場合、シンボリックのターゲットに移動してくれる便利なオプション

/home
$ cd -P hogege

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 ssh コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 ssh コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

ssh コマンドとは

sshプロトコルを利用してリモートホストにログイン、もしくはコマンドを実行するためのLinuxコマンドです。
"ssh"は"secure shell"の略です。

コマンドの使い方

$ ssh ユーザ名@接続先のホスト名(IPアドレス)

#rootユーザーでIP192.168.x.xに接続する場合
$ ssh root@192.168.x.x

ssh コマンドのオプション一覧

オプション 説明
-p 接続に使用するポート番号を指定する
-i 接続に使用する公開鍵ファイルを指定する
-l 接続に使用するユーザー名を指定する

-pオプション

#接続に使用するポート番号を指定する
$ ssh -p 22 root@192.168.x.x 

-iオプション

# /home/hoge配下の公開鍵を指定
$ ssh -i /home/hoge/xxxxx root@192.168.x.x 

-lオプション

#rootユーザーでIP192.168.x.xに接続
$ ssh -l root 192.168.x.x 

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 pwd コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 pwd コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

pwd コマンドとは

現在の作業ディレクトリの場所をフルパスで表示するLinuxコマンドです。
"pwd" は "print working directory"の略です。

コマンドの使い方

/home/hoge
$ pwd
/home/hoge

man コマンドのオプション一覧

オプション 説明
-L シンボリックリンクを考慮せずパスを表示する      
-P シンボリックリンクの実体へのパスを表示する

-L オプション

/home/hoge
# ディレクトリ構成の確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2
lrwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test_link -> test2

$ cd test_link
$ pwd -L
/home/hoge/test_link

-P オプション

/home/hoge
# ディレクトリ構成の確認
$ ls -l
-rw-r--r-- 1 hoge hoge   11 Feb 24 17:11 hoge.txt
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:14 test
drwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test2
lrwxr-xr-x 2 hoge hoge 4096 Feb 24 17:15 test_link -> test2

$ cd test_link
$ pwd -P
/home/hoge/test2

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンド】 mv コマンド オプション 一覧 【初学者必見】

【Linuxコマンド】 mv コマンド オプション 一覧 【初学者必見】

まとめ
Linuxコマンド一覧

mv コマンドとは

ファイルやディレクトリを移動するためのコマンドです。
"mv" は "move"の略です。

mvコマンドの使い方

/home/hoge
$ mv 移動元 移動先

mvコマンドのオプション一覧

オプション 説明
-b 上書きまたは削除されるファイルのバックアップを取る
-f 確認せず上書きをする
-i 上書きの場合は確認をする
-n 移動先に同名のファイルやディレクトリがある場合は移動しない
-u 移動元の方が新しい場合のみ上書きする
-v 移動の詳細情報を表示

-bオプション

mvコマンドは基本は上書きをするので-bオプションをつけると上書きされるファイルのバックアップをとってくれる。

オプションがない場合の挙動

/home/hoge/test
$ ls
test.txt ex.txt test.log

$ mv test.txt ex.txt

$ ex.txt test.log

-bオプションつけた場合の挙動

/home/hoge/test
$ ls
test.txt ex.txt test.log

$ mv -b test.txt ex.txt

$ ex.txt~ ex.txt test.log

ファイル名の後ろに「~」がついているのがバックアップファイルです。

-vオプション

移動の詳細情報を表示してくれる。
複数のファイルを移動した時の確認用によく使います。

/home/hoge/test
$ ls
test.txt ex.txt test.log

$ mv -v test.txt ex.txt test.log test2
`test.txt' -> `test2/test.txt'
`ex.txt' -> `test2/ex.txt'
`test.log' -> `test2/test.log'

$ ls

$ cd ../test2

$ ls
test.txt ex.txt test.log

renameとして使う

mvコマンドは
testディレクトリ内のtest.txtを
test2ディレクトリ内のtest2.txtという名前で移動することができます。

/home/hoge/test2
$ ls

$ cd ../test

$ mv test.txt test2/test2.txt

$ cd ../test2

$ ls
test2.txt

もちろん同一ディレクトリ内でもrenameとして使えます。

なぜrenameとして使えるのか
そしてなぜ1Gの大容量でもmvコマンドは一瞬で移動できてしまうのか
ここ2つは実はmvコマンドのソースを見ると面白いのでまた、別の記事で書きます。

その他のLinuxコマンドのオプション一覧

pwd, mkdir, cd, cat, cp, ls, touch, less, mv, rm, ssh, man, 随時追加中

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

【Linuxコマンドまとめ】 コマンド 一覧 【初学者必見】

【Linuxコマンドまとめ】 コマンド 一覧 【初学者必見】

pwdコマンド

現在の作業ディレクトリの場所をフルパスで表示するLinuxコマンドです。
"pwd" は "print working directory"の略です。

/home/hoge/test_link
$ pwd -L
/home/hoge/test_link

mkdirコマンド

ディレクトリを新規作成するLinuxコマンドです。
"mkdir" は "make directory"の略です。

/home/hoge
$ ls -a
hoge.txt .hidden

$ mkdir -m 666 test

$ ls- a
hoge.txt .hidden test

cdコマンド

ディレクトリを移動するLinuxコマンドです。
"cd" は "change directory"の略です。

/home/hoge/test
$ cd ../test2

catコマンド

ファイル内容を標準出力するコマンドです。
"cat" は "concatenate"の略です。

/home/hoge/test
$ cat -n test.txt
     1  hoge
     2  hogehoge
     3
     4  hogehogehoge
     5
     6
     7
     8  hogehogehogehoge
     9

cpコマンド

ファイルやディレクトリをコピーする時に使うLinuxコマンドです。
"cp"は"copy"の略です。

/home/hoge
$ cp -r test /home/hoge/test2

lsコマンド

ファイルやディレクトリの情報を表示するためのコマンドです。
"ls" は "list directory contents"の略です。

/home/hoge
$ ls -lh
-rw-r--r-- 1 root root  11B Feb 24 17:11 hoge.txt
drwxr-xr-x 2 root root 4.0K Feb 24 17:14 test
drwxr-xr-x 2 root root 4.0K Feb 24 17:15 test2

touchコマンド

タイムスタンプを変更するためのLinuxコマンドです。
また、存在しないファイル名を指定することで、ファイルを新規作成する機能も持っています。

/home/hoge
$ ls -lh
-rw-r--r-- 1 root root  11B Feb 24 17:11 hoge.txt
drwxr-xr-x 2 root root 4.0K Feb 24 17:14 test
drwxr-xr-x 2 root root 4.0K Feb 24 17:15 test2

$ touch -d "2020-2-25 18:30" hoge.txt

$ ls -lh
-rw-r--r-- 1 root root  11B Feb 24 18:30 hoge.txt
drwxr-xr-x 2 root root 4.0K Feb 24 17:14 test
drwxr-xr-x 2 root root 4.0K Feb 24 17:15 test2

lessコマンド

ファイルの中身を確認する為のLinuxコマンドです。

/home/hoge
$ less -X hoge.txt
hogehoge
$

mvコマンド

ファイルやディレクトリを移動するためのコマンドです。
"mv" は "move"の略です。

/home/hoge/test
$ mv -v test.txt ex.txt test.log test2
`test.txt' -> `test2/test.txt'
`ex.txt' -> `test2/ex.txt'
`test.log' -> `test2/test.log'

rmコマンド

ファイルやディレクトリを削除するLinuxコマンドです。
"rm" は "remove"の略です。

/home/hoge
$ rm -i hoge.txt
remove hoge.txt? (y or n) y

sshコマンド

sshプロトコルを利用してリモートホストにログイン、もしくはコマンドを実行するためのLinuxコマンドです。
"ssh"は"secure shell"の略です。

#rootユーザーでIP192.168.x.xに接続
$ ssh -l root 192.168.x.x 

manコマンド

各コマンドのマニュアルを確認する為のLinuxコマンドです。
"man" は "manual"の略です。

# cd コマンドのマニュアルをcatを使い表示する
$ man -P cat cd

BUILTIN(1)                BSD General Commands Manual               BUILTIN(1)

NAME
     builtin, !, %, ., :, @, {, }, alias, alloc, ...

Command       External    csh(1)    sh(1)
           !             No          No        Yes
           %             No          Yes       No
           .             No          No        Yes
           :             No          Yes       Yes
           @             No          Yes       Yes...

AUTHORS
     This manual page was written by Sheldon Hearn <sheldonh@FreeBSD.org>.

BSD                            February 23, 2005                           BSD

広告欄

各種開発や構築の請負や初学者向けのメンター業務してます。
ご興味お持ちいただけた方はこちらへどうぞ

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

Linuxについて

はじめに

デプロイに取りかかる前に、学んだことをoutput致します。
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご教授願います。

Linuxについて

  • OS(Operating System)の一種
  • コンピュータ全体を管理している基本的なプログラム

例)MacOS,Windows10等

特徴

  • オープンソースであり、誰でも自由に無償で利用できる
  • 品質の高い多くのソフトウェアが利用できる
  • 世界中でサーバ用途として広く利用されているため信頼性が高い
  • 操作を自動化するための仕組みが用意されており、サーバの運用が行いやすい

ディストリビューション

  • LinuxはOSの中核である「カーネル」とOSを構成する他のプログラムからできている。
  • しかし、実際はこのカーネルだけでは何も動かないので、様々なソフトウェアを組み合わせて動くようになる。
  • その作業は一般ユーザには難しく、時間や労力もかかる。
  • そこで、すぐに動かすことができるようカーネルと様々なソフトウェアを最初から組み合わせたものを配布するようになった。
  • これをディストリビューションと呼ぶ。

さいごに

日々勉強中ですので、随時更新します。
皆様の復習にご活用頂けますと幸いです。

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

Linuxのtopコマンドでサーバの稼働状況を確認する

1. topコマンド

topコマンドで、CPUやメモリの使用率などの詳細情報をプロセスごとに一覧で確認することができるます。
デフォルトでtopコマンドは現在実行中のプロセスをCPU使用率が高い順に表示します。表示はリアルタイムで更新され、qを入力すると終了します。

topコマンド書式
top [オプション]

topコマンドの主なオプション

オプション 内容
-d 間隔 更新する間隔を「ss.tt秒」で指定する
-n 回数 表示を繰り返す回数を指定する
-b バッチモード。キー操作を受け付けず、「-n」で指定された回数または「CTRL+C」などで強制終了(kill)されるまで実行を続ける
topの結果をファイルに保存する際などに役立つ
-s セキュアモードで動作(起動中に「d」などを受け付けなくなる)
-U ユーザー
-u ユーザー
監視するユーザーを名前またはIDで指定
-p プロセスID 監視するプロセスIDを指定。「-p 番号 -p 番号」または「-p 番号, 番号」のように複数指定できる(空白は省略可能)
-c COMMAND欄(右端)を、プログラム名の表示とコマンドラインの表示のどちらにするか切り替える(起動後は「c」で切り替え)
-i 何も実行していないアイドルプロセスを表示するか、しないかを切り替える(起動後は「i」で切り替え)
-S 累積時間モード(起動後は「S」で切り替え)
-o 項目 出力の並べ替えに使用する項目(デフォルトはCPU使用率)を指定。指定できる項目名は「top -O」で確認
例えば使用メモリ(物理メモリの占有率)が大きい順に表示したい場合、「top -o %MEM」とする
-w 桁数 出力の幅

2. インタラクティブなtopコマンド

topコマンド実行中に以下のインタラクティブなコマンドを使用できます。

コマンド 詳細
Enter、Space 表示を最新の情報に直ちに更新します。
h インタラクティブコマンドのヘルプ画面を表示します。
h、? ウィンドウおよびフィールドグループのヘルプ画面を表示します。
k プロセスを kill します。プロセス ID およびプロセスに送信するシグナルがプロンプトされます。
n 表示されるプロセス番号を変更します。番号を入力するようプロンプトされます。
u 一覧をユーザー別に並べ替えます。
M 一覧をメモリ使用率で並べ替えます。
P 一覧を CPU 使用率で並べ替えます。
q ユーティリティーを終了して、シェルプロンプトに戻ります。

3. topコマンドの出力結果の見方

topコマンドで以下のように表示されます。

topコマンドの出力結果
top - 16:29:43 up 21:14,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1014820 total,   401940 free,   187588 used,   425292 buff/cache
KiB Swap:  1679356 total,  1679356 free,        0 used.   676612 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  128040   6712   4176 S  0.0  0.7   0:03.53 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    5 root      20   0       0      0      0 S  0.0  0.0   0:00.19 kworker/u2:0
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.91 ksoftirqd/0
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.90 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.95 watchdog/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.03 khungtaskd
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset

1行目(top~)の表示内容

1行目には「現在時刻」「稼働時間」「ログインユーザー数」「ロードアベレージ」が表示されます。

1行目の表示内容
top - 16:29:43 up 21:14,  1 user,  load average: 0.00, 0.01, 0.05
項目 内容
16:29:43 現在時刻(16時29分43秒)
up 21:14 稼働時間(21時間14分)
1 user ログインユーザー数(1ユーザーがログイン中)
load average: 0.00, 0.01, 0.05 過去1、5、15分間のロードアベレージ

2行目(Tasks:~)の表示内容

2行目にはタスクの状態が表示されます。

2行目の表示内容
Tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 zombie
項目 内容
total タスクの合計数
running 稼働中のタスク数
sleeping 待機中のタスク数
stopped 停止タスク数
zombie ゾンビタスク数

3行目(%Cpu(s):~)の表示内容

3行目はCPUの状態が表示されます。

3行目の表示内容
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
項目 内容
us ユーザープロセスの使用時間の割合
sy システムプロセスの使用時間の割合
ni 実行優先度を変更したユーザプロセスの使用時間の割合
id アイドル状態の時間の割合
wa I/Oの終了待をしている時間の割合
hi ハードウェア割込み要求での使用時間の割合
si ソフトウェア割込み要求での使用時間の割合
st OS仮想化利用時に、ほかの仮想CPUの計算で待たされた時間の割合

4行目(KiB Mem :)の表示内容

4行目はメモリの状態が表示されます。

4行目の表示内容
KiB Mem :  1014820 total,   401940 free,   187588 used,   425292 buff/cache
項目 内容
total メモリの合計容量
free 未使用のメモリ容量
used 使用中のメモリ容量
buff/cache バッファキャッシュ/ページキャッシュとして割り当てられたメモリ容量

5行目(KiB Swap:)の表示内容

5行目はスワップ領域の状態が表示されます。

5行目の表示内容
KiB Swap:  1679356 total,  1679356 free,        0 used.   676612 avail Mem
項目 内容
total スワップ領域の合計容量
free 未使用のスワップ領域の容量
used 使用中のスワップ領域の容量
avail Mem 新しいアプリがスワップせずに使えるメモリ容量

7行目以降の表示内容

7行目以降は、実行中の各プロセスの状態が表示されます。

7行目以降の表示内容
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  128040   6712   4176 S  0.0  0.7   0:03.53 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    5 root      20   0       0      0      0 S  0.0  0.0   0:00.19 kworker/u2:0
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.91 ksoftirqd/0
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.90 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.95 watchdog/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.03 khungtaskd
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
項目 内容
PID プロセスID
USER プロセスの実行ユーザー
PR プロセスの静的優先度(数字が低い程優先度は高い)
NI プロセスの相対優先度(0を基準とし、-20(優先度高)~19(優先度低)で表している)
VIRT プロセスの仮想メモリサイズ(スワップアウトしたメモリ使用量を加えたメモリ容量)
RES プロセスが使用しているメモリ容量(物理メモリ容量)
SHR プロセスが使用している共有メモリ容量
S プロセスの状態
D:割り込み不可(sleep)
R:実行中
S:スリープ状態
T:停止中(ジョブ制御信号により停止)
t:停止中(トレース中にデバッガーにより停止)
Z:ゾンビ状態
%CPU CPU使用率
%MEM 物理メモリ使用率
TIME+ プロセスのCPU使用時間
COMMAND 現在実行中のコマンド名

以上

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

Manjaro KDE でWOL(Wake On LAN) を有効にする

はじめに

KDEには、GUIのネットワーク設定にWOLの項目が無いので
ethtoolをsystemdで自動実行させます。
手打ちでやるには、ちょっとややこしいので、スクリプトにしました。

WOLを有効化するシェルスクリプト

#!/bin/bash
# systemd設定ファイル保存フォルダ
SYSTEMD_PATH="/etc/systemd/system/"
SERVICE_NAME="wol.service"
FILE_PATH=${SYSTEMD_PATH}${SERVICE_NAME}

# tlpの設定変更
sudo sed -i -e "s/WOL_DISABLE=Y/WOL_DISABLE=N/g" /etc/default/tlp
# 設定値確認
echo "tlp設定変更の確認:WOL_DISABLE=N で成功"
sudo grep "^WOL_DISABLE" /etc/default/tlp

# ethtoolのインストール
sudo pacman -S --noconfirm ethtool

# インターフェイス名を調べて変数に入れる
NIC_LIST=($(for DEV in `find /sys/devices -name net | grep -v virtual`; do ls $DEV/; done))
# 1つ目のインターフェイスを指定
INTERFACE=${NIC_LIST[0]}

# 確認
echo "インターフェイス名:"${INTERFACE}
echo ${FILE_PATH}

# ファイルの上書き確認
if [ -e ${FILE_PATH} ]; then
    echo "ファイルを上書きしますか? [Y/n]"
    read -p "answer[y or n]:" ANSWER
    ANSWER=`echo $ANSWER | tr y Y | tr -d '[\[\]]'`
    if [ ${ANSWER} != "Y" ]; then
        exit 0
    fi
    # 設定がある場合は、サービスを止めておく
    sudo systemctl stop ${FILE_NAME}
    sudo systemctl disable ${FILE_NAME}
fi

sudo tee ${FILE_PATH} <<EOF >/dev/null
[Unit]
Description=Configure Wake-up on LAN
Requires=network.target
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/ethtool -s ${INTERFACE} wol g

[Install]
WantedBy=basic.target
EOF

# 設定のリロード
sudo systemctl daemon-reload
# サービスのスタート
sudo systemctl start ${SERVICE_NAME}
# 自動起動の設定
sudo systemctl enable ${SERVICE_NAME}

# 最終確認
echo "WOL有効化の確認:Wake-on: g で有効"
sudo ethtool ${INTERFACE} | grep Wake-on

シェルスクリプトの解説

  • Manajroはデフォルトで、TLP(電源管理)が入っていて、WOLが無効にされてるので有効化する
  • ethtoolをインストールする
  • ネットワークインターフェイス名を調べる
  • systemdの設定ファイルを作る
  • systemdのサービスを有効化する

注意事項

WOLはバッテーリー消費が多くなるらしいので、ノートPCでは使わないほうがいいです。
このスクリプトはデスクトップPCで、有線LANが一つのみの環境を前提にしてます。

動作環境

Manjaro KDE Edition 19.0.0
Linux Kernel 5.5.2-1

最後に

おなじKDEのkubuntuも使っていたんですが、あっちはTLPが入っていませんでした。
スクリプト書くのしんどいですが、次から楽できるので頑張って書くようにしてます。

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

バイナリのダンプを2進数で出力し、またバイナリファイルに戻す

Linuxコマンドだけでなんとかしたい!

バイナリファイルのダンプ結果を2進数で表示させたいときがありました(linuxコマンドのみで)。
その時にやった内容を紹介します。
(他にいい方法があるのかもしれません。)

まず、以下のようなシェルスクリプトを用意。

hex2bin.sh
#!/bin/bash

hexdump -v -e '/1 "%02X\n"' $1 | awk '{print substr($1,1,1) " " substr($1,2,1)}' | awk -f hex2bin.awk 
説明

まず最初の hexdumpコマンドで1バイト単位で出力します。

hexdump -v -e '/1 "%02X\n"' $1

出力例

$ hexdump -v -e '/1 "%02X\n"' file
7F
45
4C
46
02
01
01
00
$

で、この出力結果を awkにわたしてあいだに空白を入れます。

$ hexdump -v -e '/1 "%02X\n"' file | awk '{print substr($1,1,1) " " substr($1,2,1)}' 
7 F
4 5
4 C
4 6
0 2
0 1
0 1
0 0
$

この出力結果をまたawkにわたします。今度は -f オプションで以下のスクリプトを指定します。

hex2bin.awk
function hex2bin(shex) {
    bins["0"] = "0000";
    bins["1"] = "0001";
    bins["2"] = "0010";
    bins["3"] = "0011";
    bins["4"] = "0100";
    bins["5"] = "0101";
    bins["6"] = "0110";
    bins["7"] = "0111";
    bins["8"] = "1000";
    bins["9"] = "1001";
    bins["A"] = "1010";
    bins["B"] = "1011";
    bins["C"] = "1100";
    bins["D"] = "1101";
    bins["E"] = "1110";
    bins["F"] = "1111";

    return bins[shex];
}

{
    print hex2bin($1) " " hex2bin($2);
}

これで以下のような出力ができます。

sample.txt
0111 1111
0100 0101
0100 1100
0100 0110
0000 0010
0000 0001

出力結果を戻してみる

ここまでできたので、せっかくだからlinuxの標準コマンドだけでバイナリ形式に戻してみます。
以下のようなawkスクリプトを用意してみました。

bin2hex.awk
function bin2hex(sbin) {
    hex["0000"] = "0";
    hex["0001"] = "1";
    hex["0010"] = "2";
    hex["0011"] = "3";
    hex["0100"] = "4";
    hex["0101"] = "5";
    hex["0110"] = "6";
    hex["0111"] = "7";
    hex["1000"] = "8";
    hex["1001"] = "9";
    hex["1010"] = "A";
    hex["1011"] = "B";
    hex["1100"] = "C";
    hex["1101"] = "D";
    hex["1110"] = "E";
    hex["1111"] = "F";

    return hex[sbin];
}

{
    printf "echo -en \"\\x%c%c\" >> hoge.bin\n",bin2hex($1),bin2hex($2)
}

これで

0111 1111

という文字列が

echo -en "\x7F" >> hoge.bin

というechoコマンドに変換されます。
以下のように、てきとうなファイル名にリダイレクトをして、そのファイルを実行するとバイナリファイルが出力されます。

$ awk -f bin2hex.awk sample.txt > text2bin.sh
$ bash text2bin.sh
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macでもLinuxが使いたい

前書き

知り合いにmacでデュアルブートする方法を教えてくれと言われて書いたものです。せっかくなので記事にしました。

手順1:rEFInd のダウンロード

rEFInd をダウンロードし、任意のディレクトリに配置します。
※ここでは~/Downloads/refind-bin-0.11.4/とします。

手順2:rEFInd のインストール

rEFInd をインストールするためにまずは、mac をリカバリーモードで起動します(cmd+R を押しながら起動)
リカバリーモードで起動したら、ターミナルを開き、csrutil disableを実行します。

  • Tips: sudo 権限でできることは制限されており、その制限をなくすコマンドです。

実行すると、Succesfully disabled System Intergrity Protection.と表示されます。

その後、mac を起動して rEFInd をダウンロードしたディレクトリに移動します。

tikuwa@tikuwanoMacBook-Air ~/Downloads/refind-bin-0.11.4 $ ls -al ~/Downloads/refind-bin-0.11.4
total 472
drwxrwxr-x@ 17 tikuwa  staff    544 11 12  2018 ./
drwx------+ 53 tikuwa  staff   1696  2 21 12:13 ../
-rw-rw-r--@  1 tikuwa  staff  35147 11 29  2015 COPYING.txt
-rw-rw-r--@  1 tikuwa  staff   4891  8  7  2017 CREDITS.txt
-rw-rw-r--@  1 tikuwa  staff   2204 11 29  2015 LICENSE.txt
-rw-rw-r--@  1 tikuwa  staff  99811 11 12  2018 NEWS.txt
-rw-rw-r--@  1 tikuwa  staff   4010  5 25  2017 README.txt
drwxr-xr-x@  5 tikuwa  staff    160 11 29  2015 banners/
drwxr-xr-x@  5 tikuwa  staff    160 10 22  2018 docs/
drwxr-xr-x@ 18 tikuwa  staff    576  7 22  2018 fonts/
drwxr-xr-x@ 22 tikuwa  staff    704  1 20  2016 keys/
-rwxrwxr-x@  1 tikuwa  staff   2436  7 22  2018 mkrlconf*
-rwxrwxr-x@  1 tikuwa  staff   2564  8 24  2018 mountesp*
-rwxrwxr-x@  1 tikuwa  staff  10362 10 23  2018 mvrEFInd*
drwxrwxr-x@ 13 tikuwa  staff    416 11 12  2018 rEFInd/
-rwxrwxr-x@  1 tikuwa  staff  56558 11 12  2018 rEFInd-install*
-rwxrwxr-x@  1 tikuwa  staff   7173  4 23  2016 rEFInd-mkdefault*

そのディレクトリでsudo ./rEFInd-installを実行し、再起動します。rEFInd が起動すれば成功です。

tikuwa@tikuwanoMacBook-Air ~/Downloads/refind-bin-0.11.4 $ sudo ./refind-install                                             [ruby-2.6.3p62]
Password:
ShimSource is none
Installing rEFInd on OS X....
Installing rEFInd to the partition mounted at /Volumes/ESP
Found rEFInd installation in /Volumes/ESP/EFI/rEFInd; upgrading it.
Found suspected Linux partition(s); installing ext4fs driver.
Installing driver for ext4 (ext4_x64.efi)
Copied rEFInd binary files

Notice: Backed up existing icons directory as icons-backup.
Existing rEFInd.conf file found; copying sample file as rEFInd.conf-sample
to avoid overwriting your customizations.

手順3:Linux のインストールメディア作成

USB フラッシュメモリを用意してください。インストールする OS にもよりますが、8GB 以上あるものが理想です。
今回は、Ubuntuをインストールします。

Ubuntu の DVD イメージをダウンロードします。
ダウンロードが完了したら、わかりやすいところに配置してください。
※ここでは~/Downloads/に配置します。

次に、balenaetcher をダウンロードします。
brew cask install balenaetcherでインストールできます。

balenaetcher を起動し、Select imageでイメージを選択します。その後、Select targetでインストール先メディアを選択します。最後にFlash!を選択するとインストールが開始されます。

手順4:Linux 用のパーティション作成

Linux をインストールするには、/に割り当てるものと Swap 領域に割り当てるものの2つのパーティションが必要です。

/に使うパーティションの要領は 10GB 以上あれば動きますが、せっかくインストールするので 100GB 以上にしておくのがいいでしょう。
Swap 領域は、RAM の 2 倍ほどあれば問題ありません。

手順5:Linux のインストール

手順3で作成したメディアを刺したまま mac を再起動し、rEFInd を起動します。
rEFInd が起動すると、インストールメディアが選択できます。
あとは画面の指示に従ってインストールします。

手順6:rEFIndが起動するように設定する

Linuxのインストールが終わると、使用されるブートローダーがLinuxのGRUBに変更されてしまいます。なので、もう一度refind-installを実行します。

それができたら、リカバリーモードで再起動したあとcsrutil enableを実行し mac を起動します。

  • Tips: このコマンドは実行しなくても問題なく使用することができますが、セキュリティ上の関係で実行しておいた方がよいです。

手順7:GRUBを削除する

この手順はスキップしても問題なく使用できるので、気にならなければ飛ばしてください。
まず、/Volumeに移動し、sudo mkdir efiを実行します。
次に、sudo mount -t msdos /dev/disk0s1 ./efiを実行します。
※このとき、Resource busyと表示される場合はdiskutil unmount /dev/disk0s1を実行したあと、もう一度sudo mount -t msdos /dev/disk0s1 ./efiを実行してください。

マウントしたら、efiの中にあるEFIに移動して、UBUNTUを削除します。
その後、再起動して削除されていることを確認してください。

おまけ:rEFIndの見た目をかっこよくする

"rEFInd themes"で検索して好みのテーマをダウンロードしてください。今回は、"rEFInd minimal"を使用します。
/Volumes/efi/EFI/refindに移動して、themesというディレクトリを作成してください。その中にダウンロードしたテーマを入れ、rEFInd-minimalという名前にします。

次に、/Volumes/efi/EFI/refindの中にあるrefind.confをテキストエディタで開き、include themes/rEFInd-minimal/theme.confを追記します。

完了したら、再起動して反映されていることを確認してください。

参考文献

ブートローダrEFIndをmacに導入する
El capitanにrEFIndを導入するとき
ブートローダー「rEFInd」のテーマを変える方法

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

サーバ攻撃で狙い撃ちされたphpMyAdminのユーザ名とパスワードをランキングしてみた

概要

自前のサーバーでブログを開設した途端、世界中から怪しい攻撃が来た話を読んで、自サーバのログも調べてみたら同様のクラッキング目的と思われるアクセスが来ていたことが確認できました。

その中で、phpMyAdminのユーザ名とパスワードを当てずっぽうで当てにきている攻撃がたくさんあったので、それらについて攻撃された回数をカウントし、ランキングしてみました。

解析

さくらVPSで契約したサーバ(CentOS 6.10)のApache HTTPサーバのログ(/var/log/httpd/access_log)を取得しました。
中身を見てみると下記のようにphpMyAdminに当てずっぽうのユーザ名とパスワードでアクセスが試みられていることがわかります。

xxx.xxx.xxx.xxx - - [04/Oct/2018:02:57:44 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz3edc5tgb&server=1 HTTP/1.1" 200 14538 "-" "Mozilla/5.0"
xxx.xxx.xxx.xxx - - [04/Oct/2018:02:57:46 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@123&server=1 HTTP/1.1" 200 14546 "-" "Mozilla/5.0"
xxx.xxx.xxx.xxx - - [04/Oct/2018:02:57:59 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@2wsx&server=1 HTTP/1.1" 200 14533 "-" "Mozilla/5.0"
xxx.xxx.xxx.xxx - - [04/Oct/2018:02:58:03 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@WSX&server=1 HTTP/1.1" 200 14543 "-" "Mozilla/5.0"
xxx.xxx.xxx.xxx - - [04/Oct/2018:02:58:06 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@WSX3edc&server=1 HTTP/1.1" 200 14538 "-" "Mozilla/5.0"
xxx.xxx.xxx.xxx - - [04/Oct/2018:02:58:09 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@wsx&server=1 HTTP/1.1" 200 14533 "-" "Mozilla/5.0"

pythonを用いてこれらの情報を抽出しヒストグラム情報を作りました。
pythonコードは末尾に付録として載せておきます。

解析対象ログの基本情報

取得期間:2018/09/26 ~ 2020/01/22
全体の行数:658858行
うちphpMyAdminのパスワードを当てずっぽうで当てにきている攻撃と思われるもの:186499行

ユーザ名の攻撃回数(全25種類)

順位 ユーザ名 回数
1 root 185504
2 wordpress 183
3 admin 138
4 wp 47
5 blog 45
6 pma 45
7 shop 43
8 money 42
9 popa3d 40
10 joomla 39
11 http 35
12 ueer 35
13 project 35
14 nginx 33
15 apache 33
16 sql 33
17 db 32
18 nas 32
19 shopdb 31
20 dbs 31
21 web 28
22 backupdb 6
23 wordspress 5
24 backup 2
25 backups 2

パスワードの攻撃回数(全953種類のうち上位30種類)

順位 パスワード 回数
1 pass 408
2 password 372
3 361
4 admin 359
5 123 347
6 root 344
7 123456 326
8 welcome 323
9 r00t 322
10 monkey 322
11 whatever 322
12 abc123 321
13 aa123456 321
14 123123 319
15 mysql 318
16 login 318
17 111111 318
18 password123 318
19 1234567890 317
20 access 317
21 666666 316
22 apache 315
23 oracle 315
24 654321 315
25 root123 315
26 123qwe 314
27 1234567 314
28 12345678 314
29 pass123 314
30 letmein 313

(ついでに)攻撃されたパスとその回数(全2種類)

順位 パス 回数
1 /phpmyadmin/index.php 173687
2 /phpMyAdmin/index.php 12812

考察

全ランキングはこちらにおいておきます。

ユーザ名はrootが圧倒的多数で、ほかはwordpress、blogなどのブログ関連用語、admin、pmaなどデータベース関連用語、apacheなどサーバ関連用語などが並んでいる感じでした。
sshサーバへの攻撃ログを解析した記事と比べるとsshへの攻撃では人名やOS名などが狙い撃ちされているのに対し、phpMyAdminへの攻撃ではブログ関係用語が狙われているなど、微妙に傾向の違いがあって面白いです。

パスワードのトップ3は「pass」「password」「」(なし)でした。
突出してどれかが多いということはなくありがちなものが全体的にまんべんなく狙われている感じでした。
こちらで言われているような「最悪なパスワード」の傾向とも一致しているように思えます。
パターンとしては下記のようなものがありました。

  • 有名名詞(PC関連) - root、mysql、access、apahe、oracleなど
  • 有名名詞(一般) - welcome、monkey、freedom、money、dragonなど
  • 数字羅列 - 123456、123123、111111、1234567890、666666など
  • 「password」またはその派生 - pass、password、Password、passw0rd、p@$$w0rd123など
  • キーボード順番押し - qwerty、qazwsx、qazxcv!@#、zaq1zaq1、qwertなど
  • 上記の組み合わせ - abc123、aa123456、password123、123qwe、admin123など

ついでに攻撃対象となったパスも集計しました。
攻撃対象となっていたのは以下の2種類だけでした。

  • /phpmyadmin/index.php
  • /phpMyAdmin/index.php

不正アクセス防止のための狙われるアクセス先リスト

狙われやすいURLについて
の記事で言及されていたパスと比べるとバリエーションが少ないのは、今回が"pma_password="が含まれているという条件で行を抽出したあとの結果であるためと考えられます。実際抽出条件を「"phpMyAdmin"が含まれていること」にしてログを眺めてみると、今回挙げた2種類以外のパスへのアクセスも試みられていることがわかりました。

おわりに

僕はセキュリティの知識はほぼないので「どうしたら安全か」はわかりませんが、少なくともデフォルトパスにおいたデータベースにありがちなユーザ名とパスワードをセットで使うのはやめようと思いました。

本文は以上です。
ここまでお読みいただきありがとうございました。
以下は付録です。

付録

ログから必要情報を抽出するためのpythonコードです。
今回は下記のような行を解析対象としました。

xxx.xxx.xxx.xxx - - [04/Oct/2018:02:58:03 +0900] "GET /phpMyAdmin/index.php?pma_username=root&pma_password=1qaz@WSX&server=1 HTTP/1.1" 200 14543 "-" "Mozilla/5.0"

"pma_password="が含まれていれば解析対象とみなします。
ここからスペースや特定の文字、キーワードで分割するなどして、情報を抽出します。
情報とその取り出し方の例を示します。
ここはログファイルの書き出しの設定などによって異なる可能性があるので適宜修正してください。

情報 取り出し方
ipアドレス スペースで分割して0番目
タイムスタンプ "["と"]"で囲まれた文字列
Method (GET, POSTなど) スペースで分割して6番目。ただし初めの文字がダブルクオテーションなのでそれは削除する
phpMyAdminのパス スペースで分割されたうち7番目の要素から"?"の直前まで
ユーザ名 "pma_username="と"&"の間の文字列
パスワード "pma_password="と"&"の間の文字列。(ただしこの部分のqueryでurlが終了している場合があり、そのときは後ろの"&"が存在しないため、スペースの直前までとする)

全部の行がこのやり方で抽出できているとは限らないのですが、多少例外があっても影響は少ないだろうと思って無視しています。そのあたりは適当です。
要素を取り出したあと、注目する情報(今回はphpMyAdminのパス、ユーザ名、パスワード)の回数を数えます。
最後に降順にソートして標準出力に表示します。

ソースコード全体は下記のような感じです。

from collections import defaultdict

with open('/path/to/access_log','r') as f:
    logs = f.readlines()

#phpMyAdminへの攻撃の抽出
pma_attacks = [log for log in logs if 'pma_password' in log]

#ip, time_stamp, method, path, username, passwordを抽出
#ログの形式に合わせて適宜書き換える
extracted_pma_infos = []
for pma in pma_attacks:
    #ipアドレスはスペース区切りの0番目の要素
    ip = pma.split(' ')[0] 
    #タイムスタンプは"["から"]"までの文字列
    time_stamp = pma.split('[')[1].split(']')[0] 
    #Method(POST、GETなど)はスペース区切りの6番目の要素から1文字目を削除したもの
    method = pma.split(' ')[5][1:]
    #pathはスペース区切りの6番目の要素のうち"?"の直前までの文字列
    path = pma.split(' ')[6].split('?')[0]
    #ユーザ名は"pma_username="から直近の"?"までの文字列
    username = pma.split('pma_username=')[1].split('&')[0]
    #パスワードは"pma_password="から直近の"?"までの文字列
    password = pma.split('pma_password=')[1].split('&')[0]
    #パスワードが最後のクエリの場合の例外処理
    #このとき、直近の"?"が存在せずログの末尾まで含まれてしまうので、スペースの直前できる
    if ' ' in password:
        password = password.split(' ')[0]
    extracted_pma_infos.append([ip,time_stamp,method,path,username,password])

#攻撃されたパス、ユーザ名、パスワードのヒストグラムを作る
pathlist = defaultdict(int)
unlist = defaultdict(int)
pslist = defaultdict(int)
for pma in extracted_pma_infos:
    path = pma[3]
    un = pma[4]
    ps = pma[5]
    pathlist[path]+=1
    unlist[un]+=1
    pslist[ps]+=1

#引数のヒストグラムデータ(dict_obj)を解析して降順のリストを作る関数
def orderedlistFromDict(dict_obj):
    count = list(set([dict_obj[v] for v in dict_obj]))
    count.sort()
    orderedlist = []
    for c in count[::-1]:
        for key in dict_obj:
            if dict_obj[key] == c:
                orderedlist.append((key,dict_obj[key]))
    return orderedlist

#攻撃されたパス、ユーザ名、パスワードの回数順のリスト
ordered_path = orderedlistFromDict(drlist)
ordered_un = orderedlistFromDict(unlist)
ordered_ps = orderedlistFromDict(pslist)

#パスランキングの表示
for val in ordered_path:
    print(val[0],val[1],sep=',')

#ユーザ名ランキングの表示
for val in ordered_un:
    print(val[0],val[1],sep=',')

#パスワードランキングの表示
for val in ordered_ps:
    print(val[0],val[1],sep=',')
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UNIT-V Linux ってナンだ?

mojikyo45_640-2.gif
 
https://docs.m5stack.com/#/en/unit/unitv より

はじめに

サイズ 4x2.5cmUNIT-V 上で、Linux を動かしてみました。

M5Stack社のUNIT-V (AI Camera) は、小さくて良い感じです (4g, 4x2.5x1.5cm)。
メモリは8MB(ちなみに ESP32 は 520KB、Raspberry Pi Zero W は512MB)。
LAN、WiFiはありません。外部接続は USB と GPIO 2本 のみです (UART または I2C)。

Linux と Tiny C Compiler は、ベータ版のようです。Shenzhen Sipeed Technology 社製です。

UNIT-V の SoCチップは、注目のK210です。 デュアルコア 64 bit RISC-V CPU で、 Neural Network Processor 付きです。
image.png

https://kendryte.com/ より

UNIT-V 比較表

UNIT-V M5StickC Raspberry Pi Zero W Adafruit Feather nRF52840 Express
コンセプト RISC-V搭載AIチップ 電池と画面とケース 汎用Linux 電池駆動
SoCチップ/会社 K210
/Kendryte
ESP32
/Espressif Systems
BCM2835
/Broadcom
nRF52840
/Nordic
CPU RISC-V Xtensa LX6/Tensilica ARM11 ARM Cortex-M4
CPU(core数/bit) 2/64 2/32 1/32 1/32
クロック(Mhz) 400 240 1000 64
メモリ(MB) 8 520KB 512 256KB
Flash(MB) 16 4 無し 1
ストレージ Micro SD 無し microSD 無し
WiFi/BT 無し
USB
IF(ピン) GROVE4pin GROVE4pin,
拡張8pin
GPIO 40pin GPIO 21
言語・OS MicroPython MicroPython, Arduino Raspbian MicroPython, Arduino
電流(mA) 100? 150 25
重量(g) 4 15.1 9 6
備考 Neural Network Processor(KPU) 0.8Tops, Camera、 RGB LED 80 mAh Lipo, LCD(0.96), ジャイロ, LED HDMI NFC, IEEE 802.15.4

C言語のコンパイルと実行

/usr/local # uname -a
Linux k210 5.6.0-rc1-g9dbcd412b #16 SMP Sun Feb 16 01:45:41 CST 2020 riscv64 GNU/Linux
/usr/local # cat main.c
int _start()
{
    for(int i = 0; i < 3; i++) {
        printf("%d hello\n", i);
    }
   return 0;
}/usr/local # tcc -run -nostdlib main.c
main.c:4: warning: implicit declaration of function 'printf'
0 hello
1 hello
2 hello
/usr/local #

Tiny C Compiler 起動オプション

/usr/local # tcc -v
tcc version 0.9.27 ( Linux)
/usr/local # tcc
Tiny C Compiler 0.9.27 - Copyright (C) 2001-2006 Fabrice Bellard
Usage: tcc [options...] [-o outfile] [-c] infile(s)...
       tcc [options...] -run infile [arguments...]
General options:
  -c          compile only - generate an object file
  -o outfile  set output filename
  -run        run compiled source
  -fflag      set or reset (with 'no-' prefix) 'flag' (see tcc -hh)
  -std=c99    Conform to the ISO 1999 C standard (default).
  -std=c11    Conform to the ISO 2011 C standard.
  -Wwarning   set or reset (with 'no-' prefix) 'warning' (see tcc -hh)
  -w          disable all warnings
  -v -vv      show version, show search paths or loaded files
  -h -hh      show this, show more help
  -bench      show compilation statistics
  -           use stdin pipe as infile
  @listfile   read arguments from listfile
Preprocessor options:
  -Idir       add include path 'dir'
  -Dsym[=val] define 'sym' with value 'val'
  -Usym       undefine 'sym'
  -E          preprocess only
Linker options:
  -Ldir       add library path 'dir'
  -llib       link with dynamic or static library 'lib'
  -r          generate (relocatable) object file
  -shared     generate a shared library/dll
  -rdynamic   export all global symbols to dynamic linker
  -soname     set name for shared library to be used at runtime
  -Wl,-opt[=val]  set linker option (see tcc -hh)
Debugger options:
  -g          generate runtime debug info
  -bt[N]      link with backtrace (stack dump) support [show max N callers]
Misc. options:
  -x[c|a|b|n] specify type of the next infile (C,ASM,BIN,NONE)
  -nostdinc   do not use standard system include paths
  -nostdlib   do not link with standard crt and libraries
  -Bdir       set tcc's private include/library dir
  -MD         generate dependency file for make
  -MF file    specify dependency file name
  -m32/64     defer to i386/x86_64 cross compiler
Tools:
  create library  : tcc -ar [rcsv] lib.a files
/usr/local #

Linux 起動時メッセージ


[    0.000000] Linux version 5.6.0-rc1-g9dbcd412b (vowstar@ryzen) (gcc version 9.2.0 (Buildroot 2020.02-git-g2ceb6f4a3f)) #16 SMP Sun Feb 16 01:45:41 CST 2020
[    0.000000] earlycon: sifive0 at MMIO 0x0000000038000000 (options '')
[    0.000000] printk: bootconsole [sifive0] enabled
[    0.000000] initrd not found or empty - disabling initrd
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080000000-0x00000000807fffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080000000-0x00000000807fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000807fffff]
[    0.000000] elf_hwcap is 0x112d
[    0.000000] percpu: max_distance=0x18000 too large for vmalloc space 0x0
[    0.000000] percpu: Embedded 12 pages/cpu s18272 r0 d30880 u49152
[    0.000000] Built 1 zonelists, mobility grouping off.  Total pages: 2020
[    0.000000] Kernel command line: earlycon console=ttySIF0
[    0.000000] Dentry cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.000000] Inode-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.000000] Sorting __ex_table...
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 4936K/8192K available (918K kernel code, 110K rwdata, 166K rodata, 1717K init, 91K bss, 3256K reserved, 0K cma-reserved)
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[    0.000000] plic: mapped 65 interrupts with 2 handlers for 4 contexts.
[    0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x3990be68b, max_idle_ns: 881590404272 ns
[    0.000014] sched_clock: 64 bits at 7MHz, resolution 128ns, wraps every 4398046511054ns
[    0.008238] Console: colour dummy device 80x25
[    0.012472] Calibrating delay loop (skipped), value calculated using timer frequency.. 15.60 BogoMIPS (lpj=31200)
[    0.022677] pid_max: default: 4096 minimum: 301
[    0.027290] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.034415] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.044822] rcu: Hierarchical SRCU implementation.
[    0.049619] smp: Bringing up secondary CPUs ...
[    0.054772] smp: Brought up 1 node, 2 CPUs
[    0.059152] devtmpfs: initialized
[    0.065758] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.074778] futex hash table entries: 16 (order: -2, 1024 bytes, linear)
[    0.082792] Kendryte K210 SoC sysctl
[    0.096502] clocksource: Switched to clocksource riscv_clocksource
[    0.213963] workingset: timestamp_bits=62 max_order=11 bucket_order=0
[    0.221326] 38000000.serial: ttySIF0 at MMIO 0x38000000 (irq = 1, base_baud = 0) is a SiFive UART v0
[    0.229801] printk: console [ttySIF0] enabled
[    0.229801] printk: console [ttySIF0] enabled
[    0.238411] printk: bootconsole [sifive0] disabled
[    0.238411] printk: bootconsole [sifive0] disabled
[    0.250662] random: get_random_bytes called from 0x00000000801b2128 with crng_init=0
[    0.259387] devtmpfs: mounted
[    0.266032] Freeing unused kernel memory: 1716K
[    0.269822] This architecture does not have kernel memory protection.
[    0.276234] Run /sbin/init as init process
[    0.280428] Run /etc/init as init process
[    0.284708] Run /bin/init as init process

--------------------------------------
| Kendryte K210 Linux mod by vowstar |
--------------------------------------
Mounting /proc
Starting shell


BusyBox v1.32.0.git (2020-02-15 12:47:51 CST) hush - the humble shell
Enter 'help' for a list of built-in commands.

/ # help
Built-in commands:
------------------
.         Run commands in file
bg        Resume job in background
break     Exit loop
cd        Change directory
continue  Start new loop iteration
eval      Construct and run shell command
exec      Execute command, don't return to shell
export    Set environment variables
fg        Bring job to foreground
history   Show history
jobs      List jobs
kill      Send signals to processes
local     Set local variables
read      Input into variable
readonly  Make variables read-only
return    Return from function
set       Set positional parameters
shift     Shift positional parameters
trap      Trap signals
type      Show command type
ulimit    Control resource limits
umask     Set file creation mask
unset     Unset variables
wait      Wait for process to finish
/ #

Linux 環境

/ # uname -a
Linux k210 5.6.0-rc1-g9dbcd412b #16 SMP Sun Feb 16 01:45:41 CST 2020 riscv64 GNU/Linux
/ # cat /proc/cpuinfo
processor.: 0
hart..: 0
isa..: rv64imafdc

processor.: 1
hart..: 1
isa..: rv64imafdc
/ # env
HOME=/
TERM=linux
PWD=/
HUSH_VERSION=1.32.0.git
/ # ps -l
S   UID   PID  PPID   VSZ   RSS TTY   STIME TIME     CMD
S     0     1     0   480     0 0:0   23:59 00:00:00 /bin/sh
S     0     2     0     0     0 0:0   23:59 00:00:00 [kthreadd]
I     0     3     2     0     0 0:0   23:59 00:00:00 [rcu_gp]
I     0     4     2     0     0 0:0   23:59 00:00:00 [rcu_par_gp]
I     0     5     2     0     0 0:0   23:59 00:00:00 [kworker/0:0-eve]
I     0     6     2     0     0 0:0   23:59 00:00:00 [kworker/0:0H]
I     0     7     2     0     0 0:0   23:59 00:00:00 [kworker/u4:0-ev]
I     0     8     2     0     0 0:0   23:59 00:00:00 [mm_percpu_wq]
S     0     9     2     0     0 0:0   23:59 00:00:00 [ksoftirqd/0]
I     0    10     2     0     0 0:0   23:59 00:00:00 [rcu_sched]
S     0    11     2     0     0 0:0   23:59 00:00:00 [migration/0]
S     0    12     2     0     0 0:0   23:59 00:00:00 [cpuhp/0]
S     0    13     2     0     0 0:0   23:59 00:00:00 [cpuhp/1]
S     0    14     2     0     0 0:0   23:59 00:00:00 [migration/1]
S     0    15     2     0     0 0:0   23:59 00:00:00 [ksoftirqd/1]
I     0    16     2     0     0 0:0   23:59 00:00:00 [kworker/1:0-eve]
I     0    17     2     0     0 0:0   23:59 00:00:00 [kworker/1:0H]
S     0    18     2     0     0 0:0   23:59 00:00:00 [kdevtmpfs]
I     0    19     2     0     0 0:0   23:59 00:00:00 [writeback]
I     0    20     2     0     0 0:0   23:59 00:00:00 [kworker/0:1-eve]
S     0    21     2     0     0 0:0   23:59 00:00:00 [kswapd0]
I     0    22     2     0     0 0:0   23:59 00:00:00 [kworker/1:1-mm_]
I     0    24     2     0     0 0:0   00:00 00:00:00 [kworker/u4:1]
R     0    38     1   316     0 0:0   00:03 00:00:00 ps -l
/ # ps -e
ps: invalid option -- e
 # ls /
bin   dev   etc   proc  root  sbin  sys   tmp   usr
/ # ls /bin
arch       chown      grep       ls         printenv   setserial  umount
bash       cp         hush       mkdir      ps         sh         uname
busybox    date       init       mknod      pwd        sleep      usleep
cat        dmesg      kill       more       rm         stty       vi
chgrp      echo       link       mount      rmdir      touch
chmod      false      ln         mv         sed        true
/ # ls /dev
console          tty20            tty4             tty59
cpu_dma_latency  tty21            tty40            tty6
full             tty22            tty41            tty60
kmsg             tty23            tty42            tty61
null             tty24            tty43            tty62
ptmx             tty25            tty44            tty63
random           tty26            tty45            tty7
tty              tty27            tty46            tty8
tty0             tty28            tty47            tty9
tty1             tty29            tty48            ttySIF0
tty10            tty3             tty49            urandom
tty11            tty30            tty5             vcs
tty12            tty31            tty50            vcs1
tty13            tty32            tty51            vcsa
tty14            tty33            tty52            vcsa1
tty15            tty34            tty53            vcsu
tty16            tty35            tty54            vcsu1
tty17            tty36            tty55            zero
tty18            tty37            tty56
tty19            tty38            tty57
tty2             tty39            tty58
/ # ls /etc
/ # ls /proc
1             20            buddyinfo     iomem         softirqs
10            21            bus           ioports       stat
11            23            cmdline       irq           sys
12            24            consoles      kmsg          thread-self
13            3             cpuinfo       loadavg       timer_list
14            31            device-tree   locks         tty
15            4             devices       maps          uptime
16            5             driver        meminfo       version
17            6             execdomains   misc          vmstat
18            7             filesystems   mounts        zoneinfo
19            8             fs            pagetypeinfo
2             9             interrupts    self
/ # ls /root
/ # ls /sbin
runlevel
/ # ls /sys
/ # ls /tmp
/ # ls /usr
bin      include  lib      sbin
/ # ls /usr/bin
[         env       id        seq       tty       wall
[[        expr      last      tail      uniq      wc
awk       find      printf    tcc       unlink    who
basename  head      readlink  tee       users     yes
dirname   hostid    realpath  test      w
/ # ls /usr/include
libtcc.h
/ # ls /usr/lib
crt1.o    libtcc.a  tcc
/ # ls /usr/sbin
chroot     readahead
/ #
/ # who
/ # df
sh: can't execute 'df': No such file or directory
/ # tty
/dev/console
/ #

参考資料

Try Maix Linux image with Tiny C Compiler:
https://twitter.com/SipeedIO/status/1228881079236362240

MAIX/MaixLinux/Firmware
http://dl.sipeed.com/MAIX/MaixLinux/Firmware
Maix-linux-5.6-rc1_tcc.bin 3.1 MB
Maix-linux-5.6-rc1_preview0.1.bin 1.7 MB

sipeed/kflash.py
https://github.com/sipeed/kflash.py

鳥なき里のマイコン屋(71) Kendryte K210、RISC-V搭載AIチップ
https://jhalfmoon.com/dbc/2019/10/23/鳥なき里のマイコン屋71-kendryte-k210、risc-v搭載aiチップ/

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

(メモ)ゲートウェイとデフォルトゲートウェイの違い

違うとも言えるし、違いはないとも言える。

ゲートウェイは別のネットワークへの出口(ルータ)のことを言う。
デフォルトゲートウェイは未知のルート(デフォルトルート)の場合に使用するゲートウェイを言う。

サーバサイドの設定と言う意味ではゲートウェイを指定するのは、通常、デフォルトゲートウェイのみのためゲートウェイの指定はデフォルトゲートウェイを指定していることと同義となることが多い(はず)。

デフォルトゲートウェイを複数持たせてあるゲートウェイに障害が発生した時に切り替える代替パスとしての指定をするOSもあるとのこと。

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

Apache Tomcatの違いを簡単に整理

■Apache Tomcatの違い
(1)ApacheはWebサーバソフト
(2)Tomcatはサーブレットコンテナ(=Java Servletを動かすソフト)
 ⇒Java Servletはサーバ上で動くJavaのプログラム(動的なページが生成可能)

■共通点
Tomcatも簡易的なWebサーバソフトの機能を持っている。

■纏め
一般的に、Java Servletを利用する時はApacheとTomcatを連携させる。
WebサーバはApacheが、サーブレットコンテナはTomcatが役割を担う。

■参考にしたサイト
https://wa3.i-3-i.info/diff184web.html

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

バイナリファイルをcatやtailしてしまいターミナルが文字化けしたときの対処法

バイナリファイルをcatで見てみようとしたら、文字化けしてしまい冷や汗をかきました。
Webに転がってる情報をまとめた対処法とaliasの設定を書いていきます。

文字化けした状態

無題.png

対処法その1

reset

resetコマンドで端末をリセットします。これで直らない場合もあるみたいです。
その場合はresetコマンドより強力な方法でリセットします。

対処法その2

echo ^[c

echo「スペース」「Ctrl+v」「Esc」「c」「Enter」と入力する。

aliasの設定

alias clearbin="echo -e '\ec'"

バイナリになったものをクリアするので、単純にclearbinとしました。
echo -eでエスケープ文字を解釈するようにしています。
eが「Esc」になり、cはそのままですね。

豆知識(なぜ直るのか)

対処法その2でなぜなおるのか、全然わかんなかったので調べました。

echo

echo「スペース」「Ctrl+v」を押すとこんな感じになりますね。
「Ctrl+v」は「Esc」を入力するための準備的なもので単体だとなにも表示が出ません。
「Esc」をただ押しても入力できないので、この準備がいるみたいです。

echo ^[

続いて「Esc」を押すと、こうなります。

echo ^[c

それに付け加えて「c」を入力
「Esc」と「c」でresetコマンドより強力な端末のリセットが行えるようです。
最後に「Enter」を押して終了ですね。

「Esc」の表し方

aliasに設定するときに、「Esc」を8進数や16進数で表すことができるようです。

8進数の場合

alias clearbin="echo -e '\033c'"

16進数の場合

alias clearbin="echo -e '\0x1bc'"

参考になった記事

ANSI エスケープシーケンスについて
What does printf(“\033c” ) mean?

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