Linux2009. 8. 6. 10:13
저번에 두번 정도 시스템 말아 먹은 강력한 녀석인데..
버그인지 모르겠지만

grep -rnI "keyworld" ./ > log.find

이런식으로 검색을 하면, 검색이 끝나지 않고 파일이 무한대로 커지는 문제가 있다.
저렇게 언제 끝나나 냅두고 있으면... 시스템 뻗으니 주의!!!
Posted by 구차니
Linux2009. 8. 4. 15:45
bash 쉘 스크립트에서 변수를 선언하는 방법은 다음과 같다.
VARIABLE=VALUE

그리고 변수를 읽는 방법은 다음과 같다.
VAR2=$VARIABLE

아무튼, 다른 변수에 변수들을 조합해서 내용을 넣는데
공백이 들어가는 문자열의 경우에는 한번에 변수로 들어가지 않는다.
$ test=123 456 789
-bash: 456: command not found

그런 이유로, 문자열은 " "로 넣어주어야 한다.
$ test="123 456 789"

' '는 안에 변수가 있다고 하더라도 치환하지 않고 그냥 출력한다.
$ test="123 456 789"
$ echo '$test'
$test

{}는 함수이다. 즉, 어떠한 내용을 변형 후 값으로 사용하려면 ${} 라고 하면된다.
()는 변수를 감싸준다. 그냥 $(VAR) 이런식으로 사용한다.

선언되지 않은 변수를 사용할 경우에는 null 문자이므로 출력되지 않으나(bash에서)
busybox(ver 1.10.1) 에서는 오작동을 하는 문제가 보였다.

예를 들어
VAR="test string $undefined hello world"를 출력하려고 하면
hello world만 나온다.


