スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

bashでgit comまでタイプしてタブキーを打つとcommitと補完される謎を追う

ひっそりぃはUbuntu Linux 13.04を使っているのですが、git commitしようとして、何気なくgit comまでタイプしCtrl-i(タブキー)を押すと、なんとcommitと補完され驚きました。

シェルはbashを使っているので、コマンド名やディレクトリ名が補完されるのは当然なのですが、コマンドの引数まで補完されるとは。

bashにこんな機能あったっけ?
と気になったので調べてみた。

調査にはプロセスのsystem callやsignalをtraceできるstraceコマンドを使います。全てのtraceを追うと大変そうなので、補完のためのデータベースを読みに行くのでは?とあたりをつけ、open()のみ追うことにします。

コマンドは、以下の様になります。

$ strace -e open bash


bashが起動する過程でのopen()結果がずらずらと表示され、以下の状態で止まりました。

: (省略)
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/etc/bash_completion.d/zeitgeist-daemon", O_RDONLY|O_LARGEFILE) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/home/hissorii/.bash_history", O_RDONLY|O_LARGEFILE) = 3
open("/home/hissorii/.bash_history", O_RDONLY|O_LARGEFILE) = 3
open("/lib/terminfo/s/screen", O_RDONLY|O_LARGEFILE) = 3
open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3
hissorii@ubuntu:~$


ここで、キーボードにて「git com」までタイプし、おもむろにタブキーをたたくと、

続きを読む »

スポンサーサイト

ハッとしてGit

今まで我が家のWeb/ファイル/VPN/svnサーバー等に大活躍だった玄箱くんですが、HDDが200GBでそろそろ限界だったのでリプレースしてみた。buffaloのNAS、LS-V500LのHDDを2.5TBに換装し、debianをインストール。

とりあえずsubversionのサーバーも設定してみたりしたが、最近よく聞くGitなるものも気になる今日この頃。

必要に迫られrcs, cvs, svnと渡り歩いて来たわけだが、今さらながらGitについてちょっと調べてみる。流行に疎くてすみません。

なるほど、ローカルにcommitして、リモートにpushとかpullとか。リポジトリを分散管理できるわけか。
リポジトリのバックアップにも便利そうだし、ソース公開するときにはGitHubのような公開サーバーにリポジトリ作ってpushすれば楽だね。今までみたいにソース公開毎にアーカイブ作る手間が省けるな。
多人数での開発でなくても結構メリットはありそうですね。

とりあえずNASのdebianくんにローカルなリモートリポジトリを作るか。ローカルのリモートという語感もちょっと違和感ありますが。
Gitの基本パッケージは既にインストールされているようで、git-daemon-runというパッケージを追加インストール。
これでいいのかな?
とりあえずgitのportはlisten状態になっているので大丈夫っぽい。

hissorii@debian:/etc$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:microsoft-ds *:* LISTEN
tcp 0 0 *:git *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:www *:* LISTEN
udp 0 0 192.168.1.203:ntp *:*
udp 0 0 localhost:ntp *:*
udp 0 0 *:ntp *:*
udp 0 0 192.168.1.25:netbios-ns *:*
udp 0 0 192.168.1.20:netbios-ns *:*
udp 0 0 *:netbios-ns *:*
udp 0 0 192.168.1.2:netbios-dgm *:*
udp 0 0 192.168.1.2:netbios-dgm *:*
udp 0 0 *:netbios-dgm *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 28637 /var/run/apache2/cgisock.2327
unix 2 [ ACC ] STREAM LISTENING 1201 /var/run/dbus/system_bus_socket
hissorii@debian:/etc$


ところでgitのportって何番やねん。

hissorii@debian:/etc$ grep Git /etc/services
git 9418/tcp # Git Version Control System
hissorii@debian:/etc$


うーむ、http proxy経由でも抜けられるような手段はあるのかな。
とりあえず使いながら慣れてみますか。

 | HOME | 

プロフィール

ひっそりぃ

Author:ひっそりぃ
Twitter:@hissorii_com
GitHub:hissorii


月別アーカイブ


最新記事


カテゴリ



最新コメント


最新トラックバック




RSSリンクの表示


Amazon


QRコード

QRコード

Amazon


ブログランキング

ブログランキング【くつろぐ】
にほんブログ村 ゲームブログ×PlayNCBlogへ

メールフォーム

名前:
メール:
件名:
本文:


カウンタ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。