Raspberry Piを有線LANでMacに直結してMac経由でapt-getできるようにするまでの手順

Pocket
LINEで送る

さっきの記事のMac版。OS Xです。画面数は減ります。こちらもMacで有線LANと無線LANが両方使える必要があります。

まず、「システム環境設定」->「共有」に行き、「インターネット共有」の文字を押して、下のように「共通する通信経路」をWi-Fi、相手のコンピュータでのポートを有線LANのものにします。

スクリーンショット 2016-09-06 14.51.38

その後、チェックボックスをクリックして共有をスタートします。

で、次にTerminalを立ち上げ、ifconfigで有線側のIPアドレスを調べます。下の例の場合は192.168.3.1です。

uedamb:~ ueda$ ifconfig
...
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=23<RXCSUM,TXCSUM,TSO4>
	ether aa:66:7f:f0:af:64 
	inet 192.168.3.1 netmask 0xffffff00 broadcast 192.168.3.255
...

で、192.168.3.2,3,4,…と調べていけばすぐにRaspberry Piにぶつかります。

uedamb:~ ueda$ ping 192.168.3.2
PING 192.168.3.2 (192.168.3.2): 56 data bytes
64 bytes from 192.168.3.2: icmp_seq=0 ttl=64 time=0.456 ms
64 bytes from 192.168.3.2: icmp_seq=1 ttl=64 time=0.376 ms
...

で、sshで接続し、外と通信できることを確認します。

uedamb:~ ueda$ ssh pi@192.168.3.2
Linux raspberrypi 4.1.10-v7+ #2 SMP PREEMPT Sat Oct 10 09:49:41 UTC 2015 armv7l
...
pi@raspberrypi ~ $ ping google.com
PING google.com (216.58.197.206) 56(84) bytes of data.
64 bytes from nrt13s48-in-f14.1e100.net (216.58.197.206): icmp_req=1 ttl=50 time=4.54 ms
64 bytes from nrt13s48-in-f14.1e100.net (216.58.197.206): icmp_req=2 ttl=50 time=5.28 ms
...

・・・端末って楽ですね。慣れれば。

Pocket
LINEで送る

日記: 研究室の名前/AD○BE殺傷コマンドの作成

Pocket
LINEで送る

山なし、落ちなし、意味なし。

シェル芸研では無い

この前とったアンケート。違います。

正式名称はコレですので宜しくお願い致します。

Creative Cloudのjsのプロセス殺傷シェルスクリプト

AdobeのCreative Cloudが勝手にメモリを何ギガも食っていて、MacBookの8GBのメモリだとすぐ振り切れてしまう現象に見舞われており。

↓こいつらです。なんか、「JavaScript使っとけばいいんじゃね?」みたいな安易な実装で自爆しているんじゃないかと推測します。私のメモリは御社のプログラマに楽をさせるためにあるのではないのですが。

uedamb:~ ueda$ ps aux | grep js
ueda              512 100.0  4.4  3396884 369820   ??  R    11:20PM   2:50.36 
/Applications/Utilities/Adobe Creative 
Cloud/CCLibrary/CCLibrary.app/Contents/MacOS/../libs/node 
/Applications/Utilities/Adobe Creative 
Cloud/CCLibrary/CCLibrary.app/Contents/MacOS/../js/server.js
ueda              501  99.7  4.6  3428820 387152   ??  R    11:20PM   2:52.92 
/Applications/Utilities/Adobe Creative 
Cloud/CCXProcess/CCXProcess.app/Contents/MacOS/../libs/node 
/Applications/Utilities/Adobe Creative 
Cloud/CCXProcess/CCXProcess.app/Contents/MacOS/../js/main.js
ueda              606   0.0  0.0  2460396    336 s001  R+   11:23PM   0:00.00 
grep js

Macのtopは次のようにオプションを入れるとメモリ食ってる順に表示してくれますが・・・ひどいですね。CPUもギンギンに使っています。しかも殺しても仕事に何の支障もなく、挙句ゾンビのように何度でも蘇るさ状態です。

uedamb:~ ueda$ top -o mem
...
PID  COMMAND      %CPU TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP PPID STATE    BOOSTS         %CPU_ME
501  node         90.3 13:57.49 11/1  2    72    913M+  0B     239M   501  1    running  *0[1]          0.00000
512  node         96.6 13:55.64 11/1  2    71    835M+  0B     191M   512  1    running  *0[1]          0.00000
...

