Dev Blog

스크립트 & 소스코드 공유

실무에서 유용하게 쓰는 스크립트와 코드 조각을 블로그 게시판으로 저장하고 공유합니다.

108건의 글

Linux에서 파일을 압축·분할해 지정 크기로 나누기 (tar + split)

Linux에서 대용량 파일을 tar로 압축한 뒤 split 명령으로 지정 크기(예: 4000M)의 분할 파일로 나누는 방법이다. tar zcvf와 split을 파이프(|)로 연결해 한 번에 처리하는 방법, 분할 파일을 cat으로 합친 뒤 압축을 푸는 과정, 그리고 tar 명령의 주요 옵션 설명을 담고 있다.

1、普通tar压缩命令

tar -zcvf cm-11.tar.gz cm-11

//将cm-11文件夹压缩成cm-11.tar.gz

2、压缩后的文件太大,需要将cm-11.tar.gz分割成N个指定大小的文件,怎么办?一条命令搞定

split -b 4000M -d -a 1 cm-11.tar.gz cm-11.tar.gz.

//使用split命令,-b 4000M 表示设置每个分割包的大小,单位还是可以k

// -d "参数指定生成的分割包后缀为数字的形式

//-a x来设定序列的长度(默认值是2),这里设定序列的长度为1

执行命令后,生成压缩包如下:

-rw-r--r-- 1 root root 4194304000 May 20 14:00 cm-11.tar.gz.0

-rw-r--r-- 1 root root 4194304000 May 20 14:02 cm-11.tar.gz.1

-rw-r--r-- 1 root root 4194304000 May 20 14:03 cm-11.tar.gz.2

-rw-r--r-- 1 root root 4194304000 May 20 14:05 cm-11.tar.gz.3

-rw-r--r-- 1 root root 4194304000 May 20 14:06 cm-11.tar.gz.4

-rw-r--r-- 1 root root 4194304000 May 20 14:08 cm-11.tar.gz.5

-rw-r--r-- 1 root root 4194304000 May 20 14:09 cm-11.tar.gz.6

-rw-r--r-- 1 root root 2256379886 May 20 14:10 cm-11.tar.gz.7

3、其实以上两步也可以合并成一步来执行

tar -zcvf cm-11.tar.gz cm-11 | split -b 4000M -d -a 1 - cm-11.tar.gz.

//采用管道,其中 - 参数表示将所创建的文件输出到标准输出上

4、普通解压命令

tar -zxvf cm-11.tar.gz

5、分割后的压缩包解压命令如下

cat cm-11.tar.gz.* | tar -zxv

6、附上tar命令的参数解释

tar可以用来压缩打包单文件、多个文件、单个目录、多个目录。

Linux打包命令 tar

tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。

常用格式:

单个文件压缩打包 tar -czvf my.tar.gz file1

多个文件压缩打包 tar -czvf my.tar.gz file1 file2,...(file)(也可以给file文件mv 目录在压缩)

单个目录压缩打包 tar -czvf my.tar.gz dir1

多个目录压缩打包 tar -czvf my.tar.gz dir1 dir2

解包至当前目录:tar -xzvf my.tar.gz

cpio

含子目录find x* | cpio -o > /y/z.cpio

不含子目录ls x* | cpio -o > /y/z.cpio

解包: cpio -i < /y/z.cpio

