SSブログ

LinuxをWindowsで始める 4 [Linux]

コマンドを発行してファイルを編集してきました。Linuxの基本的な操作はそれ以上でもそれ以下でもありません。
http://miff.blog.so-net.ne.jp/2018-01-13
http://miff.blog.so-net.ne.jp/2018-02-13-1
http://miff.blog.so-net.ne.jp/2018-02-18-1

ただ知っておいた方が良いことはまだまだあるのでまだまだ続きます。ネタが尽きるまでは書きます。ただ、やればやるほど一般性がなくなる可能性はありますが。

ともあれ、しばらくはBoWでやるのでライトな感覚でやっていきたいと思います。今回はGolangのコンパイル環境を入れて使ってみたいと思います。なんでGolangと聞かれたら言語仕様が小さいからコストが少ないと答えるしかないでしょう。細かい愚痴は後に書きます。


まずは
apt update

と入力してみてください。エラーが出ると思います。自分ところではこんな感じで出ています。人によってはちょっと違うかもしれませんが。
$ apt update
パッケージリストを読み込んでいます... 完了
W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: 許可されていない操作です)
E: ロックファイル /var/lib/apt/lists/lock をオープンできません - open (13: 許可がありません)
E: ディレクトリ /var/lib/apt/lists/ をロックできません
W: ファイル /var/cache/apt/pkgcache.bin の削除中に問題が発生しました - RemoveCaches (13: 許可がありません)
W: ファイル /var/cache/apt/srcpkgcache.bin の削除中に問題が発生しました - RemoveCaches (13: 許可がありません)

これはパッケージマネージャaptが管理者権限で基本的に動くので、管理者権限で動かしてください。aptにかかわらず、インストール作業というものは普通に管理者権限が必要であるのです。システムに近い作業をするほど管理者権限が必要になってきます。それと今後は$などのコマンドプロンプトは基本書きません。複数行をコピペで動かすのに支障が出るからです。

管理者権限で動かすには、コマンドの前にsudoを付けます
sudo apt update
sudo apt upgrade

面倒な場合は、二行をコピーしてコマンドプロンプトのウィンドウを右クリックしてください。コピペされて二行が実行されます。

これらは何度も打つことになると思うので、入力に慣れておいた方が良いのでキーボードから入力することをお勧めします。ただ、手間を惜しむことはできて、sudo apt updまで打ち込んでTabキーを押してみてください。あとのateが補完されます。同じようにsudo apt upgまで打ち込んでTabキーを押すとradeが補完されて入力直前までもっていってくれます。長めのコマンドは補完される仕組みがあるのです。

同じようにコマンドそのものも補完できたりします。一文字だけでも補完できますが、選択肢がたくさん出てくるので一発補完はできません。覚えがあいまいな場合は、頭の数文字だけ打って選択肢から選ぶという方法もあるのでチートシート的に使えなくもないです。

この補完はbash-completionというものを入れると使えるようになるのですが、Ubuntuにはもともと入っていたのでした。この設定をいじると自分で作ったコマンドの補完もできるようになります。ただ、コマンド引数を補完するような大掛かりなツールというのは現実的に作ることはあまりないと思うので、標準で組み入れられていないツールについての補完は作ってみることは現実的ではあります。実際に作るのはそんなに難しくないし、有志がGitHubなどに上げていることもあるので探してみると頻繁に使う場合は楽ができるかもしれません。


sudoで実行しようとすると、自分のパスワードを聞かれます。普通は/etc/sudoersに設定しないと、sudoで実行できないのですが、BoWでは初めから実行できるようになっています。普通にUbuntuを入れた時はそこまでしてくれなかった気がするのですが、本当であればsudoersを編集して練習としたかったのですが残念ですね。

これらを実行する場合は時間がかかることを覚悟してください。Windowsで言うとWindows Updateをやっているようなものなので、OSの中身が新しくない場合はアップグレードをかける部分が多くなるという訳です。ただWindowsと同じようにいくらかバグやセキュリティの問題が解決しているので、定期的にやっておくのがいいと思います。




と環境が新しくなった後に、Golangを入れていきます。

ちなみにGolangというのは何だかというと、プログラミング言語です。コンパイル型の言語で、現在台頭しているインタプリタ型のスクリプトではありません。はじめは同じコンパイルをしないといけないC言語の環境を入れようと思ったのですが、今更C言語でHello Worldもないだろうと思ってやめました。まぁやることは大して変わらないのですが、やりたい人は自分でやると思うので止めはしません。カーネルでもなんでもいじってください。

とプログラミングへの布石を打とうとしているわけですが、プログラミング環境を入れる事自体は難しいことはなく、コマンド一発で入ってしまいます。
sudo apt install golang

