POSIX1日1コマンド[part4]: asa
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
asa
asa を知る
ざっくりDESCRIPTION
キャリッジコントロール文字を解析する。(?)
入力ファイルを標準出力に出力し、テキストファイルからキャリッジコントロール文字を処理系定義の方法で、ラインプリンター制御シーケンスにマッピングする。
全ての行の最初の文字が削除され、以下の処理が実行される
削除された文字
- スペース
- 残りの行はそのまま出力される
- 0
- 改行が出力され、残りの行も出力される
- 1
- 処理系定義文字が次のページに進むために出力され、残りの入力行が続く
- +
- 前の行の改行は、一つ以上のの処理系定義文字をプリントし、列の位置を一つ戻り、残りのの入力が続く。+が最初の文字の場合はスーペースと同じ処理になる。
キャリッジコントロール文字とは?
carriage-control characters
がわからなかったので調べてみた。
単純に「キャリッジコントロール」で調べてもでてこない。だが、改行コードの話はでてくる。
キャリッジ・リターン(carriage return)は本来、テレタイプ端末の Baudot Code における制御文字を指す用語で、行末から行頭に戻す復帰コードであって、改行コードを含まない。その後、タイプライターで一行打ち込んだ後で紙を固定するシリンダー(キャリッジ)を次の行の先頭にタイプできるように戻し(リターン)改行する機構(またはその機構を操作するレバー)を「キャリッジ・リターン」と呼んだ。
キャリッジコントロール文字はおそらく、文字の復帰等を制御する文字だと仮定した。
ラインプリンター制御シーケンスとは?
line-printer control sequences
(ラインプリンター制御シーケンス)も分からなかったので調べてみた。
そもそもラインプリンターとは
行印字装置だそう。
ラインプリターを制御するシーケンスということでしょう。
ざっくり使い方
asa <file>
ざっくりOPTION
オプションは無い
ざっくりOPERANDS
asa <file>
ファイルが指定されていない場合は標準入力が使用される。
ざっくりまとめ
おそらく、ラインプリンターを使うときに使うコマンドだと思います。 自分の環境で試そうとしたところ、
[vagrant@localhost 003]$ asa -bash: asa: command not found
となりました。 ラインプリターが統合されているUNIXマシンではasaコマンドが使えるのでしょうか。
詳しい方もしこの記事を見つけたら教えてください.
POSIX1日1コマンド[part3]: ar
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
ar
使い方がよくわからなかった上に英語がつらくなったのでこちらも参考にさせていただいた。
オプションは後日追記予定
Man page of ar
ar を知る
ざっくりDESCRIPTION
ライブラリのアーカイブの作成と管理をするコマンド。Software Development Utilitiesのオプションの一つ。
アーカイブにまとめられたファイルのグループを作成、管理する。アーカイブが作成されると、新しいファイルを追加したり、アーカイブ内のすでに存在するファイルを抽出したり、消したり、置き換えたりできる。
ざっくりOPTION
後日追加
ざっくりOPERANDS
$ ar <archive>
アーカイブのパス名
$ ar <file>
パス名。アーカイブ内のファイル名と比較する場合は、最後のコンポーネントのみを使用する。 2つ以上のファイルオペランドが同じ最終パス名コンポーネント(basename)を持つ場合、結果は未指定()です。インプレメンテーションズアーカイブフォーマットは、アーカイブに追加または置換されたファイルの有効なファイル名を切り捨ててはならない。
ざっくり使ってみる
$ ar -s hoge ar: hoge: File format not recognized
ファイル形式が認識されない
$ ar Usage: ar ... ... ar: supported targets: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
サポートされているのは以下の形式のファイルのよう
- elf64-x86-64
- elf32-i386
- elf32-x86-64
- a.out-i386-linux
- pei-i386
- pei-x86-64
- elf64-l1om
- elf64-k1om
- elf64-little
- elf64-big
- elf32-little
- elf32-big
- plugin
- srec
- symbolsrec
- verilog
- tekhex
- binary
- ihex
うむ。elfってのをざっくりわかるぐらい。
上記に記載した日本語のmanページのリンクでも書いているが、対象はバイナリファイルのよう。
ざっくりまとめ
ほぼ、使い方がわからなかった。実際使うことも少なそう。tarというコマンドがあるが、関係があるのだろうか。 継続2日目
POSIX1日1コマンド[part2]: alias
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
alias
aliasを知る
ざっくりDESCRIPTION
エイリアス(別名)を定義するコマンド。また、定義されたエイリアスを標準出力に出力する。エイリアスは現在のシェルとサブシェルに影響を与える。
ざっくりOPTION
オプションは無い
ざっくりOPERANDS
$ alias alias-name
指定したalias-name別名の定義を標準出力に出力する
$ alias egrep alias egrep='egrep --color=auto'
$ alias alias-name=string
指定したalias-nameに別名を定義する
$ alias hoge="echo 'hoge'" $ hoge hoge
ざっくりまとめ
エイリアスは一般的にもよく使われていますね。 継続1日目
さぁPOSIXを始めよう
こんにちはー
久しぶりの投稿になります..
たまにはてなブログのアクセス数を見たりしてましたが、記事を書くには至りませんでした。(何を言っても言い訳になりそう)
だいたい1日20〜30アクセスはあるようです。もっとPVを増やすとやる気も出てくるのでは??
と思い、seoあげてみるか!とか考えてました!!
が本日は逆行します。
本題
POSIXという言葉を聞いたことはあるでしょうか?
とりあえずウィキペディアのリンクを貼っておきます。
POSIX(ポシックス、ポジックス、英: Portable operating system interface)は、各種UNIXを始めとする異なるオペレーティングシステム (OS) 実装に共通のアプリケーションプログラミングインタフェース (API) を定め、移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定したAPI規格である。
超ハイパーざっくりとした僕の認識は
- どこの環境でも動く
です。
以前に「恐怖!シェルショッカーのPOSIX原理主義 シェルスクリプト」というスライドを見たことがあって、受けた印象です。
www.slideshare.net
(是非見てみてください)
移植性が高いに越したことはないですよね。
名著の「UNIXという考え方-その設計思想と哲学」でも
- 作者: Mike Gancarz,芳尾桂
- 出版社/メーカー: オーム社
- 発売日: 2001/02/01
- メディア: 単行本
- 購入: 40人 クリック: 498回
- この商品を含むブログ (145件) を見る
「効率より移植性」
という定理が書かれています。
(是非読んでください)
#!/bin/sh
と書いていながら
lrwxrwxrwx. 1 root root 4 Oct 28 11:03 sh -> bash
こういうことありますよね。
ここでは動いているのに、僕の環境じゃ動かない!
というのをなるべく個人レベルでも無くしていきたいので、最近はPOSIX準拠したコマンドを使うようにしています。(配列とかもそうですね)
なるべくとかではなく、sh
で動くものを作るようにしています。
POSIXコマンドチートシートをQitaで作成してしている方がいたので、こちらも参考にさせていただいています。
今後の取り組み
POSIX準拠かどうかを調べる方法はいくつかあります。 ですが、そもそもPOSXI準拠のコマンドを知っていないと、何かを作るときに遠回りになる可能性があります。
そこで、私は、1日1shコマンドを心がけて生活していきたいと思います!!
参考にするところはこちらのリンク
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html
ここに記載されているコマンドを1日一つできれば、それなりのPOSIX成長を見込めるのではないでしょうか。
1日一つコマンドを使ってみて、使い方を理解する、活用方法を考える。的な感じでできればと思っています。
まとめ
半年ぐらい記事更新をさぼっていたやつが1日1記事更新するのはおそらく無理なので、各コマンドについて記事を更新するかは闇の中ですが、
できるだけ!できるだけ!やっていこうと思います。
追記
当初は
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html
のページの上から行っていこうと思ったのですが、序盤の方は
Special Built-In Utilities(break, continue等)だったので、そっちの方は時間をじっくりやるべきだと思い、1日1回実行するのは
Utilitiesの方にすることにしました。
アーカイブ
PythonのTrue,False小メモ
Pythonの真偽値として使われるbool型に関するメモ
https://docs.python.jp/3/library/numbers.html#numbers.Integral
常識なのかもしれないが、bool型は整数型の派生型とのこと
>>> True True >>> type(True) <class 'bool'>
整数型の派生なので演算ができる
>>> True + 1 2 >>> True + True 2
おまけ
>>> True == True + True False
真実に真実を加えると、真実じゃなくなる
pythonでランダムに日本語を作る
せっかく配列作ったのでとりあえず使うだけです。
import random import sys jp = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん"] def make_word(length,words): word = "" for i in range(length): word += words[random.randint(0,len(words)-1)] return word def main(): if len(sys.argv) < 2: print("引数を入力してください") return print(make_word(int(sys.argv[1]),jp)) if __name__ == "__main__": main()
python jp_cmd.py 2 よひ
i=1; while [ $i -le 10 ]; do python jp_cmd.py 3; i=$(expr $i + 1);done ろめね さゆへ たふそ めゆろ かめる をねき えほめ になあ るゆを りおあ
これで子供の名前つけます
pythonで50音の配列
メモレベルの内容です。
pythonで50音の配列を作りたかった。
「python 50音 配列」で検索して配列の定義が出てくれば一瞬で解決したと思います。
ですので先に貼っておきます
jp = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん"]
きっとutf-8バイト型の50音からString型に変換するみたいなのを調べると出てくるはずです。
ちょっと調べると
b'\xe3\x81\x82' #バイト型の「あ」 b'\xe3\x81\x84' #バイト型の「い」 b'\xe3\x81\x83' #バイト型の「ぃ」 >>> b'\xe3\x81\x82'.decode('utf-8') 'あ' b'\xe3\x81\x84'.decode('utf-8') 'い'
ここまでわかったのできっとできるはずです。
でも今回は単純に変数を定義する方法。というか作業ログです。
vim jp
50音を検索しても文字一つ一つが連続しているものがなかったのでしかたなく手打ち
あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん
一文字ずつ" "
で囲ってカンマをつける置換
:%s/\(.\)/"\1",/g
中学生ぐらいの私なら一文字ずつ打ってその度に" "
とカンマをつけていたでしょう。今ではこの通り割と早くできました。
作業効率向上のために中学校の必修科目にvimを設けるべきです。
根本的にもっと早い方法があるなら知りたい。
以上です。ご覧いただきありがとうございました。