Unix全般 -> awk

アクセス権限を8進数に変換する。

アクセス権限


  ls -l コマンドで表示される第一フィールドの値で確認。

 -rwxr-xr--
 2-3 桁目 所有ユーザのアクセス権限 (rwx)
 4-6 桁目 所有グループのアクセス権限 (r-x)
 7-10桁目 その他ユーザのアクセス権限 (r--)

 -rwsr-sr-t
 SUID:       3桁目(s)  * 実行時にユーザ権限で実行
 SGID:       6桁目(s)  * 実行時にグループ権限で実行
 Sticky bit:10桁目(t)  * 全ユーザー書込権(所有者のみ削除権)

 アクセス権限(rwx)を8進数で表示すると
 r(読取権限):4 , w(書込権限):2 , x(実行権限):1 となる。
 組み合わせると以下のようになる。
 r-x : 5 (4+1)
 rwx : 7 (4+2+1)

 rwxrwxrwx : 777 / 0777
 rwxr-xr-- : 754 / 0754

 * 8進数1桁目部分を記述
 -rwsrwxrwx: 4755 (SUID)
 -rwxrwsrwx: 2755 (SGID)
 -rwxrwxrwt: 1755 ( Sticy bit)

変換 awk

アクセス権限を8進数に変換する awk

mod_cnv.sh "-rwsr-xr--"
----------------------------------------------------------------------
1桁目(SUID/GUID/S-Bit)の計算
MOD=$1

echo $MOD | awk '{x=0}{for(i=4;i<=10;i+=3){{n=substr($1,i,1)}
                                      {if(i==4&&n=="s"){x+=4}}
                                      {if(i==7&&n=="s"){x+=2}}
                                      {if(i==10&&n=="t"){x+=1}}
                      }{printf x}}'
   
  まず変数(8進数の値) x を初期化する。
  for文で 4,7,10桁目を処理対象とし、
  substrで各桁(4,7,10)の1文字を取り出し、変数 n に代入する。
  変数 n が (4桁目)=s であれば 4を
            (7桁目)=s であれば 2を
           (10桁目)=t であれば 1を x に加算する。
  for文終了後に x の値を表示する。

2-10桁目の計算
echo $MOD | awk '{for(i=2;i<=10;i+=3){
                      {x=0;n=substr($1,i,3)}
                      {if(n~/r/){x+=4}}
                      {if(n~/w/){x+=2}}
                      {if(n~/[xst]/){x+=1}}
                 {printf x}}}'
   
  for文で 2,5,7桁目を処理対象とし、
  変数(8進数の値) x を初期化する。
  substrで各桁(2,5,7)の開始位置から3文字を取り出し、変数 n に代入する。
  変数 n に r(読取)が含まれている場合 4 を
            w(書込)が含まれている場合 2 を
          xst(実行)が含まれている場合 1 を x に加算する。
  for文内で x の値を表示する。これを3回繰り返す
  
----------------------------------------------------------------------
出力結果
4750

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google