シェルスクリプトを使ってファイルを別のフォルダーにコピーする

コピーしたいファイルがリストアップされているファイルを読み込み、別のフォルダーに同じ階層毎でコピーするシェルスクリプトです。

コピー元のパスを読み込み、コピー先にディレクトリーが無ければディレクトリーも作成してファイルをコピーします。

Windows上でlinuxコマンドやシェルスクリプトを実行できるbusyboxというツールを使えばWindows上でも、このシェルスクリプトを実行することができてWindowsファイルのコピーが簡単に行うことができます。

busyboxのダウンロード方法やインストール方法は本サイトでもご紹介しておりますのでぜひご覧ください(^^♪

簡単で便利なシェルスクリプトです。ちょっとした作業の効率アップにお使い下さい。

シェルスクリプトを使ってファイルを別のフォルダーにコピーする

上の図にある構成にもとづいて作成したシェルスクリプトがこれ↓になります。

コピー元のパスとファイル名を記述したリストファイル「list.txt」を読み込んで、同じディレクトリー階層でコピー先のディレクトリーにコピーをするシェルスクリプトです。

while read line
do
 dirn=$(dirname ${line})
 filen=$(basename ${line})
 Chgdirn=${dirn/temp/temp2}
 # echo $Chgdirn
 if [ -d $Chgdirn ]; then
  echo “ディレクトリーが既に存在しています”
 else
  mkdir -p $Chgdirn
 fi
 echo “*** $dirn/$filenをコピー開始 ***”
 cp $dirn/$filen $Chgdirn
 echo “*** $dirn/$filenをコピー終了 ***”
done < ./list.txt

 

シェルスクリプトの説明

dirname ディレクトリ名とファイル名を含むパス名からファイル名の部分だけを除き、ディレクトリ部分だけを取得するコマンドを使って、「list.txt」から読み込んだ1行を処理します。
basename ディレクトリ名とファイル名を含むパス名から、ディレクトリ部分を除き、ファイル名だけを取得するコマンドを使って、「list.txt」から読み込んだ1行を処理します。
Chgdirn 読み込んだパスのディストリビューションtempをtemp2に変更しChgdirnに格納します。
if [ -d $Chgdirn ] -d オプションでディレクトリーの有無を確認。また、-fオプションにするとファイルの有無を確認することができます。-eオプションにするとファイルやディレクトリーの有無を確認することができます。
mkdir -p  -pオプションを指定することで親ディレクトリーが存在しなくてもサブディレクトリーまで作成してくれます。
list.txt コピー元のファイルのパスとファイル名がリストされています。

※筆者の環境で問題なく動作することは確認しておりますが、環境によっては上手く動作しないことも考えられますので自己責任で実行するようお願い致します。

 

 

Windowsでlinuxコマンドを実行できるツールbusybox

Linuxに慣れてくるとWindowsが不便に感じることがありませんか?

たとえば、”grepがしたい” とか ”シェルやawkを使いたい”などなど。。。

”もっと手軽にlinuxコマンドが使えたら”って思うことはないでしょうか。

WindowsにもlinuxのようなCLIコマンド(DOSプロンプト)や、PowerShellといった環境はありますが、Linuxに慣れてしまっていると使いづらいと感じるのではないでしょうか。

Windows上でHyper-VやVMwareなどの仮想環境を作ってlinux OSを動かしたり、Unixコマンドを詰め合わせたツール(Cygwinなど)をインストールして使うという方法もありますが手軽に使うにはちょっと重たく感じます。

Windows 10 Fall Creators Update(バージョン1709)から「Windows Subsystem for Linux(WSL)」が正式版が提供されましたね。

このWSLを有効にすることで「bash」などのシェルが、Windows 10上で利用できるようになります。

しかし、Windows10でない方は諦めるしかないのでしょうか?

そんなことはありません(^^♪

今回ご紹介するツール「busybox」はWindows10でなくても、Linuxコマンドやシェルなどを手軽に使うことができます!

Windows上でLinuxコマンドやシェルを使ってもっとパソコンを快適に使いたいと考えられるている方に「busybox」をご紹介致します。

Windowsでlinuxコマンドを実行できるツールbusybox

こちらがbusyboxで使用できるコマンドです。

ar, arch, ash, awk, base64, basename, bash, bunzip2, busybox, bzcat, bzip2, cal, cat, chmod, cksum,clear, cmp, comm, cp, cpio, cut, date, dc, dd, df, diff, dirname, dos2unix, dpkg, dpkg-deb, du, echo, ed,egrep, env, expand, expr, factor, false, fgrep, find, fold, fsync, ftpget, ftpput, getopt, grep, groups,gunzip, gzip, hd, head, hexdump, iconv, id, ipcalc, kill, killall, less, link, ln, logname, ls, lzcat, lzma,lzop, lzopcat, man, md5sum, mkdir, mktemp, mv, nc, nl, od, paste, patch, pgrep, pidof, pipe_progress, pkill,printenv, printf, ps, pwd, readlink, realpath, reset, rev, rm, rmdir, rpm, rpm2cpio, sed, seq, sh, sha1sum,sha256sum, sha3sum, sha512sum, shred, shuf, sleep, sort, split, ssl_client, stat, strings, su, sum, tac, tail,tar, tee, test, timeout, touch, tr, true, truncate, ts, ttysize, uname, uncompress, unexpand, uniq, unix2dos,unlink, unlzma, unlzop, unxz, unzip, usleep, uudecode, uuencode, vi, watch, wc, wget, which, whoami, whois,xargs, xxd, xz, xzcat, yes, zcat

 

busyboxのインストール方法です。

1. Download

下記のURLからbusyboxをダウンロードします。
http://frippery.org/busybox/

busyboxのインストール方法

2. Installation

busybox64.exe –install インストールするディレクトリー名

(例) busybox64.exe –install c:¥busybox64
※インストールディレクトリーは予め作成しておくこと

3. 環境変数の設定でpathを設定する

検索ウィンドウから「環境変数」を入力し検索する。
「Path」のところ選択し、「編集」をクリックします。

busyboxのインストール方法

「環境変数名の編集」が開いたら「新規」をクリックして、busyboxをインストールしたフォルダーを追加します。

busyboxのインストール方法

 

cisco双方向NATの設定と陥りやすい間違いを詳しく解説

今回は双方向NATについてご紹介をさせて頂きます。

その前にNATについて簡単に説明をさせて頂きますと、NATとは、Network Address Translationの略でIPアドレスを変換する技術です。

一般的には、プライベートIPアドレスをグローバルIPアドレスに変換する技術とされています。多くの企業様では社内ではプライベートアドレスを使用していて、インターネットに接続する際はグローバルIPアドレスに変換して通信ができるようになっています。

NATにもソースNAT、ディスチネーションNATがあります。それぞれ送信元アドレスの変換、宛先アドレスの変換を行うことを意味しています。

今回ご紹介する双方向NATとは、1台のNAT機能を持ったデバイスで内部の送信元アドレス、および外部の送信元アドレスを同時にNAT変換を行うことを言います。

例えば、ご覧のネットワークがある場合
insideの送信元を、192.168.4.1 から192.168.2.3へ
また、 outsideの送信元を192.168.3.1 から 192.168.1.3 へとIPアドレスを変換します。

cisco双方向NATの設定と陥りやすい間違いを詳しく解説

 

この双方向NATのメリットは、
 内部ホストと外部ホストの両方が相手のネットワークを意識する必要が無い。
 内部ホストと外部ホストともにデフォルトゲートウェイの設定をしなくても通信ができる
 お互いの実IPアドレスを知らなくても通信可能な双方向NATです。

などのメリットがあります。

では、実際に設定をしてみましょう。

cisco双方向NATの設定と陥りやすい間違いを詳しく解説

要件はこのとおりで、
・大阪RT、名古屋RTともにお互い相手のnetworkを知らない。
・大阪RTは東京RTの192.168.1.3しか知らない。
・名古屋RTも東京RTの192.168.2.3しか知らない。

前回、第26回で無料のciscoシミュレーションソフトである「パケットトレーサー」をご紹介させて頂きました。
今回は実際にそのパケットトレーサーを使用しながら設定したいと思います。

まず、最初に大阪RTの設定ですが、このようにとてもシンプルです。
見てお分かりのように名古屋RTへのルーティング192.168.3.0/24は入っておりません。

Osaka_RT#sh run
Building configuration…

Current configuration : 821 bytes
!
version 15.1
no service timestamps log datetime msec
no service timestamps debug datetime msec
service password-encryption
!
hostname Osaka_RT
!
ip cef
no ipv6 cef
!
license udi pid CISCO2901/K9 sn FTX152438F9-
!
spanning-tree mode pvst
!
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.240
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 192.168.4.254 255.255.255.0
duplex auto
speed auto
!
interface Vlan1
no ip address
shutdown
!
ip classless
!
ip flow-export version 9
!
line con 0
logging synchronous
login
!
line aux 0
!
line vty 0 4
logging synchronous
login
!
end

同様に、名古屋RTの設定も行います。
大阪RTへのルーティング192.168.4.0/24は設定されていません。
また、スタティックルートされたパケットが到着しているかどうかを確認する為、gi0/0にアクセスリストを追加しております。

Nagoya_RT#sh run
Building configuration…

Current configuration : 880 bytes
!
version 15.1
no service timestamps log datetime msec
no service timestamps debug datetime msec
service password-encryption
!
hostname Nagoya_RT
!
ip cef
no ipv6 cef
!
license udi pid CISCO2901/K9 sn FTX152463Q1-
!
spanning-tree mode pvst
!
interface GigabitEthernet0/0
ip address 192.168.2.1 255.255.255.240
ip access-group 100 in
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 192.168.3.254 255.255.255.0
duplex auto
speed auto
!
interface Vlan1
no ip address
shutdown
!
ip classless
!
ip flow-export version 9
!
!
access-list 100 permit ip any any
!
line con 0
logging synchronous
login
!
line aux 0
!
line vty 0 4
logging synchronous
login
!
!
!
end

東京RTの設定ポイントは、この3つのコマンドです。

ip nat inside source static 192.168.4.1 192.168.2.3
ip nat outside source static 192.168.3.1 192.168.1.3
ip route 192.168.1.3 255.255.255.255 gi0/1

上の2つのコマンドでは、
inside側の送信元IPアドレス192.168.4.1を192.168.2.3へ、
outside側の送信元IPアドレス192.168.3.1を192.168.1.3へNAT変換しています。

ここで注意したいのは送信元IPアドレス192.168.4.1を192.168.2.3へ変換するということは、送信先192.168.2.3が192.168.4.1へNAT変換されるということでもあります。

また、3つ目のコマンドは、192.168.1.3へのルートを追加しています。
これはinside側の処理がルーティングをしてからNAT変換される為、このルーティングコマンドがないと通信できませんのでご注意下さい。

outside側はNAT変換してからルーティングされるので特別なルーティングは不要です。

そしてこちらが東京RTの設定です。

Tokyo_RT#sh run
Building configuration…

Current configuration : 1226 bytes
!
version 15.1
no service timestamps log datetime msec
no service timestamps debug datetime msec
service password-encryption
!
hostname Tokyo_RT
!
ip cef
no ipv6 cef
!
license udi pid CISCO2901/K9 sn FTX1524U402-
!
spanning-tree mode pvst
!
interface GigabitEthernet0/0
ip address 192.168.1.2 255.255.255.240
ip access-group 101 in
ip nat inside
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 192.168.2.2 255.255.255.240
ip access-group 102 out
ip nat outside
duplex auto
speed auto
!
interface Vlan1
no ip address
shutdown
!
ip nat inside source static 192.168.4.1 192.168.2.3
ip nat outside source static 192.168.3.1 192.168.1.3
ip classless
ip route 192.168.1.3 255.255.255.255 GigabitEthernet0/1
ip route 192.168.4.0 255.255.255.0 192.168.1.1
ip route 192.168.3.0 255.255.255.0 192.168.2.1
!
ip flow-export version 9
!
!
access-list 101 permit ip any host 192.168.1.3
access-list 102 permit ip any host 192.168.3.1
!
line con 0
logging synchronous
login
!
line aux 0
!
line vty 0 4
logging synchronous
login
!
end

youtubeでもご紹介しておりますのでぜひご覧ください。