ラベル linux の投稿を表示しています。 すべての投稿を表示
ラベル linux の投稿を表示しています。 すべての投稿を表示

2020年5月6日水曜日

[linux] gnupgによる暗号化処理時の確認プロンプトを抑制する方法

gnupgを用いてファイルを暗号化する際、予めインポートした公開鍵に対してtrust設定をしておかないと、指定した公開鍵毎に以下のような警告が発せられます。

% gpg -e -r abc@test.org a.txt 
gpg: AAAA4C0DD6F2ZZZZ: この鍵が本当に本人のものである、という兆候が、ありません

sub  elg2048/AAAA4C0DD6F2ZZZZ 2020-05-06 Hiroyuki Kurokawa <abc@test.org>
  主鍵フィンガープリント: <snip>
  副鍵フィンガープリント: <snip>

この鍵は、このユーザIDをなのる本人のものかどうか確信でき
ません。今から行うことを*本当に*理解していない場合には、
次の質問にはnoと答えてください。

それでもこの鍵を使いますか? (y/N)
以下のオプションを指定することで、指定した公開鍵がすべてtrust済みと見なされて処理されます。
--trust-model always

※マニュアルには、以下のように説明されているので、利用時には注意が必要です。
always
Skip key validation and assume that used keys are always fully valid. You generally won’t use this unless you are using some external validation scheme. This option also suppresses the "[uncertain]" tag printed with signature checks when there is no evidence that the user ID is bound to the key. Note that this trust model still does not allow the use of expired, revoked, or disabled keys.

(参考)

2018年6月6日水曜日

[linux][cygwin] unzipコマンドで "error: invalid compressed data to inflate" というエラーメッセージがでたら?

zipアーカイブの中に長さが0のファイルが含まれていると、unzipコマンドでは以下のようなエラーメッセージが表示されて、解凍することができません。アーカイブが壊れていなくてもエラーになります。
% unzip hoge.zip
  error:  invalid compressed data to inflate
このような場合には、-tzipオプションを指定して7zコマンドを実行することで、エラーを回避して解凍できます。パスワード保護されているzipアーカイブも問題なく解凍できました。
% 7z x -tzip hoge.zip

manページによると、以下のフォーマットがサポートされていて、デフォルトは7zとのこと。
The program supports 7z (that implements  LZMA  compression  algorithm),  
ZIP, CAB,  ARJ,  GZIP,  BZIP2,  TAR,  CPIO, RPM and DEB formats.

xはディレクトリ階層つきで解凍することを意味しています。eを指定するとディレクトリ階層なしで解凍されます。
% 7z --help

7-Zip [64] 15.14 : Copyright (c) 1999-2015 Igor Pavlov : 2015-12-31
p7zip Version 15.14.1 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz (306C3),ASM,AES-NI)

Usage: 7z  [...]  [...]
       [<@listfiles...>]


  a : Add files to archive
  b : Benchmark
  d : Delete files from archive
  e : Extract files from archive (without using directory names)
  h : Calculate hash values for files
  i : Show information about supported formats
  l : List contents of archive
  rn : Rename files in archive
  t : Test integrity of archive
  u : Update files to archive
  x : eXtract files with full paths


  -- : Stop switches parsing
  -ai[r[-|0]]{@listfile|!wildcard} : Include archives
  -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
  -ao{a|s|t|u} : set Overwrite mode
  -an : disable archive_name field
  -bb[0-3] : set output log level
  -bd : disable progress indicator
  -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
  -bt : show execution time statistics
  -i[r[-|0]]{@listfile|!wildcard} : Include filenames
  -m{Parameters} : set compression Method
    -mmt[N] : set number of CPU threads
  -o{Directory} : set Output directory
  -p{Password} : set Password
  -r[-|0] : Recurse subdirectories
  -sa{a|e|s} : set Archive name mode
  -scc{UTF-8|WIN|DOS} : set charset for for console input/output
  -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
  -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
  -sdel : delete files after compression
  -seml[.] : send archive by email
  -sfx[{name}] : Create SFX archive
  -si[{name}] : read data from stdin
  -slp : set Large Pages mode
  -slt : show technical information for l (List) command
  -snh : store hard links as links
  -snl : store symbolic links as links
  -sni : store NT security information
  -sns[-] : store NTFS alternate streams
  -so : write data to stdout
  -spd : disable wildcard matching for file names
  -spe : eliminate duplication of root folder for extract command
  -spf : use fully qualified file paths
  -ssc[-] : set sensitive case mode
  -ssw : compress shared files
  -stl : set archive timestamp from the most recently modified file
  -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
  -stx{Type} : exclude archive type
  -t{Type} : Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
  -v{Size}[b|k|m|g] : Create volumes
  -w[{path}] : assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
  -y : assume Yes on all queries


