카테고리 글 목록: IT

IT에 관련된 내용들이..

Linux wget 명령어 활용법

리눅스를 사용하다보면 다양한 이유로 다른 서버의 파일들을 가져와야 할 경우가 발생한다.

예를들어 서버 이전을 한다거나.. 새로운 프로그램 설치를 위해 다운로드를 받는다거나… 하는 여러 이유로

종종 사용하게 된다.. 나의 경우 호스팅 서버에서 다른 서버로 이전할 때 계정의 DB Dump와 소스 파일들을 tar로 묶고

바로 대상서버로 이전시키는 용도로 많이 사용한다.

FTP로 로컬로 받아서 다시 서버로 올려야하는 불편함이 줄어든다.

기본적인 사용법은 다음과 같다.

wget http://파일주소

322

위와같이 하면 현재 위치한 디렉터리로 파일이 받아진다. 완전 쉽죠잉~?

단순히 저렇게만 사용해서 편리함이 이루 말 할 수 없는데..

다양한 옵션들까지 제공한다.. 이 얼마나 친절한가!

 

다 설명할 순 없고 몇 가지 정말 유용한 옵션들을 적어본다.

1. 다운로드 속도 제한하기

서버를 운영하다보면 이용중인 회선에 따라 다르겠지만 대역폭 관리가 참 중요하다.

한 계정에서 큰 파일을 수시로 다운로드 하면서 서버 회선의 대역을 다 써버리면…?

다른 계정의 이용자들이 불편함을 겪는다.. 서버 응답이 느려지고 전송속도가 느려지니 답답할 따름…

wget으로 서버 이전할 때 별다른 옵션이 없으면 가능한 최대 속도로 전송을 하게 된다.

이럴 때 일정 속도로 다운로드를 제한하는 방법은 다음과 같다.

wget –limit-rate=5000k http://파일주소

323

위와같이 입력하고 엔터를 땅! 치면…

다운로드 속도는 5Mbps(=5000Kbps)로 제한되며..

해당 서버의 전체 대역 중 5Mbps만을 사용해서 데이터를 땡겨 올(전문용여죠 ㅎㅎ) 수 있는것이다.

10Mbps로 다운을 받으려면…?

옵션을 –limit-rate=10000k와 같이 입력하면 된다.

참 쉽죠잉~?

2. 백드라운드로 다운받기

wget으로 다운을 받으면 fore ground로 다운을 받으므로 다른 작업을 할 수 없다..

다른 커맨드 창으로 또 접속을 하거나 다운이 끝날 때 까지 기다려야 다른 작업을 할 수 있는 것이다.

이런 문제점을 해결하기 위해서 백그라운드로 다운로드할 수 있는 옵션이 있다.

wget -b http://파일주소

324

위와같이 명령을 하면 백그라운드로 다운로드가 진행이 되고 다른 작업을 진행 할 수 있다.

백그라운드로 다운로드를 받는데.. 어느정도 다운이 받아지는지 궁금하다?

그럼 어떻게 해야할까요~?

다음과 같이 입력하면 백그라운드로 다운로드중인 내역을 볼 수 있습니다.

tail -f wget-log

325

tail을 종료하려면~? Ctrl + C 를 누르면 됩니다.

3. 이어받기

파일을 다운로드 받다가 갑자기 오류 혹은 실수로 다운로드를 종료시켜버린 경우…?

걱정 마셔요~ 친절한 wget씨는 이어받기 옵션을 제공합니다.

사용법 또한 매~우 간단한데요^^

다음을 보실까요~?

wget -c http://파일주소

위와같이 입력해주시면 이어받기가 시작됩니다.

참 쉽죠~?

쉬운 옵션들이니까 외워두면 정말 유용합니다.

4. 다운로드 URL이 파라미터 형태일 때 정상적인 파일 받기

게시판 등에서 파일을 다운로드 할 때 주소가 http://www.pulli.me/download.php?id=1234

와 같을 경우 파일은 id=1234 그리고 파일은..? 내가 원하는 파일이 아니고 해당 스크립트가 실행된 결과값이 저장된다.

이럴 경우 정상적으로!! 원래 다운로드 받고자 한 파일을 받아오는 옵션이 있다.

