Copilot.vim を試してみた。

Copilot.vim は、コードの自動保管機能である 「Github Copilot」 を vim で使うためのプラグインです。
試してみると、こんな感じになります。
候補が出てくるので、Tab を押すと実際に入力されます。
コミットメッセージも作ってくれたりするっぽいです。(未確認)

gif

Copilot.vim のインストール

筆者の環境は、Macbook Pro (m2) で、デフォルトシェルは fish となっています。
リポジトリhttps://github.com/github/copilot.vim.

サブスクリプション

Github Copilot」を使用するためには、事前にサブスクリプションが必要です。
https://docs.github.com/ja/billing/managing-billing-for-github-copilot/managing-your-github-copilot-subscription-for-your-personal-account

上のリンクの手順に従って操作すると、開始ボタンがあります。
スクリーンショット 2023-04-16 4 27 34

最初の30日は無料、その後は 月 10ドルとのこと。(頼む、円高になってくれ・・)
スクリーンショット 2023-04-16 3 32 36

公開コードから自動保管するか、選べるようです。
スクリーンショット 2023-04-16 3 36 59

サブスクライブできました。
スクリーンショット 2023-04-16 3 37 11

Copilot.vim を設定する手順の概要(参考)

設定手順を Readme より 引用します。:

  1. Install Neovim or the latest patch of Vim (9.0.0185 or newer).
  2. Install Node.js.
  3. Install github/copilot.vim using vim-plug, packer.nvim, or any other plugin manager. Or to install manually, run one of the following commands:

    • Vim, Linux/macOS:

      git clone https://github.com/github/copilot.vim.git \
        ~/.vim/pack/github/start/copilot.vim
      
    • Neovim, Linux/macOS:

      git clone https://github.com/github/copilot.vim.git \
        ~/.config/nvim/pack/github/start/copilot.vim
      
    • Vim, Windows (PowerShell command):

      git clone https://github.com/github/copilot.vim.git `
        $HOME/vimfiles/pack/github/start/copilot.vim
      
    • Neovim, Windows (PowerShell command):

      git clone https://github.com/github/copilot.vim.git `
        $HOME/AppData/Local/nvim/pack/github/start/copilot.vim
      

最新の vim をインストール

Copilot.vim を使用するには、vim が 9.0.0185以降である必要があります。
まずは 最新の vim をインストールします。 Mac の場合は brew です。

brew install vim

参考: https://github.com/vim/vim/blob/master/READMEdir/README_mac.txt

以下の場所に vim が入りました。

/opt/homebrew/Cellar/vim/9.0.1450/bin/vim

スクリーンショット 2023-04-16 1 58 23

パスを通します。
fish の設定ファイル「~/.config/fish/config.fish」 に 「fish_add_path /opt/homebrew/Cellar/vim/9.0.1450/bin」 を追加します。 zsh の場合は、.zprofile になります。

if status is-interactive
    # Commands to run in interactive sessions can go here
end
fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/Cellar/vim/9.0.1450/bin

vim のバージョンが最新になりました。
スクリーンショット 2023-04-16 2 21 44

スクリーンショット 2023-04-16 2 22 10

Node.js のインストール

Copilot.vim を使用するには、Node.js が必要です。
参考:https://nodejs.org/en/download
.pkg 形式のインストーラを使い、インストールできました。

スクリーンショット 2023-04-16 2 26 59

インストール先の「/usr/local/bin」 にパスが通っているか確認します。
通っていました。
スクリーンショット 2023-04-16 2 31 39

node, npm のパスとバージョンを確認しておきます。
スクリーンショット 2023-04-16 2 51 36

image

Copilot.vim のインストール

git clone https://github.com/github/copilot.vim.git \
  ~/.vim/pack/github/start/copilot.vim

vim で以下のコマンドを実行します。

:Copilot setup

ワンタイムコードが出ますので控えて Enter を押します。
スクリーンショット 2023-04-16 2 39 54

WEBブラウザが開き、 Github との連携を認証する画面が出ます。Authorize〜を押して承認します。
スクリーンショット 2023-04-16 2 38 21

連携できました というメッセージが出ます。
スクリーンショット 2023-04-16 2 39 15

以下のコマンドで状態を確認します。

:Copilot status

利用可能になったようです。

