- Linux Mint を始めたばかりの人が抑えておくべき5つのこと
- 「mintUpdate」アップデートマネージャー のレベルの意味
- フリーズしたアプリの強制終了の仕方 〜 kill コマンド〜
- CPU と OS が 32 bit なのか 64 bit なのかを確認する「lscpu コマンド」
- メモリー(RAM)の規格・周波数・全容量・空き容量・エラーの有無を調べる
- 自分の Mint のバージョン/コードネーム/Ubuntu のバージョン/コードネームを確認する方法
- Mint Tools を使い倒す
- アプリ/ソフトのアンインストールと更新する方法
- X-Apps について少し知っておこう
- 「'gksu' not found」 廃止された gksu の代わりの方法
- Linux Mint 18 : DVD/Blu-ray リッピングソフト「MakeMKV」
- Mint 19.x: 「K3b」でブルーレイディスクに焼く方法
- Mint 18: 「avconv」でデスクトップの録画も、動画や音楽の変換も行う
- Mint 19.x : 画像・音楽・動画の変換これ一本「Ciano」
- Mint 18.2 : 字幕を同時に二つ表示できる多機能な動画プレイヤー「SMPlayer」
- Mint 18 : CDDB に Freedb を利用している CD リッピングソフト「Asunder」
- Mint 19.x : 音楽ファイルのタグ編集ツール「Kid3」
- Linux Mint 19.x : インストールすべき Rhythmbox プラグイン 9 選
- Linux Mint 18.3 : VirtualBox に無料の Windows を合法的にインストールする方法
- Linux Mint 18: Wine の導入
- Linux Mint 18: Wine で「DVD Shrink」をインストール
- Linux Mint 18: Wine で「DVD Decrypter」をインストール
- Linux Mint 19.x: 5ch専ブラ「Jane Style」は Wine で普通に使える
- Linux Mint 18 : 「winetricks」を使って「Adobe Air」をインストールし「はがきデザインキット」を使う
- Linux Mint 19.x: 画像縮小 Adobe AIR アプリ「縮小専用」を使う
- Linux Mint 18: 「PlayOnLinux」を使い「Amazon Kindle」をインストールする
- Linux Mint 18.3 : ハイレゾ音源対応 Windows ユーザーに人気の「Foobar2000」をインストール & 文字化け対策
- Mint 19.x : 画像ビューア「IrfanView」を簡単にインストールして使う
- Linux Mint 18.3 : Windows アプリを Flatpak 形式でパッケージングするプロジェクト「winepak」
2022.09.19 Monday
2018.03.23 Friday
CUI : Linux 使いの First Step | 01:43 |
オープンソースであるということ
オープンソースソフトのほとんどは無償で利用することができますが、それはいわゆるフリーソフトとどう違うのでしょうか。英語の free には「自由」と「無償」という2つの意味があります。もともと「フリーソフト」の「フリー」は「自由」の意味で使われていました。自由に利用でき、自由に改変し、自由に公開できる、ということです。しかし、「無料」の側面ばかり注目されるようになってしまったため「オープンソース」という言葉ができました。
オープンソースの定義として以下の10項目が定義されています:
- ソフトウェアを自由に販売したり無料で配布したりできること
- ソースコードを入手できること
- ソフトウェアを改良したり派生ソフトウェアを作成したりできること
- 作者のソースコードの完全性を維持すること
- 個人やグループを差別しないこと
- 利用分野に対して差別しないこと
- 再配布するときに追加ライセンスを必要としないこと
- ライセンスは特定の製品に依存しないこと
- 一緒に配布されるほかのソフトウェアを制限しないこと
- 技術的に中立であること
オープンソースソフトは無料で自由に使える代わりに、基本的にマニュアルやサポートが存在しません。いや、存在する場合も有ります。しかし多くは英語で書かれているものばかりか、英語を直訳した感じで読みにくいものばかりです(読みやすい場合も有ります)。なので、オープンソースソフトを使うには「自助努力」が大切です。「互いに助けあう」ことも大切です。オープンソースソフトは自分も育てあげていくんだという精神で使ってください。
その他にも、オープンソースを使う利点は
- 教育コストを削減できる -> 教育格差の是正
- コードが検証可能 -> 科学の「検証可能性」と相性が良い
- コピーしてどこへでも持ち運べる
キーワード
頻出中の頻出キーワードを説明します。
キーワード | 意味 |
コミュニティ | 特定のソフトの開発者とユーザーからなる自発的な集まり。 |
カーネル | OS の中核部分。ハードウェアを制御する。 |
パッケージ | ソフトは複数のファイルから構成されていますが、それらを個々にインストールするのは面倒です。インストールしやすくまとめたものがパッケージです。 |
ディストリビューション | カーネルだけでは使える OS にならないので、多数のソフトを組み合わせて配布(distribute)可能な形にしたもの。 |
シェル | コマンドを解釈するソフト。bash や zsh など多数存在します。「端末」はあくまで画面表示機能を提供するソフト。 |
Linux を導入する方法
大まかに 4 つの方法が有ります:
- USB メモリーに導入する
- ハードディスクを付け替える
- デュアルブート
- 仮想化マシン
空の HDD に Linux Mint をインストールする方法は USB メモリーにインストールする方法とほぼ変わりません。仮想化マシンにインストールする方法はいずれ書きたいと思います:
(追記 2018/03/31)書きました:
シェルをちょっと使ってみる
Ctrl
+Alt
+T
を押して端末を起動します。端末が立ち上がると以下のような画面が表示されます:shellingford@LinuxMint ~ $
これは環境によって表示される文字は異なります。「ユーザー名@コンピューター名 ワーキングディレクトリ$」という並びになっています。$ は # だったり、% だったりしますが、基本的に $ はユーザー権限を表し、# はルート権限を表しています。$ はプロンプトと呼ばれ「コマンドを入力してください」と待機していることを表します。
ところで、サイトを徘徊していると $ 付きで書かれるのが一般的です:
$ cal 2018
しかし、$ は入力する必要はありません。そこで初心者は $ も入力しエラーが返されること経験をします:
$: コマンドが見つかりません
では、なぜ $ まで書く必要があるのかというと、パソコンが表示する文字列とユーザーが入力する文字列を区別するために書かれます。例えば
ls
MEGA linux_signing_key.pub ダウンロード ピクチャ
New Unity Project out.png テンプレート ミュージック
Redmond-Themes sassc デスクトップ 公開
Unity-2017.3.0f1 snap ドキュメント
libsass vidlist.html ビデオ
とあるとどれを入力し、どれが表示される文字列か分かりません。そこで $ もつけて表記するのです:
$ ls
MEGA linux_signing_key.pub ダウンロード ピクチャ
New Unity Project out.png テンプレート ミュージック
Redmond-Themes sassc デスクトップ 公開
Unity-2017.3.0f1 snap ドキュメント
libsass vidlist.html ビデオ
これで「ls」が入力する文字で、それ以外はパソコンが表示する文字だとわかるのです。しかし、当ブログでは入力するコマンドは:
date
と表記し、表示されるメッセージは:
2018年 3月 11日 日曜日 14:58:47 JST
と表記することで、「初心者が誤って $ まで入力する」「コピペするとき $ が邪魔」「ユーザーが入力する文字列とパソコンが表示する文字列の区別がつかない」を解決しています。
引数とオプション
半角スペースを空けて与える情報を引数と呼びます。先ほど
cal 2018
というコマンドを示しました。2018 年のカレンダーを表示するコマンドですが、この例では「2018」が引数です。引数は複数与えることも出来以下の例では 2018 年の 3 月を表示します:
cal march 2018
3月 2018
日 月 火 水 木 金 土
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
-(ハイフン)をつける場合は「オプション」と呼ばれます。ディレクトリやファイルを表示する ls コマンドは -a (おそらく all の a です)をつけることで隠しファイルやディレクトリ(.から始まる)も表示することが出来ます:
ls -a
-l (おそらく long の l です)をつければ long な形式で詳細を表示します。主にパーミッションを調べるのに使います:
ls -l
オプションはまとめてこのように書けます:
ls -la
Tab キーと↑↓キーの利用
Tab
を押すと自動で補完できる場合が有ります。例えばワーキングディレクトリがホームディレクトリ(/home/ユーザー名/ のこと。表現方法は $HOME や ~ があります)の時に、ワーキングディレクトリを「ピクチャ」に変えたいとします。以下のコマンドをうちます:cd ピ
cd は change (working) directory を表しています。この状態で
Tab
を押すと残りの「クチャ/」まで補完されます。また↑
を押すと前回使ったコマンドを再現できます。このことはとても有用なので知っておくべきです。↑キーで履歴を遡るのが面倒な時
コマンドの履歴を 30 とか 40 とか遡らないといけないようなときは hitstory コマンドを使うべきです:
history出力例:
Shift
+PageUp
で一ページ分上にスクロールできます。Shift
+PageDown
で一ページ分下にスクロールできます。実行したいコマンドの番号を覚えたら ! を先頭につけて番号を入力します:!992
コマンドの履歴を検索
コマンドの履歴を遡る方法を 2 通り見てきました。1 つは矢印キー、1 つは history コマンドです。しかし、一行一行コマンドを見ていくのではなく、特定の文字列でコマンドの履歴を検索したい場合はどうしたら良いのでしょうか。
端末で
Ctrl
+R
を押してみましょう。コマンドの履歴を検索するモードに切り替わります:(reverse-i-search)`’:
このように表示されたら、探しているコマンドの一部を入力してみましょう。途中からでも構いません。文字を入力するに連れて、自動的にコマンドの履歴から検索されます。対応するコマンドが見つかれば、表示されます。
表示されているコマンドではない場合は、更にもう一回
Ctrl
+R
を押してみましょう。次にヒットするコマンドが表示されるはずです。これはちょうどテキストエディターで、Ctrl
+F
を使って検索しているような感じです。検索モードを終了するには←
もしくは→
を押します。Ctrl + C の利用
Ctrl
+C
を押すとコマンドの実行の途中で、その実行を強制終了させることが出来ます。sleep コマンドは指定した時間だけ処理を停止するコマンドです。以下のコマンドは 5 秒処理を停止させます:sleep 5
5 秒後にプロンプトに戻るはずです。次はこの処理中にキャンセルしてみましょう。上のコマンドを実行した後に、すぐ
Ctrl
+C
を押すとすぐにプロンプトに戻るはずです。コマンドの処理を途中でキャンセルしたい場合に活用してください。入出力リダイレクト
出力は通常モニターやプリンターに、入力は通常キーボードやマウスで行いますが、より抽象的に入出力を行うことでソフト同士のやりとりが容易になります。まず最初に画面以外に出力できることを経験してみましょう:
echo HelloWorld! > output.txt
更に、cat コマンドで output.txt の中身を見てみます:
cat output.txt
出力例:
HelloWorld!
echo の出力先を画面からファイルに変更することが出来ました!また、同じテキストファイルに違う内容を入力してみましょう:
date > output.txt
出力してみます:
cat output.txt
出力例:
2018年 3月 11日 日曜日 16:45:44 JST
date コマンドの出力先がテキストファイルに変わりました。しかし、HelloWorld! が消されてしまいました。つまり上書きされたのです。追記したい場合はどうしたらいいでしょうか。>> と 2 回続けます:
date >> output.txt
出力してみます:
cat output.txt
出力例:
2018年 3月 11日 日曜日 16:45:44 JST
2018年 3月 11日 日曜日 16:48:24 JST
追記できたのがわかります。次はファイルから出力する方法を見ていきましょう。bc コマンドは計算を処理するコマンドです。Linux Mint には標準で入っています。まずは 1+2 と書かれたテキストファイルを用意しましょう:
echo 1+2 > output.txt
この式を bc コマンドに渡します:
bc < output.txt
出力例:
3
このように、出力先をファイルに変えることを「出力リダイレクト」と言い、入力元をキーボードからファイルに変えることを「入力リダイレクト」と言います。
パイプの利用
上記の例では echo と出力リダイレクトを使って output.txt を生成し、内容を書き込み、入力リダイレクトを使って bc コマンドにファイルから式を渡して、計算結果を画面に表示させました。言わば output.txt を中間ファイルとして使っているわけですが、この中間ファイルを生成させずに直接コマンドの出力を別のコマンドの入力として渡す方法が有ります。それがパイプという仕組みです。以下のコマンドを実行してみてください:
echo 1+2 | bc
出力例:
3
パイプを使うことで処理を高速化することが出来ます。
バックグラウンドで実行
コマンドの最後に「 &」を追加して実行すると画面外でそのコマンドが実行されます。例えば sleep コマンドは指定した時間が経つまで、プロンプトに戻りませんが、「 &」を末尾につけるとすぐプロンプトに戻ります:
sleep 10 &
画面内に戻したい場合は fg (foreground)コマンドを使います:
fg
逆に、画面内で実行していて、途中から画面外(バックグラウンド)で実行したくなる場合も有ります。その時はコマンドを実行した後
Ctrl
+Z
を押してコマンドの実行を停止させた後、「bg」と入力することでバックグラウンドで再開できます:sleep 10
Ctrl
+Z
を押して停止させた後:^Z
[1]+ 停止
bg 1
という風に「bg ジョブID」で再開できます。fg コマンドを使えば sleep 10 が裏で実行されているのがわかるはずです:
fg
ワンライナーでプログラミング
プログラミングというと Java や C 言語という、いわゆる「プログラミング言語」を使って作る、大掛かりなものを連想しがちですが、ここでのプログラミングはシェル上で一行のコマンドとして実行する小さなプログラムです。このようなプログラミングスタイルを「ワンライナー」と呼んでいます。すでに我々はワンライナーを経験しています。それはこれです:
echo 1+2 | bc
このようにいくつかのコマンドを | などを利用してつなげていきます。
変数
プログラミングを始めるにあたり、最初に登場するのが変数です。例にもれずここでも最初に変数を取り上げます。シェルでの変数以下のように定義します:
x=3
使うときは $ を変数名の前につけます:
echo $x
コマンドの出力を変数に代入することも出来ます。コマンドをバッククォートではさみます:
d=`date`
echo $d
上の二行のコマンドは一行にまとめてこう書くことも出来ます:
d=`date`;echo $d
出力例:
2018年 3月 11日 日曜日 17:58:58 JST
しかしながら、バッククォートで挟むやり方よりも $(コマンド) 形式のほうが推奨されています。他人のスクリプトを読むときはバッククォートでコマンドを実行しているんだなとわかる程度で、実際に自分でスクリプトを書く場合はこちらの形式に従いましょう:
d=$(date)
echo $d
ネスト(入れ子)もできます:
echo "hello1 $(echo hello2 $(echo hello3))"
出力例:
hello1 hello2 hello3
シェルにはシェル変数が用意されています。たとえば、コマンドの実態を探すディレクトリが格納されている PATH 変数やデフォルトのシステム言語がセットされている LANG 変数、0 から 32767 までの整数をランダムで出力する RANDOM 変数、ホームディレクトリのパスが格納されている HOME 変数などが有ります。これらも利用するときは変数名の前に $ をつけます:
echo $LANG
出力例:
ja_JP.UTF-8
繰り返し制御
シェルでは繰り返しに for 文を使います。フォーマットは以下のとおりです:
for i in {1..5}; do 繰り返したいコマンド; doneあるいは for((i=1;i<=5;i+=1)); do 繰り返したいコマンド; doneどちらも同じ結果です。{1..5} は 1 から 5 まで繰り返す書き方で、{2..10} とかでも構いません(2 から 10 まで一個ずつ繰り返します)し、((i=1;i<=5;i+=1)) は ((i=2;i<=10;i+=2)) とかでも構いません。i+=2 でどれだけ増やしていくかを指定しています。2 なので 2 4 6 8 10 と増えていきます。
ファイルも扱うことが出来、例えばワーキングディレクトリの中で txt ファイルのみを表示したい場合はこのような書き方になります:
for i in *.txt; do echo $i; done*.txt にマッチしたファイルの一つ一つが変数 i に代入され、それを echo $i で出力しています。*.txt があるだけ繰り返し行われます。
出力例:
output.txt
awk の利用
awk は空白や行で区切られたテキストを処理するためのコマンドです。ワンライナーで使うととても便利なコマンドです。例えば以下のコマンドを実行してみてください(注意すべてき点はバッククォートではなくシングルクオートであるということです):
echo 1 2 | awk '{print $1+$2}'
出力例:
3
まず echo で出力するデータをパイプで awk に渡しています。$1 には 1 が格納され、$2 には 2 が格納されています。print は awk の持つ「データを表示するコマンド」です。シェルの持つコマンドではありません。なので awk '{}' の中の世界はシェルとまた別の世界だと思ってください。
応用
ここで実用的な一行プログラムを作成したいと思います。ワーキングディレクトリ内の png ファイルをすべて jpg ファイルに変換します。まず ImageMagic をインストールしてください:
sudo apt install -y imagemagickパスワードの入力が求められるので自分がログイン時に使用するパスワードを入力し
Enter
を押します。続いて、適当にワーキングディレクトリに png 形式の画像を適当にダウンロードしてください。その後次のコマンドを実行します:
ls *png | awk '{printf "convert %s %0.5d.jpg¥n",$1,NR}' | sh
もし、ファイル名にスペースが入っているとうまく処理できませんが、これでワーキングディレクトリ内のすべての png 形式の画像が連番がふられた jpg 形式の画像に変換されます!
少し説明を加えると、
ls *pngでワーキングディレクトリの png ファイルを出力しています。その出力結果を awk に流し、一行一行'{}' の中のコマンドが実行されます。printf は画面に表示するコマンドです。printf "" の中の文字列を出力します。%s は受け渡されたファイルをそのまま出力します。%0.5d は頭部が 0 で埋まった 5 桁の整数を出力します。残りの $1 は ls *png で流れてきた png 形式のファイル名が格納されていきます。NR は行数が記録されていきます。これらの $1 と NR がそれぞれ %s と %0.5d に代入されていくのです。最後に sh で出力したコマンドを実行していきます。
次のコマンドでは html 形式で書かれたテキストファイルの内、表示される文字数を表示します。実行する前に output.txt に適当に html を記述してください:
tr -d "¥n" < output.txt | tr -d " " | sed -e 's/<[^>]*>//g' | wc -m
tr コマンドは(おそらく trim から取られていると思います)文字の置換や削除を行うコマンドです。-d オプションを指定することで指定した文字(ここでは改行。改行は ¥n で表します)を削除します。output.txt に書かれた文字列からまず、改行を取り除きます。これは改行も1文字とカウントされるからです。更にパイプで再度 tr コマンドを使って「 (半角スペース)」を削除しています。次に結果を sed に流しています。sed も与えた正規表現で文字列を置換したり削除したりするためのコマンドです。ここでは html タグを取り除いています。最後に文字数をカウントする wc コマンドに結果を流しています。-m をオプションをつけることでマルチバイト文字(日本語など)を 1 文字とカウントします。これで自分の書いた原稿がどれくらいの文字数がわかります。
終わりに
いかがでしたか。GUI で行う操作は直感的である反面自動化がしにくいです。GUI で行う操作は習得に多少の時間が必要ですが、なれると素早くできる利点があります。Unix の設計思想の中に「各プログラムが一つのことをうまくやるようにせよ」という言葉があります。echo や ls 自体は「これだけで一体なんの役に立つの?」という感じのコマンドを組み合わせることで強力な一行プログラムになることを学びました。
最後にちょっとだけ。以下のコマンドはワーキングディレクトリをミュージックに移し、ネットからビープ音の音源をダウンロードしそれを beep.wave と名づけて保存するコマンドです:
cd ミュージック && wget -O beep.wav http://anime.geocities.jp/combatbutler_combatbutler/music/A-Tone-His_Self-1266414414.wav
その後、次のコマンドを実行してみてください。3 分後に指定したファイルを鳴らす一行プログラムです:
sleep 180 && aplay beep.wavカップラーメンの時間を測るのにちょうどいいタイマーの完成です :P
参考元 : 『入門者のLinux』『1週間で LPIC の基礎が学べる本』
| Linux |
2022.09.19 Monday
Show some apps list:
Follow on your feed reader:
About this blog:
Linux Mint-centric chronicle with anime girls since 2009.Best View with Google Chrome 1980x1080 dimension.Info 更新は不定期です。
- Mint 18.3 : オススメ Python IDE 8 選
- Mint 18.3 : Python ではじめるコマンドラインツールの作成とパッケージ化
- Linux ユーザーなら Git を活用しよう
- Shell :シェルスクリプトを組もう! Zenity 編
- Shell :シェルスクリプトを組もう! Dialog 編