先のTabでの入力補完がinstallのiで、それとgolangのgolaでそれぞれ補完できます。golangはともかくinstallはiの一文字で補完できるので楽しましょう。


インストールが終わるとすぐにプログラミング環境を使えます。色々設定はあるのですが、今はあんまり関係ないのでやりません。今から簡単なプログラミングをしますが、ソースファイル作成→ソースファイルのコンパイル→コンパイルされたファイルの実行、とやっていきます。

viを開きます。
vi start.go

iを押して文字入力をできるようにしておきます。

下のソースをブラウザからコピーして、右クリックでコマンドプロンプトに貼り付けます。
package main

import "fmt"

func main() {
	fmt.Println("なんでGolangやねんw")
}

viに文字列を挿入できたら、:wq で保存。

start.goというファイルができていると思うので、それをコンパイル。
go build start.go


エラーが出なければstartというファイルができるはずなので、それを実行。
$ ./start
なんでGolangやねんw

「なんでGolangやねんw」と出力に出てくれば成功という訳です。オペミスがなければ大丈夫だと思いますが、失敗するのも経験です。

./start

というコマンドで、コンパイルされたファイルを実行しているのですが、ただstart単体では実行されません。それはパスが通っていない場所にある実行ファイルだからです。既存のツールのような実行ファイルはパスが通っているディレクトリに置いてあるわけです。だから./を付けて現在位置を知らせなくても実行できるようになっています。

でも、そうではないわけですからstartというファイルの前に明示的にカレントディレクトリ(現在いるディレクトリ)を示してあげる必要があるわけです。しかも都合の悪いことに既存のstartコマンドと名前がバッティングしているせいもあり、./の指定は必然なわけです。

なお実行できるパスを表示させるには
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files (x86)/PuTTY:/mnt/c/Users/ユーザー名/AppData/Local/Microsoft/WindowsApps

とすれば出てきます。このそれぞれのパスに存在する実行可能ファイルはファイル名だけで実行できるようになっています。なのでどこにいても絶対パスも相対パスも示すことなく、コマンド名だけで実行できてしまうわけですね。




最後になんでGolangなんかいな、という話。Golangの良くない噂を聞いたことがあるからやりたくないよ、そう思うかもしれません。結構多くGolangをディスる人たちがいます。思いのほかに人気になってしまっているから叩いているのですが、叩きどころが違う人が多いです。叩く意味も分かります。でもやっぱり人気が出てしまっているからそれを憂いて叩いているとしか思えないのです。

Golangでググったらわかると思いますが、有名なgolangとNimと言われるマイナー言語を比較して、Golangをディスっているサイトがあります。言いたいことはわかるんだけど、やっぱマイナーなものはマイナーなままつぶれるのが大体の運命なんだよね。NimをKotlinよりもサイコーとか言ってるけど、誰も使わなきゃ放置されんだろw。

それに彼が崇め奉ってるPlan 9だって今までの成果は、そのOSの概念と実質UTF-8のみと言っていいでしょう。
 http://www.atmarkit.co.jp/news/analysis/200902/09/future.html
もう終わっているものに期待をしている人って何よって話で。BSD各OSよりもさらに死んでるだろってw。まぁFree BSDにはmacOSの礎となったらしいから感謝はしているけれども。同じくどんなに優れていようとも使われなかったらそれは単なる文字列と変わらないわけですよね。脳内オナニーのひけらかしはやめてくれと。

70年代の言語と大して変わらないという指摘は当たっていると思います。でも、より良いC言語として存在するには言語仕様が巨大にならないことがマストであったのだと思います。そして覚えることが少ないというのは、使える人が多くなるという事にもつながるし、自分のメイン言語ではなくサイド的な使い方をすることも可能になってくるのでしょう。そして多少手荒く扱っても言語の罠にはまらないというのは実際的に効いてくると思います。

Golangをディスる人の多くが現在のスクリプト言語を元にして言っているのですが、GolangはC++のより良い改良ではなくて、C言語の改良版であることを前提としていない。そんなものC言語でやればいいじゃないかと言って、コンパイル言語を放置してきた結果が今なわけで、オブジェクト指向が普通な現代的なインタプリタ言語の変わりは別に必要なのが分からないのかな。

というわけで、オブジェクト指向を取り入れていないあえて抑えた言語と、使う見た目上シンプルになったオブジェクト指向言語を比べる事自体愚かしいと思うのだけれど。すげーはえーとF1の絵を声高に掲げているよりも、少々遅くても実際にある原チャリで近くにお出かけした方が良いと思いません?

次はシェルなどをやっていきます。

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0