スクリーンショット 2023-04-16 4 02 37

結果は冒頭に載せた GIF になります。

VPC内Lambdaの使うENIの数について

docs.aws.amazon.com

==引用======
Lambda 関数で VPC にアクセスする場合は、
Lambda 関数でのスケーリング要件をサポートできる充分な ENI キャパシティーVPC にあることを確認します。
次の式を使用すると、ENI 要件を概算できます。

Projected peak concurrent executions * (Memory in GB / 3GB)  

Powershellでセマフォもどき

まとまった処理単位でsleepを入れる部品ですw start-jobもありますが、色々あり使えないのでこうなったww

# カウント変数初期化
$script:counting = 0

# 100ブロック処理するごとに2秒待つセマフォもどき関数
function do-one-hundred-block ([scriptblock]${scriptbl}) { 
    $script:counting++
        switch ($script:counting) { 
            {$_ % 100 -ne 0} {& $scriptbl} 
            default          {& $scriptbl;sleep 2}  
        }
}

# 300回echoする処理をセマフォもどきに渡し、100回ごとに2秒待ってみる
for ($i=1;$i -le 300;$i++) {
    do-one-hundred-block {echo $i}
}

恋人のいない時間を求める

恋人のいない時間を求める

  • 65000時間突破記念
  • 恋人のいない時間を求めるための方法をまとめました
  • 恋人と別れた日に東日本大震災....
  • 本来求めるべきは恋人w


Powershell

  • Total Hours に出ます
(get-date) - (get-date "2011/03/11")  

f:id:yamazoon:20180811090705p:plain


Ruby

  • 秒で出して、60で2回割ります
p (Time.now - Time.new(2011,3,11)) /60 /60

f:id:yamazoon:20180811090826p:plain


Shell Script (GNU)

  • それぞれを秒で出してexprで引き算して、60で2回割ります
expr \( `date +%s` - `date --date "20110311 00:00:00" +%s` \) / 60 / 60

f:id:yamazoon:20180811090948p:plain ※これだけ8時間ずれているのは、ロケーションが異なるため


Shell Script (BSD)

  • GNUとオプションが違います
expr \( `date +%s` - `date -j -f "%Y%m%d %T" "20110311 00:00:00" +%s` \) / 60 / 60 

f:id:yamazoon:20180811090717p:plain


触るAnsible

Ansible(_spec) 習得に成功する OpenStackのRoleも

Ansibleはサーバーの構成管理をする

  • 導入手順
    1. インストール
    2. AnsibleのHostsファイルに、対象サーバーの ホスト名 (またはIPアドレス) を書く
    3. 作る構成を Playbook(YAML形式) に書き実行


  • 前提
    • ssh接続可能
    • Python2インストール済 (普通されてる)


Screen Shot 2018-05-11 at 23.49.37.png



構成を作成し保持する

  • Playbookの実行結果は、
    • 失敗して「fatal
    • 変更した「changed
    • そのままで「ok


  • 最初は「changed
  • その後は何回流しても「ok」にする

Screen Shot 2018-05-12 at 0.30.37.png


  • 目標

Screen Shot 2018-05-12 at 0.35.28.png



Commandモジュールは病

  • 指定したコマンドを実行する子
  • changed」または「fatalのみ返却する
  • いつも「ok」と返すようにするための回避策もある (それこそ無意味)
- name : "ruby check"
  command: "ruby --version"
  failed_when:  False  # 失敗(fatal)しても「ok」返す
  changed_when: False  # 変更(changed)しても「ok」返す


チュートリアル


私もやってみる

インストール

  • Vagrantfile
  Vagrant.configure(2) do |config|
    config.vm.define "controller" do |node|
          node.vm.box = "centos7_x64"
          node.vm.hostname = "controller"
          node.vm.network :private_network, ip: "192.168.101.100"
          node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
    end
    config.vm.define "target" do |node|
          node.vm.box = "centos7_x64"
          node.vm.hostname = "target"
          node.vm.network :private_network, ip: "192.168.101.200"
          node.vm.network :forwarded_port, id: "ssh", guest: 80, host: 8000
          node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
    end
  end


# 前提
vagrant up

vagrant status # running

ssh -p 2210 root@127.0.0.1 # passwordは "vagrant"  vagrant sshも可

