20200808のLinuxに関する記事は5件です。

ed, ex, echo, cat : ラインエディターを用いた編集

Unix系 どんな環境でも編集を行う方法

備忘録として作成

スクリーンエディターが使えない局面

  • 最近はVSCodeやAtomなど優れたエディターがあり、vim/viやemacsも依然人気がある
  • しかしDockerなど限定された環境や、相当年数が経過したシステム設定を変更しようとすると、いつものエディターが使えない場合もある
  • そこでどんな局面でも設定を行うレスキュー策を自分なりにまとめた
  • ラインエディターのed,ex、ファイル表示用のcat、文字列出力用のechoを使う例を記載

ed

  • UNIXオペレーティングシステム用のラインエディタ。作者はケン・トンプソン
  • ほぼ全てのUnixで使える
  • これを基に ex , vi が作られたので vi のコマンドラインモード(exモード)と操作方法は似ている
  • 起動方法:
$ ed test.txt           // edがコマンド名。test.txtはファイル名
95             // ファイルの文字数が表示される
                         // 入力待ち(何も表示されない)

$ ed -p : test.txt    // 後述のexと見た目を合わせたい場合は"-p : "の付加で":"を入力待ち受け記号に出来る
95             // ファイルの文字数が表示される
:                       // 入力待ち
  • テキストファイルの表示: (以降の入力待ちの表示文字を:とする)
:,p            // 待ち受け記号 : (上で指定)に対して ",p"を入力すると全行表示
                        // ","は、ファイルの全行を示し、pはprintを示すので、",p"は全行表示となる
This is No.1 line.
This is No.2 Line.
This is No.3 Line.

:.             // "."は、いわゆるカーソル行を示す。"."と".p"は同じ
This is No.3 Line.
:

:.=                     // ".="は、行番号を示す。".="と".=p"は同じ
3
:

:2                     // 行移動は直接行番号を入力
This is No.2 Line.
:
  • 文字入力: aコマンド カーソル行の下に文章を追加
  • 注:下記はカーソルを2行目に移動して入力させる例
  • vi/vim同様にiコマンドも使える。iコマンドの場合、カーソル行の上に文章が追加される
:2                     // 行移動
This is No.2 Line.
:a                     // "a" (addコマンド)でテキスト入力モードに移行。入力が終わったら"."を入力
This line has been inserted.
The add command can insert multiple lines.     // 複数行の入力が可能
.                   // ここでテキスト入力完了
:

:,p           // 上記の入力を表示
This is No.1 line.
This is No.2 Line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 Line.
:
  • 行の削除: 行単位で削除となり文字や単語単位の削除は出来ない(後述の置換は可能)
:d                     // カーソル行を削除
:

:4d           // 4行目を削除
:

:2,25d                 // 2〜25行をまとめて削除
:
  • 行の変更: cコマンド 指定行を削除して新しい文章を挿入(複数行可能)。
:,p           // 変更前を表示
This is No.1 line.
This is No.2 line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 line.
:

:4,5c                  // 4〜5行目を削除して新たな行と入れ替える
This is No.4 line.
.                      // テキスト入力完了

:,p                    // 変更後を表示
This is No.1 line.
This is No.2 line.
This line has been inserted.
This is No.4 line.
:
  • 検索: 後方検索時は"/文字列"と入力。前方検索時は"?文字列"と入力。
  • 置換: sコマンド s/old/new/で、oldをnewに置き換える。この置換は、行単位で一番最初に一致した文字列のみ置換するので、一致する文字列を全て変換する場合はgオプションが必要。s/old/new/g
  • 保存: wコマンド vi同様。変更内容を保存。ファイル名を指定するとそのファイル名で保存。
  • 終了: qコマンド vi同様。(強制終了は大文字のQ)
:w                   // 保存コマンド
126                  // 保存された文字数が表示される

:q                   // 終了コマンド (wqと打てば保存終了)
$

ex

  • 1976年にBill Joy によって書かれたUnixシステム用のラインエディタ
  • exは最終的にフルスクリーンのビジュアルインターフェイスを与えられ、viとなった
  • 現在exはviの一部として実装されている。viには「exモード」があり、exコマンドを使用して呼び出すか、vi内から":"を入力して呼び出す 。exとviの機能は重複しているが、exコマンドでしか実行できないものもあるため、viを使用する場合にも役立つ。つまり現在に於いてex=viと考えて良い(vimも同様)。
  • 起動方法:
$ ex test           // exがコマンド名。 testはファイル名
"test" 6L, 126C
Entering Ex mode.  Type "visual" to go to Normal mode.    //visualと打つとvi/vimの標準画面に移動する
:
  • テキストファイルの表示: %コマンド
