20210325のLinuxに関する記事は4件です。

【備忘録】Linux環境上でWindowsのisoをUSBに焼く

諸事情によりWindowsのインストーラーが必要になった。
DVDにisoを焼こうと思ったら容量が余裕でDVDの容量を超えていたのでUSBにインストールする羽目になった。
そしてEtcherはWindowsのiso焼きには使えないらしい。
Unetbootinに関しては(EFIシステムパーティションの)容量不足でインストールできなかった。

調べたところ、WoeUSBというソフトを使えばLinux環境上でもUSBにWindowsのisoを焼けるらしい。
ということで早速インストールする

他のディストリビューションは知らないが、ArchLinuxでかつAURヘルパー(今回はyay)さえ入っていれば

$ yay -S woeusb

でインストールできる。

しかし、参考にしたQiita記事では起動するとGUIが表示されていたのだが自分の環境ではGUIどころかアプリケーションメニューにすら現れなかった。

コマンドとしては追加されてるみたいなので起動してみる

$ woeusb

なんか色々出てくるが少なくともGUIのウィンドウとかは出てこない
コマンドの使い方が普通に書いてあるので

$ lsblk

でインストール先のUSBがどれなのかを確認した上で

$ woeusb --device [isoファイルのパス] /dev/sdX

isoファイルのパス/dev/sdXは環境に合わせて適宜変更

して長々止まっているとUSBにWinwodwsのisoが焼けた。

おわり。

参考サイト

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

Linux シェル・シェルスクリプト

シェルとは?

対話機能を提供するもの。コマンドの入力を受け付けそのコマンドを実行し、入力したユーザに対してその結果を返す役割がある。

シェルスクリプトとは?

繰り返し行う処理を自動化するための手段

echoコマンド

echo [オプション] 文字列

-n 改行を抑制

シェル変数と環境変数

シェル変数は実行しているシェル内部のみで有効
環境変数はそこから実行されたコマンドうちでも有効

例)
export yamada
(シェル変数yamadaを環境変数yamadaにする)
export yamada=123
(環境変数yamadaを作成し123を代入)

readコマンド

標準入力からデータを読み込む。すでに変数にデータが入っていた場合、新しいデータに上書きされる

read 変数名

シェル変数と環境変数の一覧表示、削除

シェル変数の一覧表示はsetコマンド、削除はunsetコマンド使用
環境変数の一覧表示はenvコマンド使用、削除はunsetコマンド使用

引用符

利用できる引用符は「'」と「」と「`」が利用できる。

