Catalystのモジュールとか

__PACKAGE__と$selfの関係
warn __PACKAGE__;
warn $self;

結果

Hoge::App::Fuga::Controller::Class名
Hoge::App::Fuga::Controller::Class名=HASH(0xd2694a0)


Catalyst::Base

This used to be the base class for Catalyst Controllers. It remains here for compatibility reasons, but its use is highly deprecated.
if your application produces a warning, then please update your application to inherit from Catalyst::Controller instead.


Catalyst ControllersのBase Classとして使用される。互換上の理由から残り続けるが、使用するのは非推奨である。
もし開発しているアプリケーションが警告を出したら、Catalyst::Controller を代わりに受け継ぐためにアプリケーションをアップデートしてください。


App::Schema

DBIx::Class::Schema::Loaderによって作られたファイル。__PACKAGE__->load_classesをwarn出力しても空文字しか出力されないが、なければSchemaを呼び出せない。

DBIx::Class::Schema::Loader

DBIx::Class::Schema::Loader - Create a DBIx::Class::Schema based on a database

DBIx::Class::Schemaに基づいてSchemaを作成する。
スキーマとは、データベースにどのような種類のデータをどのような構造で格納するか定義したもののことを指す。テーブルの名前と各カラムの名前とタイプを定義する。

DBIx::Class::Schema - composable schemas

Creates database classes based on a schema. This is the recommended way to use DBIx::Class and allows you to use more than one concurrent connection with your classes.

スキーマに基づいてデータベースを作成する。DBIx::Classを使用するための推奨される方法であり、クラスとの複数の同時接続を可能にする。

DBIx::Class - Extensible and flexible object <-> relational mapper.

DBIx::Class needs to know what your Table structure looks like. You do that by defining Result classes. Result classes are defined by calling methods proxied to DBIx::Class::ResultSource. Each Result class defines one Table, which defines the Columns it has, along with any Relationships it has to other tables. (And oh, so much more besides) The important thing to understand:

DBIx::Classはテーブルの構造がどのようになっているかを知っておく必要がある。Result classesを定義することによってそれを実現できる。Result classesはDBIx::Class::ResultSourceにプロキシされたメソッドを呼び出すことで定義される。それぞれのResult classは、他のテーブルとの関係やカラムがどのようになっているか定義する。理解するのが重要だ。

DBIx::Class::ResultSet - Represents a query used for fetching a set of results.

A ResultSet is an object which stores a set of conditions representing a query. It is the backbone of DBIx::Class (i.e. the really important/useful bit).
No SQL is executed on the database when a ResultSet is created, it just stores all the conditions needed to create the query.
A basic ResultSet representing the data of an entire table is returned by calling resultset on a DBIx::Class::Schema and passing in a Source name.

ResultSetは、クエリを表す一連の条件を用意するオブジェクトである。ResultSetはDBIx::Classにとって非常に重要な存在である。ResultSetが作られる時、データベースで実行されるSQLはない。ResultSetはクエリを作るのに必要全ての条件を用意する。基本的なResultSetは、DBIx::Class::SchemaでResultSetを呼んだり、ソースネームをパスすることによって全テーブルのデータを表す。

Catalyst::Plugin::ConfigLoader - Load config files of various types

This module will attempt to load find and load a configuration file of various types. Currently it supports YAML, JSON, XML, INI and Perl formats.

このモジュールは、様々なタイプの設定ファイルをロードすることを試みる。現在はYAMLJSON,、XML、 INI、Perlをサポートしている。

load_config
This method handles loading the configuration data into the Catalyst context object. It does not return a value.

load_configメソッドは、Catalyst context objectへの設定データをロードする。値は返さない。

コンテキストオブジェクト

$contextオブジェクトはApplication内の全ての場所からアクセス可能なオブジェクトである。コンテキストオブジェクトはアクションの第2引数として必ず渡される。$cと略される。

extends

extends 'Animal'; # Animalクラスを継承

継承

継承(けいしょう、inheritance:インヘリタンス)とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。

主にクラスベースのオブジェクト指向言語で、既存クラスの機能、構造を共有する新たなクラスを派生することができ(サブクラス化)、そのようなクラスは「親クラス(スーパークラス)を継承した」という。具体的には変数定義や操作(メソッド)などが引き継がれる。継承は、「コードの再利用性」や「拡張性」を高めるための有効な手段となる。

カプセル化

