렌즈의 결합부는 빛을 받으면 항상 예쁜 빛으로 빛이 난다….
멀티코팅 때문이라고 하던데… 자세한 것은 모르겠지만…^^
테스트 상황에서야 무슨 짓을 하든 무슨 상관이 있겠냐만은…
실제 운영중인 시스템을 건드리는 것은 정말 위험 천만한 일이다..
평소에 별 탈 없이 이뤄지던 DB의 스키마 변경이라던지 추가/삭제가 실제 운영중인 시스템에 야기할 수 있는 문제점은 정말 끔찍하다…
정말 당황스러운 결과가 나오는 경우도 있고… 오늘같이 실제 돈과 관련되는 일에 있어서의 오류는 정말 치명적이다…
그것오 한창 바쁠 영업시간에 말이다…
한순간의 작은 에러를 해결하기 위해 더 큰 문제를 만들 수 있는 일은 하지 않도록 하는게 좋을 것 같다.
아 머리야…………………
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
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
GUI환경에서의 Find & Replace는 너무 익숙하게도 잘 사용하고 있는데..
리눅스 콘솔상에서 vi를 이용한 작업을 할 때는 수정할 내용이 많을수록 막노동..ㅠ
그렇다고 FTP로 다운받아서 수정하고 다시 올리기는 귀찮고…
진작에 검색을 해 볼 것을 그랬다..
사용법은 단순하다..
vi편집기를 실행한 상태에서 (물론 대상이 되는 문서는 열려 있어야겠지..)
:%s/검색할문자열/바꿀문자열/g
이렇게 타이핑 후 엔터!!
수정을 원하는 모든 문자열이 변경되어 있는 신세계를 경험하게 될 것이다!!ㅎ
더 다양한 사용법들이 있지만.. 내가 필요한 것은 이정도면 충분하니까 패스~ㅎ
———- 추가… 혹시 모르니 원문 링크 및 내용…ㅎ ————-
http://vim.wikia.com/wiki/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
:s/foo/bar/g
:%s/foo/bar/gc
:%s/\<foo\>/bar/gc
:%s/foo/bar/gci
:set noignorecase
to make searches case sensitive (the default).:%s/foo/bar/gcI
: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, l
to 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.
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’. |
\%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/
:%s//bar/g
foo
then press *
to search for that word.:%s/foo/<c-r><c-w>/g
<c-r><c-w>
means that you press Ctrl-R then Ctrl-W.:%s/foo/<c-r><c-a>/g
<c-r><c-a>
means that you press Ctrl-R then Ctrl-A.:%s/foo/<c-r>a/g
<c-r>a
means that you press Ctrl-R then a
.:%s/foo/\=@a/g
\=@a
is a reference to register ‘a’.:%s//<c-r>//g
/
register (the last search pattern)./
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
*
register) with ‘bar’ (see next example if multiline).*
register.:%s/<c-r>a/bar/g
<c-r>a
means that you press Ctrl-R then a
. The contents of register ‘a’ will be inserted as though you typed it.^M
and are not found.^M
is manually replaced with ‘\n’ (two characters: backslash, ‘n’).:%s/<c-r>=substitute(@a,"\n",'\\n','g')<CR>/bar/g
"\n"
(double quotes) represents the single character newline; the '\\n'
(single quotes) represents two backslashes followed by ‘n
‘.substitute()
function is evaluated by the <c-r>=
(Ctrl-R =
) expression register; it replaces each newline with a single backslash followed by ‘n
‘.<CR>
indicates that you press Enter to finish the =
expression.See Paste registers in search or colon commands instead of using the clipboard.
:%s/foo/bar/
:%s/.*\zsfoo/bar/
:%s/\<foo\>//g
:%s/\<foo\>.*//
:%s/\<foo\>.\{5}//
:%s/\<foo\>\zs.*//
:%s/.*\<foo\>//
:%s/.*\ze\<foo\>//
:%s/.*\(\<foo\>\).*/\1/
:s/^\(\w\)/\u\1/
\u
(see switching case of characters).:%s/\(.*\n\)\{5\}/&\r/
\(.*\n\)
(any line including its line ending) repeated five times (\{5\}
).&
(the text that was found), followed by \r
(newline).:%s/\<foo\(\a*\)\>/\=len(add(list, submatch(1)))?submatch(0):submatch(0)/g
modified
flag, because of the replacement, but the content is unchanged.:%s/\<foo\(\a*\)\>/\=add(list, submatch(1))/gn
For substituting patterns with a corresponding case-sensitive text, Michael Geddes’s keepcase plugin can be used, e.g.:
:%SubstituteCase/\cHello/goodBye/g
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.