参考:

2015年1月28日水曜日

[linux][cygwin] less, manの終了直前の画面をクリアしないで端末上に残す方法

端末上でmanコマンドでオプション引数の詳細を調べて、さあコマンドを実行、というときにオプション引数の情報が画面から消えて困る・・・という目に遭っている方はいないでしょうか。

最近のlinuxのディストリビューションやcygwin環境ではデフォルトの設定によっって上記の挙動になっていますが、terminfoの設定を適切に変更することで、manコマンドだけでなくlessやviで表示していた画面をそのまま残した状態で、プロンプトに戻りそれを参照しながらコマンドを実行するということが可能になります。

terminfoの設定手順

t9mdさんの日記に書かれている通りですが、以下の手順でless, manなどの終了前の画面が端末上に残るようにできます。

% infocmp > screen.terminfo
% vi screen.terminfo             # vi上でrmcup、smcupを削除
% tic -o ~/.terminfo screen.terminfo
% rm -f screen.terminfo


rmcup, smcupの削除について、自分の環境では、具体的には以下の二箇所の取り消し線部を削除しました。

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|xterm terminal emulator (X Window System), 
 am, bce, km, mc5i, mir, msgr, npc, xenl, 
 colors#8, cols#80, it#8, lines#24, pairs#64, 
 acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, 
 bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, 
 clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M, 
 csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, 
 cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, 
 cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, 
 cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, 
 dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, 
 flash=\E[?5h$<100>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, 
 ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, 
 ind=^J, indn=\E[%p1%dS, invis=\E[8m, 
 is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~, kEND=\E[1;2F, 
 kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, 
 kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=\177, kcbt=\E[Z, 
 kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 
 kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~, 
 kf11=\E[23~, kf12=\E[24~, kf13=\EO2P, kf14=\EO2Q, 
 kf15=\EO2R, kf16=\EO2S, kf17=\E[15;2~, kf18=\E[17;2~, 
 kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, 
 kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\EO5P, 
 kf26=\EO5Q, kf27=\EO5R, kf28=\EO5S, kf29=\E[15;5~, 
 kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, 
 kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, 
 kf36=\E[24;5~, kf37=\EO6P, kf38=\EO6Q, kf39=\EO6R, 
 kf4=\EOS, kf40=\EO6S, kf41=\E[15;6~, kf42=\E[17;6~, 
 kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, 
 kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\EO3P, 
 kf5=\E[15~, kf50=\EO3Q, kf51=\EO3R, kf52=\EO3S, 
 kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, 
 kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, 
 kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\EO4P, 
 kf62=\EO4Q, kf63=\EO4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
 khome=\EOH, kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, 
 knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, 
 mc5=\E[5i, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8, 
 rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=\E(B, rmam=\E[?7l, 
 rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, 
 rmul=\E[24m, rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, 
 setab=\E[4%p1%dm, setaf=\E[3%p1%dm, 
 setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, 
 setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, 
 sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, 
 sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h, 
 smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, 
 tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, 
 vpa=\E[%i%p1%dd, 


cygwin上でinfocmp, ticコマンドをインストールするには

cygwinではデフォルトではinfocmp, ticはインストールされていません。ncursesパッケージをインストールするとこれらのコマンドが使えるようになります。

その他

先日のエントリでlvを紹介した際、lvではlessの-X(--no-init)オプションに相当する機能がないのが残念、としましたがterminfoの設定を変えることで、コマンドに依らず起動中の画面を消さずにそのまま表示を引き継ぐことができることがわかりました。

参考:

メモ:

  • infocmpをcmpinfoとtypoしていたのを修正しました(2015/02/18)。

2015年1月23日金曜日

[cygwin][linux] lvで複数の文字コードが混在する環境で簡単に文字化けを回避する

複数の文字コードを扱う環境では「文字化けで読めない・・・、editorで開き直そう。」という煩わしい作業が頻繁に発生しているのではないでしょうか。該当する方はlvというコマンドを利用すれば幸せになれますので是非一度試してみてください。

lvは入力された文字コードは自動判別し、出力するコードはLANG環境変数で指定している文字コードに変換してくれるので、どんなファイルを与えても文字コード指定なしで意図通り表示してくれます(すばらしい!)。

環境変数に以下の設定をしておけば、manやgitからもlvが利用されるようになります。-cは文字装飾用ANSIエスケープシーケンスに対応するためのオプション指定です。
 
PAGER='lv -c'


もし自動判別に失敗する、もしくは、LANGで指定していない文字コードで出力したい、といった特殊なケースには、-Iで入力、-Oで出力する文字コードを指定できます。
 
       coding-system:
              a: auto-select
              c: iso-2022-cn
              j: iso-2022-jp
              k: iso-2022-kr
              ec: euc-china
              ej: euc-japan
              ek: euc-korea
              et: euc-taiwan
              u7: UTF-7
              u8: UTF-8
              l1..9: iso-8859-1..9
              l0: iso-8859-10
              lb,ld,le,lf,lg: iso-8859-11,13,14,15,16
              s: shift-jis
              b: big5
              h: HZ
              r: raw mode

例えば、入力をeuc-japan、出力をshift-jisに指定したい、といった場合には以下のオプションを与えればOKです。
 
% lv -Iej -Os euc.txt


自分にとって唯一残念なのがlessの-X(--no-init)オプションに相当する機能が用意されていない点です。lessだと-Xオプションを指定しておくとlessで表示していた画面がlessをquitした後もそのままの状態でターミナル上に残ります。lessで情報を表示した後に、それを参照しつつコマンド実行する、というケースにはこの機能が必須なのですが・・・

参考:

2014年11月22日土曜日

[linux] DHCPでIPを割り当てているサーバーのIPアドレスをクライアントから確認する方法

DHCPで各マシンのIPを割り当ていている環境では、頻繁にIPアドレスが変わります。このような環境で、常時起動ではないPCサーバーを立てているとクライアントからのアクセス時に、接続先のサーバーのIPアドレスがわからず困ることがあります(特にサーバーにディスプレイをつないでいない場合)。
サーバーがsamba(CIFS)のサーバー機能を持っていると、samba経由であればNetBIOS名でのアクセスは可能ですが、HTTPやSSHでのアクセスにはIPアドレスが必須です。このようなケースで、リモートから簡単にIPアドレスが得られる方法を調べたのでメモ代わりに残しておきます。

準備:サーバーにsamba(ファイルの共有)を設定しておく

今回紹介する方法はNetBIOSを利用しているためサーバー上でsamba、ファイル共有を有効にしておく必要があります。

方法1:nbtstat(windows), nmblookup(linux)を利用する。

  • クライアントがWindowsの場合:nbtstatコマンドを利用する
  • C:\Windows\system32>nbtstat -a pc-server
           : (snip)
    
    C:\Windows\system32>nbtstat -c
    
    イーサネット:
    ノード IP アドレス: [172.16.0.119] スコープ ID: []
    
                      NetBIOS リモート キャッシュ ネーム テーブル
    
              名前              種類       ホストアドレス    継続時間 [秒]
        ------------------------------------------------------------
         PC-SERVER       <20>  一意          172.16.0.94         597
         PC-SERVER       <00>  一意          172.16.0.94         597
    
    
  • クライアントがLinux、macの場合:nmblookup (or smbutil lookup)を利用する
  • 
    % smbutil pc-server
    Got response from 172.16.0.121
    IP address of ubuntu2: 172.16.0.121
    
    % nmblookup pc-server
    querying pc-server on 172.16.255.255
    172.16.0.94 pc-server
    
    

方法2:smbclient, findsmbコマンドを利用する

  • smbclientを利用する。-dはデバッグレベル6を意味する。デフォルトは1だが、1だとサーバーのIPアドレスは表示されない…。
  • 
    % smbclient //pc-server/public -d=6 
          :  (snip)
    Connecting to 172.16.0.94 at port 445
          :  (snip)
          :
    
    

  • findsmbを利用する。
  • 
    % findsmb
    
                                    *=DMB
                                    +=LMB
    IP ADDR         NETBIOS NAME     WORKGROUP/OS/VERSION 
    ---------------------------------------------------------------------
    Can't load /opt/local/etc/samba3/smb.conf - run testparm to debug it
    172.16.0.94     PC-SERVER        [WORKGROUP] [Unix] [Samba 4.1.6-Ubuntu]
    
    

  •  参考:

2014年5月12日月曜日

[linux] ソースコードをHTMLに変換するコマンド:enscript

ブログ上でコードを紹介する際、単にコードをコピペしただけだと"<", ">", "&"などの文字が適切に表示されなかったり、タブの位置がずれたり、キーワードがわかりにくかったり、といった問題に遭遇します。
いろいろとツールが出ているようなのですが、linux上であればenscriptというコマンドで容易にhtml化ができることが分かったためその方法を紹介します。


%  enscript --highlight=cpp --color -C -o output.html -w html input.cpp


上記のコマンドでinput.cppの内容がoutput.htmlに出力されます。キーワードをハイライトするオプションである"--color"を指定する際には"--hilight"が必要なので注意が必要です。また、行番号を出力する"-C"はhtmlへの出力時には効かないようです(残念…)。
入力としてサポートしている言語は多岐にわたっています。以下、そのリストになります。
  • ada
  • asm
  • awk
  • bash
  • c
  • changelog
  • cpp
  • csh
  • delphi
  • diff
  • diffs
  • diffu
  • elisp
  • f90
  • fortran
  • fortran_pp
  • haskell
  • html
  • idl
  • inf
  • java
  • javascript
  • ksh
  • m4
  • mail
  • makefile
  • matlab
  • nroff
  • objc
  • outline
  • pascal
  • perl
  • postscript
  • pyrex
  • python
  • rfc
  • ruby
  • scheme
  • sh
  • skill
  • sql
  • states
  • synopsys
  • tcl
  • tcsh
  • tex
  • vba
  • verilog
  • vhdl
  • vrml
  • wmlscript
  • zsh
"-w"で指定する出力フォーマットは以下の通りです。
  • PostScript
    • generate PostScript (default)
  • html
    • generate HTML
  • overstrike
    • generate overstrikes (line printers, less)
  • rtf
    • generate RTF (Rich Text Format)
  • ansi 
    • generate ANSI terminal control codes

(独り言…)haskellもサポート言語に加えてほしいなぁ。失礼しました。ちゃんとhaskellもサポートされていました。

2014年3月11日火曜日

[cygwin][linux] tcshのデフォルト補完設定のイマイチな部分を修正しよう

cygwinや最近のlinuxディストリビューション上でtcshを起動すると、デフォルトでたくさんの補完設定がされていて便利なのですが、局所的に自分の使い方とマッチしない設定があるのでそれを修正します。
cygwinでは/etc/profile.d/complete.tcshに、ubuntuでは/etc/complete.tcshにあるデフォルト設定ファイルを編集することになります。

イケてない設定1:cpやmvの第二引数の補完対象がディレクトリに限定されている

一番イケてないのがcp/mvのデスティネーション(第二引数)がディレクトリに限定されている点。上書き先に直接ファイルを指定したい、または複数ファイルをまとめてコピーしたい、といったケースで補完が効きません・・・。

    complete mv  c/--/"(backup force interactive update verbose suffix \
   version-control help version)"/ \
   c/-/"(b f i S u V v -)"/ \
   n/{-S,--suffix}/x:''/ \
   n/{-V,--version-control}/"(t numbered nil existing \
   never simple)"/ n/-/f/ N/-/d/ p/1/f/ p/2/d/ n/*/f/

    complete cp  c/--/"(archive backup no-dereference force \
       interactive link preserve parents sparse recursive \
   symbolic-link suffix update verbose version-control \
   one-file-system help version)"/ \
   c/-/"(a b d f i l P p R r S s u V v x -)"/ \
   n/-*r/d/ n/{-S,--suffix}/x:''/ \
   n/{-V,--version-control}/"(t numbered nil existing \
   never simple)"/ n/-/f/ N/-/d/ p/1/f/ p/2/d/ n/*/f/

取り消し線で潰してある"p/2/d"を削除すれば所望の動作になります。ちなみに"p"は引数位置を指定するパターンコマンドで"2"が第二引数、"d"が(ファイルを除く)ディレクトリを意味しています。


イケてない設定2:lnの第二・三引数で補完が効かない

lnコマンド実行時"-s"オプションを指定の上、任意のディレクトリ・ファイルを第一引数に指定しますが、これが第二引数と解釈され、以下のような結果になります。
% ln -s [CTRL-D]
<link_name>
取り消し線の"p/2/x:'<link_name>'"を"p/2/f/'"に置き換えれば第二・三引数で補完が効くようになります。
% ln -s [CTRL-D]
    complete ln  c/--/"(backup directory force no-dereference \
       interactive symbolic suffix verbose version-control \
   help version)"/ \
   c/-/"(b d F f i n S s V v -)"/ \
   n/{-S,--suffix}/x:''/ \
   n/{-V,--version-control}/"(t numbered nil existing \
   never simple)"/ n/-/f/ N/-/x:'<link_name>'/ \
   p/1/f/ p/2/x:'<link_name>'/ p/2/f/ 



イケてない設定3:gitコマンドが補完できない

svnは対応されており、以下のようなコマンドが補完されるのですが、gitは登録されておらずコマンドを補完してくれません。

% svn [CTRL-D]
add      cleanup  export   list     merge    propedit resolved unlock
blame    commit   help     lock     mkdir    propget  revert   update
cat      copy     import   log      move     proplist status   
checkout delete   info     ls       propdel  propset  switch   


svnの設定をコピって以下の補完を追加。"@"は"/"と同じ意味です。

    complete git  'n@help@(add bisect branch checkoutclone \
            commit diff fetch grep init log merge mv \
   pull push rebase reset rm show status tag)@' \
   'p@1@(add bisect branch checkoutclone \
            commit diff fetch grep init log merge mv \
   pull push rebase reset rm show status tag)@'
 

イケてない設定4:Haskell関連コマンドの補完が未登録

ghc、ghci、cabalの補完設定も追加して幸せになりましょう。

    complete ghc  c/-v/"(0 1 2 3 4 5)"/ \
            c/-i/d/ \
            c/--/"(interactive make mk-dll help show-iface \
         supported-extensions supported-languages \
         info version numeric-version print-libdir)"/ \
   c/-W/"(all error warn)"/ \
   c/-{fwarn-,fno-warn-}/"(unrecognised-pragmas \
          warnings-deprecations deprecated-flags \
          unsupported-calling-conventions \
          dodgy-foreign-imports dodgy-exports \
          dodgy-imports lazy-unlifted-bindings \
          duplicate-exports hi-shadowing \
          identities implicit-prelude \
          incomplete-patterns incomplete-uni-patterns \
          missing-fields missing-import-lists \
          missing-methods missing-signatures \
          missing-local-sigs name-shadowing \
          orphans auto-orphans overlapping-patterns \
          tabs type-defaults monomorphism-restriction \
          unused-binds unused-imports unused-matches \
          unused-do-bind wrong-do-bind )"/ \
   c/-f/"(defer-type-errors helpful-errors \
          force-recomp warn- no-warn-)"/ \
    c/-/"(E C S c fglasgow-exts O prof H14m M e V w\
         ferror-spans ghc-timing fforce-recomp ?)"/ \
   n/-{odir,hidir,stubdir,dumpdir,outputdir,tmpdir}/d/ \
   'n/--make/f:*.hs/' \
    'n/*/f:*.hs/'

    complete ghci c/-i/d/ \
            c/-/"(fglasgow-exts H32m cpp i)"/

    complete cabal c/--{config-file,sndbox-config-file}=/f/ \
   c/--/"(help version numeric-version config-file= \
                  sandbox-config-file=)"/ \
   p/1/"(install update list info fetch get check \
        sdist upload report run init configure build \
        repl sandbox copy haddock clean hscolour \
        register test bench help)"/


参考にしたサイト:

2012年7月23日月曜日

[ssh][linux][cygwin] ssh-agentの重複起動を防ぐには

ssh, sftp, scp でパスワードの入力を省略するにはssh-agentを使います。

このssh-agentは便利なのですが、何も考えずに利用しているとターミナル毎に個別にssh-agentを起動する羽目になり、気がつくとssh-agentが複数動いている、という状況に陥ってしまいます。

これはssh,sftp,scpなどのクライアントツールが、ssh-agentを利用するために2つの環境変数(SSH_AUTH_SOCKとSSH_AGENT_PID)を参照しているためです。逆に言うと、これらの環境変数をターミナル間で共有することができれば、ssh-agentをその都度起動しなくてもよくなり、共有することができます。


このブログで見つけたシェルスクリプトを.bashrc(もしくは.tcshrc)に追加することで、ターミナル起動時(=シェル起動時)に以下のお世話をしてくれます。

  • ssh-agentが起動済みかどうかをチェック
  • 未起動であれば起動
    • 2つの環境変数を$HOME/.ssh/environmentに記録
    • その後、ssh-addコマンドも実行してパスフレーズ入力を促す
  • 起動済であれば、2つの環境変数の設定を引き継ぐ
.bashrcへの追加スクリプト(前述ブログのまま)

SSH_ENV=”${HOME}/.ssh/environment”
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS=”-s”

function start_agent {
    echo -n “Initialising new SSH agent…”
    ${SSHAGENT} | sed ‘s/^echo/#echo/’ > “${SSH_ENV}”
    echo succeeded
    chmod 600 “${SSH_ENV}”
    . “${SSH_ENV}” > /dev/null
    ssh-add
}

# Source SSH settings, if applicable

if [ -f “${SSH_ENV}” ]; then
    . “${SSH_ENV}” > /dev/null
    #ps ${SSH_AGENT_PID} doesn’t work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
    if [[ -z `ssh-add -l | grep “${HOME}/.ssh/id_”` ]]; then
        ssh-add
    fi
else
    start_agent;
fi


.tcshrcへの追加スクリプト(前述ブログのbashスクリプトをtcshスクリプトにポート)

setenv SSH_ENV "$HOME/.ssh/environment"
setenv SSHAGENT `which ssh-agent`
setenv SSHAGENTARGS "-c"

if ( -f "${SSH_ENV}" ) then
    source "${SSH_ENV}"
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null
    if ( $status == 1 ) then
        #echo "no agent found."
        goto call_start_agent
    endif
    ssh-add -l | grep "${HOME}/.ssh/id_" > /dev/null
    if ( $status == 1 ) then
        #echo "no key added."
        goto call_ssh_add
    endif
else
    goto call_start_agent
endif
goto exit_ssh

# Source SSH settings, if applicable
call_start_agent:
    echo -n "Initialising new SSH agent... "
    ${SSHAGENT} | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 700 "${SSH_ENV}"
    source "${SSH_ENV}"

call_ssh_add:
    ssh-add

exit_ssh:

2011年3月26日土曜日

less の文字化け&スクリーンのクリア抑制

cygwin上でlessを利用すると日本語が文字化けします。
ですが、lessに"-r"オプションを渡すと、正しく表示できる(こともある)ようです。
自分の環境ではこのオプションにより文字化けが無くなりました(もとネタ )。

日本語文字コードに起因する文字化けでなく、"ESC [...m"といった表示色指定に伴うケースでは"-R"オプションを指定することで、文字化けがなくなり適切な色付きテキストが出力されるようになります。


lessに関する全然別の話をあと2つ。

lessを抜けるとよるスクリーンがクリアされるのがデフォルトの動作なのですが、
自分にとっては好みの動作ではありません。
lessで表示していた内容を参照しつつ、シェルに戻って作業をしたい場合が
多々あるので、スクリーンはそのままにしておいて欲しいです。
こんなときには"-X"オプションを指定すればよいようです。

これらのオプションを常に利用するには環境変数LESSに"-r -X"を
指定しておけば、less起動毎に指定する必要はなくなります。



2010年9月28日火曜日

[linux][command] ファイルのフルパスとサイズの一覧を表示したい

[linux][command] ファイルのフルパスとサイズの一覧を表示したい

備忘録。

ディレクトリパスを含むファイルパスとサイズの一覧を取得したい場合、
ls -Rl だと、ディレクトリパスが除かれてしまい、嬉しくありません。

find の -printf オプションを利用すると所望の情報が得られます。
% find . -type f -printf "%p\t%s\n"

上記の printf format には以下のディレクティブを指定しています。
これら以外にもpermissionやブロックサイズなど、色々表示できるようです。
%p: ディレクトリパスを含むファイル名
%s: ファイルサイズ
\t: タブ
\n: 改行


2010年8月26日木曜日

[fedora] ネットワーク設定ファイルはどこ?

[fedora] ネットワーク設定ファイルはどこ?

fedora (たぶん linux 一般)のネットワーク設定ファイルは
/etc/sysconfig/networking
以下にあります。
/etc 以下を grep して「ない???」と思ったのは
単にファイルが多すぎて sysconfig 以下のファイルに
辿り着いていないだけでした・・・。


2010年7月5日月曜日

[linux] 強制 fsck

linux を利用していて fsck をかけたい、
と思って、普通にコマンドを実行しようとすると

WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damege.

という怖いメッセージが出てきます。
安全に実行するには?
起動シーケンスの中で fsck をかけるとか?
という疑問が出てくる訳ですが、
shutdown の manual に手順が記載されていました。
以下のコマンドで起動シーケンスの中で強制的に fsck を
実行することが出来ます。

# shutdown -Fr now

ググってみたところ、以下のような手順もあるようです。
http://d.hatena.ne.jp/GOT4416/20090210/p1


2010年3月31日水曜日

[linux][xterm] コマンドプロンプトからウィンドウのタイトルを変える方法

以前、-title で xterm のタイトルが設定できない、という記事をポストしました。

コメントアウトすべき、とした
> echo -n "\033]0;${USER}@${HOSTNAME}:${PWD}"; echo -n "\007"
を xterm の起動済みのウィンドウの中で実行すると、
タイトルを動的に変更できます。

例えばウィンドウのタイトルを"NEW-TITLE"に変更したい!
と思ったときには以下のコマンドを実行すればOKです。
> echo -n "\033]0;NEW-TITLE"; echo -n "\007"


という備忘メモでした・・。

2010年3月3日水曜日

ターミナル上で改行を含む文字をコマンド引数に渡す方法

ターミナル上で改行を含む文字をコマンド引数に渡す方法
改行を含む文字列、例えば
aaa
bbb
ccc
を echo コマンド一発で表示したい場合。
> echo "aaa\
ここまで入力して[RETURN]キー押下すると、
> echo "aaa\
?
という状態になります。末尾の'\' が重要。 同じことを繰り返せば、所望の振る舞いになります。
> echo "aaa\
? bbb\
? ccc\
?"


2010年1月18日月曜日

パッケージアップデータのコマンド名は?

linux の gnome にはパッケージアップデータがあって、
このアプリを使って root 権限で任意のパッケージの更新が可能になっています。
gnome が起動している環境では、メニューバーの中から起動できますが、
コマンドから起動したい場合には /usr/bin/pup を直接実行することもできます。

また、その他のシステム管理系のツールは以下のコマンドにマッピングされています。
  • ユーザー管理 /usr/bin/system-config-users
  • Sambaサーバー設定 /usr/bin/system-config-samba

※実体はどれも consolehelper のようですね。


2009年12月1日火曜日

インテル グラフィックスメディアアクセラレーター 4500 搭載 PC にインストールした CentOS 5.3 がブートしない?

新たに購入した DELL OptiPlex 960 は
インテル グラフィックスメディアアクセラレーター 4500 を搭載しています。
このPCにCentOS 5.3をインストールしたのですが、
ブート時にXを起動するタイミングでハングアップが発生し、
ブートしたりしなかったり非常に不安定な状態でした。

2ch上で見つけた情報に基づいてドライバを"Intel Series 4" から
"vesa" に変えたところ、安定してブートするようになりました。

"Intel Series 4"自体、experimentalとあったので
まだ安定していないのでしょうね。


2009年11月5日木曜日

あるディレクトリ以下のファイルを(特定ファイルを除いて)再帰的にコピーするには

あるディレクトリ(./src)以下の全てのファイルを ./dst にコピーする。
% tar cf - ./src | (cd ./dst; tar vxf -)
さらにあるディレクトリ(orファイル)だけを除いてコピーする
% tar cf - ./src --exclude=ignored_file | (cd ./dst; tar vxf -)

2009年2月3日火曜日

emacs のバッファの文字コード変更



自分への備忘録。

emacs で読み込み済みバッファの文字コードを変更するには、以下のコマンドを実行すればよい。
M-x revert-buffer-with-coding-system 指定の文字コードでファイルを再読み込み(C-x RET r)


<<似たコマンドリスト>>
M-x set-buffer-file-coding-system 書き込み時の文字コードを指定(C-x RET f)
M-x set-buffer-process-coding-system 編集中バッファのプロセスの文字コードを指定(C-x RET p)
M-x set-keyboard-coding-system キーボード入力の文字コードを指定(C-x RET k)
M-x set-terminal-coding-system ターミナルの文字コードを指定(C-x RET t)

などなど。








2009年1月15日木曜日

etagsコマンドがない?



fedora 8 環境で etags コマンドを実行すると、「見つかりません」と怒られてしまいました。
なんで etags が入っていないのかと思ってemacs-common パッケージのファイルリストを見ると・・・

$ rpm -ql emacs-common
...
/usr/bin/etags.emacs
...

というファイルがあります。

なんで etags でなく etags.emacs なんでしょうか?
ちなみに man コマンドも

$ man etags

は NG で、

$ man etags.emacs


とする必要がありました。
最初は気がつかず、"ctags -e" コマンドで代用していたのですが・・・
不思議です。








2008年12月3日水曜日

xdm(gdm)が自動起動しない?



fedora 6, fedora 8 で経験したのですが、インストール後に PC を再起動するとxdm(gdm)が起動しないで、CUI のログイン画面が出る状態になりました。

# ネットワークインストールしたのが原因???

よくよく調べてみると runlevel が 3(Full multiuser mode)になっているのが原因でした。
runlevel を 5(X11)に変えると GUI のログイン画面が表示されるようになります。

id:3:initdefault:
/etc/inittab の上記の行を以下のように修正すると default runlevel を 5 へ変更できます。

id:5:initdefault:
下記に inittab の説明がありました。参考まで。
http://www.atmarkit.co.jp/flinux/rensai/theory10/theory10a.html