다음과 같다.

wget -O http://kalcapt,net/download.php?id=1234

위와 같이 입력하면 원하던 파일이 정상적으로 다운로드 된다.

 

상황에 따라서 유용한 옵션들만 적어보았다..

기타 옵션이 궁금하다면.. wget -h 를 입력해서 매뉴얼을 보도록 하자.

mb_strimwidth – 원하는 길이로 문자열 컷 하고 뒤에 특정 문자열 붙이는 편리한 함수

후암..
기존에 최근 게시물 등에서 문자열 원하는 길이만큼 잘라내고 뒤에 …을 붙이려면 euc_kr과 utf-8간의 차이..
php에서 한글과 영문, 특수문자 등이 섞여있는 문자열에서 바이트 단위로 자르다보니 한글이 깨진다거나 하는 불상사가 발생하기에 이를 보완하기 위해 다양한 함수들을 만들어서 사용했는데..

PHP버전 5 이상부터는 mb_strimwidth이라는 함수를 지원한다네??? 헐랭…
그동한 했떤 삽질이 원망스러워지는 순간…

string mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker [, string $encoding ]] )

위와같은 사용법..
예를들면 mb_strimwidth(“가나다라마바사아타차카타파하”, 0, 5, ‘…’, ‘utf-8’);
과 같이 사용하면 결과는 ‘가나다라마’가 된다는 것!

잘 써먹어야겠다…

특정 명령어를 일정 시간마다 반복실행시키기

watch -n 원하는 초(0.1초 등 가능) ‘명령어’

이렇게 실행을 하면 해당 시간을 간격으로 동일 명령어가 실행된다…

예를들어 1초마다 시간을 한번씩 보고싶다 하면

watch -n 1 ‘date’와 같이 입력하면 매초 현재의 시간이 콘솔에 표시된다.

 

 

Oracle 서버 IP 변경 시 해줘야 할 것들…

– 오라클 설치 경로로 이동

– listener.ora 파일의 IP 관련 부분 수정

– tnsnames.ora 파일의 IP 관련 부분 수정

– 제어판 > 관리도구 > 서비스 > 오라클 리스너 재시작…(이라고는 하는데 리스너만 재시작해서는 적용이 안되는 듯… 서버 재부팅을 해주면 잘 변경됌!)

출처는 http://expert0226.tistory.com/227 이곳!!^^

특정 패키지를 yum으로부터 보호하기

yum은 기본적으로 자기자신을 삭제로부터 보호한다. 별도의 패키지를 보호하려면 /etc/yum/protected.d 디렉토리에 원하는 패키지를 기록하면 된다. 예를 들어 php를 보호하고 싶으면

$sudo vi /etc/yum/protected.d/php.conf

php-common

php-cli

php

php-pdo

이제 php, php-common, php-cli, php-pdo 패키지는 yum으로 삭제할 수 없다.

설정 파일의 php.conf 라는 이름은 임의적이다. 본인이 원하는 값을 쓰면 된다.

참고 : Configuration for Package Protection

이 방법은 어디까지나 삭제를 막아주는 것이며, 업데이트를 피할 수는 없다.

두번째 방법은 업데이트를 막는 방법이다.

$sudo vi /etc/yum.conf

다음 줄을 추가한다.

exclude=php-*

이제 “php-“로 시작하는 패키지는 업데이트 대상에서 제외된다.

 

출처블로그 – http://blog.daum.net/1004dan/22

rdate 서버 시간 동기화하기

Centos 5.8을 사용하다가 7.x로 넘어온 지금…

세팅한지는 한달이 다되가는데..
시간대가 한국보다 하루가량 빠른걸 발견하고 rdate로 시간을 맞추려 했는데…
이런.. rdate가 설치되어있지 않군…!

알아보니 Centos 7.x minimal에는 rdate가 들어있지 않다는…

yum으로 rdate를 설치하자…

yum -y install rdate

그리고 시간을 맞추자~

rdate -s time.bora.net

끝~~
일정 시간마다 동기화하려면 cron에 등록을…

# vi /etc/crontab