[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....

参数:

-c :建立一个压缩文件的参数指令(create 的意思);

-x :解开一个压缩文件的参数指令!

-t :查看 tarfile 里面的文件!

特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!

因为不可能同时压缩与解压缩。

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!

例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成

『 tar -zcvPf tfile sfile』才对喔!

-p :使用原文件的原来属性(属性不会依据使用者而变)

-P :可以使用绝对路径来压缩!

-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!

--exclude FILE:在压缩的过程中,不要将 FILE 打包!

자바스크립트 print_r 함수 - 객체 구조를 HTML로 출력

PHP의 print_r처럼 자바스크립트 객체를 트리 구조의 HTML로 출력해주는 함수 예제다. 객체의 모든 속성을 순회하며, 중첩 객체는 들여쓰기를 적용해 재귀적으로 출력하고 기본형 값은 강조 표시한다. 배열 형태의 객체를 print_r로 변환해 지정한 div에 삽입하는 사용 예시를 보여준다.

<div id='video_related'></div>
<script>
var video_related = [<?php echo $video["video_related"]?>];
function print_r(theObj) {
var retStr = '';
if (typeof theObj == 'object') {
retStr += '<div style="font-family:Tahoma; font-size:7pt;">';
for (var p in theObj) {
if (typeof theObj[p] == 'object') {
retStr += '<div><b>['+p+'] => ' + typeof(theObj) + '</b></div>';
retStr += '<div style="padding-left:25px;">' + print_r(theObj[p]) + '</div>';
} else {
retStr += '<div>['+p+'] => <b>' + theObj[p] + '</b></div>';
}
}
retStr += '</div>';
}
return retStr;
}

var related = print_r(video_related);
$("#video_related").html(related);
</script>

그누보드5 짧은주소(rewrite) 사용하기 - Apache 설정

그누보드5의 짧은 주소 기능을 Apache 서버에서 사용하기 위한 설정 방법이다. httpd -M 명령으로 rewrite_module 활성화 여부를 확인하고, 비활성 상태라면 00-base.conf에 LoadModule rewrite_module modules/mod_rewrite.so를 추가한다. 이후 그누보드 환경설정에서 제공하는 rewrite 규칙을 .htaccess에 붙여넣어 사용한다.

Apache 서버인 경우 rewrite_module 이 비활성화 되어 있으면 짧은 주소를 사용할수 없습니다.

위 멘트에 대한 활성화 설정방법입니다.

[root@eyedino www]# httpd -M

------------생략---------------------

negotiation_module (shared)

remoteip_module (shared)

reqtimeout_module (shared)

request_module (shared)

rewrite_module (shared) //있으면 활성된 것이고 없으면 다음단계 진입

setenvif_module (shared)

slotmem_plain_module (shared)

slotmem_shm_module (shared)

socache_dbm_module (shared)

socache_memcache_module (shared)

-------------생략------------------------

다음단계

[root@eyedino www]# nano /etc/httpd/conf.modules.d/00-base.conf

또는 vi editor

[root@eyedino www]# vi /etc/httpd/conf.modules.d/00-base.conf

마지막줄에 붙여넣기

LoadModule rewrite_module modules/mod_rewrite.so

하시면 기본설정은 끝납니다.

.htaccess 파일설정

아시는 것처럼 루트 홈폴더 에

그누보드 환경설정/짧은주소/apache 설정 코드 보기를 복사하여 붙여넣기합니다.

그누보드5 rewrite BEGIN

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^ - [L]

RewriteRule ^shop/list-([0-9a-z]+)$ shop/list.php?ca_id=$1&rewrite=1 [QSA,L]

RewriteRule ^shop/type-([0-9a-z]+)$ shop/listtype.php?type=$1&rewrite=1 [QSA,L]

RewriteRule ^shop/([0-9a-zA-Z_]+)$ shop/item.php?it_id=$1&rewrite=1 [QSA,L]

RewriteRule ^shop/([^/]+)/$ shop/item.php?it_seo_title=$1&rewrite=1 [QSA,L]

RewriteRule ^content/([0-9a-zA-Z_]+)$ bbs/content.php?co_id=$1&rewrite=1 [QSA,L]

RewriteRule ^content/([^/]+)/$ bbs/content.php?co_seo_title=$1&rewrite=1 [QSA,L]

RewriteRule ^rss/([0-9a-zA-Z_]+)$ bbs/rss.php?bo_table=$1 [QSA,L]

RewriteRule ^([0-9a-zA-Z_]+)$ bbs/board.php?bo_table=$1&rewrite=1 [QSA,L]

RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 [QSA,L]

RewriteRule ^([0-9a-zA-Z_]+)/write$ bbs/write.php?bo_table=$1&rewrite=1 [QSA,L]

RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$ bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 [QSA,L]

</IfModule>

그누보드5 rewrite END

.htaccess파일을 저장합니다.

(혹시 root 소유권 으로 실행 안될 수도 있으니 소유권도 변경 바랍니다.

[root@eyedino www]# chown eyedino.eyedino .htaccess

마지막 단계

아파치 설정파일 설정

[root@eyedino www]# nano /etc/httpd/conf/httpd.conf

또는

[root@eyedino www]# vi nano /etc/httpd/conf/httpd.conf

<Directory "/home/*****/www">

AllowOverride None -> ALL 바꿈

Allow open access:

Require all granted

</Directory>

<Directory "/home/*****/www">

AllowOverride ALL

Allow open access:

Require all granted

</Directory>

CETOS8 에서는 기본값으로

-------------생략-----------------

The following lines prevent .htaccess and .htpasswd files from being

viewed by Web clients.

<Files ".ht*">

Require all denied

</Files>

-----------생략-------------------

이부분 막아놨더군요!

<Files ".ht*">

Require all denied

</Files>

주석정리 해주시고

httpd 재시작하시면 끝~

[root@eyedino www]# systemctl restart httpd

도움이 되었으면 좋겠습니다.

자바스크립트 함수 매개변수 활용 - rest(…), arguments

자바스크립트 함수에서 매개변수를 효율적으로 활용하는 방법을 소개한다. 일반 매개변수(a, b, c)를 쓰는 기본 함수, 점 3개(rest) 문법으로 여러 인자를 배열처럼 받는 함수, 그리고 매개변수 선언 없이 arguments 객체만으로 인자에 접근하는 함수를 같은 예제로 비교하며 설명한다.

예를 들어서 아래와 같이 함수를 하나 만들고 매개변수를 a,b,c 로 주었다면 결과는 6을 토해냅니다.

<script>
function plusNumber(a, b, c) {
myNum = a + b + c;
return myNum;
}
document.write(plusNumber(1, 2, 3)); // 결과는 6
</script>

여기서 매개변수 a,b,c 는 점 3개를 찍음으로 배열과 같은 효과를 낼 수 있습니다.

<script>
function plusNumber(...n) {
myNum = n[0] + n[1] + n[2];
return myNum;
}
document.write(plusNumber(1, 2, 3)); // 결과는 6
</script>

한발 더 나가서 매개변수 자체를 쓰지 않고 아규먼츠만을 사용하는 함수를 만들 수 있습니다.

<script>
function plusNumber() {
myNum = arguments[0] +  arguments[1] +  arguments[2];
return myNum;
}
document.write(plusNumber(1, 2, 3)); // 결과는 6
</script>

그누보드 간단한 스팸 글 등록 차단하기

메인 페이지를 거치지 않고 글쓰기 페이지에 직접 접근해 스팸 글을 등록하는 것을 차단하는 방법이다. /extend/user.config.php에 세션 토큰을 검사하는 코드를 추가해, index.php를 방문했을 때만 세션을 발급하고 write_update.php나 write_comment_update.php에서 세션이 없으면 접근을 거부한다.

메인 페이지를 방문하지 않고 글작성을 시도하는 경우 차단하는 방법입니다.

  • /extend/user.config.php 에 다음의 코드를 추가해주면 됩니다.
    
    // 메인 페이지를 방문하지 않고 글작성을 시도하는 경우 차단
    $s_name = basename($_SERVER['SCRIPT_NAME']);

if ($s_name == 'index.php') {
set_session('ss_ns_token', true);
}

if ($s_name == 'write_update.php' || $s_name == 'write_comment_update.php') {
if (!get_session('ss_ns_token'))
die('허용되지 않은 접근입니다.');
}



Let's create something great together.

프로젝트 문의 및 견적 요청은 언제든 환영합니다.