참고 링크
[링크 : http://kaludin.egloos.com/2334564]
[링크 : http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html]

'Linux' 카테고리의 다른 글

busybox route 명령어  (0) 2009.08.06
grep -r 옵션은 주의!  (0) 2009.08.06
bash - eval  (0) 2009.08.03
/proc/cmdline 내용 읽어오기  (0) 2009.08.03
setenv() - change or add an environment variable  (4) 2009.08.03
Posted by 구차니
Linux2009. 8. 3. 17:31
eval [arg ...]
    The args are read and concatenated together into a single command.
    This command is then read and executed by the shell,  and its exit status is returned as the value of eval.
    If there are no args, or only null arguments, eval returns 0.

변수들을 합쳐주고, 실행까지 해준다고 한다.
export 명령어를 args에 넣고 하면 가능할 듯하다.
물론 child process를 생성해서 실행하게 되므로 export를 한다고 해도,
변수의 값이 변경되거나 생성되지는 않는다.(스크립트 종료와 함께 사라짐)

[링크 : http://www.unix.com/unix-dummies-questions-answers/43969-set-variable-awk-output.html]
Posted by 구차니
Linux2009. 8. 3. 14:54
$ ll /proc/cmdline
-r--r--r-- 1 root root 0 Aug  3 14:52 /proc/cmdline

보다시피 파일 시스템 상에서 파일 크기가 0으로 나온다.
그런 이유로 stat , fseek + ftell 을 해도 크기가 0으로 밖에 나오지 않는다.


아무튼 결국에 파일길이를 알아내지 못하므로
그냥 while(!feof(fp)) 로 일일이 길이 체크 하면서 읽어와야 한다.
Posted by 구차니
Linux2009. 8. 3. 11:47
SETENV(3)                  Linux Programmer’s Manual                 SETENV(3)

NAME
       setenv - change or add an environment variable

SYNOPSIS
       #include <stdlib.h>

       int setenv(const char *name, const char *value, int overwrite);

       int unsetenv(const char *name);

DESCRIPTION
       The  setenv()  function  adds the variable name to the environment with the value value, if name does not already
       exist.  If name does exist in the environment, then its value is changed to value if overwrite  is  non-zero;  if
       overwrite is zero, then the value of name is not changed.

       The unsetenv() function deletes the variable name from the environment.

RETURN VALUE
       The  setenv()  function  returns  zero on success, or -1 if there was insufficient space in the environment.  The
       unsetenv() function returns zero on success, or -1 on error, with errno set to indicate the cause of the error.

ERRORS
       EINVAL name contained an ’=’ character.

CONFORMING TO
       4.3BSD, POSIX.1-2001.

NOTES
       Prior to glibc 2.2.2, unsetenv() was prototyped  as  returning  void;  more  recent  glibc  versions  follow  the
       POSIX.1-2001-compliant prototype shown in the SYNOPSIS.

BUGS
       POSIX.1-2001  specifies  that if name contains an ’=’ character, then setenv() should fail with the error EINVAL;
       however, versions of glibc before 2.3.4 allowed an ’=’ sign in name.

SEE ALSO
       clearenv(3), getenv(3), putenv(3), environ(7)

BSD                               2004-05-09                         SETENV(3)


환경변수를 바꾸어 보려고 했더니, 프로그램 종료 후에는 그 환경변수를 사라지는 문제가 발생했다.
혹시나 해서 찾아 봤더니 원래 그렇다고 한다.
음.. 고정시키는 방법은 없을려나..

고정 시키려면  직접적으로 할 수는 없고, 스크립트를 하나 만들어 실행시키는 방법외에는 없다고 한다.

[링크 : http://kldp.org/node/88770]


그리고, setenv() 사용시, 변수 치환은 되지 않는다.
예를 들어 A=str B=test 로 선언하고
setenv("C","$A $B",1) 라고 해도 C=str test 로 입력되지 않는다.

[링크 : http://forum.falinux.com/zbxe/?document_srl=408397]
Posted by 구차니
Linux2009. 8. 1. 13:04
var=$(cat filename)



참~~~ 쉽죠~
(찾는데 한참 걸림 ㅠ.ㅠ)


[링크 : http://wonylog.tistory.com/192]
[링크 : http://ttongfly.net/zbxe/?document_srl=45340&mid=scriptprogramming]
Posted by 구차니
Linux2009. 7. 31. 18:59
ip - show / manipulate routing, devices, policy routing and tunnels

   ip route flush - flush routing tables
       this command flushes routes selected by some criteria.

       The arguments have the same syntax and semantics as the arguments of ip route show, but routing  tables  are  not
       listed but purged.  The only difference is the default action: show dumps all the IP main routing table but flush
       prints the helper page.

       With the -statistics option, the command becomes verbose. It prints out the number of deleted routes and the num-
       ber  of  rounds  made to flush the routing table. If the option is given twice, ip route flush also dumps all the
       deleted routes in the format described in the previous subsection.

ip link show [ DEVICE ]
ip route { list | flush } SELECTOR

ip route flush [dev]
라고 하면 한번에 플러시가 된다...

ex) ip route flush eth0

--------------
2009.08.05 해보니 안된다... ㄱ- 뭥미?

ip route flush all
하니 전체 플러시가 된다...(먼산)
Posted by 구차니
Linux2009. 7. 31. 13:40
start-stop-daemon은 rc.d 에서 사용하는 녀석인데..
프로그램인지, 스크립트인지는 모르겠다.


간단하게 데몬 프로그램을 실행하고 자동으로 추적해서 죽이는 녀석이다.
service xinetd start / stop / restart
등의 녀석을 구현해주는 착한 녀석이다.

OPTIONS

-x|--exec executable
    Check for processes that are instances of this executable (according to /proc/pid/exe ).
-p|--pidfile pid-file
    Check whether a process has created the file pid-file.
-u|--user username|uid
    Check for processes owned by the user specified by username or uid.
-g|--group group|gid
    Change to group or gid when starting the process.
-n|--name process-name
    Check for processes with the name process-name (according to /proc/pid/stat).

아무튼, -x 로 되어서 제대로 찾지를 못해 죽이지 못하길래
-n 으로 해주었더니 인자에 문제가 있었는지 못죽였다.
아무튼 -n의 경우에는 경로가 아니라 실행파일의 이름만 넣어주면 된다.

예를 들어 /sbin/udhcpc의 경우에는
-name udhcpc 하면 종료해준다.





[링크 : http://olympus.het.brown.edu/cgi-bin/man/man2html?start-stop-daemon+8]
Posted by 구차니
Linux2009. 7. 23. 13:21
FC6에서 종료를 하는데
Power down.
acpi_power_off called
라는 메시지가 나오면서 자동으로 전원이 꺼지지 않는 문제가 발생을 했다.

전에는 안그랬는데 머여.. 라고 하면서 꼼지락 댔는데..
BIOS 상에서 ACPI는 enable 했고
결국에 문제는 데스크탑인데 apmd 을 켜놔서 충돌이 있었나보다.

아무튼 service에서 apmd를 꺼주니 별다른 설정없이 해결 -ㅁ-



뭥미!?
Posted by 구차니
Linux2009. 7. 21. 14:19
ctrl-shift-f 로 디렉토리 검색하거나 하는 것과 유사하게
grep을 이용하는데
주로 사용하는 옵션은 rni이다.

NAME
       grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]

       -I     Process  a  binary  file as if it did not contain matching data;
                this is equivalent to the --binary-files=without-match option.

       -i, --ignore-case
              Ignore case distinctions in both the PATTERN and the input files.

       -n, --line-number
              Prefix each line of output with the line number within its input file.

       -R, -r, --recursive
              Read all files under each directory, recursively; this is equivalent to the -d recurse option.

grep -rniI "검색어" "검색시작 경로"

의 양식으로 사용하며
예를 들어 현재 위치 아래로 test_str 이라는 것을 검색하려면

grep -rniI test_str ./

라고 하면된다.
Posted by 구차니