SHELL=/bin/
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs
# Example of job definition:
# .—————- minute (0 – 59)
# |  .————- hour (0 – 23)
# |  |  .———- day of month (1 – 31)
# |  |  |  .——- month (1 – 12) OR jan,feb,mar,apr …
# |  |  |  |  .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

# date time sync
0 5 * * * root /usr/bin/rdate -s time.bora.net && /sbin/hwclock -w
시스템이 재부팅될 때 동기화하려면!! 다음과 같이..

# vi /etc/rc.d/rc.local
#!/bin/sh
# date sync
/usr/bin/rdate -s time.bora.net
/sbin/hwclock -w

vi에서 search and replace (검색과 변환)

GUI환경에서의 Find & Replace는 너무 익숙하게도 잘 사용하고 있는데..
리눅스 콘솔상에서 vi를 이용한 작업을 할 때는 수정할 내용이 많을수록 막노동..ㅠ
그렇다고 FTP로 다운받아서 수정하고 다시 올리기는 귀찮고…

진작에 검색을 해 볼 것을 그랬다..

사용법은 단순하다..

vi편집기를 실행한 상태에서 (물론 대상이 되는 문서는 열려 있어야겠지..)
:%s/검색할문자열/바꿀문자열/g
이렇게 타이핑 후 엔터!!
수정을 원하는 모든 문자열이 변경되어 있는 신세계를 경험하게 될 것이다!!ㅎ

더 다양한 사용법들이 있지만.. 내가 필요한 것은 이정도면 충분하니까 패스~ㅎ

———- 추가… 혹시 모르니 원문 링크 및 내용…ㅎ ————-

http://vim.wikia.com/wiki/Search_and_replace

Basic search and replace

The :substitute command searches for a text pattern, and replaces it with a text string. There are many options, but these are what you probably want:

:%s/foo/bar/g
Find each occurrence of ‘foo’ (in all lines), and replace it with ‘bar’.
:s/foo/bar/g
Find each occurrence of ‘foo’ (in the current line only), and replace it with ‘bar’.
:%s/foo/bar/gc
Change each ‘foo’ to ‘bar’, but ask for confirmation first.
:%s/\<foo\>/bar/gc
Change only whole words exactly matching ‘foo’ to ‘bar’; ask for confirmation.
:%s/foo/bar/gci
Change each ‘foo’ (case insensitive) to ‘bar’; ask for confirmation.
This may be wanted after using :set noignorecase to make searches case sensitive (the default).
:%s/foo/bar/gcI
Change each ‘foo’ (case sensitive) to ‘bar’; ask for confirmation.
This may be wanted after using :set ignorecase to make searches case insensitive.

The g flag means global – each occurrence in the line is changed, rather than just the first. This tip assumes the default setting for the 'gdefault' and 'edcompatible' option (off), which requires that the g flag be included in %s///g to perform a global substitute. Using :set gdefault creates confusion because then %s/// is global, whereas %s///g is not (that is, g reverses its meaning).