Python --version # Python 2.7.5


# インストール
yum install ansible

ansible --version # ansible 2.4.2.0

    # sudo su -  # root化(vagrant ssh)

umask  # 0022

mkdir -p /work/ansible/test1 # Ansibleフォルダ(プロジェクトtest1用)

cd /work/ansible/test1

echo 192.168.101.100 >hosts # hosts(Inventoryファイル)作成

echo 192.168.101.200 >hosts


# ssh設定
ssh-keygen -t rsa # 秘密鍵作成

ssh-copy-id root@192.168.101.100 # 自分(controller)に秘密鍵送信

ssh-copy-id root@192.168.101.200 # targetに


# 疎通
ansible -i hosts 192.168.101.100 -m ping # 自分(controller)にAnsibleからping送信

ansible -i hosts 192.168.101.200 -m ping # targetに

ansible -i hosts 192.168.101.* -m ping   # 両方に
    # ↑秘密鍵にパスワード指定している場合、1台ずつ入力待ちになって止まる


ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # yumでtelnetを入れる
    # ----> SUCCESSとなり、"changed": trueになる
    #       インストールされた

ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # 再度
    # ----> SUCCESSとなり、"changed": falseになる
    #       既にインストール済みの場合は何もしない


初Playbook

  • hosts
  [test-servers]
  192.168.101.100
  192.168.101.200


  • Playbook : simple-playbook.yml
  ---
  - hosts: test-servers
    become: yes
    tasks:
      - name: be sure httpd is installed
        yum: name=httpd state=installed

      - name: be sure httpd is running and enabled
        service: name=httpd state=started enabled=yes

become? Ansible1.9からはsudo/suの代わりにbecomeを使う



  • 実行
ansible-playbook -i hosts simple-playbook.yml --syntax-check # syntaxチェックのみ

ansible-playbook -i hosts simple-playbook.yml --list-tasks # taskリスト参照のみ

ansible-playbook -i hosts simple-playbook.yml --check # dry-run

ansible-playbook -i hosts simple-playbook.yml # 実行(changed)

ansible-playbook -i hosts simple-playbook.yml # 実行(okに)

service httpd status  # runnning


  • ホスト情報取る
