쉘을 사용할 수 없는 렌탈 서버에서 심볼릭 링크 사용

15003 단어 PerlCgi렌탈 서버
저렴한 렌탈 서버는 쉘 조작이 불가능한 경우가 많으며,이 경우 직접 심볼릭 링크를 설정할 수 없습니다. 내가 계약하고 있는 사쿠라의 렌탈 서버(라이트 플랜)도 매달 100엔 정도로 저렴하지만 쉘 조작할 수 없다. 실은 겉으로보기 쉘이 아니면 할 수 없는 것도 CGI에서는 할 수 있는 일이 있다. 다행히, 사용하고 있는 렌탈 서버에서는 CGI로 심볼릭 링크를 설정할 수 있다. 이번은, 심볼릭 링크를 실시하는 간단한 CGI를 perl로 작성했으므로 소개한다.

설치



쉘을 사용하면 간단하지만, 쉘은 사용할 수 없는 전제로 한다.

1 mente 디렉토리를 만든다.



ftp 클라이언트 등으로 작성한다. 디렉토리 이름은, 뭐든 상관없지만, 만일 mente로 했다.

2 CGI 파일 ln, cgi를 만듭니다.



로컬 PC에서 파일을 작성하고 ftp 클라이언트 등에서 파일명 ln, cgi 업로드한다.

ln.cgi
#!/usr/bin/perl
use utf8;
use CGI;
use File::Find;
use Cwd;

my $dir = Cwd::getcwd();
$dir=~ s/([^\/]+?)?$//; #実行デレクトリィより一つ上から全て走査する。

my $cgi = new CGI;
my $target = $cgi->param('target');
my $link = $cgi->param('link');
our $msg='';
# $msg=$dir;

if($target ne '' && $link ne ''){
  $msg.="$target のシンボリックリンク($link)を生成します。";
  if( (symlink $target,$link) == 0){
    $msg.="失敗しました。";
  }else{
    $msg.="成功しました。";
  }
}


our $fileTable="";
our @files=();

find sub {
  my $file = $_;
  my $path = $File::Find::name;
  if ((-f $path) || (-l $path)){
    push(@files,$path);
  }
},$dir;


for(sort @files){
    $fileTable.="<tr><td>$_</td></tr>";
}

print $cgi->header(
  -type=>'text/html',
  -expires=>'0',
  -charset=>'utf-8'
);

my $script=<<'JOE';
$(function(){
  $("#fileTable td").on("click",function(){
   $("#target").val($(this).html());
 })
});
JOE

print << "EOF";
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8" />
<!-- <link reil="stylesheet"  href="style.css"> -->
<style>
ul{
  list-style: none;
}
label{
  display:block;
  float:left;
  width :7em;
}

table#fileTable tr:hover {
   cursor : default;
   background-color: #f9cccc;
}
</style>


<title>シンボリックリンクの設定</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
 crossorigin="anonymous"></script>
</head>
<body>
<main>
  <h1>シンボリックリンクの設定</h1>
        <div>$msg</div>
        <form>
        <ul>
        <li><label for="target">ターゲット:</label><input name="target" size=100 id="target"></li>
        <li><label for="link">リンク先:</label><input name="link" id="link" size=100  id="link"></li>
        <li><input type="submit" value="実行"><input type="reset" value="削除"></li>
        </ul>
        </form>
        <h2>ファイルリスト</h2>
  <table id="fileTable">
   $fileTable
   </table>
</main>
<footer>
<hr>
&copy; 2018 00index.com<br>
説明:
<a href="https://qiita.com/items/e99d1f3db7de280de36d">https://qiita.com/items/e99d1f3db7de280de36d</a>
</footer>
<script>
$script
</script>
</body>
</html>
EOF

3 ln.cgi의 액세스 제한을 설정합니다.



.htaccess 등으로, 이 CGI가 다른 사람에게 액세스 되지 않게 제한을 실시한다. 어려울 경우, ln.cgi를 매번 삭제한다. 이 스크립트는 보안을 고려하지 않으므로 무단으로 사용되지 않도록주의해야합니다.

4. ln.cgi에 실행 권한을 설정합니다.



ftp 클라이언트 등에서 권한을 설정합니다. 서버에 따라 다르지만 755 등.

쉘을 사용할 수 있다면



별로 사용하지 않는다고 생각하지만, 일단 기재해 둔다. 개조해 다른 용도로 하는 경우의 참고로 해 주었으면 한다. 액세스 제한은 생략되었습니다.
mkdir mente
curl -o mente/ln.cgi https://00index.com/basefile/ln.txt
chmod 755 mente/ln.cgi

사용법



CGI를 동작시키면 파일 리스트가 표시되므로, 마우스로 파일명을 클릭하면 타겟의 란에 파일명이 카피된다. 링크처 입력란에 심볼릭 링크시킬 패스와 파일명을 입력하고 실행 버튼을 누릅니다. 링크가 생성되면, 그 취지의 메시지가 표시된다. 링크를 지우면 ftp 클라이언트 등을 이용하여 삭제하면 된다. 삭제 버튼은, 입력란을 삭제하는 것만이므로 주의해 주었으면 한다.



# 실수와 더 좋은 방법 등을 지적하십시오.

좋은 웹페이지 즐겨찾기