When using the c flag, you need to confirm for each match what to do. Vim will output something like: replace with foobar (y/n/a/q/l/^E/^Y)? (where foobar is the replacement part of the :s/.../.../ command. You can type y which means to substitute this match, n to skip this match, a to substitute this and all remaining matches (“all” remaining matches), q to quit the command, lto substitute this match and quit (think of “last”), ^E to scroll the screen up by holding the Ctrl key and pressing E and ^Y to scroll the screen down by holding the Ctrl key and pressing Y. However, the last two choices are only available, if your Vim is a normal, big or huge built or the insert_expand feature was enabled at compile time (look for +insert_expand in the output of :version).

Also when using the c flag, Vim will jump to the first match it finds starting from the top of the buffer and prompt you for confirmation to perform replacement on that match. Vim applies the IncSearch highlight group to the matched text to give you a visual cue as to which match it is operating on (set to reverse by default for all three term types as of Vim 7.3). Additionally, if more than one match is found and you have search highlighting enabled with :set hlsearch, Vim highlights the remaining matches with the Search highlight group. If you do use search highlighting, you should make sure that these two highlight groups are visually distinct or you won’t be able to easily tell which match Vim is prompting you to substitute.

DetailsEdit

Search range:

:s/foo/bar/g Change each ‘foo’ to ‘bar’ in the current line.
:%s/foo/bar/g Change each ‘foo’ to ‘bar’ in all the lines.
:5,12s/foo/bar/g Change each ‘foo’ to ‘bar’ for all lines from line 5 to line 12 (inclusive).
:'a,'bs/foo/bar/g Change each ‘foo’ to ‘bar’ for all lines from mark a to mark b inclusive (see Note below).
:'<,'>s/foo/bar/g When compiled with +visual, change each ‘foo’ to ‘bar’ for all lines within a visual selection. Vim automatically appends the visual selection range (‘<,’>) for any ex command when you select an area and enter :. Also, see Note below.
:.,$s/foo/bar/g Change each ‘foo’ to ‘bar’ for all lines from the current line (.) to the last line ($) inclusive.
:.,+2s/foo/bar/g Change each ‘foo’ to ‘bar’ for the current line (.) and the two next lines (+2).
:g/^baz/s/foo/bar/g Change each ‘foo’ to ‘bar’ in each line starting with ‘baz’.
Note: As of Vim 7.3, substitutions applied to a range defined by marks or a visual selection (which uses a special type of marks ‘< and ‘>) are not bounded by the column position of the marks by default. Instead, Vim applies the substitution to the entire line on which each mark appears unless the \%V atom is used in the pattern like: :'<,'>s/\%Vfoo/bar/g.

When searching:

., *, \, [, ], ^, and $ are metacharacters.
+, ?, |, {, }, (, and ) must be escaped to use their special function.
\/ is / (use backslash + forward slash to search for forward slash)
\t is tab, \s is whitespace
\n is newline, \r is CR (carriage return = Ctrl-M = ^M)
\{#\} is used for repetition. /foo.\{2\} will match foo and the two following characters. The \ is not required on the closing } so /foo.\{2} will do the same thing.
\(foo\) makes a backreference to foo. Parenthesis without escapes are literally matched. Here the \ is required for the closing \).

When replacing:

\r is newline, \n is a null byte (0x00).
\& is ampersand (& is the text that matches the search pattern).
\0 inserts the text matched by the entire pattern
\1 inserts the text of the first backreference. \2 inserts the second backreference, and so on.

You can use other delimiters with substitute:

:s#http://www.example.com/index.html#http://example.com/#

Save typing by using \zs and \ze to set the start and end of a pattern. For example, instead of:

:s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/

Use:

:s/Copyright \zs2007\ze All Rights Reserved/2008/

Using the current word or registersEdit

:%s//bar/g
Replace each match of the last search pattern with ‘bar’.
For example, you might first place the cursor on the word foo then press * to search for that word.
The above substitute would then change all words exactly matching ‘foo’ to ‘bar’.
:%s/foo/<c-r><c-w>/g
Replace each occurrence of ‘foo’ with the word under the cursor.
<c-r><c-w> means that you press Ctrl-R then Ctrl-W.
The word under the cursor will be inserted as though you typed it.
:%s/foo/<c-r><c-a>/g
Replace each occurrence of ‘foo’ with the WORD under the cursor (delimited by whitespace).
<c-r><c-a> means that you press Ctrl-R then Ctrl-A.
The WORD under the cursor will be inserted as though you typed it.
:%s/foo/<c-r>a/g
Replace each occurrence of ‘foo’ with the contents of register ‘a’.
<c-r>a means that you press Ctrl-R then a.
The contents of register ‘a’ will be inserted as though you typed it.
:%s/foo/\=@a/g
Replace each occurrence of ‘foo’ with the contents of register ‘a’.
\=@a is a reference to register ‘a’.
The contents of register ‘a’ is not shown in the command. This is useful if the register contains many lines of text.
:%s//<c-r>//g
Replace each match of the last search pattern with the / register (the last search pattern).
After pressing Ctrl-R then / to insert the last search pattern (and before pressing Enter to perform the command), you could edit the text to make any required change.
:%s/<c-r>*/bar/g
Replace all occurrences of the text in the system clipboard (in the * register) with ‘bar’ (see next example if multiline).
On some systems, selecting text (in Vim or another application) is all that is required to place that text in the * register.
:%s/<c-r>a/bar/g
Replace all occurrences of the text in register ‘a’ with ‘bar’.
<c-r>a means that you press Ctrl-R then a. The contents of register ‘a’ will be inserted as though you typed it.
Any newlines in register ‘a’ are inserted as ^M and are not found.
The search works if each ^M is manually replaced with ‘\n’ (two characters: backslash, ‘n’).
This replacement can be performed while you type the command:

:%s/<c-r>=substitute(@a,"\n",'\\n','g')<CR>/bar/g
The "\n" (double quotes) represents the single character newline; the '\\n' (single quotes) represents two backslashes followed by ‘n‘.
The substitute() function is evaluated by the <c-r>= (Ctrl-R =) expression register; it replaces each newline with a single backslash followed by ‘n‘.
The <CR> indicates that you press Enter to finish the = expression.

See Paste registers in search or colon commands instead of using the clipboard.

Additional examplesEdit

:%s/foo/bar/
On each line, replace the first occurrence of “foo” with “bar”.
:%s/.*\zsfoo/bar/
On each line, replace the last occurrence of “foo” with “bar”.
:%s/\<foo\>//g
On each line, delete all occurrences of the whole word “foo”.
:%s/\<foo\>.*//
On each line, delete the whole word “foo” and all following text (to end of line).
:%s/\<foo\>.\{5}//
On each line, delete the first occurrence of the whole word “foo” and the following five characters.
:%s/\<foo\>\zs.*//
On each line, delete all text following the whole word “foo” (to end of line).
:%s/.*\<foo\>//
On each line, delete the whole word “foo” and all preceding text (from beginning of line).
:%s/.*\ze\<foo\>//
On each line, delete all the text preceding the whole word “foo” (from beginning of line).
:%s/.*\(\<foo\>\).*/\1/
On each line, delete all the text preceding and following the whole word “foo”.
:s/^\(\w\)/\u\1/
If the first character at the beginning of the current line is lowercase, switch it to uppercase using \u (see switching case of characters).
:%s/\(.*\n\)\{5\}/&\r/
Insert a blank line every 5 lines.
The pattern searches for \(.*\n\) (any line including its line ending) repeated five times (\{5\}).
The replacement is & (the text that was found), followed by \r (newline).
:%s/\<foo\(\a*\)\>/\=len(add(list, submatch(1)))?submatch(0):submatch(0)/g
Get a list of search results. (the list must exist)
Sets the modified flag, because of the replacement, but the content is unchanged.
Note: With a recent enough Vim (version 7.3.627 or higher), you can simplify this to:
:%s/\<foo\(\a*\)\>/\=add(list, submatch(1))/gn
This has the advantage, that the buffer won’t be marked modified and no extra undo state is created. The expression in the replacement part is executed in the sandbox and not allowed to modify the buffer.

Special casesEdit

For substituting patterns with a corresponding case-sensitive text, Michael Geddes’s keepcase plugin can be used, e.g.:

:%SubstituteCase/\cHello/goodBye/g
Substitute ‘Hello hello helLo HELLO’ by ‘Goodbye goodbye goodBye GOODBYE’

For changing the offsets in a patch file (line number of a block), this little snippet can be used:

s/^@@ -\(\d\+\),\(\d\+\) +\(\d\+\),\(\d\+\) @@$/\="@@ -".eval(submatch(1)+offsetdiff).",".submatch(2)." +".eval(submatch(3)+offsetdiff).",".submatch(4)." @@"/g

Useful when we want to strip some blocks from a patch, without patch having to complain about offset differences.

Note Should try to make the expression more compact, but don’t know how without having the possibility of modifying unwanted lines.

wget 다운로드 속도 제한걸기 (client side)

일반적으로 다운로드 속도를 제한하며 다운받을 일은 없지만..
제한적인 네트워크에서 다른 서비스에 방해되지 않게 일정 대역 이하로 다운로드를 해야 할 일이 생겼다.
그래서 검색을 했더니 바로 나오는군…

사용법은 간단하다..

wget –limit-rate=5000k http://다운로드주소

위와같이 명령을 하면 초당 최대 50Mbps 즉, 초당 최대 5MB씩만 받아오게 된다.

끝~