ansible -m setup -i hosts 192.168.101.100 # 膨大なJSON


  • Playbook修正1 : simple-playbook.yml 追記 ( # ADD )
  ---
  - hosts: test-servers
    become: yes
    tasks:
      - name: be sure httpd is installed
        yum: name=httpd state=installed

      - name: be sure httpd is running and enabled
        service: name=httpd state=started enabled=yes

      - name: gathering data task example  ## ADD
        command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る


  • 実行
ansible-playbook -i hosts simple-playbook.yml # IPv4を取得する (changed)



  • Playbook修正2 : simple-playbook.yml 追記 ( # ADD2 )
  ---
  - hosts: test-servers
    become: yes
    tasks:
      - name: be sure httpd is installed
        yum: name=httpd state=installed

      - name: be sure httpd is running and enabled
        service: name=httpd state=started enabled=yes

      - name: gathering data task example  ## ADD
        command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る
        failed_when:  False # ADD2      fatal(失敗)の時もokを返す
        changed_when: False # ADD2    changed(変更)の時も


  • 実行
ansible-playbook -i hosts simple-playbook.yml  # IPv4を取得する (ok)



名前解決

  1. hosts に名前書く
  2. ssh_config に名前解決の設定する
  3. ansible.cfg で ssh_config を読む

  4. hosts

  [test-servers]
  # 192.168.101.100  --> controller
  controller
  192.168.101.200
   Host controller
    User root
    HostName 192.168.101.100
    IdentityFile ~/.ssh/id_rsa
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
  • ansible.cfg
  [ssh_connection]
  ssh_args = -F ssh_config



同じフォルダに置く

/work/ansible
|--test1
   |--ansible.cfg
   |--simple-playbook.yml
   |--ssh_config
   |--hosts



設定ファイル

  • ansible.cfg
  • 無いから作る
  • 下記の順に読む
    1. カレントの
    2. 環境変数:ANSIBLE_CONFIG
    3. ホームディレクト
    4. /etc/ansible/ansible.cfg



パスワード秘匿する

  • 大事
  • Ansible-Vault



便利テンプレ

  • Role使う
  • Ansible-GALAXYにある



フォルダ構成

  • 公式にあるベストプラクティスにする





evtx形式のイベントログを今日を起点に過去100日分取得する

evtx形式で取得する方法の記事が少ないので、載せます

※ver2以上で動作確認済み

# イベントログ出力関数を定義
# 引数1:ログ種別(System,Application)    引数2:出力先フォルダ(C:¥evtxlog など)
function get-evtxlog ($logname,$outpath) {




# 開始日付(100日前)と終了日付(今日)を取得し、
# イベントログの選択に使用するクエリ(XPATH形式)に格納する

        # 開始日付指定(100日前を指定する場合、100と記述する)
        $fromDay = 100

        # 開始日付
        $startTime = (Get-Date).AddDays(-$fromDay)

        # 終了日付(今日)
        $endTime   = (Get-Date)

        # イベントログの選択に使用するクエリ(XPATH形式)に渡すため、システム時刻(UTC)に変換する
        $startUtcTime = [System.TimeZoneInfo]::ConvertTimeToUtc($startTime).ToString("yyyy-MM-ddTHH:mm:ssZ")
        $endUtcTime   = [System.TimeZoneInfo]::ConvertTimeToUtc($endTime).ToString("yyyy-MM-ddTHH:mm:ssZ")

        # イベントログの選択に使用するクエリ(XPATH形式)
        $filter = @"
Event/System/TimeCreated[@SystemTime>='$startUtcTime'] and
Event/System/TimeCreated[@SystemTime<'$endUtcTime']
"@




# 出力ファイル名を作成しておく

        # yyyy-MMdd-HHmm-ss形式の今日日付(出力ファイルの名前用)
        $YYYYMMDD = $endTime.ToString("yyyy-MMdd-HHmm-ss")

        # 出力ファイル(ログ種別_yyyy-MMdd-HHmm-ss)
        $outfile = "${outpath}\${logname}_${YYYYMMDD}_.evtx"




# .Netクラスのメソッドを使って出力

        # System.Diagnostics.Eventing.Reader.EventLogSession クラスをオブジェクト化
        $evsession = New-Object -TypeName System.Diagnostics.Eventing.Reader.EventLogSession

        # ExportLog メソッドを実行 
        # 引数は、ログ種別、"LogName"(FilePathかLogName)、クエリ、出力ファイル
        $evsession.ExportLog($logname,"LogName",$filter,$outfile)




}

# イベントログ出力関数の定義終了







#### 関数実行

try {

# ログ種別エラー用テストコード(コメントアウト)
# get-evtxlog "Syste" "C:\evtlog"


# 出力先フォルダエラー用テストコード(コメントアウト)
# get-evtxlog "System" "C:\qevtlog"


# Systemイベントログを取得
get-evtxlog "System" "C:\evtlog"

# Applicationイベントログを取得
get-evtxlog "Application" "C:\evtlog"

} catch {

# 1で終了
exit 1

}

結果

Screen Shot 2018-05-07 at 22.16.20.png

参考

https://msdn.microsoft.com/ja-jp/library/system.diagnostics.eventing.reader.eventlogsession(v=vs.110).aspx

Powershellでファイルサイズの大きい順ランキングを作成する。

Powershellでファイルサイズの大きい順ランキングを作成する。

やること

  1. 指定したフォルダ($parent_folder)を再帰検索(一番下の階層まで検索)し取り出す。
  2. サイズ(Length)と、ファイル名フルパス(fullname)を表示する
  3. サイズをキーにして、降順でソートする
  4. 上位10ファイルを取り出す

--> 改善版を下に追記

$parent_folder = "c:\"

Get-ChildItem -Path $parent_folder -Recurse |
    Select-Object Length,fullname |
        Sort-Object -Descending Length |
            Select-Object -first 10


#### 結果
   Length FullName
   ------ --------
487063552 C:\Windows\SoftwareDistribution\DataStore\DataStore.edb
244212156 C:\Windows\WinSxS\ManifestCache\efeb4d6159892b07_blobs.bin
140394280 C:\Windows\System32\MRT.exe
 86573056 C:\Windows\System32\catroot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\catdb
 82313216 C:\Windows\System32\config\SOFTWARE
 75759616 C:\Windows\System32\config\COMPONENTS
 75071248 C:\Windows\WinSxS\amd64_windows-defender-am-sigs_31bf3856ad364e35_10.0.14393.0_none_e9f929873253e3cd\MpAvBase.vdm
 67764010 C:\Windows\servicing\Sessions\Sessions.back.xml
 67764010 C:\Windows\servicing\Sessions\Sessions.xml
 54989002 C:\Windows\IME\IMEJP\DICTS\SDDS0411.DIC

改善版(サイズを割って四捨五入しMB表記、最終更新日付を追加) --> さらに改善し、進捗プログレスバーを付けたものを下に追記

  1. 指定したフォルダ($parent_folder)を再帰検索(一番下の階層まで検索)し取り出す。
  2. サイズ(Length)と、ファイル名フルパス(fullname)、最終更新(LastWrite)を表示する
  3. 新しいオブジェクトを作成し、MB表記のファイルサイズ(MBSize)・ファイル名(Filename)・最終更新(LastWrite)の列に再編成
  4. MB表記のファイルサイズ(MBSize)をキーにして、降順でソートする
  5. 上位10ファイルを取り出す

&長くなったので関数にします

# du関数
function du-object ($parent_folder) {

Get-ChildItem -Path $parent_folder -Recurse |
    Select-Object Length,fullname,LastWriteTime |
        %{New-Object psobject -Property @{SizeMB=[math]::round($_.Length/1024/1024);Filename=$_.fullname;LastWrite=$_.LastWriteTime}} |
            Sort-Object -Descending SizeMB |
                Select-Object -first 10 SizeMB,Filename,LastWrite

}

# 使ってみる
du-object "C:\"



#### 結果
#### Cドライブ 13.3GB 、157277ファイルの時、実行時間は1分45秒でした。
#### (T2micro、メモリ1GB、CPU1コア、64bit、Windows2016)

SizeMB Filename                                                                                                                    LastWrite
------ --------                                                                                                                    ---------
   464 C:\Windows\SoftwareDistribution\DataStore\DataStore.edb                                                                     2018/04/21 16:49:08
   233 C:\Windows\WinSxS\ManifestCache\efeb4d6159892b07_blobs.bin                                                                  2017/09/27 9:29:13
   134 C:\Windows\System32\MRT.exe                                                                                                 2017/08/09 16:39:53
    83 C:\Windows\System32\catroot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\catdb                                                   2018/02/14 9:05:52
    78 C:\Windows\System32\config\SOFTWARE                                                                                         2018/02/19 20:01:57
    72 C:\Windows\WinSxS\amd64_windows-defender-am-sigs_31bf3856ad364e35_10.0.14393.0_none_e9f929873253e3cd\MpAvBase.vdm           2016/07/16 22:19:22
    72 C:\Windows\System32\config\COMPONENTS                                                                                       2018/04/19 15:20:48
    65 C:\Windows\servicing\Sessions\Sessions.xml                                                                                  2018/02/01 16:19:36
    65 C:\Windows\servicing\Sessions\Sessions.back.xml                                                                             2018/02/01 16:19:36
    52 C:\Windows\WinSxS\amd64_microsoft-windows-fabric-core_31bf3856ad364e35_10.0.14393.0_none_4966e2304fdd7b6a\ServiceFabric.cab 2016/07/16 22:19:49

再改善版(進捗プログレスバーを追加)@2018/04/22

  1. 進捗表示用に、総ファイル数を変数格納する。その間は「進捗表示のために総ファイル数を確認しています....」とプログレスバーを表示する
  2. 指定したフォルダ($parent_folder)を再帰検索(一番下の階層まで検索)し取り出す。
  3. サイズ(Length)と、ファイル名フルパス(fullname)、最終更新(LastWrite)を表示する
  4. 新しいオブジェクトを作成し、MB表記のファイルサイズ(MBSize)・ファイル名(Filename)・最終更新(LastWrite)の列に再編成する。その間に、進捗プログレスバーを表示する。 ※2〜4の処理(ファイル検索と結果オブジェクトの作成)は一連で動き、4の処理の際に1ファイルずつ処理するため、プログレスバーを表示する処理をここに書く。
  5. MB表記のファイルサイズ(MBSize)をキーにして、降順でソートする。
  6. 上位10ファイルを取り出す ※5〜6(ソートと抽出)は負荷の低い処理で時間を取らないため(アルゴリズム的に2〜4が圧倒的に重い。)、進捗プログレスバーは不要となる。

# du関数
function du-object ($parent_folder) {

# 進捗表示用に、総ファイル数を変数格納する処理。
write-progress "進捗表示のために総ファイル数を確認しています....";$totalfilecount=(Get-ChildItem -Path $parent_folder -Recurse |measure).count

# カウント変数初期化
$cnt=0

# 処理
Get-ChildItem -Path $parent_folder -Recurse |
    Select-Object Length,fullname,LastWriteTime |
        %{New-Object psobject -Property @{SizeMB=[math]::round($_.Length/1024/1024);Filename=$_.fullname;LastWrite=$_.LastWriteTime};$cnt++;Write-Progress "現在の処理ファイル数:$cnt/$totalfilecount" -PercentComplete ($cnt/$totalfilecount*100)} |
            Sort-Object -Descending SizeMB |
                Select-Object -first 10 SizeMB,Filename,LastWrite

}

du-object "C:\Program Files (x86)"

結果

f:id:yamazoon:20180423024556p:plain f:id:yamazoon:20180423024624p:plain f:id:yamazoon:20180423024608p:plain f:id:yamazoon:20180423024651p:plain f:id:yamazoon:20180423024704p:plain




おまけ

Microsoftがインターネットで提供している無償ツールを使ってみる★

こちらはファイルではなくフォルダごと。

Sysinternals Suite マーク ルシノビッチ (著) https://technet.microsoft.com/ja-jp/sysinternals/bb842062.aspx


-> Microsoft TechNetの提供している無償ツール群です。psexec.exe が有名かと思います。 この中に、du.exeがあります。 du.exe は、引数に指定したフォルダ配下にある、各サブフォルダの容量をそれぞれKB表示します。 あくまでフォルダであり、ファイル1つ1つの容量は測れません。


-v オプションをつけると、全階層にあるサブフォルダの容量を、表示します。 下の例では、引数に指定したdesktopフォルダの下にある、dutestフォルダが24KBあり、 dutestフォルダ配下にある各サブフォルダの容量についても、それぞれ表示されています。(a:0KB、b:5KB、c:18KB、d:0KB)


-l [n] オプションをつけると、数字 n に指定した階層分にあるサブフォルダの容量を、表示します。 下の例では、引数に指定したdesktopフォルダの1階層下にある、dutestフォルダが24KBであることを表示しています。


-c オプションを使うと、CSV形式の出力になります。



#### C:\Users\Administrator\Downloads\SysinternalsSuite に解凍し、du.exe を実行する例 ###############

# cmd(コマンドプロンプト)での例です。


# 存在確認
C:\Users\Administrator\Downloads\SysinternalsSuite>dir |findstr du.exe
2018/01/20  11:12           169,072 du.exe




# du実行 -v オプション
C:\Users\Administrator\Downloads\SysinternalsSuite>du -nobanner -accepteula -v C:\Users\Administrator\Desktop\
           0  c:\users\administrator\desktop\dutest\a
           5  c:\users\administrator\desktop\dutest\b
          18  c:\users\administrator\desktop\dutest\c
           0  c:\users\administrator\desktop\dutest\d
          24  c:\users\administrator\desktop\dutest

Totals:
Files:        73
Directories:  6
Size:         44,281 bytes
Size on disk: 335,872 bytes




# du実行 -l オプション
C:\Users\Administrator\Downloads\SysinternalsSuite>du -nobanner -accepteula -l 1 C:\Users\Administrator\Desktop\
          24  c:\users\administrator\desktop\dutest
Files:        73
Directories:  6
Size:         44,281 bytes
Size on disk: 335,872 bytes




# du実行 -l オプション  その2(C:¥直下にて)    ※悲しい点が判明:日本語が出てくれない・・・????になる
C:\Users\Administrator\Downloads\SysinternalsSuite>du -nobanner -accepteula -l 1 C:\
         305  c:\$Recycle.Bin
      18,112  c:\Boot
           0  c:\copyto1
         463  c:\inetpub
           0  c:\PerfLogs
     178,388  c:\Program Files
     405,417  c:\Program Files (x86)
     820,098  c:\ProgramData
           0  c:\Recovery
           1  c:\trace
     281,124  c:\Users
  10,359,980  c:\Windows
           0  c:\work
           0  c:\????????
Files:        119134
Directories:  35411
Size:         12,353,828,882 bytes
Size on disk: 12,569,956,352 bytes




# du実行 -c オプション ・・・使わなそう。。
C:\Users\Administrator\Downloads\SysinternalsSuite>du -nobanner -accepteula -l 1 -c C:\
Path,CurrentFileCount,CurrentFileSize,FileCount,DirectoryCount,DirectorySize,DirectorySizeOnDisk
"c:\$Recycle.Bin",0,0,202,14,313144,1114112
"c:\Boot",7,1039552,88,42,18546700,18911232
"c:\copyto1",0,0,0,1,0,0
"c:\inetpub",0,0,122,14,474254,864256
"c:\PerfLogs",1,730,1,1,730,4096
"c:\Program Files",1,174,715,204,182669409,185163776
"c:\Program Files (x86)",1,174,957,130,415147429,417943552
"c:\ProgramData",0,0,830,415,839786548,787484672
"c:\Recovery",1,971,1,1,971,4096
"c:\trace",1,1910,1,1,1910,4096
"c:\Users",1,174,2003,902,287633977,297521152
"c:\Windows",25,7239908,114201,33682,10608619728,10860208128
"c:\work",1,14,1,1,14,4096
"c:\????????",0,0,0,1,0,0
"c:\",13,401972,119134,35411,12353596786,12569731072






###################################################################################################

※ -nobanner は、標準出力に著作権情報を表示しないための、オプションです。
  つけない場合は、毎回著作権情報が標準出力に表示されます。

  また、初回実行した際にはソフトウェア使用許諾への同意が、画面ポップアップで表示されます。
  -accepteula オプションは、画面ポップアップを表示しないで、先に同意しておくためのオプションです。これはpsexec.exeと同じです。

Powershellで実行する場合(参考)

# duコマンド(Sysinternals Suiteからダウンロードし、zip解凍したもの)
$ducommand = "C:\Users\Administrator\Downloads\SysinternalsSuite\du.exe"

# 捜索するディレクトリ(親)
$parent_dir = "c:\"

# 捜索する階層(数字)
$kaisou = 1

# duコマンド実行
& $ducommand -nobanner -accepteula -l $kaisou $parent_dir


#### 結果
         305  c:\$Recycle.Bin
      18,112  c:\Boot
           0  c:\copyto1
         463  c:\inetpub
           0  c:\PerfLogs
     178,388  c:\Program Files
     405,417  c:\Program Files (x86)
     820,124  c:\ProgramData
           0  c:\Recovery
           1  c:\trace
     281,116  c:\Users
  10,359,980  c:\Windows
           0  c:\work
           0  c:\????????
Files:        119134
Directories:  35411
Size:         12,353,846,180 bytes
Size on disk: 12,569,968,640 bytes

Powershellで関数化して実行する場合(参考)

# du実行関数 (引数:捜索する親フォルダ、階層)

function du-folder ($parent_dir,$kaisou) {

    # duコマンド実行
    & $ducommand -nobanner -accepteula -l $kaisou $parent_dir

}

# duコマンド(Sysinternals Suiteからダウンロードし、zip解凍したもの)
$ducommand = "C:\Users\Administrator\Downloads\SysinternalsSuite\du.exe"



# 関数実行
du-folder c:\ 1






#### 結果
         305  c:\$Recycle.Bin
      18,112  c:\Boot
           0  c:\copyto1
         463  c:\inetpub
           0  c:\PerfLogs
     178,388  c:\Program Files
     405,417  c:\Program Files (x86)
     820,127  c:\ProgramData
           0  c:\Recovery
           1  c:\trace
     280,957  c:\Users
  10,359,980  c:\Windows
           0  c:\work
           0  c:\????????
Files:        119134
Directories:  35411
Size:         12,353,687,618 bytes
Size on disk: 12,569,829,376 bytes

PS C:\Users\Administrator>

フォルダのサイズを調べたいときは使ってみても良いかもですね! ありがとうございました。

bitFlyer ビットコインを始めるなら安心・安全な取引所で