- 投稿日:2020-12-01T22:44:54+09:00
Linux まとめ
備忘録としてまとめる。
ls
- * 任意の文字列
- ? 任意の1文字
$ls *.html Index.html home.html $ls /bin/x??? /bin/zcat /bin /bin/zcmp /bin/znewオプション
ファイルの詳細情報を表示する。 $ls -l drwx------+ 4 ryohei.udagawa staff 128 9 16 14:25 Movies drwx------+ 3 ryohei.udagawa staff 96 9 9 16:17 Music drwx------+ 4 ryohei.udagawa staff 128 9 16 16:08 Pictures drwxr-xr-x+ 4 ryohei.udagawa staff 128 9 9 16:17 Public 隠しファイルも含めた全てのファイルを表示する。 $ls -a . .ssh Library .. .vscode Movies ファイル種別を表示する $ls -F Applications/ Downloads/ Music/ workspace/ Desktop/ Library/ Pictures/cat
% cat -n /etc/hosts 1 ## 2 # Host Database 3 # 4 # localhost is used to configure the loopback interface 5 # when the system is booting. Do not change this entryless(catより広く見れる)
$less ファイル名 /<文字列> 下方向に向かって検索 ?<文字列> 上方向に向かって検索rm(削除)
ディレクトリも合わせて削除する rm -r dir ファイルを削除する際に警告文を表示しない rm -f file ファイルの削除前に確認する rm -I filemv
mv 移動元 移動先 #ファイル名を変更 $mv file file1 #ファイルを移動(移動先がディレクトリならば、ファイル移動) $mv file1 dir/ 上書きする前に確認する $mv -I file file1cp
cp コピー元 コピー先 #ファイルをコピー $cp file new_file #ファイルをディレクトリ内にコピー $cp file dir 上書きする前に確認する $cp -i file new_file ディレクトリをコピーする $cp -r dir new_dirfind
find 検索開始ディレクトリ 検索条件 アクション ファイル名を指定してファイルを検索。ファイル名の大文字小文字を区別する $find .-name README.md #ワイルドカードが使える。*を使って指定する時は''で囲うこと $find . -name '*.html' -print ファイル名を指定してファイルを検索。ファイル名の大文字小文字を区別しない $find . -iname readme.md # -type fは通常ファイル $find . -type f -print #-type | はシンポリックリンク find . -type | -print #-type dはディレクトリ $find . -type d -print 複数の検索条件を指定。なお、-aは省略可能 $find . -type d -a -name images -print
- 投稿日:2020-12-01T21:25:19+09:00
Arch Linux: AURヘルパー'yay'のインストール方法
archlinuxのAURヘルパーのなかで一番人気のyayのインストール方法について書いていきます。
今回の内容はとても丁寧かつ慎重にインストールしているので少し面倒に感じる方もいるかもしれませんが、基本コピペするだけでOKなので辛抱してください。
今回は2つのやり方を紹介します。
1つ目はgit cloneを使ったやり方です。
Archlinuxを使っている人はgit cloneを使ってインストールするのがいいでしょう。2つ目は普通にpacmanでインストールする方法です。
yayがリポジトリに登録されているArchベースのLinuxを使っている人はこちらのほうが簡単なのでこちらの方法をおすすめします。git cloneを使ったやり方
yayがリポジトリに登録されているかわからない人はとりあえずこちらの方法でインストールしておきましょう。
1.念の為アップデートしておきます。
sudo pacman -Syu2.git cloneを使うのでまずはgitをインストールします。
sudo pacman -S git3.yayはGO言語で書かれているのでGOコンパイラをインストールします。
sudo pacman -S go4.次のステップでgitをクローンするので、クローンする場所へ移動します。
まあ別に移動しなくてもいいのですが、今回はわかりやすいようにDownloadsフォルダに移動します。cd Downloads5.gitリポジトリからクローンします。AUR-yay-git
git clone https://aur.archlinux.org/yay-git.git6.lsでyayディレクトリがあるか確認します。すると'yay'と出ると思います。出たら成功なので次のステップへ進みます。
ls7.cdコマンドを使ってyayディレクトリに入ります。
cd yay8.ついにソースからビルドしていきます。
makepkg -si9.ビルドが完了したあと、以下のコマンドを実行しyayのバージョン((yay v10.1.1 - libalpm v12.0.2)←こんな感じの(2020/12/01/現在))が出ればインストール完了です。
もうDownloadsフォルダにあるyayは消してもらって構いません。yay -Vpacmanを使ったやり方
1.念の為アップデートしておきます。
sudo pacman -Syu2.インストールします。
sudo pacman -S yay3.以下のコマンドを実行しyayのバージョン((yay v10.1.1 - libalpm v12.0.2)←こんな感じの(2020/12/01/現在))が出ればインストール完了です。
yay -V
- 投稿日:2020-12-01T17:59:49+09:00
nlコマンドの使い方を調べる
Unix系のコマンドライン環境には、様々なマニュアルがシステム上に備わっています。この記事では、nlコマンドの使い方をコマンドの機能を用いて調べる方法を説明していきます。実際の
nl
の使い方については次回以降の記事で説明していく予定です。マニュアルの表示方法
--helpオプション
一番簡単に参照できるのは、コマンドのオプションにあるヘルプ(Usage)を見ることです。実装によってはヘルプがない場合もあります。
※”▶”の行をクリックすると実行結果が表示されます
$ nl --help
#GNU coreutilscoreutilsUsage: gnl [OPTION]... [FILE]... Write each FILE to standard output, with line numbers added. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -b, --body-numbering=STYLE use STYLE for numbering body lines -d, --section-delimiter=CC use CC for logical page delimiters -f, --footer-numbering=STYLE use STYLE for numbering footer lines -h, --header-numbering=STYLE use STYLE for numbering header lines -i, --line-increment=NUMBER line number increment at each line -l, --join-blank-lines=NUMBER group of NUMBER empty lines counted as one -n, --number-format=FORMAT insert line numbers according to FORMAT -p, --no-renumber do not reset line numbers for each section -s, --number-separator=STRING add STRING after (possible) line number -v, --starting-line-number=NUMBER first line number for each section -w, --number-width=NUMBER use NUMBER columns for line numbers --help display this help and exit --version output version information and exit Default options are: -bt -d'\:' -fn -hn -i1 -l1 -n'rn' -s<TAB> -v1 -w6 CC are two delimiter characters used to construct logical page delimiters; a missing second character implies ':'. STYLE is one of: a number all lines t number only nonempty lines n number no lines pBRE number only lines that contain a match for the basic regular expression, BRE FORMAT is one of: ln left justified, no leading zeros rn right justified, no leading zeros rz right justified, leading zeros GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> Full documentation <https://www.gnu.org/software/coreutils/nl> or available locally via: info '(coreutils) nl invocation'coreutilsの
nl
では、使えるオプションの一覧などを簡潔に表示してくれます。しかし、BSD系のnl
では、エラーメッセージ「nl: illegal option -- -」が先頭に表示されます。
$ nl --help
#*BSD(macOS)*BSD(macOS)nl: illegal option -- - usage: nl [-p] [-b type] [-d delim] [-f type] [-h type] [-i incr] [-l num] [-n format] [-s sep] [-v startnum] [-w width] [file]
結果的にヘルプは表示されていますが、
--help
オプションが実装されておらず間違った使い方だと認識されています。そのため親切に有効なオプションを同時に表示してくれているというわけです。Manpage
前回の記事でも軽く触れましたが、ManpageはUnix系のシステムで最も一般的なマニュアルの確認方法です。コマンドだけでなく様々な情報をまとめています。例えば他のカテゴリにも同一名の項目がある場合には、セクション番号を指定して区別する必要があります。コマンドのセクション番号は
1
です。たとえば、printf
は1
でコマンド、3
でC言語の関数についての説明を読むことができman 3 printf
のようにセクション番号を指定します。Manpageのページャはless
と同じ操作で扱うことができますので、スペース
でページ送り、q
で終了できます。
$ man nl
#GNU coreutilscoreutilsNL(1) User Commands NL(1) NAME nl - number lines of files SYNOPSIS nl [OPTION]... [FILE]... DESCRIPTION Write each FILE to standard output, with line numbers added. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -b, --body-numbering=STYLE use STYLE for numbering body lines -d, --section-delimiter=CC use CC for logical page delimiters -f, --footer-numbering=STYLE use STYLE for numbering footer lines -h, --header-numbering=STYLE use STYLE for numbering header lines -i, --line-increment=NUMBER line number increment at each line -l, --join-blank-lines=NUMBER group of NUMBER empty lines counted as one -n, --number-format=FORMAT insert line numbers according to FORMAT -p, --no-renumber do not reset line numbers for each section -s, --number-separator=STRING add STRING after (possible) line number -v, --starting-line-number=NUMBER first line number for each section -w, --number-width=NUMBER use NUMBER columns for line numbers --help display this help and exit --version output version information and exit Default options are: -bt -d'\:' -fn -hn -i1 -l1 -n'rn' -s<TAB> -v1 -w6 CC are two delimiter characters used to construct logical page delim- iters; a missing second character implies ':'. STYLE is one of: a number all lines t number only nonempty lines n number no lines pBRE number only lines that contain a match for the basic regular expression, BRE FORMAT is one of: ln left justified, no leading zeros rn right justified, no leading zeros rz right justified, leading zeros AUTHOR Written by Scott Bartram and David MacKenzie. REPORTING BUGS GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> COPYRIGHT Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO Full documentation <https://www.gnu.org/software/coreutils/nl> or available locally via: info '(coreutils) nl invocation' GNU coreutils 8.32 March 2020 NL(1)
$ man nl
#BSD(macOS)*BSD(macOS)NL(1) BSD General Commands Manual NL(1) NAME nl -- line numbering filter SYNOPSIS nl [-p] [-b type] [-d delim] [-f type] [-h type] [-i incr] [-l num] [-n format] [-s sep] [-v startnum] [-w width] [file] DESCRIPTION The nl utility reads lines from the named file or the standard input if the file argument is omitted, applies a configurable line numbering fil- ter operation and writes the result to the standard output. The nl utility treats the text it reads in terms of logical pages. Unless specified otherwise, line numbering is reset at the start of each logical page. A logical page consists of a header, a body and a footer section; empty sections are valid. Different line numbering options are independently available for header, body and footer sections. The starts of logical page sections are signalled by input lines contain- ing nothing but one of the following sequences of delimiter characters: Line Start of \:\:\: header \:\: body \: footer If the input does not contain any logical page section signalling direc- tives, the text being read is assumed to consist of a single logical page body. The following options are available: -b type Specify the logical page body lines to be numbered. Recog- nized type arguments are: a Number all lines. t Number only non-empty lines. n No line numbering. pexpr Number only those lines that contain the basic regu- lar expression specified by expr. The default type for logical page body lines is t. -d delim Specify the delimiter characters used to indicate the start of a logical page section in the input file. At most two characters may be specified; if only one character is speci- fied, the first character is replaced and the second charac- ter remains unchanged. The default delim characters are ``\:''. -f type Specify the same as -b type except for logical page footer lines. The default type for logical page footer lines is n. -h type Specify the same as -b type except for logical page header lines. The default type for logical page header lines is n. -i incr Specify the increment value used to number logical page lines. The default incr value is 1. -l num If numbering of all lines is specified for the current logi- cal section using the corresponding -b a, -f a or -h a option, specify the number of adjacent blank lines to be considered as one. For example, -l 2 results in only the second adjacent blank line being numbered. The default num value is 1. -n format Specify the line numbering output format. Recognized format arguments are: ln Left justified. rn Right justified, leading zeros suppressed. rz Right justified, leading zeros kept. The default format is rn. -p Specify that line numbering should not be restarted at logi- cal page delimiters. -s sep Specify the characters used in separating the line number and the corresponding text line. The default sep setting is a single tab character. -v startnum Specify the initial value used to number logical page lines; see also the description of the -p option. The default startnum value is 1. -w width Specify the number of characters to be occupied by the line number; in case the width is insufficient to hold the line number, it will be truncated to its width least significant digits. The default width is 6. ENVIRONMENT The LANG, LC_ALL, LC_CTYPE and LC_COLLATE environment variables affect the execution of nl as described in environ(7). EXIT STATUS The nl utility exits 0 on success, and >0 if an error occurs. SEE ALSO jot(1), pr(1) STANDARDS The nl utility conforms to IEEE Std 1003.1-2001 (``POSIX.1''). HISTORY The nl utility first appeared in AT&T System V Release 2 UNIX. BUGS Input lines are limited to LINE_MAX (2048) bytes in length. BSD January 26, 2005 BSDTexinfo
GNUのコマンドユーティリティであるcoreutilsは、公式のマニュアルとしてTexinfoというものがあります。GNUは情報提供方法としてTexinfoを推奨しているため、Manpageの記述はcoreutilsの開発メンバーによって直接メンテナンスされていません。LinuxではLinux man-page projectが内容の更新を担っています。詳しい説明を参照する場合には、オリジナルのTexinfoを閲覧するほうが良いでしょう。
man
同様にinfo
で各コマンドの説明を表示できます。ページャにはEmacsが使われるため、操作には少々慣れが必要です。スペース
でページ送り、Ctrl-x
Ctrl-c
で終了できます。
$ info nl
#GNU coreutilscoreutilsFile: coreutils.info, Node: nl invocation, Next: od invocation, Prev: tac invocation, Up: Output of entire files 3.3 ‘nl’: Number lines and write files ====================================== ‘nl’ writes each FILE (‘-’ means standard input), or standard input if none are given, to standard output, with line numbers added to some or all of the lines. Synopsis: nl [OPTION]... [FILE]... ‘nl’ decomposes its input into (logical) page sections; by default, the line number is reset to 1 at each logical page section. ‘nl’ treats all of the input files as a single document; it does not reset line numbers or logical pages between files. A logical page consists of three sections: header, body, and footer. Any of the sections can be empty. Each can be numbered in a different style from the others. The beginnings of the sections of logical pages are indicated in the input file by a line containing exactly one of these delimiter strings: ‘\:\:\:’ start of header; ‘\:\:’ start of body; ‘\:’ start of footer. The two characters from which these strings are made can be changed from ‘\’ and ‘:’ via options (see below), but the pattern and length of each string cannot be changed. A section delimiter is replaced by an empty line on output. Any text that comes before the first section delimiter string in the input file is considered to be part of a body section, so ‘nl’ treats a file that contains no section delimiters as a single body section. The program accepts the following options. Also see *note Common options::. ‘-b STYLE’ ‘--body-numbering=STYLE’ Select the numbering style for lines in the body section of each logical page. When a line is not numbered, the current line number is not incremented, but the line number separator character is still prepended to the line. The styles are: ‘a’ number all lines, ‘t’ number only nonempty lines (default for body), ‘n’ do not number lines (default for header and footer), ‘pBRE’ number only lines that contain a match for the basic regular expression BRE. *Note Regular Expressions: (grep)Regular Expressions. ‘-d CD’ ‘--section-delimiter=CD’ Set the section delimiter characters to CD; default is ‘\:’. If only C is given, the second remains ‘:’. (Remember to protect ‘\’ or other metacharacters from shell expansion with quotes or extra backslashes.) ‘-f STYLE’ ‘--footer-numbering=STYLE’ Analogous to ‘--body-numbering’. ‘-h STYLE’ ‘--header-numbering=STYLE’ Analogous to ‘--body-numbering’. ‘-i NUMBER’ ‘--line-increment=NUMBER’ Increment line numbers by NUMBER (default 1). ‘-l NUMBER’ ‘--join-blank-lines=NUMBER’ Consider NUMBER (default 1) consecutive empty lines to be one logical line for numbering, and only number the last one. Where fewer than NUMBER consecutive empty lines occur, do not number them. An empty line is one that contains no characters, not even spaces or tabs. ‘-n FORMAT’ ‘--number-format=FORMAT’ Select the line numbering format (default is ‘rn’): ‘ln’ left justified, no leading zeros; ‘rn’ right justified, no leading zeros; ‘rz’ right justified, leading zeros. ‘-p’ ‘--no-renumber’ Do not reset the line number at the start of a logical page. ‘-s STRING’ ‘--number-separator=STRING’ Separate the line number from the text line in the output with STRING (default is the TAB character). ‘-v NUMBER’ ‘--starting-line-number=NUMBER’ Set the initial line number on each logical page to NUMBER (default 1). ‘-w NUMBER’ ‘--number-width=NUMBER’ Use NUMBER characters for line numbers (default 6). An exit status of zero indicates success, and a nonzero value indicates failure.コマンドの互換性
これまで見てきたとおり、主要な実装において
nl
は11個のオプションをサポートします。そしてオプションの文字も実装によらず同じものが利用されています。これはPOSIXというIEEEの標準規格によって、コマンドのインターフェースがある程度決められ互換性が維持されているからです。標準化されているおかげで、私たちはどの環境にあるコマンドでもほとんど同じ操作で使用することができるのです。
しかし実際には実装による差も少なからず存在します。それらについても以降の記事で触れていく予定です。
- 投稿日:2020-12-01T17:44:03+09:00
様々なnlコマンドの実装
一口に「nlコマンド」と言っても様々な実装があります。機能に大きな差はありませんが、この記事では
nl
の種類とその調べ方について説明していきます。nlコマンドの種類
最初のnlコマンド
最初に
nl
が実装されたシステムは、1984年に発売されたAT&Tの「System V Release 2(SVR2)」のようです。FreeBSDのドキュメントにはこのような記載がありました。HISTORY
The nl utility first appeared in AT&T System V Release 2 UNIX.出典:https://www.freebsd.org/cgi/man.cgi?query=nl
さらには1987年、X/Open Portability Guide(issue 2)で標準化され、POSIXやSingle Unix Specificationといった後の主要な標準ドキュメントにも記載されていきます。30年以上の歴史あるコマンドですから、今回紹介する実装以外にも様々な
nl
が存在することでしょう。GNU coreutils
GNU coreutilsは多くのLinuxディストリビューションで採用されている
nl
を含む主要なコマンドユーティリティです。他の実装に比べて、GNUによる独自の機能拡張や性能改善がされています。この拡張が互換性や移植性の問題を引き起こすこともありますが、個人的な利用において過度に気にする必要は無いでしょう。執筆時点の最新版はv8.32で2020年3月にリリースされたものです。最近のLinuxディストリビューションでは、RHEL8やCentOS8、Ubuntu 20.04LTSではv8.30が、Ubuntu 20.10ではv8.32が採用されているようです。
BSD系(macOS、FreeBSD等)
BSD系の
nl
は単一の提供元が存在するわけではなく、*BSDの実装を元にAppleなどの各OSベンダーが必要に応じた改変を加え提供しているnl
の総称的なものになります。もちろん細かな挙動は各々の実装で異なる可能性がありますし、プロプライエタリな実装もあります。busybox
ルーターなどのLinux組み込み機器では、コマンドユーティリティにbusyboxが採用されていることがあります。busyboxは単一の実行ファイルで、呼び出されたときのコマンド名に応じて様々なコマンドの動作が可能な特殊なソフトウェアです。もちろん
nl
の機能も内包されています。実行ファイルのサイズがとても小さいので、組み込み機器など記憶領域に制約がある環境で採用されています。種類やバージョンの調べ方
--versionオプション
--version
オプションでコマンドのバージョンを見ることができます。このとき著作権に関する情報も出力されるので、どんなnl
なのかを知ることができます。しかしcoreutils以外のnl
の実装では、--version
オプションに対応しておらずエラーと簡単な使い方だけが表示されてバージョンが判明しないこともあります。Ubuntu 20.04 LTS$ nl --version nl (GNU coreutils) 8.30 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Scott Bartram and David MacKenzie.Ubuntuの
nl
では、--version
オプションを使うことで、GNU coreutilsであることがわかりました。macOS Catalina% nl --version nl: illegal option -- - usage: nl [-p] [-b type] [-d delim] [-f type] [-h type] [-i incr] [-l num] [-n format] [-s sep] [-v startnum] [-w width] [file]
一方macOSの
nl
では、--version
オプションをサポートしていないので、一意に識別することはできません。Manpage
Manpageの記述を見ることでも、
nl
の種類を判断することができます。Manpageが存在しない環境では表示されませんが、ほとんどのLinuxやmacOSで表示できるはずです。man nl
と実行すればnl
のManpageを読むことができます。著作権やバージョンの記述は下の方に記載されていますので、tail
を用いて最後の10行を表示してみましょう。Ubuntu 20.04 LTS$ man nl | tail -n 10 Copyright © 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO Full documentation at: <https://www.gnu.org/software/coreutils/nl> or available locally via: info '(coreutils) nl invocation' GNU coreutils 8.30 September 2019 NL(1)こちらを見てもUbuntuの
nl
はcoreutilsであることが確認できました。macOS Catalina% man nl | tail -n 10 STANDARDS The nl utility conforms to IEEE Std 1003.1-2001 (``POSIX.1''). HISTORY The nl utility first appeared in AT&T System V Release 2 UNIX. BUGS Input lines are limited to LINE_MAX (2048) bytes in length. BSD January 26, 2005 BSD
macOSはManpageのフッターを見ることで、BSD系の
nl
であることが確認できました。コマンドの識別
コマンドは絶対パスではなくコマンド名だけで呼び出すことがほとんどです。しかし一つの環境で複数の
nl
がインストールされている場合など、どのコマンドが呼び出されているのかわからなくなることがあります。このような場合にはwhich
を利用することで、デフォルトでどのコマンドが実行されているのかを調べることができます。$ which nl /usr/bin/nlこれで
/usr/bin/nl
が実行されることがわかります。さらに詳細を知りたい場合は、先ほどの例にならい/usr/bin/nl --version
を実行してバージョンなどを調べてみると良いでしょう。実行されるコマンドはシェルの環境変数である
$PATH
に基づいて選ばれています。詳しくは説明しませんが、この環境変数を変更することで、実行するデフォルトのコマンドを変更することができます。
補足
この記事シリーズでは特に断りのない限り、GNU coreutilsの
nl
を使用します。macOSでcoreutilsの
nl
を利用したい場合は、brew
などを利用してインストールできます。デフォルトではgnl
という名前のコマンドとしてインストールされ、もとのBSD系のnl
と使い分けることができます。他のcoreutilsのコマンドも頭にg
をつければ使うことができます。% brew install coreutils (略) % gnl --version (略)
- 投稿日:2020-12-01T14:42:57+09:00
teeでリアルタイムでログ出力をする
- 普通に呼ぶと、コマンド終了後にteeに渡させるので、リアルタイムでみることはできない
- scriptコマンドから呼ぶといいみたい
script -c "./apply.sh aaa /dev/null" | tee out.log
- 投稿日:2020-12-01T14:06:23+09:00
DNS over TLS(unbound)
IIJ Public DNSサービス(ベータ版)
IIJさんが、DoT,DoHを試験サービスとして提供してくれています。
2022年3月31日までの予定だそうです。
DoT,DoHの普及へ向けた、大事なテストですね。
Androidでも利用させていただいています。今回はLaptopでWifiのみの接続での利用です。
ルーター経由でインターネットに接続しています。
Linux Mint 20 "Ulyana" - MATE (64-bit) をインストールしたところから始まります。
インストール直後の起動では、grubのメニューが立ち上がらず、set root=(hd0,gpt6) set prefix=(hd0,gpt6)/boot/grub insmod normal normalこれでgrubメニューが表示され、無事に立ち上がりました。
次回からも無事立ち上がるように、grubを再インストールします。
UEFIなので、下記のような感じになりました。sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Mint --recheck sudo update-grubシャットダウンして、電源入れ直し。LaptopでLinux Mintが無事、立ち上がりました。
さて本題。
DNS over TLSをクライアントとして利用するために、unboundを用いました。sudo apt install unboundインストールされたunboundには2つの設定ファイルが用意されていました。
qname-minimisation.conf
root-auto-trust-anchor-file.confそこに設定ファイルを1つ追加します。
dns-over-tls.confserver: tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt forward-zone: name: "." forward-tls-upstream: yes #DoT #IIJ DoT forward-addr: 2001:300::5@853#public.dns.iij.jp forward-addr: 2001:300::6@853#public.dns.iij.jp forward-addr: 103.2.57.5@853#public.dns.iij.jp forward-addr: 103.2.57.6@853#public.dns.iij.jptls-cert-bundleに、ca-certificatesパッケージのca-certificates.crtを指定します。(memo: dpkg -L ca-certificates)
@でdomain-sのポート853を指定しています。
#public.dns.iij.jpでtlsで認証証明書のチェックをするドメイン名を指定しています。
※設定しているIPアドレスは、2020/12/01時点でのpublic.dns.iij.jpのアドレスです。sudo cp dns-over-tls.conf /etc/unbound/unbound.d/ service unbound restart設定ファイルを追加後、unboundを再起動。
これで名前解決にDNS over TLSを利用できる状態になりました。
ただWifi接続のみのため、DHCPで付与されたルーターのDNSがおそらくそのまま使われます。
そこでwifi接続の設定でDNSにローカルアドレスを追加します。Mintのメニューだと
[コントロールセンター]
[インターネットとネットワーク]
[高度なネットワーク設定]
から設定できます。ipv4設定、ipv6設定の「追加のDNS」にローカルリンクアドレスを追加します。
ipv4 ipv6 127.0.0.1 ::1 これでwifi接続のみのlaptopから、IIJさんへDNS over TLSで名前解決リクエストを送って、tls handshakeを経て、名前解決がされている、と思います。
syslogにはtls handshakeのエラーもなく、無効なドメインの場合には、NXDOMAINが通知されています。もし、おかしな点、間違っているところなどありましたら、ご指摘いただけると助かります。
参考サイト。
https://www.ctrl.blog/entry/unbound-tls-forwarding.html
https://nlnetlabs.nl/documentation/unbound/unbound.conf/その2
knot-resolverへ移行しました。
パッケージは公式サイトのものを使いました。
公式サイトの最新ドキュメントと参考サイトの情報を合わせて、必要な機能だけをオンにしました。
今の所、問題なく動作してくれています。
- 投稿日:2020-12-01T11:57:17+09:00
Linux, Mac (BSD系), Macにcoreutilsを入れた場合に対応するlsの色付け設定
やりたいこと
LinuxでもMac(coreutils有り無し)でも同じ
.zshrc
を使ってls
の色付け設定をする.
LS_COLORS
- LinuxのGNU版
ls
コマンドの色設定は環境変数LS_COLORS
で指定.- MacのBSD版
ls
コマンドの色設定は環境変数LSCOLORS
で指定できるが,設定方法が特殊で扱いづらい.- LinuxとMacで同じ色設定にするには
coreutils
をインストールしてGNU版ls
コマンドを使えるようにするのが楽.Linuxでは
dircolors
というコマンドを実行すればいい感じにLS_COLORS
を設定できる.Macでcoreutils
を使う場合はgdircolors
というコマンド.場合分けして
.zshrc
を書く..zshrc# ---------- ファイル,ディレクトリの色設定 if type dircolors > /dev/null 2>&1; then eval "$(dircolors)" elif type gdircolors > /dev/null 2>&1; then eval "$(gdircolors)" fi
ls
のエイリアス
- LinuxのGNU版
ls
で色をつけるオプションはls --color=auto
.- MacのBSD版
ls
で色をつけるオプションはls -G
.- BSD版
ls
を使う場合はデフォルトの色設定をとりあえず使う.coreutils
を入れた場合はgls
を使う.
.zshrc
に場合分けして記述.darwin*
はMacOS..zshrccase ${OSTYPE} in darwin*) alias ls='ls -G' ;; linux*) alias ls='ls --color=auto' ;; esac # ------ if coreutils if type gls > /dev/null 2>&1; then alias ls='gls --color=auto' fi参考
Yonchu @yuyuchu3333: LS_COLORSを設定しよう
- 投稿日:2020-12-01T10:07:02+09:00
[Linux Gnome]ubuntu でキーボードの設定がもどってキーッってなっているあなたへ?
はじめに
Advent Calendar 12/8の記事になります
私はハンズラボ株式会社にて、トータルオプティマイゼーショングループのマネジャーをやっております。
普段はあまり開発をやっていませんが、プログラミング大好きです!寒い季節になりましたね〜。 サンタさんは今年は何をプレゼントしてくれるのでしょう?
最近最愛の娘がサンタの正体を気づいており、時の早さを痛感しております。自称PC好きで2台の自作PC(Windows10,Ubuntu)を持ち、2台のノートPC(Windows10,MacbookPro(会社支給))と
iPad, ラズパイ(3B)を保有しています。(何台もってるんや・・・)本題です
リモートワークが進み、会社PCではMac Book Pro 、個人PCではubuntu(20.04)を使用していますが
どちらも同じキーボード使いたいし(私はメカニカルキーボードを利用)、webカメラ、マイクとかを使うPCのたびに
切り替えるのってすごくめんどくさいですよね!!!!ちなみにHTML端子も交換器を使っています
USBの切替時にキーボード(Mozc)の設定もどりませんか?
私はusb切替機をつかっているんですが、
USBの端子を指すたびに、ubuntu側のMozcのキーボード設定が戻るんです。
通常の設定(Macに合わせてCAPS LOCKを左Controlに変えているひとは多いのでは?)
USBを差し替えると、tmuxのkeyバインドとかでctrlをつかうので
CapsLockが初期設定に戻るのが超絶に不便なのです!打開策 厳選3種
いろいろ調べた結果、いろいろの打開策を考えました。
1.ログアウト
ぐぐるとまず出てくるのがこれ、はじめはこれでやっていましたが切り替えるたびにログアウトは正直めんどくさい。
ブラウザとかアプリが一度落ちてしまうし。。。2.alt + F2 → r
gnome shellをリスタートさせる方法。
これで解決しますが、2アクションは嫌だ。(いや、我慢できる人はこれでOK)
あと、alt + F2 って忘れる。。。
これをコマンドにしたのが下になります!3.カスタムファンクションを作る
そこで考えついたのは案3!現在はこれ一択です。
ubuntu → システム設定 → キーボード
でショートカット(自分の場合はF11)に下の実行権限のついたshellをフルパスで記載します。$ cat gnome_refresh.sh #!/bin/bash killall -3 gnome-shell & > /dev/null 2>&1 exit 0 $key設定がおかしくなぁ、、、と思ったら、F11で終わり、解決!!!
わすれないし、ブラウザとかも落ちずに戻ります。
困ったら真似してみてください。
(ちなみにF12はとかはよく使うので、あまりつかわないF11にしています。)それでは良いLinuxライフを!
- 投稿日:2020-12-01T02:00:09+09:00
daemontoolsの設定を自動で設定するシェルスクリプト(備忘録)
前提条件
- daemontoolsが使えるようになっていること
以上(笑)
シェルスクリプト作成
以下のシェルスクリプトをPATHが通っているところに置いて、実行のパーミッションを付けます。
この記事では「daemonctl」という名前で作成したとして説明します。daemonctl#!/bin/sh # Current working directory CWD=`pwd -P` SERVICE=`pwd | awk -F"/" '{print $NF}'` # Options OPT=$1 SCRIPT=$2 # Display help if [ -z $OPT ]; then echo "Usage: "`echo $0 | awk -F"/" '{print $NF}'`" [option]" echo " start: start service." echo " stop: stop service." echo "restart: restart service." exit fi # When in stop mode, if there was no service directory. if [ "$OPT" != "stop" ]; then if [ ! -f "$SCRIPT" ]; then START="$CWD/start.sh" else START=$SCRIPT fi if [ ! -f "$START" ]; then echo "require start.sh script." exit fi fi if [ ! -d "$CWD/service/$SERVICE" ]; then mkdir -p $CWD/service/$SERVICE cat << EOF > $CWD/service/$SERVICE/run #!/bin/sh PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" cd $CWD exec $START EOF chmod 755 $CWD/service/$SERVICE/run fi #============================================================================= # Start daemon #============================================================================= if [ "${OPT}" = "start" ]; then if [ ! -L /etc/service/$SERVICE ]; then ln -s $CWD/service/$SERVICE /etc/service/ fi svc -u /etc/service/$SERVICE > /dev/null 2>&1 echo "Start daemon service [$SERVICE]." #============================================================================= # Stop daemon #============================================================================= elif [ "${OPT}" = "stop" ] && [ -L /etc/service/$SERVICE ]; then svc -d /etc/service/$SERVICE > /dev/null 2>&1 rm -rf /etc/service/$SERVICE PID=`ps ax | grep "supervise $SERVICE" | grep -v 'grep' | awk '{print$1}'` kill -9 $PID echo "Stop daemon service [$SERVICE]." #============================================================================= # Restart daemon #============================================================================= elif [ "${OPT}" = "restart" ]; then svc -d /etc/service/$SERVICE > /dev/null 2>&1 && svc -u /etc/service/$SERVICE > /dev/null 2>&1 echo "Restart daemon service [$SERVICE]." fiパーミッションは、
$ chmod 755 daemonctlみたいな感じで付けてください。
スクリプト解説
とりあえずはdaemontoolsで監視したいツールのディレクトリに入ります。
ディレクトリが無い場合は、適当な場所にディレクトリを作って入ります。
そこに「start.sh」という名前で、ツールの起動スクリプトを書きます。
「exec」で起動するようにしないと上手くdaemontoolsで監視してくれないっぽい。起動スクリプトが作成出来たら、以下のような感じで実行します。
$ daemonctl start
すると、カレントディレクトリにある「start.sh」を起動スクリプトとしてdaemontoolsがツールを起動し、プロセス監視を開始します。
実行すると「[カレントディレクトリ]/service/[カレントディレクトリ名]」というディレクトリが作成されているはず。
例)
カレントディレクトリが「minecraft」だった場合、「./service/minecraft」というディレクトリが作成されているはず。
これが、daemontoolsが監視するために使用するディレクトリ。
通常はエディタなどで中にある「run」というファイルを記述して「/etc/service」配下にシンボリックリンクを貼ったりしないといけなかったが、それをシェルスクリプトで実行するようにしてあります。
実行してエラーなどが出なかった場合に、$ ps ax | grep minecraftなどとプロセスを確認してみると、superviseと、起動されたツールの2つが出てくると思います。
ここで、$ daemonctl stop
と実行すると、ツールが停止し、daemontoolsの監視が止まります。
プロセスで確認すると、先程の2つのプロセスがなくなっているのが確認出来るはず。$ daemonctl start [起動スクリプトのPATH]とやると、「start.sh」以外の起動スクリプトを指定することも出来ます。
daemontoolsってなに?
という人はググってください。
Windows用のツールで同名の、光学メディアマウントツールがありますので、上手くググってください。
- 投稿日:2020-12-01T01:21:09+09:00
ランレベルのことを今更調べてみた
勉強前イメージ
シングルユーザモードでの起動とか、GUIの起動とか表すやつ
よく見るけど、正直あんま理解してない調査
ランレベルとは?
linuxの動作モードのこと。
0から6までモードがあって、ランレベル毎にどのサービスが起動する・しないを決定しています
/etc/rc.d/rc*.d
にあるファイルによって、各ランレベルで起動するプログラムを指定しています。
- Redhat,CentOS等
systemd target に記載した内容が結構わかりやすいのではないかなと思います。
ランレベル systemd target 内容 0 runlevel0.target, poweroff.target 停止 1 runlevel1.target, rescue.target シングルユーザーモード、ネットワーク無し。rootでのログインが出来ないときに使用します 2 runlevel2.target, multi-user.target マルチユーザーモード(NFSマウントなし) 3 runlevel3.target, multi-user.target マルチユーザーモード(コンソール)、ネットワーク有り。通常の操作で使用されます。 4 runlevel4.target, multi-user.target 未使用 5 runlevel5.target, graphical.target マルチユーザーモード(X Windows)、ネットワーク有り。GUIでのログインの際に使用されます。 6 runlevel6.target, reboot.target システム再起動 実際にランレベルを見てみよう
- runlevelコマンド
現在のランレベルがわかります。
1つ前のランレベル 現在のランレベル
という順で表示されます。
1つ前のランレベルがN
: システム起動後に一度も変更されてないときに使われる
現在のランレベルが3
: 上記の表でいうと、ネットワークが接続されておりコンソールでのログインの際に表示されるランレベル ということがわかります。[root@localhost ~]# runlevel N 3
- systemctlコマンド
こちらでも、同じように現在のランレベルが見れます。
multi-user.target なので、ランレベル3で確認出来ました[root@localhost ~]# systemctl get-default multi-user.target
- chkconfigコマンド
httpdとか起動してるのに見えないな...
実はsystemdの配下にしたみたいです。[root@localhost ~]# chkconfig --list 注記: この出力に含まれるのは SysV サービスのみです。ネイティブな systemd サービスは含まれません。SysV の設定データはネイティブな systemd 設定で上書きされる場合があります。 systemd サービスを一覧表示する場合は 'systemctl list-unit-files' を使用します。 特定のターゲットで有効になっているサービスを確認する場合は 'systemctl list-dependencies [target]'を使用します。 netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- systemctl list-unit-files コマンド
ここには
httpd
とか含まれてた。
めっちゃ出てくる[root@localhost ~]# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount stati .... [root@localhost ~]# systemctl list-unit-files | grep httpd httpd.service disabled勉強後イメージ
実際にちゃんと気にしたことはなかったかも。。。
シングルユーザーモードで入ったりはしたことあったけど。。
3と5ってコマンドかGUIって感じだけど、2と3って難しいよね。参考
- 投稿日:2020-12-01T00:23:39+09:00
shellの引数で処理を分ける方法
業務で覚えた知識を備忘録として記載していきます。
対象者
- shellに興味のある人
- 実行時の引数で処理を分けたい場合
先日業務でshellを書くことがあったのですが、調べてみると中々自分がやりたい内容が見つからなかったので、そんな人の一助になればと思ったのと単純に覚えた内容を忘れないために記事にしたいと思いました。
やりたいこと
- shell実行時の引数で処理を分ける
- 外部ファイルを読み込み情報を取得する
- 取得した情報を変数として持ち活用する
使用コマンド if / while read LINE / AWK
if [ 条件 ] then [ 実行処理 ] fiwhile read LINE (変数名) do 実行されるコマンド done < [ ファイル名 ]awk [ オプション ] [ コマンド ]環境
Linux
ディレクトリ構成
シンプルに実行するshellと読み取るファイルが同じ階層のケース。
shellを実行するとlist.csvを読み取り、引数に対応した値を取得する。
階層が複雑な場合はフルパス指定したり、プロパティファイルを作ったり変数にしたりして可読性とメンテナンス性を上げる。
下記はサンプルなので.confファイルも中身2行で用意。home/ ├ country.sh └ list.confファイルの中身
list.confJPN,日本,東京,3 USA,アメリカ合衆国,ワシントンDC,1 CHN,中華人民共和国,北京,2 DEU,ドイツ連邦共和国,ベルリン,4 IND,インド,ニューデリー,5 ・・・shellの中身
country.sh#!/bin/bush #シェル名:country.sh #処理概要:引数に与えた国の和名と首都、GDP何位かを表示します。 #引数:$1 国コード(アルファベット3桁) #設定ファイル CONF_FILE="/home/list.conf" #1.開始メッセージ echo "処理を開始します。" #2.パラメータチェック if [ $# -ne 1 ] then #パラメータ数不正 $echo "引数の国コードは1つ(3文字)にしてください。" exit fi PARAM_IF_ID=$1 #3.定義ファイル取得 while read LINE do TOP_STR=`echo ${LINE:0:1}` if [ ${TOP_STR} == "#" ] then # コメント行 countinue fi #引数取得 IF_ID=`echo ${LINE} | awk -F, '{print $1}'` #引数判定 if [ "${IF_ID}" = "${PARAM_IF_ID}" ] then #国名(和名) NAME=`echo ${LINE} | awk -F, '{print $2}'` #首都 CAP=`echo ${LINE} | awk -F, '{print $3}'` #国内総生産ランキング GDP=`echo ${LINE} | awk -F, '{print $4}'` break fi done < ${CONF_FILE} echo "選択した"${NAME}"の首都は"${CAP}"です。近年のGDPは世界"${GDP}"位でした。" exitshell実行引数をキーにlist.confファイルから情報を抽出する。
処理を実行するとメッセージが表示され、引数が1つ以外の場合はエラーを発して終了します。
決められた引数を受け取ると、list.confの2カラム目、3カラム目の値を$2/$3...に受け取っていく。
あとは内部の処理で受け取った引数を使うだけ。引数が"JPN"の実行結果
$ bash country.sh JPN 処理を開始します。 選択した日本の首都は東京です。近年のGDPは世界3位でした。引数が"USA"の実行結果
$ bash country.sh USA 処理を開始します。 選択したアメリカの首都はワシントンDCです。近年のGDPは世界1位でした。引数なしの場合
$ bash country.sh 処理を開始します。 引数の国コードは1つ(3文字)にしてください解説という名の復習
引数をキーに.confファイルの中身を抽出する方法でした。
ポイントはwhile read LINEと awk を|を使って繋げた所です。
.confファイルの中身を一行ずつ取り出して変数に格納していて,(カンマ)区切りで記入されたファイルの中身を読み取っています。
この処理があるので.confファイル内に複数のパターンの定義が存在していても、引数をキーに使い分けることが出来ます。
今はA/Bパターンだけでも、今後C/D/E...と増えた際に.confファイルのみメンテすればshellの処理を変えずに対応が可能となりメンテナンス性が向上します。