蘇るたびにプロセス番号を調べて殺しているのも面倒なので殺しの呪文をシェルスクリプトにしました。例外処理も何にもありませんが。あと、名前が物騒ですが他意はないです。他意はないというのは、ファイル名の通りに行動するということではありません。

使ってみましょう。

uedamb:~ ueda$ ~/SYS/KILL_ADOBE 
uedamb:~ ueda$ ps aux | grep js
ueda              720   0.0  0.0  2434836    756 s001  S+   11:42PM   0:00.01 grep js

いなくなりました。シェルスクリプト便利!万歳!超小手先感!

とか書いてたら、なんだよ、解決しとったんかいというツイートを見つけてしまった・・・。いや、解決したならいいんですけど。

当該のパッチを当てたら寝る。

Pocket
LINEで送る

【問題と解答例】第13回危険でない方のシェル芸勉強会

Pocket
LINEで送る

環境

Macで解答を作ったのでLinuxな方は次のようにコマンドの読み替えを。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

次のようにShift JISのファイルを作り、Shift JISで「きく」と書いてあるファイルを探すワンライナーを考えてください。(答えは「b」ですね。)

uedambp:q1 ueda$ echo あいうえお | nkf -xLws > a
uedambp:q1 ueda$ echo かきくけこ | nkf -xLws > b
uedambp:q1 ueda$ echo さしすせそ | nkf -xLws > c

解答

uedambp:q1 ueda$ for f in * ; do nkf -w $f | grep -q きく && echo $f ; done
b

Q2

次のようにディレクトリa,b,c,dに1,2,…,9というファイルがあります。各ディレクトリ内のファイル数をワンライナーで数えてください。

uedambp:q2 ueda$ tree
.
├── a
│   ├── 1
│   ├── 2
│   └── 3
├── b
│   ├── 4
│   └── 5
├── c
└── d
    ├── 6
    ├── 7
    ├── 8
    └── 9

解答

uedambp:q2 ueda$ find . | tr / ' ' | awk 'NF==3{print $2}' | uniq -c
   3 a
   2 b
   4 d
uedambp:q2 ueda$ find . -type f | awk -F/ '{print $2}' | uniq -c
   3 a
   2 b
   4 d
###cも出したければ・・・###
uedambp:q2 ueda$ find . | awk -F/ '{print $2}' |
uniq -c | awk 'NF==2{print $2,$1-1}'
a 3
b 2
c 0
d 4
uedambp:q2 ueda$ ls * | xargs | gsed 's/.:/\n&/g' | awk '{print $1,NF-1}'
 -1
a: 3
b: 2
c: 0
d: 4
uedambp:q2 ueda$ ls -d * |
while read d ; do echo -n $d" " ; ls $d | gyo ; done
a 3
b 2
c 0
d 4

Q3

今度は次のような配置でファイル1,2,…,9が置かれているときに、ワンライナーでa、cの下のファイルの総数をカウントしてください(ディレクトリを除く)。つまりaなら5個、cなら4個が正解です。

uedambp:q3 ueda$ tree
.
├── a
│   ├── 1
│   ├── 2
│   ├── 3
│   └── b
│       ├── 4
│       └── 5
└── c
    └── d
        ├── 6
        ├── 7
        ├── 8
        └── 9

解答

uedambp:q3 ueda$ find . -type f | awk -F/ '{print $2}' | uniq -c
   5 a
   4 c

Q4

まず、次のように8桁日付のファイルを作ります。

uedambp:q4 ueda$ seq -w 1 31 | xargs -I@ touch 201401@
uedambp:q4 ueda$ ls
20140101  20140107  20140113  20140119  20140125  20140131
20140102  20140108  20140114  20140120  20140126
20140103  20140109  20140115  20140121  20140127
20140104  20140110  20140116  20140122  20140128
20140105  20140111  20140117  20140123  20140129
20140106  20140112  20140118  20140124  20140130

曜日別にディレクトリを作り、その中に当該するファイルを放り込んでください。

解答

uedambp:q4 ueda$ ls | gdate -f - '+%Y%m%d %a' |
while read d w ; do mkdir -p $w ; mv $d $w ; done
###英語のディレクトリにする###
uedambp:q4 ueda$ ls | LANG=C gdate -f - '+%Y%m%d %a' |
while read d w ; do mkdir -p $w ; mv $d $w ; done

Q5

以下のようにa,b,cというディレクトリを作り、その下に「{a,b,c}数字」というファイルを作ります。ファイル名の1文字目とディレクトリ名が一致するようにファイルを移動してください。