:%                      // 全行を表示
This is No.1 line.
This is No.2 line.
This is No.3 line.
:

:2                     // 行移動は直接行番号を入力
This is No.2 line.
:
  • 文字入力: aコマンド カーソル行の下に文章を追加 
  • 注:下記はカーソルを2行目に移動して入力させる例
  • vi/vimと同じなのでiコマンドも使える。iコマンドの場合、カーソル行の上に文章が追加される。
:2                     // 2行目に移動
:a                     // "a" (addコマンド)でテキスト入力モードに移行。入力が終わったら"."を入力
This line has been inserted.
The add command can insert multiple lines.     // 複数行の入力が可能
.                   // ここでテキスト入力完了
:

:%           // 上記の入力を表示
This is No.1 line.
This is No.2 line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 line.
:
  • 検索、置換、保存、終了はvi/vimと同一

cat

  • catはUNIXの標準コマンドで、ファイルを連結させたり表示したりするのに用いる
  • 連結することを意味する「catenate」の略
  • catを用いてのテキストファイルの作成も可能。但し新規作成のみで後からの編集は不可。
  • catコマンドに標準入力-を渡し(渡さなくても可能)、複数行を書き込み完了したらCtl+C( Ctl+D )で抜ける

viを開発したBill Joy氏は「どのエディターが使いやすいか」というインタビューに対し、「catが使いやすい」と答えたとのこと。編集不可で後戻りも出来ないツールが使いやすいというのは常人では理解不能な世界。

$ cat > test.txt      // 指定したファイル名の中身は、ゼロからの新規作成になる事に注意
This is No.1 line.
This is No.2 line.
This is No.3 line.
^C                      // 編集作業が完了したら Ctl+C ( Ctl+D )
$

$ cat test.txt         // 編集内容を確認
This is No.1 line.
This is No.2 line.
This is No.3 line.
$

echo

  • Unixのechoコマンドは、入力として引数で与えられた文字列をそのまま出力するコマンド
  • 何らかの理由であらゆる外部コマンドが使えないなどの非常時のことなどもあり、内部コマンドであることが多い
  • echoのリダイレクトを利用
  • 標準出力から > でファイルに上書きとなり >> でファイルに追記
  • まさに最終手段
$ echo "This is No.1 line." > test.txt    // 指定したファイル名の中身は、ゼロからの新規作成になる事に注意
$ echo "This is No.2 line." >> test.txt   // 最終行の次に行を追加

$ cat test.txt                   // 編集内容を確認
This is No.1 line.
This is No.2 line.
$

その他の手段

  • sedなど他にも方法あり
  • 上の4つしかやった事が無いため記載は省略
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】インフラエンジニアの僕が「hostname」コマンドを使わない理由とは?

はじめに

Linuxの運用監視~設計構築迄経験している僕が、「hostname」コマンドを基本的に使わない理由について書いていきたいと思います。

今回の対象OS

Linux系OS全般(RHEL/CentOS/Solaris等)

そもそも「hostname」コマンドとは?

Linux系OSのホスト名を確認するコマンドになります。

使い方は、こんな感じになります。

hostname
[root@GitBucket-sv ~]# hostname
GitBucket-sv
[root@GitBucket-sv ~]#

このように、ホスト名を確認できるコマンドになります。

詳しくは、こちらのサイトの解説をご覧頂ければと思います。
【 hostname 】コマンド――ホスト名を表示する/設定する

基本的に使わない理由とは?

誤入力にてホスト名が変更されてしまう可能性があるからです。

誤入力の例は、こちらになります。

誤入力
【コマンド入力】
[root@GitBucket-sv ~]# hostname i

【ホスト名確認】
[root@GitBucket-sv ~]# hostname
i
[root@GitBucket-sv ~]#

このように、ホスト名自体が変更されてしまいます。
(上記の場合、ホスト名が「i」になっている。)

ちなみに、hostname -iはサーバーのIPアドレスを確認するコマンドになります。

IPアドレス確認
[root@GitBucket-sv ~]# hostname -i
fe80::250:56ff:fe8c:2091%ens192 2404:7a80:91a1:4d00:250:56ff:fe8c:2091%2 192.168.0.150
[root@GitBucket-sv ~]#

このように、誤入力でホスト名を変更してしまう可能性があるため、基本的に使用することをおすすめしません。

では、何のコマンドでホスト名確認をすればいいのか?

uname -nコマンドがおすすめです。

実行例はこちらになります。

実行例
[root@GitBucket-sv ~]# uname -n
GitBucket-sv
[root@GitBucket-sv ~]#

万が一、誤入力をしてしまった場合も問題ございません。