情報(フィールド)や操作(メソッド)についてアクセス制御をかけることにより、悪意や間違いによる利用を防止し、想定しない利用が発生したならば、その原因箇所を特定しやすくするために仕組み化すること。

用語集

バッチ処理

バッチ処理とは“一定量の(あるいは一定期間の)データを集め、一括処理するための処理方法”のことである。

リアルタイム処理

バッチ処理の対義語としてしばしば見聞きするのが“リアルタイム処理(あるいはインタラクティブ処理)”である。その名の通りリアルタイムでシステムにデータを反映させる処理方法となる。

I18N

ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。国際化。internationalization。internationalization は,i で始まり n で終わる間に18文字あるから,i18n

ローカライゼーション

Linuxは商用OSに匹敵する「国際化」がほどこされている。国の環境に最適化することを「ローカライゼーション」という。Linuxではローカライゼーションの対象として日本語ももちろんサポートされている。

ロケール

各言語などの地域情報を「ロケール」と呼ぶ。ロケール情報を変えて、ローカライゼーションしていく。

CLI

キーボード等からの文字列を入力とし、文字列が表示されるウィンドウや古くはラインプリンタで印字される文字などを出力とする、ユーザインタフェースの様式である。

スキーマ

データベースにどのような種類のデータをどのような構造で格納するか定義したものをスキーマという。テーブルの名前と各カラムの名前とタイプを定義します。

名前空間

名前空間 (namespace) と言うのは、プログラミング言語等で良く使われる概念である。例えば、シンボル名 (変数名やメソッド名、クラス名等) が使用している複数のライブラリ等でぶつかってしまい支障があるような状況、所謂 "名前の衝突" と呼ばれる状況を避ける目的で良く使われる。

名前空間というのは、一般的には、中に同じ名前のものが複数存在しないように分けたもののことである.或る名前空間の中では、名前から特定のものを一意に決定できる。別の名前空間内にあるものは、名前空間と名前を組み合わせることで一意に特定できる。

prepared statement

プリコンパイルされた SQL 文を表すオブジェクトである。SQL 文は、プリコンパイルされ、PreparedStatement オブジェクトに格納される。そこで、このオブジェクトは、この文を複数回効率的に実行する目的で使用できる。 インジェクション対策ともなる。

EC2 / AMI

EC2

概要

EC2とはAWSが提供する「仮想サーバ」である。OSではない。LinuxWindowsRed Hat等様々なOSの仮想サーバをすぐに実行できる環境が用意することができる。普通のレンタルサーバのようにSSHでログインしていろんなアプリケーションをインストールすることができる。

普通のレンタルサーバと違う点は、細かい時間単位で利用料金が発生する点である。 仮想サーバで有名なさくらインターネットは1000円/月ですが、Amazon EC2では数円/時からです。 常時起動しているとさくらインターネットの方が少し安いが、時間単位の柔軟な運用体制、 急なアクセス数増加にも耐えられる堅牢はインフラが、EC2の最大の特徴であると言える。

Amazon EC2では、Amazon EC2上で実行される仮想マシンのことを「インスタンス」と呼び、インスタンス という単位で構築することができる。インスタンスは複数のタイプが用意されていて、例えば、smallタイプのインスタンスであれば、CPU1、メモリ1GBのようにCPUとメモリが固定されている。CPUだけ追加とか、メモリだけ追加とかはできず、スペックを上げたい場合はインスタンスのタイプを変更する必要がある。

サーバインスタンスは必要に応じ作成、実行および停止が可能で、起動サーバの使用時間に応じ対価を支払うため"elastic"と呼ばれる。サーバインスタンス同士を隔離されたゾーンに作成すると障害時は相互にバックアップとなり、ダウンタイム最小化構成が可能である。

仮想サーバ

仮想サーバーは、名前の通り実際には存在しないサーバーをソフトウェア上で存在させて利用する仕組みである。1台のサーバが複数のサーバのように振る舞うことができるようになり、ユーザからは、実際に複数のサーバを活用しているかのように見える。ベースとなる1台のサーバを「物理サーバ」、仮想化されたサーバを「仮想サーバ」と呼ぶ。

実際のサーバーに仮想化ソフトウェアと呼ばれるソフトウェアをインストールし、そのソフトウェアによって仮想サーバーを作るという仕組みになっている。基本的にひとつのサーバーにはひとつのOSしか入れる事ができないが、仮想サーバーを利用する事で現実に存在するサーバーがひとつだとしても、複数のOSをインストールしたサーバーを利用可能になる。