uedambp:q5 ueda$ tree
.
├── a
│   ├── a01
│   └── b01
├── b
│   ├── a02
│   ├── a03
│   └── c01
└── c
    └── a04

解答

uedambp:q5 ueda$ find . -type f |
awk '{print "mv",$1,substr($1,5,1)}'  | sh
mv: ./a/a01 and a/a01 are identical    ←エラーが出るけど大丈夫
uedambp:q5 ueda$ tree
.
├── a
│   ├── a01
│   ├── a02
│   ├── a03
│   └── a04
├── b
│   └── b01
└── c
    └── c01

Q6

次のようにディレクトリa, b, cの下に、8桁日付のファイルをいくつか置きます。

uedambp:q6 ueda$ tree
.
├── a
│   ├── 20130120
│   ├── 20140901
│   └── 20141021
├── b
│   ├── 20131011
│   └── 20140202
└── c
    ├── 20110202
    ├── 20130224
    └── 20141224

各ディレクトリの最新日付のファイルをカレントディレクトリ(a,b,cのあるディレクトリ)にコピーしてください。各ディレクトリの最新ファイルの日付はそれぞれ違い、コピーの際に衝突しないこととします。

解答

uedambp:q6 ueda$ for d in * ; do ls $d | tail -n 1 |
 xargs -n 1 -I@ cp $d/@ ./ ; done
###確認###
uedambp:q6 ueda$ ls
20140202  20141021  20141224  a  b  c
uedambp:q6 ueda$ find . -type f | tr '/' ' ' |
 awk '{f[$2]=f[$2]<$3?$3:f[$2]}END{for(k in f){print k,f[k]}}' |
 tr ' ' '/' | xargs -n 1 -I@ cp @ ./
###Tukubai等###
uedambp:q6 ueda$ find . -type f | tr '/' ' ' | sort | getlast 1 2 |
 tr '/' ' ' | awk '{print "cp", "./" $2 "/" $3 " ./"}' | sh

Q7

Q6について、適当にファイルをtouchします。今度はタイムスタンプが最新のファイルを、a, b, cそれぞれからカレントディレクトリにコピーしてください。コピーの際にタイムスタンプを変えない事。

解答

uedambp:q7 ueda$ for d in * ; do ls -t $d | head -n 1 |
 xargs -I@ -n 1 cp -p $d/@ ./ ; done

Q8

次のように5個ファイルを作ります。file1をfile2, file2をfile3, file3をfile4, file4をfile5, file5をfile1にmvしてください。

uedambp:q8 ueda$ for i in 1 2 3 4 5 ; do echo $i > file$i ; done
uedambp:q8 ueda$ head *
==> file1 <==
1

==> file2 <==
2

==> file3 <==
3

==> file4 <==
4

==> file5 <==
5

解答

uedambp:q8 ueda$ ls | 
awk 'BEGIN{a="tmp"}{print a,$1;a=$1}END{print a,"tmp"}' | 
tail -r | awk '{print "mv",$1,$2}' | sh
uedambp:q8 ueda$ head *
==> file1 <==
5

==> file2 <==
1

==> file3 <==
2

==> file4 <==
3

==> file5 <==
4
Pocket
LINEで送る

【問題のみ】第13回危険でない方のシェル芸勉強会

Pocket
LINEで送る

環境

Macで解答を作ったのでLinuxな方は次のようにコマンドの読み替えを。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

次のようにShift JISのファイルを作り、Shift JISで「きく」と書いてあるファイルを探すワンライナーを考えてください。(答えは「b」ですね。)

uedambp:q1 ueda$ echo あいうえお | nkf -xLws > a
uedambp:q1 ueda$ echo かきくけこ | nkf -xLws > b
uedambp:q1 ueda$ echo さしすせそ | nkf -xLws > c

Q2

次のようにディレクトリa,b,c,dに1,2,…,9というファイルがあります。各ディレクトリ内のファイル数をワンライナーで数えてください。

uedambp:q2 ueda$ tree
.
├── a
│   ├── 1
│   ├── 2
│   └── 3
├── b
│   ├── 4
│   └── 5
├── c
└── d
    ├── 6
    ├── 7
    ├── 8
    └── 9

Q3

今度は次のような配置でファイル1,2,…,9が置かれているときに、ワンライナーでa、cの下のファイルの総数をカウントしてください(ディレクトリを除く)。つまりaなら5個、cなら4個が正解です。