'」の場合、文字列の中に$があっても変数は展開されない
」の場合、$付き変数は展開された文字列になる
`」の場合、コマンドとして解釈され$付き変数があれば、それを展開した上でコマンドが実行される。

引数、shiftコマンド、sourceコマンド

引数
シェルスクリプトは実行時にオプションを引数として参照することができる

shiftコマンド
引数の順序をずらす。実行すると、$2が$1になる。

sorceコマンド
bashなどのシェルの内部コマンドで、指定されたファイルを読み込んでシェル環境を設定する。

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

Linux ユーザ権限・アクセス権

ユーザ権限とアクセス権

ファイルの作成者のユーザIDとグループIDがファイルの所有者と所有グループとなる。

所有者の変更

chownコマンド

chown ユーザ[.グループ] ディレクトリorファイル

ユーザとグループを変更するには、rootユーザである必要がある

所有グループの変更

chgrp グループ ディレクトリorファイル

ファイルとアクセス権

ファイルの権限を設定できる3つのユーザ
①ファイルを所有するユーザ
②ファイル所有グループからファイル所有者を除いたユーザ
③その他のユーザ

ファイルの3つの権限
読み(r)、書き(w)、実行(x)

アクセス権の変更

chmod モード ディレクトリorファイル
chmod 8進法表記モード ディレクトリorファイル

モードの場合
u(所有ユーザ)、g(所有グループ)、o(その他のユーザ)に対して、r,w,xを設定したり(=)、加えたり(+)取り消したり(-)できる。

8進法表記モードの場合
読み(r)=4
書き(w)=2
実行(x)=1

で表記する。

パーミッションを指定してファイル作成

umaskコマンド使用で、指定したパーミッションでファイル作成できる

umask [8進法のモードの値]

unmaskコマンドに続けて値をしてしなかった場合現在の値を表示できる。

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

【Unix/Linux】異次元の生産性をコマンドラインで

はじめに

コマンドラインの技は合気道や空手道のような武道と似ています。習得するには時間がかかりますが、習得すると圧倒的なパワーと生産性が得られます。

たいていのことは統合開発環境IDEで可能です。しかし、細かな条件を指定してファイルを絞り込んだり、それらのファイルを横串にして文字列検索したり、それを加工したりということはIDEでは手に余ります。ファイルマネージャ等でも困難です。
本稿ではコマンドラインでしかできないような、ワザの一端を紹介したいと思います。

参考URL

自分のブログから転載しました。
異次元の生産性をコマンドラインで

ディレクトリ階層を下がって目的のファイルを見つける

C言語の”NULL”文字列の定義が、どのインクルードファイルの中で、どのように定義されているかを知りたいとします。

NULLの定義を探索
$ find /usr/include -name '*.h' -exec grep '#define NULL' {} /dev/null \;
/usr/include/X11/Xresource.h:#define NULLQUARK ((XrmQuark) 0)
/usr/include/X11/Xresource.h:#define NULLSTRING ((XrmString) 0)
/usr/include/linux/uuid.h:#define NULL_UUID_LE                    \
/usr/include/unicode/utypes.h:#define NULL    nullptr
/usr/include/unicode/utypes.h:#define NULL    ((void *)0)
/usr/include/tirpc/rpc/xdr.h:#define NULL_xdrproc_t ((xdrproc_t)0)
/usr/include/tirpc/rpc/clnt.h:#define NULLPROC ((rpcproc_t)0)

[Ubuntu 20.10]

上記では、findコマンドで/usr/includeを起点として、サフィックスが”.h”のファイルを一覧しています。そして、個々のファイルの中をgrepコマンドを用いて”#define NULL”の文字列検索しています。

私はこのfindコマンドとgrepコマンドを組み合わせた使い方を、日常的に行っています。ところが、ある日「プロダクティブ・プログラマ」(NealFold著,島田浩二監訳,夏目大訳)を読んでいるとき、同じ使い方が記載されている(p.250)ことを知り、驚きました。開発者の発想は同じところに行き着くのですね。

シェルスクリプトを探索してみる

OSに同梱されている標準コマンドの中には、シェルスクリプトで作成されているものが多くあります。Linuxでは、”which”コマンドもそうです。

whichコマンド
$ which which
/usr/bin/which
$ file /usr/bin/which
/usr/bin/which: POSIX shell script, ASCII text executable

[Ubuntu 20.10]

上記では、whichコマンド自身でwhichコマンドがどこにあるか調べ、fileコマンドでシェルスクリプトかどうかを確かめています。

シェルスクリプトを見つけるには

ここであなたが、シェルスクリプトを作成することになり、標準のシェルスクリプトを参考にすることになったとします。そこでまず、/usr/binにシェルスクリプトはいくつあるのか数えてみることにしましょう。

findとfgrepを組み合わせる
% find /usr/bin -exec file {} \; | fgrep 'shell script'
/usr/bin/zmore: POSIX shell script text executable, ASCII text
/usr/bin/bzmore: POSIX shell script text executable, ASCII text
/usr/bin/umask: POSIX shell script text executable, ASCII text

<略>

[macOS 11]

個々のファイルを”file”コマンドで調べ、fgrepで”shell script”文字列を検索することにより、シェルスクリプトを抽出しています。

抽出したシェルスクリプトの数をカウントしてみる

週出したファイルの数を、wcコマンドでカウントします。

さらにwcを組み合わせる
 % find /usr/bin -exec file {} \; | fgrep 'shell script' | wc -l
      85

[macOS 11]

85個のシェルスクリプトがあることがわかりました。
ついでに、/etc下にシェルスクリプトがいくつあるかを、macOSとUbuntuで確かめてみましょう。

macOSの/etcにシェルスクリプトはいくつあるか
% cd /etc
% sudo find . -exec file {} \; | fgrep 'shell script' | wc -l
Password:
      16

[macOS 11]
Ubuntuの/etcにシェルスクリプトはいくつあるか
$ sudo find /etc -exec file {} \; | fgrep 'shell script' | wc -l
[sudo] xxxx のパスワード: 
132

[Ubuntu 20.04]

ちなみに、macOSの場合、/etcに移動してからfindでサーチしているのは、macOSの/etcがシンボリックリンクだからです。

シェルスクリプトたちをエディタで開いてみる

macOSの/usr/binに戻って、抽出したシェルスクリプト群をエディタのviコマンドで閲覧してみます。まず、シェルスクリプトのファイル名を切り出します。

ファイル名を取り出す
 % find /usr/bin -exec file {} \; | fgrep 'shell script' | cut -d: -f1
/usr/bin/zmore
/usr/bin/bzmore
/usr/bin/umask
/usr/bin/phpize

<略>

[macOS 11]

次に、ファイル名をviに渡して閲覧します。これでviを使用して次々とファイルの中身を参照できます。
途中で閲覧をやめ、viを終了するには”:q![Enter]”と入力します。

次々とファイルを閲覧する
% find /usr/bin -exec file {} \; | fgrep 'shell script' | cut -d: -f1 | xargs vi

ここだけの話ですが、xargsというコマンドを知らない頃は、次のようにしていました。

ファイルを連続して閲覧できるシェルスクリプトを生成する
% find /usr/bin -exec file {} \; | fgrep 'shell script' | cut -d: -f1 | sed -e '1,$s/$/ \\/' | sed -e '1s/^/vi /' > s.out
% sh ./s.out

上記は、ファイルの一覧をsedで加工し、ファイルの閲覧ができるシェルスクリプトを生成しています。
まず、ファイル名の末尾に\を加えて継続行にします。次に、行の先頭に”vi”をつけてファイルに書き出し、シェルスクリプトとして起動したのでした。書き出したファイルのイメージが以下です。

s.outのイメージ
vi /usr/bin/what-patch \
/usr/bin/autopoint \
/usr/bin/ikdasm \
/usr/bin/installvst \
/usr/bin/foo2hp2600-wrapper \
<略>

さらに特定の条件にマッチするシェルを抽出する

これまでに抽出したシェルスクリプト群から、「Usage:」(使用法:)が含まれるものを抽出してみます。

Usageのあるシェルスクリプトを選び出す
% find /usr/bin -exec file {} \; | fgrep 'shell script' | cut -d: -f1 | xargs grep -il 'usage:' | uniq       
/usr/bin/bzmore
/usr/bin/phpize
/usr/bin/fddist
<略>

[macOS 11]

「Usage」が大小文字いずれであってもマッチするように検索し、ファイル名のみを出力します。1ファイルで複数行マッチした場合、それを1行にするためにuniqコマンドを使用しています。

ちなみに、上記の場合、本当はuniqは不要です。なぜなら、grepで”l”(エル)オプションを指定しているからです。”l”は文字列がマッチしたとき、ファイル名のみ出力するオプションですが、最初にマッチした時点でそのファイルの検索が終了する仕様です。

次に、Usageのあるシェルスクリプトの数を数えてみましょう。

Usageのあるシェルスクリプトの数
% find /usr/bin -exec file {} \; | fgrep 'shell script' | cut -d: -f1 | xargs grep -il 'usage:' | uniq | wc -l
      52

macOS 11(Big Sur)の/usr/binにあるシェルスクリプト85本中、「Usage」が記述されているものは52本という結果でした。

シェルスクリプトを作成するにあたり、このように特定のキーワードが含まれるものを検索して、参考にすることができると、効率的に作業できる場合があります。

さいごに

コマンドラインの世界は、非常にクリエイティブで、常に新しい発見があります。私自身道半ばです。
この記事が、みなさんの生産性を高める一助になることを願っています。

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