AMI

Amazon マシンイメージ (AMI) は、クラウドの仮想サーバーであるインスタンスを起動するのに必要なOSやボリュームの情報、アプリケーションなどを含むインスタンスの起動テンプレートのこと。インスタンスを立ち上げる際は必ずAMIを指定して起動する必要がある。同じ設定で複数のインスタンスが必要な場合は、1 つの AMI から複数のインスタンスを起動できる。さまざまな設定のインスタンスが必要なときは、各インスタンスをそれぞれ異なる AMI から起動できる。AMI には次が含まれている。

インスタンスのルートボリュームのテンプレート (オペレーティングシステムアプリケーションサーバー、アプリケーションなど)、起動許可 (AMI を使用してインスタンスを起動する権限を特定の AWS アカウントに与える)、インスタンスの起動時にインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングである。

Amazon Linux

Amazon LinuxとはAmazon社が開発したRed Hat Enterprise LinuxベースのディストリビューションでEC2インスタンスを作成するときに選択可能なAMI(Amazon Machine Image)のひとつである。

Linux ディレクトリ構成

/

ルートディレクトリのこと。ルートディレクトリとは、コンピュータファイルシステムにおいて、ファイル階層における最初または最上位のディレクトリのことである。ルートディレクトリは、全ての枝の開始点である木の幹に例えることができる。ルートファイルシステムは、ルートディレクトリが位置しているのと同じディスクパーティションに含まれるファイルシステムである。ルートファイルシステムは、システムのブート時にマウントされる他の全てのファイルシステムの頂点にあるファイルシステムである。

/bin

Linuxの基本的なコマンド群が格納されているディレクト