uedambp:q3 ueda$ tree
.
├── a
│   ├── 1
│   ├── 2
│   ├── 3
│   └── b
│       ├── 4
│       └── 5
└── c
    └── d
        ├── 6
        ├── 7
        ├── 8
        └── 9

Q4

まず、次のように8桁日付のファイルを作ります。

uedambp:q4 ueda$ seq -w 1 31 | xargs -I@ touch 201401@
uedambp:q4 ueda$ ls
20140101  20140107  20140113  20140119  20140125  20140131
20140102  20140108  20140114  20140120  20140126
20140103  20140109  20140115  20140121  20140127
20140104  20140110  20140116  20140122  20140128
20140105  20140111  20140117  20140123  20140129
20140106  20140112  20140118  20140124  20140130

曜日別にディレクトリを作り、その中に当該するファイルを放り込んでください。

Q5

以下のようにa,b,cというディレクトリを作り、その下に「{a,b,c}数字」というファイルを作ります。ファイル名の1文字目とディレクトリ名が一致するようにファイルを移動してください。

uedambp:q5 ueda$ tree
.
├── a
│   ├── a01
│   └── b01
├── b
│   ├── a02
│   ├── a03
│   └── c01
└── c
    └── a04

Q6

次のようにディレクトリa, b, cの下に、8桁日付のファイルをいくつか置きます。

uedambp:q6 ueda$ tree
.
├── a
│   ├── 20130120
│   ├── 20140901
│   └── 20141021
├── b
│   ├── 20131011
│   └── 20140202
└── c
    ├── 20110202
    ├── 20130224
    └── 20141224

各ディレクトリの最新日付のファイルをカレントディレクトリ(a,b,cのあるディレクトリ)にコピーしてください。各ディレクトリの最新ファイルの日付はそれぞれ違い、コピーの際に衝突しないこととします。

Q7

Q6について、適当にファイルをtouchします。今度はタイムスタンプが最新のファイルを、a, b, cそれぞれからカレントディレクトリにコピーしてください。コピーの際にタイムスタンプを変えない事。

Q8

次のように5個ファイルを作ります。file1をfile2, file2をfile3, file3をfile4, file4をfile5, file5をfile1にmvしてください。

uedambp:q8 ueda$ for i in 1 2 3 4 5 ; do echo $i > file$i ; done
uedambp:q8 ueda$ head *
==> file1 <==
1

==> file2 <==
2

==> file3 <==
3

==> file4 <==
4

==> file5 <==
5
Pocket
LINEで送る

OS X 10.9上のVirtualBoxでOS X 10.9を動かすために参考にしたサイト

Pocket
LINEで送る

本に書いたことを検証するためにまっさらな環境が欲しくて表題のようなことをしました。参考にしたURLのリンクだけ貼付けます。

– 使うCPUの変更
http://ntk.me/2012/09/07/os-x-on-os-x/

– ハードディスクの設定
http://qiita.com/hnakamur/items/fca6379213a3033cb29d

どうも有難うございます。

あとはDRAM、ビデオメモリと使うCPUの数を限界まで上げるのがコツかと。

Pocket
LINEで送る

【本番資料】第10回シェル芸勉強会

Pocket
LINEで送る

他の回の問題はこちら

シェル芸勉強会スライド一覧

イントロ

続きを読む 【本番資料】第10回シェル芸勉強会

Pocket
LINEで送る

【問題集】第10回シェル芸勉強会

Pocket
LINEで送る

他の回の問題はこちら

シェル芸勉強会スライド一覧

続きを読む 【問題集】第10回シェル芸勉強会

Pocket
LINEで送る

OS X 10.9 で Command Line Tools をインストールする方法

Pocket
LINEで送る

↓こちらにありますが、もっと簡単な方法を発見(と言っても1カ所違うだけですが。)。うーん。Xcodeは滅多に使わないのでうれしい。

http://www.computersnyou.com/2025/

ということでXcodeアンインストール!アプリケーションからXcodeのアイコンをゴミ箱にぽぽいぽい(でいいらしい・・・)。(ドキュメントとかアンインストールされるんかい?誰かおしえてください。)

端末からgccを打つと・・・

uedamac:~ ueda$ gcc
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', 
requesting install. Choose an option in the dialog to download the command line 
developer tools.

なんかダイアログ出た!迷わずインストール。

スクリーンショット 2013-10-27 12.16.18

uedamac:~ ueda$ gcc
clang: error: no input files

大丈夫です。

・・・さて、今書いているものを書き直さなければ・・・とほほ・・・。

Pocket
LINEで送る