- 投稿日:2020-12-18T21:47:06+09:00
io_uringを使うプログラムはCentOS 8上のDockerで動かない
Linux kernel 5.1から導入されたio_uringという非同期IOのカーネル機能がありますが、それを使うDockerイメージはCentOS 8で動きませんよと。
知ってる人にはまあ、そうだよねという事ではあるのですが。Docker/Linuxコンテナのポータビリティは万能ではないんですよと議論したい場合の論拠として。
io_uring使うプログラムをUbuntu 20.10で作る
1.OSがUbuntu 20.10の仮想マシンを作る。
https://ubuntu.com/download2.Dockerをインストールする。
https://docs.docker.com/engine/install/ubuntu/3.Docker上でUbuntu 20.10イメージを起動する。
# docker run -it --rm --name=io_uring-test ubuntu:20.10 bash
4.一応、uname -aで利用中のカーネルを確認。
(c)# uname -a
(実行結果) root@17003dd74a2f:/liburing/examples# uname -a Linux 17003dd74a2f 5.8.0-33-generic #36-Ubuntu SMP Wed Dec 9 09:14:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux5.gccとio_uringのライブラリ、gitをインストールする。
(c)# apt-get update
(c)# apt-get install -y build-essential liburing-dev git
6.io_uringのサンプルプログラムを入手する。
https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
(c)# git clone https://github.com/axboe/liburing.git
7.サンプルプログラムをコンパイルする。
(c)# cd liburing/examples
(c)# gcc -Wall -O2 -D_GNU_SOURCE -o io_uring-test io_uring-test.c -luring
8.プログラムを実行する。当然、こちらは動作する。
(c)# ./io_uring-test io_uring-test.c
(実行結果) root@08ad6f4c804c:/liburing/examples# ./io_uring-test io_uring-test.c Submitted=1, completed=1, bytes=22569.コンテナからデタッチ(C-p, C-q)し、コミット、イメージ保存する。
# docker commit io_uring-test io_uring-test
# docker save io_uring-test -o io_uring-test.tar
CentOS 8のDockerでそのプログラムを動かす
1.OSがCentOS 8.3の仮想マシンを作る。
https://www.centos.org/download/2.Dockerをインストールする。
https://docs.docker.com/engine/install/centos/3.先のDockerイメージ(io_uring-test.tar)をCentOS 8マシンにコピーし、ロードする。
# docker load -i io_uring-test.tar
4.コンテナを起動する。
# docker run -it --rm io_uring-test bash
5.一応、uname -aで利用中のカーネルを確認。ホストのCentOS 8と同じ4.18なはず。
(c)# uname -a
(実行結果) root@824c737193b6:/# uname -a Linux 824c737193b6 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux (ついでに) root@824c737193b6:/liburing/examples# cat /etc/os-release NAME="Ubuntu" VERSION="20.10 (Groovy Gorilla)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.10" VERSION_ID="20.10" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=groovy UBUNTU_CODENAME=groovy5.サンプルプログラムを動かす。
(c)# cd liburing/examples/
(c)# ./io_uring-test io_uring-test.c
(実行結果) root@824c737193b6:/liburing/examples# ./io_uring-test io_uring-test.c queue_init: Function not implementedまあ、動きませんよね、と。
- 投稿日:2020-12-18T21:47:06+09:00
io_uringを使うプログラムはCentOS 8上のDockerでは動かない
Linux kernel 5.1から導入されたio_uringという非同期IOのカーネル機能がありますが、それを使うDockerイメージはCentOS 8で動きませんよと。
知ってる人にはまあ、そうだよねという事ではあるのですが。Docker/Linuxコンテナのポータビリティは万能ではないんですよと議論したい場合の論拠として。
io_uring使うプログラムをUbuntu 20.10で作る
1.OSがUbuntu 20.10の仮想マシンを作る。
https://ubuntu.com/download2.Dockerをインストールする。
https://docs.docker.com/engine/install/ubuntu/3.Docker上でUbuntu 20.10イメージを起動する。
# docker run -it --rm --name=io_uring-test ubuntu:20.10 bash
4.一応、uname -aで利用中のカーネルを確認。
(c)# uname -a
(実行結果) root@17003dd74a2f:/liburing/examples# uname -a Linux 17003dd74a2f 5.8.0-33-generic #36-Ubuntu SMP Wed Dec 9 09:14:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux5.gccとio_uringのライブラリ、gitをインストールする。
(c)# apt-get update
(c)# apt-get install -y build-essential liburing-dev git
6.io_uringのサンプルプログラムを入手する。
https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
(c)# git clone https://github.com/axboe/liburing.git
7.サンプルプログラムをコンパイルする。
(c)# cd liburing/examples
(c)# gcc -Wall -O2 -D_GNU_SOURCE -o io_uring-test io_uring-test.c -luring
8.プログラムを実行する。当然、こちらは動作する。
(c)# ./io_uring-test io_uring-test.c
(実行結果) root@08ad6f4c804c:/liburing/examples# ./io_uring-test io_uring-test.c Submitted=1, completed=1, bytes=22569.コンテナからデタッチ(C-p, C-q)し、コミット、イメージ保存する。
# docker commit io_uring-test io_uring-test
# docker save io_uring-test -o io_uring-test.tar
CentOS 8のDockerでそのプログラムを動かす
1.OSがCentOS 8.3の仮想マシンを作る。
https://www.centos.org/download/2.Dockerをインストールする。
https://docs.docker.com/engine/install/centos/3.先のDockerイメージ(io_uring-test.tar)をCentOS 8マシンにコピーし、ロードする。
# docker load -i io_uring-test.tar
4.コンテナを起動する。
# docker run -it --rm io_uring-test bash
5.一応、uname -aで利用中のカーネルを確認。ホストのCentOS 8と同じ4.18なはず。
(c)# uname -a
(実行結果) root@824c737193b6:/# uname -a Linux 824c737193b6 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux (ついでに) root@824c737193b6:/liburing/examples# cat /etc/os-release NAME="Ubuntu" VERSION="20.10 (Groovy Gorilla)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.10" VERSION_ID="20.10" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=groovy UBUNTU_CODENAME=groovy5.サンプルプログラムを動かす。
(c)# cd liburing/examples/
(c)# ./io_uring-test io_uring-test.c
(実行結果) root@824c737193b6:/liburing/examples# ./io_uring-test io_uring-test.c queue_init: Function not implementedまあ、動きませんよね、と。
- 投稿日:2020-12-18T20:03:25+09:00
Alpine LinuxでLive USBを作る
Alpine Linuxとは
なんでもbusyboxにやらせてしまう軽量Linuxです。軽量なのでDockerのコンポーネントに使われることも多いです。GUI?知らない子です。
※ この記事はWindows PC上での動作を想定しています。
Alpine LinuxのISOイメージ
Alpine Linuxのイメージは以下にあります。
https://www.alpinelinux.org/downloads/
通常はStandard ISOイメージを利用します。オフラインインストールの場合は、Extendを使うと良いでしょう。仮想OSにはVirtual ISOを使います。Virtualのイメージは40MBと桁外れに小さいです。
Alpine Linuxの特徴
メインのコマンドがbusyboxのシンボリックリンク
busyboxは組込用のコマンドで、lsもcpもなんでもかんでもbusyboxのシンボリックにすることでファイルサイズを小さくしています。実はこれは罠があります(挙動が若干異なります)
ちなみにinitramfsの/binの下を見るとshとbusyboxしかない。
シェルはbashではない。
Alpine Linuxは、ashと言うシェルを使っています。shと互換がありますが、bashと互換がありません。bash依存のスクリプトを動かしたい場合は、別途bashをインストールする必要あります。
Live USBを作る
- Windowsの場合、rafusでISOモードで書き込みます。
- Linuxは、公式参照
試しに拾ってきた1GBのUSB入れてみましたが十分動きます。
インストールする
Alpine Linuxはインストーラーの自動起動をしません。起動するとlogin画面が起動するだけです。rootでログインしてから、コマンドラインから
setup-alpine――と打ち込むとインストール出来ますが、今回はしません。
Live USBに更新を反映させる
ここからが本番。
Alpine LinuxにはAlpine local backupと言うシステムがあります。Ubuntuのlive usbのperticient(casper-rw)と似たような事ができますが、
lbu commitと打ち込まないと更新が反映されません。更新される範囲も/etc 他一部だけで、/rootとか/binなどは反映されないみたいです(/etc/lbu以下の設定を変えたり、lbu includeを使う方法があります)。lbuを動かす時は、最初に/etc/lbu/lbu.confを書き換える必要があります。
この更新ファイルは、ルートに localhost.apkov.tar.gzなどと言う名前で吐き出されるので手で直せます。これをカスタマイズに利用します。casper-rwと違いマウントが必要なく、tar.gzなので簡単に書き直せます。さらに同期しないので軽量です。
まず、日本の環境で実行する為には以下を実行。
## キーマップを変更 # setup-keymap ##タイムゾーンを変更 # setup-timezone ## 変更を保存 # lbu commit日本語?知らない子
お手軽カスタムLive USB
空きメディアにapkファイルをぶち込みます。USBは/media/usbにマウントされます、
そこで/etc/inittab を書き換えます。
変更前
tty1::respawn:/sbin/getty 38400 tty1変更後
tty1::respawn:/bin/sh /media/usb/init.sh 38400 tty1先ほど書いた通り、lbu commitを実行しないと更新は反映されません。
それからinit.shに実行させるスクリプトを書きます(/media/usbはread onlyモードなので直接書き換えられません)。ここでは/media/usbを呼び出していますが、/etcの配下に於いてしまえば、起動後USBメモリを抜いても動作します。
ただし一回メモリを抜いてしまうと/media/usb以下は空になってしまうので注意。
- 起動後挙動がおかしい場合CTRL+ALT+F2でターミナルを切り替えて処理
これで面倒なカスタマイズ無しにHDDクリーナーなどが簡単に出来ます。
注意事項
例えば、ディスクシュレッダー擬きを作る時にshredを使いますが、Alpine Linuxのshredは、busyboxのシンボリックリンクです。busyboxのshredはファイルの消去以外が出来ませんしオプションも異なります。そこでGNU coreutilsを別途インストールする必要があります。
Alpine Linuxのパッケージマネージャーはapkで、インストールするときはaddを使います。
apk add coreutils――とするとbusyboxではないGNU shredが使える様になります。
Alpine Linuxは軽量な分、ユーティリティを動かそうとするとライブラリが足りないケースがあると思われます
だが、それらのapkは起動時にインストールしてしまえば良い。小さいバイナリならインストール時間は誤差範囲(/etc/lbu以下の設定を変える方法もあります)
USBにextraフォルダを作成し、インストールするapkを投げ込んでおきます。
apk add --no-network --allow-untrusted --force-non-repository /media/usb/extra/*.apkこうやってinit.shから強引にインストールしてしまうのです(パッケージが無いものは作るしかないけど)カスタマイズしないのでお気楽LiveUSBが作れます。
lbu package使うのが正しいやりかたな気もする……
※ ここでdockerとdocker-compose入れたら何でもありな気が……。
- 投稿日:2020-12-18T19:12:56+09:00
Too many open files になったとき
概要
- Jenkinsサーバで、
Caused by: java.io.IOException: error=24, Too many open files
のようなエラーが発生- FD(File Descriptor)が枯渇しているっぽいのでulimitを上げる
- OSはUbuntu 14.04
/etc/security/limits.conf
以下の記述を追加
* soft nproc 65535 * hard nproc 65535 * hard nofile 65535 * soft nofile 65535rebootして
ulimit -n
すると...$ ulimit -n 65535良さそう。
ところがJenkinsは自分で勝手に上書きをしていた...
まさにこれ。
/etc/default/jenkins
を書き換えて、 service restartして、真の対応完了。(Systemd化されている最近のやつは別の箇所を編集する必要があるのであしからず)
- 投稿日:2020-12-18T16:37:21+09:00
「Linux 標準教科書」読みました!
- 投稿日:2020-12-18T11:49:02+09:00
Ubuntu + qemu 上の FreeBSD のデスクトップ環境の設定
はじめに
Linux + qemu 上の FreeBSD で、Xfce4 というデスクトップ環境を使用するためのインストールと設定の手順を説明します。
* Linux + qemu 上で FreeBSD を動かす も参照してください。以下の各説明では実際に実行するコマンドを以下のような形で記述しています。
# pkg install パッケージ名実際には上記のコマンドを実行するとパッケージインストールの進捗状況が表示されますが、本ページではそれらの表示を省いています。
* 上記の行頭にある "# " は、root のプロンプトを表しています。
* 一般ユーザ権限で実行する場合には、"$ " と表記します。実行環境など
Ubuntu 20.04.1 LTS を使用します。
* 仮想マシンを起動する際に新しい Window が表示されるので、Desktop 環境で実行して下さい。
qemu 上で実行する FreeBSD は、12.2 RELEASE です。パッケージのインストール
FreeBSD 上で root でログインし、以下のパッケージをインストールします。
# pkg install xorg # pkg install xfce # pkg install japanese/font-std # pkg install ja-fcitx-mozc # pkg install firefox上から順番に
* X Window System
* Xfce4 デスクトップ環境
* 日本語フォント
* 日本語入力システム
* web browser
です。上の例ではパッケージを一つずつ指定していますが、以下のようにまとめて指定しても構いません。
# pkg install xorg xfce japanese/font-std ja-fcitx-mozc firefoxシステムの設定
Xfce4 で D-Bus を使用するので、以下の手順で D-Bus を起動します。
# sysrc dbus_enable="YES" # service dbus start個人環境の設定
root 権限で実行している shell を抜けてから、一般ユーザ権限でログインし直します。
# exit logout FreeBSD/amd64 (fbsd122) (ttyv0) login: yamada Password: $vi/emacs などのテキストエディタを使用して、ホームディレクトリに .xinitrc ファイルを作成し以下の設定を記述してください。
* FreeBSD では Emacs は標準ではインストールされていないので、root 権限で pkg install emacs を実行して Emacs をインストールしてください。export LC_ALL=ja_JP.UTF-8 export LANGUAGE=ja_JP.UTF-8 export LANG=ja_JP.UTF-8 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=xim export XMODIFIERS=@im=fcitx /usr/local/bin/mozc start /usr/local/bin/fcitx -r -d exec /usr/local/bin/xfce4-session日本語キーボードを使用している場合には、以下の行を最終行 xfce4-session の直前に入れてください。
/usr/local/bin/setxkbmap -layout jpデスクトップ環境の起動
startx コマンドを実行し、デスクトップ環境を起動します。
$ startx以下のように Xfce4 のデスクトップ環境が表示されれば成功です。
左上の「アプリケーション」クリックするとメニューが表示されます。メニューの「ウェブブラウザー」をクリックすると、Firefox が起動します。
日本語の入力には、Ctrl キーと SPACE キーを同時に押します。文字を入力して、SPACE キーで変換します。もう一度 Ctrl キーと SPACE キーを同時に押すと、英語の入力に戻ります。右上の「ユーザー名」をクリックするとメニューが表示されるので、「ログアウト」をクリックするとデスクトップ環境が終了します。
問題が発生した場合
「デスクトップ環境が表示されない」、「日本語が入力できない」といった問題が発生した場合には、ホームディレクトリ以下に作成した .xinitrc ファイルの中身を確認してください。
* 大文字・小文字を間違えていないか?
* アンダースコア (_)・ハイフン (-) などの記号を間違えていないか?
など、上記の例と食い違いがないか確認してください。
- 投稿日:2020-12-18T11:30:52+09:00
Linux 日本語配列のキーボードに対応させる方法
- 投稿日:2020-12-18T10:38:53+09:00
Linux + qemu で FreeBSD を動かす
はじめに
Linux + qemu 上で FreeBSD を動かす手順を説明します。
以下の各説明では実際に実行するコマンドを以下のような形で記述しています。
$ sudo apt install パッケージ名実際には上記のコマンドを実行するとパッケージインストールの進捗状況が表示されますが、本ページではそれらの表示を省いています。
実行環境など
Ubuntu 20.04.1 LTS を使用します。
* 仮想マシンを起動する際に新しい Window が表示されるので、Desktop 環境で実行して下さい。
qemu 上で実行する FreeBSD は、12.2 RELEASE です。パッケージのインストール
Ubuntu 上で、以下の設定を行います。
* パッケージ qemu-system-x86 をインストールする。
* /dev/kvm へのアクセス権を追加するために、qemu を使用するユーザーを kvm グループに追加する。$ sudo apt install qemu-system-x86 $ sudo gpasswd -a $(whoami) kvmFreeBSD のインストール
FreeBSD をインストールするために、Ubuntu 上で以下の操作を行います。
* 仮装ディスクを $HOME/VM/fbsd122 に作成
* 仮装ディスクの大きさは 16GB
* 仮想マシンに割り当てるメモリーは 1024GB
* FreeBSD のインストールメディアを取得
* FreeBSD のインストールメディアを使用して仮想マシンを起動
* FreeBSD をインストール$ mkdir -p ~/VM/fbsd122 $ cd ~/VM/fbsd122 $ qemu-img create -f qcow2 fbsd122.qcow2 16g $ wget https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.2/FreeBSD-12.2-RELEASE-amd64-disc1.isoFreeBSD を FreeBSD-12.2-RELEASE-amd64-disc1.iso を起動します。
$ qemu-system-x86_64 -enable-kvm -m 1024 -boot order=d -cdrom FreeBSD-12.2-RELEASE-amd64-disc1.iso fbsd122.qcow2
- -boot order=d で CD-ROM からの起動の指定、-cdrom で使用する ISO イメージを指定します。
- Desktop 上に以下のような別 Window が表示され、FreeBSD のインストーラーが起動します。
- インストール途中で操作を間違えたりした場合には、QEMU の Window のメニューから「Machine」->「Power Down」の操作を行うと仮想マシンの電源が OFF になるので、もう一度「qemu-system-x86_64」コマンドを実行してください。
上記の QEMU の Window 上で FreeBSD の操作を行います。
* QEMU Window の内側をクリックすると、インストーラーに対する操作を行えます。
* QEMU Window から抜ける際には、Ctlr + Alt + G キーを押下します。FreeBSD のインストール手順は、以下の資料を参考にしてください。
* 英語: HANDBOOK Installing FreeBSD
* 日本語: Share FreeBSD based information の「Install FreeBSD」->「インストール手順」インストールの注意事項として、以下の二点に留意してください。
* root パスワードの設定
* 一般ユーザーの登録root パスワードの設定
インストール中に以下の画面が表示され「root」のパスワードを入力するように指示されます。
* インストール後の操作でこのパスワードが必要になるので、忘れないようにしてください。
一般ユーザーの登録
インストール中に以下の画面が表示され、一般ユーザーの登録を促されます。
* ここで一般ユーザーを登録し、通常 FreeBSD を使用する際にはこのユーザーでログインして下さい。
* 「Login group is USERNAME. Invite yamada into other groups? []: 」に対して、「wheel」を入力してください (下記二枚目)。
インストール終了時の操作
インストールが終了したら「Complete」というダイアログが表示されるので、TAB キーを押して「Live CD」を選択して Enter キーを押してください。
「login:」と表示されるので、「root」と入力して Enter キーを押してください。
* ここでは password の入力は不要です。
「poweroff」と入力して Enter キーを押してください。
poweroff が完了すると、QEMU の Window が消えます。HDDからの起動
インストール時の「-boot」と「-cdrom」を削除して実行すると、HDD から FreeBSD が起動されます。
$ qemu-system-x86_64 -enable-kvm -m 1024 fbsd122.qcow2
「login: 」に対して、「root」と入力し Enter キーを押します。
「Password: 」に対して、FreeBSD のインストール時に設定した「root」のパスワードを入力して Enter キーを押してください。
* この時入力したパスワードは、画面に表示されません。
ログインが成功すると、root のプロンプト「root@ホスト名:~ # 」が表示されます。FreeBSDのシャットダウン
rootでログインし、「shutdown -p now」と入力して Enter キーを押し、FreeBSD をシャットダウンします。
シャットダウンが完了すると、QEMU の Window が消えます。
- 投稿日:2020-12-18T06:21:03+09:00
nlコマンドで素数を求める
今回はあまり「行番号」にこだわらずnlコマンドを使ってみましょう。
nlコマンドで整数を生成する
つまりseqコマンドの代替です。
yes
と組み合わせることで無限数列を生成できます。初期値は-v
、増加値は-i
、終了値はhead
を組み合わせるとそれぞれ変更可能です。終了値は数列の個数で指定することになるので、seq
よりも直感的に利用できる場面もあるかもしれません。coreutils$ seq 0 2 10 0 2 4 6 8 10 $ yes '' | nl -b a -s '' -w 1 -v 0 -i 2 | head -n 6 0 2 4 6 8 10これでほぼ等価になります。余計なスペースやタブを入れないように様々なオプションをつけていますが、必須なのは
-b a
のみです。BSD系のnl
では-w
を必要な値の大きさに合わせて設定する必要があります。上記の場合でも-w
を指定すると10
が正しく表示されないので、余計なスペースが入ってしまいますが次のようにすべきです。除去が必要ならsed
などで加工しましょう。BSD$ yes '' | nl -b a -s '' -w 1 -v 0 -i 2 | head -n 6 0 2 4 6 8 0 $ yes '' | nl -n ln -b a -s '' -w 10 -v 0 -i 2 | head -n 6 0 2 4 6 8 10 $ yes '' | nl -n ln -b a -s '' -w 10 -v 0 -i 2 | head -n 6 | xxd 00000000: 3020 2020 2020 2020 2020 0a32 2020 2020 0 .2 00000010: 2020 2020 200a 3420 2020 2020 2020 2020 .4 00000020: 0a36 2020 2020 2020 2020 200a 3820 2020 .6 .8 00000030: 2020 2020 2020 0a31 3020 2020 2020 2020 .10 00000040: 200a .ちなみにGNU coreutilsの
seq
はinf
というキーワードを指定すれば、無限数列が生成できます。昔は終了値を設定しなければならないseq
では無限数列が生成できないと思っていたので、「それnl
ならできるよ」とかドヤ顔で言ってた時代もありました。coreutils$ seq inf | head -n 1000 | tail 991 992 993 994 995 996 997 998 999 1000ちなみに
inf
についてはManpageにもTexinfoにも書かれていないようです。こういう謎の機能に気づくみなさんは日常的にソースとか読んでるのかな?素因数分解して素数を得る
nl
の本題からはズレますが、factorコマンドを利用することで簡単に素因数分解した結果を得ることができます。区切られた数列データがれば、素因数分解した結果を得ることができます。$ seq 5 1 2 3 4 5 $ seq 5 | factor 1: 2: 2 3: 3 4: 2 2 5: 5 $ echo {1..5} 1 2 3 4 5 $ echo {1..5} | factor 1: 2: 2 3: 3 4: 2 2 5: 5この通り
factor
は縦でも横でもいい感じに素因数分解してくれます。ここから素数だけを抽出しましょう。素数とは「1
と自分自身以外に正の約数を持たない自然数」のことで、一般に1
は含みません。2: 2
のように、2つの列からなる行だけを対象に数値を抜き出せば良さそうです。awk
でフィルタしてみましょう。$ seq 5 | factor | awk 'NF==2&&$0=$2' 2 3 5素数だけをフィルタすることができました。
awk
のスクリプトの内容ですが、フィールド数(列数NF
)が2
なら、行全体($0
)に2列目($2
)を代入という意味です。上記はアクションレス記法で書いていますが、以下と同じです。$ seq 5 | factor | awk 'NF==2{print $2}' 2 3 5日付のリストを作る
これはdateコマンドを使うのが間違いないと思います。以下のようにフォーマットを指定して、
X
日からN
日後という日付を出力することができます。$ date -d '20201201 +0days' +'%Y%m%d' 20201201 $ date -d '20201201 +30days' +'%Y%m%d' 20201231つまり2020年12月の日付をすべて得るには、
20201201
を0日目として、30日後までを出力します。このdate
にxargs
を使って、nl
で生成した数列を差し込んで実行すれば良さそうです。-I
で指定した@
の部分に入力データが挿入されます。$ yes '' | nl -b a -v 0 | head -n 31 | xargs -I @ date -d '20201201 +@days' +'%Y%m%d' 20201201 20201202 20201203 (略) 20201231 20201231しかし、あらかじめ月をまたがないことがわかっていれば、以下のように
sed
で頭に年月を付加してもいいですね。$ yes '' | nl -n rz -b a -w 2 | head -n 31 | sed 's/^/202012/' 20201201 20201202 (略)あまり深堀っていくと、
nl
を使わずに・・・という話になってくるのでこの辺にしておきます。$ echo 202012{01..31} 20201201 20201202 (略)素数日のリストを作る
では、つなげて実行してみましょう。
$ yes '' | nl -b a -v 0 | head -n 31 | xargs -I @ date -d '20201201 +@days' +'%Y%m%d' | factor | awk 'NF==2&&$0=$2' 20201227 20201231今年の12月の素数日は12/27と12/31ということがわかりました。
seq inf
のTexinfo反映(12/19追記)
seq inf
についてはTexinfoに使用法を記載してもらうことになりました。ちなみにsleep inf
もあるらしく、そちらも同時に反映されたようです。余談
本当は素数日の記事として書こうかなとぼんやり考えていたのですが、残念ながら2020年のAdvent Calendarには素数日がありませんでした。しかし、なんと次回のシェル芸勉強会は12/27開催なので素数日です!
- 投稿日:2020-12-18T04:49:55+09:00
[メモ] Raspbery Pi OS 64bit イメージ作成 (2020年冬版)
概要
- Raspberry Pi OSの2020年12月2日(
Release date: December 2nd 2020
)から、64bitベータ版がオモテから消えましたよね?- Raspberry Pi OSイメージ作成スクリプトのpi-genのarm64というブランチで、raspiosの64bitを作成しよう。
現在、Troubleshootingのところで、下のようにあるので、x86_64ではうまく動かないっぽい?
Please note there is currently an issue when compiling with a 64 Bit O
以前のメモ: [メモ] Raspbian: 最新イメージ作成
結果
- ラズパイ4BとSSDで、Liteと通常Desktopのイメージが30分程度(APTキャッシュサーバ使用で、初回ではないので、外部からのダウンロード時間は含まれてない、と思う)
環境
- Raspberry Pi 4
- USB-SATA & SSD
- Docker使用
手順(概要)
- ビルド環境準備
- OS (Ubuntu arm64 か、Raspberry Pi OS 64bitベータ版)
- dockerインストール
- apt-cacher-ng : APTのキャッシュサーバ
RPi-Distro/pi-gen
config
ファイル作成- スクリプトをちょいと変更
- スクリプト実行
手順(詳細)
注意点
- build-docker.sh でビルド時、
deploy
フォルダが存在してると、生成物がうまくコピーされないので、削除しておくビルド環境準備
- ベースOSを焼く
- imgファイルを入手
- Raspberry Pi Imagerで、
- CHOOSE OS => Use custom にて、イメージファイルを指定。(zipのままいける。)
dockerインストール
例# Docker # https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker ${USER} # docker-compose sudo apt update sudo apt install -y python3-pip libffi-dev sudo pip3 install docker-composeapt-cacher-ng : APTのキャッシュサーバ
pi-gen: イメージ作成
キホン (実際には、
echo "IMG_NAME='raspios64'" > config
の代わりに、config
をうまく編集・設定してから、やる)例# レポジトリをクローン、ついでに、arm64ブランチをCheckout git clone https://github.com/RPi-Distro/pi-gen.git -b arm64 cd pi-gen git reset --hard # リセット git clean -fdx # クリーン # config 作成 (必要最小限) echo "IMG_NAME='raspios64'" > config # スクリプト変更 i386のイメージを持ってきてしまうのをなおす sed -i -e 's@i386/@@g' build-docker.sh # ビルドスクリプト実行 time bash ./build-docker.sh 2>&1 | tee ../build.log # deployフォルダの中に、zipファイルがある、はず
config
を設定する
config
ファイルを編集することで、初期設定ができる。(時間帯、言語、キーボードとか、ラズパイの公式イメージは、英国がデフォルト。)
IMG_NAME
(必須): 生成物のファイル名に使用されるAPT_PROXY
: aptキャッシュサーバ指定DEPLOY_ZIP
: 1:ZIPで出力(既定値) / 0:imgで出力LOCALE_DEFAULT
: 言語(既定値:en_GB.UTF-8
)KEYBOARD_KEYMAP
: キーマップ(既定値:gb
)KEYBOARD_LAYOUT
: キーレイアウト(既定値:English (UK)
)TIMEZONE_DEFAULT
: タイムゾーン (既定値:Europe/London
)FIRST_USER_NAME
: ユーザ(既定値:pi
)FIRST_USER_PASS
: ユーザパスワード(既定値:raspberry
)WPA_ESSID
WPA_PASSWORD
WPA_COUNTRY
: Wifi設定ENABLE_SSH
: SSH 1:有効 / 0:無効(既定値)config例IMG_NAME=orenoraspios64 APT_PROXY=http://172.17.0.1:3142 DEPLOY_ZIP=0 LOCALE_DEFAULT=en_US.UTF-8 KEYBOARD_KEYMAP=us KEYBOARD_LAYOUT="English (US)" TIMEZONE_DEFAULT="America/Los_Angeles" ENABLE_SSH=1 FIRST_USER_NAME=`ore` FIRST_USER_PASS=`orenopasuwa-do` WPA_ESSID=wifi-ssid WPA_PASSWORD=wifi-no-password WPA_COUNTRY=US ENABLE_SSH=1Liteイメージだけ作りたい。
build-docker.sh
を実行する前に、↓をするtouch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP rm -rfv ./stage3/EXPORT* ./stage4/EXPORT* ./stage5/EXPORT*
- 説明
- 下の、機械翻訳したところみると、
stage
X(X=0,1,2,3,4,5)フォルダごとにすすむ。- stage2で、Lite、stage4で、通常デスクトップ版、stage5がFullといってるイメージ
- stage*/のフォルダ内に、
SKIP
というファイルがあると、処理されずに次のステージにいく。EXPORT_IMAGE
という設定ファイルがあると、そこでの結果をimgに出力するパッケージを追加したい
- うまい段階の
stageX/00-install-packages/
フォルダの中の、00-packages
または、00-packages-NR
に、記述する。- `
-NR
のほうは、--no-install-recommends
オプション付きとのこと。- 例
stage4/00-install-packages/00-package
に、fcitx-mozc
とか、追加してみてはどうだろうか?その他
- deployフォルダの削除は忘れずに
メモ)2020-12-16 (一部)日本語訳 ~ www.DeepL.com/Translator(無料版)で翻訳
image
が画像
と訳されてたところを、イメージ
に変更How the build process works (ビルドプロセスの仕組み)
以下のような手順でイメージを構築していきます。
すべてのステージディレクトリを英数字順にループします。
このステージディレクトリに
"SKIP"
というファイルが含まれている場合は、次のディレクトリに移動します。
prerun.sh
スクリプトの実行。これは通常、ステージ間でビルドディレクトリをコピーするために使用されます。各ステージのディレクトリでは、各サブディレクトリをループして、それに含まれるインストールスクリプトをそれぞれ実行してください。これらのスクリプトには、先頭に 2 桁の数字を入れて名前を付ける必要があります。いくつかの異なるファイルやディレクトリがあり、ビルドプロセスの異なる部分を制御するために使用できます。
00-run.sh
- unix シェルスクリプト。実行可能にする必要があります。00-run-chroot.sh
- イメージのビルドディレクトリの chroot で実行される unix シェルスクリプト。実行するためには実行可能にする必要があります。00-debconf
- このファイルの内容は、ロケールなどを設定するために debconf-set-selections に渡されます。00-packages
- インストールするパッケージのリスト。1 行に複数個、スペースで区切って書くことができます。00-packages-NR
- 00-packages と同じですが、apt-get の --no-install-recommends -y パラメータを使ってインストールされます。00-patches
- quilt を使って適用されるパッチファイルを含むディレクトリ。もし 'EDIT' という名前のファイルがディレクトリ内にある場合、ビルドプロセスは bash セッションで中断され、パッチを作成/修正できるようになりますステージディレクトリに
"EXPORT_NOOBS"
または"EXPORT_IMAGE"
というファイルがある場合、このステージをイメージのリストに追加して生成します。指定したステージのイメージを生成する
詳細については、
build.sh
を調べてみることをお勧めします。
Stage Anatomy (ステージの詳細)
Raspbian Stage Overview(概要)
Raspbian のビルドは論理的にわかりやすく、モジュール化するためにいくつかの段階に分けられています。これは初期の複雑さの原因となりますが、メンテナンスを簡素化し、より簡単なカスタマイズを可能にしています。
Stage 0 - bootstrap
このステージの主な目的は、使用可能なファイルシステムを作成することです。これは主にdebootstrap
を使用することで達成されます。これは Debian システム上でbase.tgz
として使用するのに適した最小限のファイルシステムを作成します。この段階では、apt の設定も行い、debootstrap
が見逃したraspberrypi-bootloader
をインストールします。ミニマルコアはインストールされていますが、設定はされていません。Stage 1 - truly minimal system (真のミニマムシステム)
このステージでは、/etc/fstab のようなシステムファイルをインストールしてシステムを起動可能にし、ブートローダを設定し、ネットワークを操作可能にし、raspi-config のようなパッケージをインストールします。この段階では、システムはローカルコンソールに起動し、そこからシステムの設定やインストールに必要な基本的なタスクを実行する手段を持っています。これは、システムができる限り最低限のものであり、伝統的な意味では、おそらくまだ実際には使えないでしょう。それでも、最低限のことをしたいのであれば、これは最低限のことであり、残りの部分はシステム管理者として自分で合理的に行うことができます。Stage 2 - lite system
このステージでは Raspbian-Lite イメージを生成します。最適化されたメモリ機能のインストール、timezone と charmap のデフォルト設定、fake-hwclock と ntp のインストール、無線 LAN と bluetooth のサポート、dphys-swapfile、その他ハードウェア管理のための基本的な機能のインストールを行います。また、必要なグループを作成し、πユーザに sudo と標準コンソールのハードウェア権限グループへのアクセス権を与えます。
基本的なPythonやLuaパッケージ、build-essential
パッケージなど、ミニマムなシステムでの開発にはあまり意味のないツールがいくつかあります。pi-gen と一緒である必要はありませんが、これらはより重要なパッケージと一緒にまとめられています。これらは Raspbian のターゲット層にとっては理解できるものですが、もし本当にミニマルなものと Raspbian-Lite の中間のものを探していたならば、ここからトリミングを始めることになります。Stage 3 - desktop system
ここでは、X11とLXDE、Webブラウザ、開発用のgit、RaspbianのカスタムUIの強化など、完全なデスクトップシステムを手に入れることができます。これは基本的なデスクトップシステムで、いくつかの開発ツールがインストールされています。Stage 4 - Normal Raspbian image
4GB のカードに収まるように設計されています。これはシステムドキュメントのように、Raspbian を新しいユーザに優しいものにするためのほとんどのものをインストールする段階です。Stage 5 - The Raspbian Full image
Raspbianのフルイメージ。より多くの開発ツール、メールクライアント、Scratchのような学習ツール、sonic-pi
のような専門的なパッケージ、オフィスの生産性など。Stage specification (仕様)
指定したステージまでビルドしたい場合(ライトシステムの場合はステージ2までビルドするなど)、インクルードしないようにしたい
./stage
ディレクトリにSKIP
という名前の空のファイルをそれぞれ配置します。そして、SKIP_IMAGES という空のファイルを ./stage4 と ./stage5 (ステージ2までビルドする場合)、または ./stage2 (ミニマムシステムをビルドする場合) に追加します。
# Example for building a lite system ライトシステムの構築例 echo "IMG_NAME='Raspbian'" > config touch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP touch ./stage4/SKIP_IMAGES ./stage5/SKIP_IMAGES sudo ./build.sh # or ./build-docker.shlite システムの上に (例えば) 更なる設定を構築したい場合は、
./stage3
と./stage4
の内容を削除して、同じフォーマットで独自の内容に置き換えることもできますSkipping stages to speed up development (ステージをスキップして開発を加速させる)
特定のステージでの作業であれば、推奨される開発プロセスは以下のようになります。
EXPORT_*
ファイルを含むディレクトリにSKIP_IMAGES
というファイルを追加します(現在はstage2、stage4、stage5)- ビルドしたくないステージに
SKIP
ファイルを追加します。例えば、ライトイメージをベースにしている場合、ステージ3、4、5に追加します。- build.sh を実行してすべてのステージをビルドします。
- ビルドに成功した初期のステージに
SKIP
ファイルを追加します。- ラストステージの修正
sudo CLEAN=1 ./build.sh
を使って、最後のステージだけを再構築します。- イメージに満足したら、
SKIP_IMAGES
ファイルを削除して、テスト用にイメージをエクスポートします。
- 投稿日:2020-12-18T01:05:42+09:00
2−1.WEB系エンジニアになるためのインプット(Linux基礎)
はじめに
こちらの記事の続きとなる。
1−1.WEB系エンジニアになるためのインプット(準備)
Linux基礎を作るためにインプットとそのアウトプットの記事となります。
また、内容が多いため記事を分けて掲載する。先の記事でも記載しておりますが、教材と環境は下記の通りです。
・教材はUdemy for businessを活用する。
【5日でできる】はじめての Linux 入門(LPIC Level1対応)
(講師:井上 博樹 (Hiroki Inoue))
・Linux環境(Ubuntu)はAWSのEC2インスタンスを活用する。
-リージョン:アジアパシフィック (東京)ap-northeast-1
-AMI:Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
-インスタンスタイプ:t2.microLinuxのコマンド(UNIX)
Linuxを操作するためのコマンドを記述していく。
ただし、自身が既に扱える箇所は省かせていただきます。相対パスと絶対パス
絶対パス
ルートディレクトリからのパスを全て入力。
/usr/local/bin/***
相対パス
カレントディレクトリからの相対的な位置関係を指定。
現在の位置./また、/usr/local/binから/usr/local/を指定したいときは下記を使う。
1つ上の階層../シェルの操作
シェルの種類
- bash
- csh
- tcsh
標準はbash(bourne again shell)となる。
コマンドの履歴
historyコマンドを使う。
コマンドの履歴history
また、過去のコマンドには番号が振られており、番号を使って再利用できる。
これにより、タイプミスを防ぐことができる。
例えば、[117 pwd]という履歴があった場合の再利用コマンドは下記コマンドの再利用!117
コマンドラインの先頭と末尾
コマンドラインに入力した文字が長い時、矢印キーで横に進むのはめんどくさい!そこで一発で移動する方法があります。
先頭に移動Ctr + a末尾に移動Ctr + eシェル変数
コマンドライン上で変数を作って確認する
変数の作成INFILE="infile.txt"下記コマンドで[infile.txt]と表示され、確認できる。
変数の確認(1)echo $INFILE もしくは echo "$INFILE"下記コマンドの場合は[$INFILE]と表示される。
変数の確認(2)echo '$INFILE'下記コマンドで変数のリセットができる。変数の確認(1)で、リセットされていることが確認できる。(空白が表示)
変数のリセットunset INFILE
環境変数
envコマンドで環境変数の設定を確認できる.
環境変数の確認env | more ※moreでスクロールで中身を確認できる
環境変数を追加したいときは下記コマンド
環境変数の追加export INFILE
viエディタ
テキストエディタの使い方を記載する。
例えば、result.txtをテキストエディタで開く場合は下記コマンド。
また、このファイルが存在しない場合は新規作成も同時に行われる。テキストエディタvi result.txt操作方法が複雑のため、下記表にまとめた。
カテゴリ コマンド 内容 終了キー :q セーブしないで終了 :q! 変更した行もセーブせずに終了 :w セーブするが終了しない :wq セーブして終了 編集モードへ移るキー i 現在のカーソル位置から挿入 R 現在のカーソル位置から置換 A 現在行の末尾に追加 O 現在行の前に行挿入 o 現在行の次に行挿入 カーソル移動キー h(←) 左 j(↓) 上 k(↑) 下 l(→) 右 0 行頭へ $ 行末へ [Enter] 次の行の先頭へ w 次の単語へ b 前の単語へ ctrl + f 次画面へ ctrl + b 前画面へ 1G 文頭へ G 文末へ nnG nn行目へ 変更キー x 1文字削除 dd 1行削除(カット) cw 1語変更 c$ カーソル位置から行末まで変更 dw 1語削除 d$ カーソル位置から行末まで削除 検索 /正規表現 前方検索 ?正規表現 後方検索 n 次の候補 N 前の候補 置き換え :1,$s/正規表現/置き換え文字列/g 文書内の全ての「正規表現」を「置き換え文字列」に置換 ショートカット yy 1行コピー dd 1行カット p ペースト(張り付け) ファイルの操作
lsのオプション
隠しファイルも含めて表示ls -aファイルの詳細ls -l隠しファイルも含めて、ファイルの詳細(組み合わせ)ls -laiノード番号も表示ls -iファイルの属性を確認
属性を確認file text.txtファイルのコピー(ddコマンド)
[if=]はコピー元ファイル名、[of=]はコピー先ファイル名、[bs]はコピーするブロックサイズ(バイト)、[count]はコピーするブロックの数
ファイルのコピー(dd)dd if=/dev/zero of=zero.dat bs=512 count=1024ファイルのコピー(cpコマンド)
コピー元をhello.txt、コピー先をhello1.txtとすると下記
コピー元のhello.txtは残ったままとなる。ファイルのコピー(cp)cp hello.txt hello1.txt
ファイルの削除
ファイルの削除rm hello2.txt
ファイルの移動
移動するファイルをhello2.txt、移動先をsourcecodeとする。
元のhello2.txtは移動して、元のディレクトリからは無くなる。ファイルの移動mv hello2.txt sourcecode/
ディレクトリの削除
そのままではその中にディレクトリが格納されていると削除できないので、オプションをつけて強制的に削除する
ディレクトリの強制削除rm -fR sourcecodeファイルの検索
ディレクトリにあるファイルを検索することができる.
例えば、今いるディレクトリに[networks]と付くファイル名を一覧で表示するためのコマンドは下記となる。
また、sudoをつけることで許可がないファイルに対する検索エラーを回避することができる。名前指定のファイル検索sudo find . -name networks圧縮とアーカイブ
圧縮・展開方法にはいくつか種類がある
- tar
- gzip(=gunzip) tarと併せて使う
- bzip2 tarと併せて使う
- xz
- cpio バックアップ装置と一緒に使う
tarコマンド
tarコマンドが主流のため、こちらを学ぶ
オプション
オプション 内容 f ファイル名 c 作成 x 展開 r 末尾に追加 v 詳細を表示 j bzip2ファイルを扱う z gzipファイルを扱う 圧縮
tarを使って、work2というディレクトリを圧縮し、work2.tar.gzというファイルを作成するコマンドは下記となる。
また、zオプションによりgzipも併せて使って圧縮する。
なお、tarコマンドで圧縮した元のファイルやディレクトリは残る。
tarコマンド単体で展開したときは圧縮ファイルは残る。圧縮tar czf work2.tar.gz work2
展開
圧縮して作成されたファイルを展開するコマンドは下記となる。
展開tar xvzf work2.tar.gz
gzip単体の場合
tarコマンドと併せないで、単体でgzipを使える。
text.txtをgzipで圧縮すると、text.txt.gzファイルが生成される。gzip単体で圧縮gzip text.txt
gzip単体で展開gzip -vd text.txt.gz ※vは詳細を表示gzipコマンド単体で展開したときは圧縮ファイルは消える。
bzip2コマンドの場合
使い方はgzipコマンド単体と同じとなる。圧縮されて生成されるファイルはtest3.txt.bz2となる。
xzコマンドの場合
使い方はgzipコマンド単体と同じとなる。圧縮されて生成されるファイルはtest3.txt.xzとなる。
cpioコマンドの場合
CPIOlコマンドには3つのモードがある。
- コピーアウトモード
- インサートモード
- コピーパスモード
ファイル名一覧が格納されたfilelist.txtとしたとき、アーカイブファイルを作成するには下記コマンドとなる。
cpioコマンドでの圧縮cpio -o < filelist.txt > files.cpio もしくは ls | cpio -o > files.cpiocpioコマンドでの展開cpio -i < files.cpio
また、コピーパスモードによりファイルの移動もできる。
例えば、copytoというディレクトリに移動するコマンドが下記となる。cpioコマンドのコピーパスモードcpio -pd copyto < filelist.txt
リンク
ファイルに別の名前でアクセスする仕組み
- ハードリンク:同じiノードに異なる名前
- シンボリックリンク:iノード番号を持たない。別名のみ管理
ファイルシステムとは「ファイルを管理するし仕組み」(VFS)であり、各デバイスとはiノードを使って関連つけている。
ハードリンク
ハードリンクを作成するのはlnコマンドを使う。この2つを比較すると、それぞれは同じiノードを持っていることが確認できる。片方を削除してももう片方は参照できる。
ハードリンクの作成ln test.txt sample.txt
iノードの確認ls -liシンボリックリンク
ハードリンクを作成するのはlnコマンドを使う。この2つを比較すると、異なるiノードを持っており、sample.txtがtest.txtに紐づいていることが確認できる。元のファイルを削除するともう片方は参照できなくなる。
シンボリックリンクの作成ln -s test.txt sample.txtiノードの確認ls -liストリーム&パイプ&リダイレクト
標準入出力
入出力 役割 標準入力(stdin[0]) 入力チャネル 標準出力(stdout[1]) 出力チャネル 標準エラー(stderr[2]) エラーを出力するチャネル リダイレクト
リダイレクト 動作 cmd > file 出力をリダイレクト cmd >> file 出力をファイルにアペンド(追加) cmd < file 入力のリダイレクト cmd << xxx 入力終端文字列の指定(EOFなど) cmd 2> file エラー出力をファイルに cmd file 2>&1 標準出力とエラー出力をファイルに パイプ
リダイレクト 動作 cmd1 | cmd2 cmd1の標準出力をcmd2の標準入力に渡す cmd1 2>&1 | cmd2 cmd1の標準出力とエラー出力をcmd2の標準入力に渡す cmd1 | tee file | cmd2 cmd1の標準出力をfileに書き込み、cmd2の標準入力に渡す テキストストリームとフィルタ
cutコマンドを利用する
cutコマンドcut [オプション] ファイル名
オプション 機能 -d: 区切り文字の指定。左の場合は「:」 -f*,* 処理対象の番号指定 例えば、[root: x:0:0:root:/root:/bin/bash]からユーザ名とホームディレクトリを取り出すコマンドは下記となる。
cutコマンドcut -d: -f1,6 passwd正規表現と検索
正規表現とは文字列集合をパターン化すること
- メタキャラクター:なんらかの文字を表すための文字
- リテラル:文字そのもの
メタキャラクタ
表現 機能 ^word 行の先頭が一致 $word 行の末尾が一致 . 任意の一文字 * 直前の文字の繰り返し ? 直前の文字の0個または1個に一致 + 直前の文字の1回以上の繰り返し [] []うちのいずれか一文字にマッチ ¥< word ¥> 単語にマッチする文字列 ¥{n,m¥} n回以上、m回以下の繰り返し | 複数条件を指定 ¥ 次の文字をメタキャラクタではなくリテラルに 文字クラス
表現 機能 [:alnum:] アルファベットと数字 [:alpha:] アルファベット [:digit:] 数字 [:lower:] 小文字 [:upper:] 大文字 [:space:] スペース リテラル
文字そのもの。メタキャラクタと組み合わせて使う。
例えば、xyz[1-4]としたとき、xyz1,xyz2,xyz3,xyz4のいずれか正規表現を使う
正規表現grep [オプション] 'パターン (正規表現) 'ファイル名 もしくは egrep [オプション] 'パターン (正規表現) 'ファイル名 もしくは fgrep [オプション] 文字列 ファイル名
オプション 機能 -c 一致した行だけ表示 -i 大文字・小文字を区別しない -n 先頭に行番号をつけて一致行を表示 -v パターンに一致しない行を表示 -E egrepと同じ -F fgrepと同じ sedによる置換
置換sed 's/[パターン]/置換文字' ファイル名プロセスの操作と制御
ジョブは[ls -l | more]で、プロセスは[ls -l][more]となる。
プロセス番号(PID)が自動的に割り当てられ、psコマンドで確認できる。
また、topコマンドでリソース消費量などを確認できる。さいごに
linux基礎として、コマンドの基本を学んだ。
次回は管理業務・ファイルシステム管理を学ぶ