$ ls /bin
[		chmod		date		domainname	expr		ksh		ln		mv		pwd		sh		sync		unlink
bash		cp		dd		echo		hostname	launchctl	ls		pax		rm		sleep		tcsh		wait4path
cat		csh		df		ed		kill		link		mkdir		ps		rmdir		stty		test		zsh


/home

一般ユーザーのホームディレクトリ。ホームディレクトリとは、UNIX系のOS(LinuxとかMacとか)においてログイン直後にいる場所のことである。利用者は自分に割り当てられたホームディレクトリ内には自由にファイルやサブディレクトリを作成することができる。ログインするとカレントディレクトリ(ファイルシステム内での現在地)が自分のホームディレクトリに設定されることが多い。多くのシェルでは「~」(チルダ)という記号が自分のホームディレクトリを表している。

/etc

/etcは,Linuxディストリビューションを構成する各種プログラムの設定ファイルを格納したディレクトリである。

afpovertcp.cfg				emond.d					manpaths				periodic				security
aliases					find.codes				manpaths.d				pf.anchors				services
aliases.db				fstab.hd				master.passwd				pf.conf					shells
apache2					ftpusers				my.conf					pf.os					snmp
asl					gettytab				nanorc					php-fpm.conf.default			ssh
asl.conf				group					networks				php-fpm.d				ssl
auto_home				hosts					newsyslog.conf				php.ini.default				sudo_lecture
auto_master				hosts.equiv				newsyslog.d				postfix					sudoers
autofs.conf				irbrc					nfs.conf				ppp					sudoers.d
bashrc					kern_loader.conf			notify.conf				profile					syslog.conf
bashrc_Apple_Terminal			krb5.keytab				ntp-restrict.conf			protocols				ttys
com.apple.screensharing.agent.launchd	localtime				ntp.conf				racoon					wfs
csh.cshrc				locate.rc				ntp_opendirectory.conf			rc.common				xtab
csh.login				mach_init.d				openldap				rc.netboot				zprofile
csh.logout				mach_init_per_login_session.d		pam.d					resolv.conf				zshrc
cups					mach_init_per_user.d			passwd					rmtab
defaults				mail.rc					paths					rpc
dnsextd.conf				man.conf				paths.d					rtadvd.conf

/etcに格納されている設定ファイルは,大きく6種類に分類できる。(1)Linuxシステムの起動に関するもの(2)システム設定全般に関連するもの(3)ネットワーク設定(4)サーバー・ソフトウエアに関する設定(5)X Window Systemの設定(6)シェルやアプリケーション・ソフトウエアに関する設定である。

/usr

ユーザーサービスやリソースが格納されるディレクトリ。その用途は多様であり、さまざまなものがここに格納される。共有可能なファイルは基本的にここに置かれる。各ユーザーが共通して利用するプログラム・ライブラリのデータであり、ソースからコンパイルしたソフトなどはこちらにインストールされる。通常パッケージの追加するこのディレクトリにインストールされることが多い。また、etcに保存されている設定ファイルのシンボルリンクもこちらに貼られることも多い。

X11		X11R6		bin		include		lib		libexec		local		sbin		share		standalone


/sbin

再起動やファイルシステムの操作などシステム管理者用のコマンドが配置されている。/bin同様、新しいコマンドの追加や変更は推奨されない。shutdown、rebootなど。

apfs_hfs_convert	fsck_apfs		fstyp_msdos		md5			mount_devfs		mount_smbfs		newfs_udf		reboot
autodiskmount		fsck_cs			fstyp_ntfs		mknod			mount_exfat		mount_udf		nfsd			route
disklabel		fsck_exfat		fstyp_udf		mount			mount_fdesc		mount_webdav		nfsiod			rtsol
dmesg			fsck_hfs		halt			mount_acfs		mount_ftp		mpioutil		nologin			shutdown
dynamic_pager		fsck_msdos		ifconfig		mount_afp		mount_hfs		newfs_apfs		pfctl			umount
emond			fsck_udf		kextload		mount_apfs		mount_msdos		newfs_exfat		ping
fibreconfig		fstyp			kextunload		mount_cd9660		mount_nfs		newfs_hfs		ping6
fsck			fstyp_hfs		launchd			mount_cddafs		mount_ntfs		newfs_msdos		quotacheck


/tmp

テンポラリデータの保存場所でメモリ上の一時ファイルを保存する。ダウンロードフォルダとして利用することもある。再起動時に消去される。また通常はcronで定期的に消去される。

/var

ログやキャッシュなど、可変的システムデータ(動的ファイル)が格納されるディレクトリである。一時的なデータとしては/tmpと同じだが、こちらは再起動しても消去されずに残る。

agentx		audit		db		folders		jabberd		log		mail		netboot		root		run		spool		vm
at		backups		empty		install		lib		ma		msgs		networkd	rpc		rwho		tmp		yp


/opt

ディレクトリ内にはユーザーがインストールした静的データ、主にプログラムが格納される。ただしGNUビルドシステムやパッケージ管理システムを利用したインストールの場合、/usr/localもしくは/usrディレクトリにインストールされるので、専らソフトウェア・ベンダーが提供するアプリケーションであることが多い。

/dev

コンピューターに接続されたデバイス(マウスやキーボード、ディスク等)を扱うファイルが置かれている。

/lib

/binや/sbinのコマンドを実行するのに必要なファイルが配置されてる。基本的にユーザーが変更を加えることはない。64bit用の共用ファイルは別途「lib64」というディレクトリにある。32bitと間違えないように注意。libc、libsslなど。

/boot

ブートに必要なファイルが格納されるディレクトリ。ブートログやカーネルイメージ(Linuxカーネルを格納して圧縮したファイル)が保存されている。vmlinuzなど。ブートとは、コンピュータシステムの電源投入時、あるいはシステムのリセット後、モニタやOSなどなんらかの基本的なシステムソフトウェアを主記憶に展開し、ユーザプログラムを実行できるようにするまでの処理の流れのことである。

/lost+found

システムのバックアップや復元用のファイルが格納されるディレクトリである。意図しない再起動やシャットダウン時に使われる。通常ユーザーが操作することは無い。

/proc

/procは,プロセスやメモリーなどのLinuxシステム上のリソース関連情報を、あたかもファイルであるかのように配置した仮想的なファイル・システムである。仮想的とはいえ、通常のファイルと同じようにアクセスできる。/procディレクトリにあるサブディレクトリの名前(数字)は,プロセスIDを意味する。

/procにあるcpuinfo(CPUの情報)や、partitions(パーティション情報)、uptime(システムの駆動情報)、version(Linuxカーネルのバージョン情報)などのファイルの値は、他のコマンドが情報を出力する際に直接参照されている。これらの値の実態は,稼働中のLinuxカーネルの内部情報である。例えば、/proc/sys以下には,システムの動作速度に関する情報がファイルとして配置されている。これらのファイルの内容を書き換えることで,カーネル内部の変数を変更できる。

/sys

動作しているプロセスやドライバを/procで管理すると膨大になるため、/sysにドライバ関連のプロセスをまとめているディレクトリ。しかし完全に分離されているわけではない。

ポート番号関連

ポート番号

実際TCPUDPで通信を行うときは、コンピュータ一台という単位ではなく「プログラム単位」つまり「プロセスやスレッド単位」で通信が行われる。そのためプロセス同士、正しく受け渡しをする必要がある。このとき通信しているプロセスには「ポート番号」というものが割り振られる。プロセスやスレッドはこのポート番号を目印にして、どのアプリケーションとどのアプリケーションが通信をとっているのかを判別することになる。

IPアドレスを建物の住所に例えるなら、ポート番号は「部屋の番号は何号室か?」という例えになる。コンピュータネットワークにおいて、プロトコルIPアドレスとポート番号はまとめると、「どのような方法」で「どこ」の「何号室」に通信をとるのか?という形にいいかえることが出来る。それぞれ「どの様なプロトコルがどの様なポート番号で運用されるのか?」代表的な例をあげると次のようになる。

ポート番号 名称
TCP 20 FTP (データ)
TCP 21 FTP (制御)
TCP 22 SSH
TCP 23 Telnet
TCP 25 SMTP
UDP 53 DNS
UDP 67 DHCP(サーバ)
UDP 68 DHCP(クライアント)
TCP 80 HTTP
TCP 110 POP3
UDP 123 NTP
TCP 443 HTTPS


ウェルノウンポート番号

ポート自体は0から65535まで存在するが、そのなかでも0~1023までを「ウェルノウンポート番号」という。これらはIANAという団体により管理されている。TCP/IPUDPにおいて通信で利用されるポート番号のうち、メジャーなサービスやプロトコルが利用するために予約されているポート番号のことである。80がHTTP、22がSSHとあるように、メジャーなサービスはポート番号が一般的に決め打ちされている。

レジスタードポート番号

ポート番号1024~49151もIANAで管理されている。特定のアプリケーションなどが使用することになっているポート郡である。IANAが登録を受け付け、公開している。

その他のポート番号

49152~65535はユーザが自由にとりあつかえるポート番号となっている。IANAに登録をする必要もない。ポート番号に関しては、実際どのサービスをどのポートで動かすかという絶対的な決まり事が存在するわけではないので、任意で管理、わりふって使用することも出来る。

lsof

lsof(エルエスオーエフ)コマンドは"list open files"の意味であり、多くのUnixオペレーティングシステムで、オープン中のファイルやそのファイルをオープンしているプロセスのリストを出力するコマンドである。lsofの出力は以下の内容を表している。

そのファイルをオープンしているプロセスのID(PID)
そのプロセスのグループID(PGID)(オプション)
親プロセスのプロセスID(PPID)(オプション)
プロセスが実行しているコマンド
プロセスのオーナー
プロセスが使用している、実行中のテキストファイルおよび共有ライブラリを含む、すべてのファイルのそれぞれに対して以下の項目を表示する
可能なら、そのファイルのファイル記述子の数
ファイルのアクセスモード
ファイルのロック状態
ファイルのデバイス数
ファイルのinode数
ファイルのサイズまたはオフセット
ファイルが格納されているファイルシステムの名前
ファイルのパス名の利用可能なすべてのコンポーネント
ファイルのストリームコンポーネントの名前
ファイルのローカルおよびリモートのネットワークアドレス
ファイルのTLIネットワーク(主にUDP)の状態
ファイルのTCPの状態、読み込みキューの長さ、および、書き込みキューの長さ
ファイルのTCPウィンドウの読み込みおよび書き込みの長さ(Solarisのみ)
その他のファイルまたはファイルタイプ固有の値


netstat

netstatは、ネットワーク接続、ルーティングテーブル、各種ネットワークインタフェースの統計情報などを表示するコマンド行ツールである。ネットワークに関わる問題を探したり、トラフィック量を調べて性能を測定するといった用途に使う。

ルーティング

ルーティングあるいは経路制御とは、データを目的地まで送信するために、コンピュータネットワーク上のデータ配送経路を決定する制御の事である。OSI参照モデルネットワーク層(第3層)の中継機器がこの制御を担っている。ルーティングを行うための通信プロトコルを「ルーティングプロトコル」という。経路が判明すれば、その経路に沿って、発信元から最終的な受取先へ、結節点またはノード(ここではルータと呼ばれる)を経由しながら転送を繰り返して情報が送られる。

情報はパケット(小包の意。データをある程度の量ずつに小分けして送信する、その一単位)として送られ、各パケットには論理的なアドレスが付加してある。各ルータはルーティングテーブルという表を保持しており、この表に従ってパケットの転送先を決定する。

ルーティングテーブル

コンピュータネットワークにおけるルーティングテーブルとは、ルーターやネットワーク接続されたコンピュータが持つ、個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造である。

ss

「ss」コマンドは、ネットワーク通信で利用する「ソケット」についての情報などを出力するコマンドで ある。従来はnetstatコマンドが使用されていたが、現在はssコマンドへの移行が進んでいる。

ソケット

インターネットはTCP/IPと呼ぶ通信プロトコルを利用するが、そのTCP/IPをプログラムから利用するには、プログラムの世界とTCP/IPの世界を結ぶ特別な出入り口が必要となる。 その出入り口となるのがソケット(Socket)であり、TCP/IPのプログラミング上の大きな特徴となっている。ソケットを介してデータを送受信 するときにはファイルの入出力と同じ要領で行うことができる。つまり、送信したいデータをソケットに書き込むと通信相手のコンピュータのソケットに届く。また、受信はソケットからデータを読み出せば良い。

FTP/SFTP/SCP

FTP

概要

FTP(File Transfer Protocol)はサーバーとクライアント間で、ファイルを送受信する通信の決まりごと(プロトコル)である。FTPという用語だけで、本来の意味である通信方法以外にも、FTPサーバーやFTPクライアント(ソフト)など、多用な意味を持って語られることが多い。FTPサーバーはインターネット側に位置し、Webサーバーとつながっているので、FTPサーバーを操作することによりWebサーバー内のファイルを制御できる。FTPにはサーバー側にもクライアント側にも、PIとDTPという専門的なプログラムが含まれている。

PI

PIとはProtocol Interpreter(プロトコルインタプリタ)の略で、指示内容をプロトコルインタプリタ(翻訳)することを担当している。そしてサーバー側とクライアント側双方のPIが、互いに通信し合っている。FTPクライアントによる操作が、直接FTPサーバーに影響するわけではなく、インタプリタ(翻訳)という中継ぎが存在している。

DTP

DTPとはData Transfer Process(データトランスファープロセス)の略で、実質的なデータ転送プロセスを示しています。先に説明したPIとこのDTPの2つが揃って初めて、念願のファイル転送が実現できる。なおDTPもサーバー側とクライアント側両方にあり、相互に通信するだけでなく、PIとも連携している。

SFTP

概要

FTPをセキュリティの面で、より安全にした改良版のひとつがSFTPである。SFTPのSとは、SSH(セキュアシェル)の頭文字だ。SFTPはFTPの利便性を損なわず、さらにFTPSSHの安全性を付加している。FTPは、通信経路が暗号化されていないので悪意をもった第三者から盗視や侵入される可能性がある。

SSH

SSHとは、Secure Shell(セキュアシェル)の略称で、リモートコンピュータと通信するためのプロトコルである。認証部分を含めネットワーク上の通信がすべて暗号化されるため、安全に通信することができる。SSHでは公開鍵暗号を利用し、共通鍵を暗号化して鍵交換を行っている。かつ、通信自体は高速な共通鍵暗号を用いているため、速度低下を抑えている。

SCP

概要

Secure Copy(scp)は、sftp同様、Secure Shell(ssh)に含まれるsshの機能を使ってセキュリティの高い(セキュアな)ファイル転送を行うコマンドの 1 つである。scpで使用される通信プロトコルは、Secure Copy Protocol(SCP)と呼ばれる。

認証情報(たとえばパスワード認証なら、ユーザー名やパスワード)と、セッション中でやり取りされるデータとの両方ともが、暗号化されてネットワーク上を流れる。Unixで古くから使われているリモートファイル転送コマンドrcp(Remote CoPy)のセキュアなバージョンといえる。コマンドラインの指定方法はrcpとほぼ同じである。rcpは暗号化などに対応しておらず、安全ではない。ある種のシステムではrcpという名前で起動しようとするとscpコマンドを実行する。

ssh-agentコマンドなどと組み合わせて利用すれば、コピー時に認証情報の入力が不要で、cpやrcp同様に利用できる。SSHを介してファイル転送を行うプロトコルとしてはSSH File Transfer Protocol(以下SFTP)があり、両者はしばしば比較される。その際、SCPはより軽く、SFTPはより高機能と表されることがある。