誤入力の例
[root@GitBucket-sv ~]# uname n
uname: 余分な演算子 `n'
Try 'uname --help' for more information.
[root@GitBucket-sv ~]#

このように、エラーが表示されます。

unameコマンドについて深く知りたい方は、こちらのサイトの解説をご覧頂ければと思います。
unameコマンド(OSまたはハードウェアの情報を表示する)

まとめ

ホスト名を確認する際は、hostnameコマンドの使用は控えた方が無難です。
→誤ってホスト名を変更してしまう可能性がある。

ホスト名を確認する際は、uname -nコマンドにて確認した方が安全です。
→ホスト名を変更してしまう危険性がない

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

ferenOSの導入1(インストール)

日常的に使用できるLinuxディストリビューションであるferenOSの導入方法を紹介します。
個人的なノートの代わりとしても用いますので、自分流の設定、カスタマイズ方法になるかもしれません。

ferenOSのメリット(主観)

  • デザイン、操作性が洗練されている

 ferenOSのオリジナルアプリケーションでかんたんにWindows風やMacOS風のディスプレイのテーマを導入することができる。

  • Ubuntuから派生したディストリビューションのため、UbuntuやDebianのノウハウで対処できる

 「だったらUbuntuを使えばいいじゃないか」となりますが、UbuntuのUIが苦手だったりすると重宝するかもしれないです。UIを自分好みにカスタマイズしやすいのがいいかもしれません。

ferenOSのデメリット(主観)

  • 安定性にかける

 ときおりアプリケーションが落ちることがあります。

  • 日本語での情報が少ない

 有志の方の解説サイトがいくつかありますが、公式サイトは英語オンリーです。(2020年8月時点)

インストール

公式サイトGet FerenOSからISOファイルをダウンロードして、USBメモリやDVDなどに書き込んでインストール用メディアを作成します。(ここでは、デスクトップ環境にKDE Plasmaを用いた64bit版の方のferenOSを解説します。ちなみにデスクトップ環境のCinnamonを用いたFerenOS ClassicはUbuntu 18.04LTSのメインストリームサポートが終了する2023年になると同時にサポート終了となるそうです。また、32bit版のOSも同様に2023年にサポート終了だそうです。)

起動後、「Install FerenOS」アイコンを選択してインストールを開始。Calamaresインストーラが立ち上がったあと、言語、地域、パーティションを設定します。ユーザ名、パスワードの設定などはOSのインストール後に行います。

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

Linux版VSCodeのbackground-coverが動作しないときの解決策

VSCodeに背景画像を設定できる拡張機能background-coverが、Linuxで動作しないときの解決策です。

workbench.desktop.main.cssのアクセス権を変えるだけ。

$ cd /usr/share/code/resources/app/out/vs/workbench
$ sudo chmod 666 workbench.desktop.main.css

上記はLinux Mintでの設定例ですが、
ディストリビューションによってディレクトリが異なるかもしれないので
適切なディレクトリを指定してください。

アップデートとかしたら再設定が必要だと思います。

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

【ラズパイ】ディレクトリを継続的に監視して変更をフックで任意のシェルを走らせる方法

Raspberry Pi 3B(以下:ラズパイ)で、指定ディレクトリ内を監視して更新されたら任意の処理を走らせるという事をしたいと思います。

  • フック : Aディレクトリに画像が保存される
  • する事 : AディレクトリとBディレクトリの状態を同期

具体的には上記のような事をするためにinotify-toolsを使用しします。

inotify-toolsのインストール

apt-getでインストールします。

$ sudo apt-get install inotify-tools

inotyfywaitコマンドで監視

inotyfywait -e 【イベント】 【監視するディレクトリ】

inotfywaitコマンドで特定イベントと監視するディレクトリを指定します。
今回はmoved_to(対象ディレクトリ内へ移動された)イベントの監視をして処理をさせます。

inotify_single.sh
#!/bin/sh

inotifywait -m -e moved_to A | \
    rsync -rv A B

ryncコマンドを使ってAとBを同期させています。

-mオプションについて

-mオプションをつけないとが初回のイベント発行でinotifywaitが終了してしまうので付けています。

継続的に監視する

このままだと一連のイベントが通知されると監視が終了してしまいますので処理を修正します。

inotify_continuous.sh
#!/bin/sh

inotifywait -m -e moved_to A | \
    while read _; do
        rsync -rv A B
    done

このようにwhile文を使って継続的に監視するようにしています。

環境

  • Raspberry Pi 3B
  • Raspbian GNU/Linux 9.8 (stretch)
  • inotifywait 3.141

参考


  1. inotifywaitのバージョンは inotifywait -hlで確認できます 

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