설치전 드라이버 확인 방법 : http://assetin.tistory.com/88
Dell용 노트북에 OSX 설치하기 : http://projectresearch.co.kr/2007/09/22/dell-%EB%85%B8%ED%8A%B8%EB%B6%81%EC%97%90-osx-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/
WRITTEN BY
- 정현석
이것저것 끄적끄적....
$ chmod u+x myscript.sh |
$ myscript.sh myscript.sh: command not found |
$ mkdir ~/bin ; cp myscript.sh ~/bin/ ; PATH=$PATH:~/bin $ cp myscript.sh /user/local/bin $ ./myscript.sh $ /home/greenfish/work/myscript.sh |
MYSTRING=abc if [ $MYSTRING = abc ] ; then echo "The variable is abc" fi |
if [ $MYSTRING != abc ] ; then echo "$MYSTRING is not abc"; fi |
MYNUMBER=1 if [ $MYNUMBER -eq 1 ] ; then echo "MYNUMBER equals 1"; fi if [ $MYNUMBER -lt 2 ] ; then echo "MYNUMBER <2"; fi if [ $MYNUMBER -le 1 ] ; then echo "MYNUMBER <=1"; fi if [ $MYNUMBER -gt 0 ] ; then echo "MYNUMBER >0"; fi if [ $MYNUMBER -ge 1 ] ; then echo "MYNUMBER >=1"; fi |
filename="$HOME" if [ -e $filename ] ; then echo "$filename exists"; fi if [ -f "$filename" ] ; then echo "$filename is a regular file" elif [ -d "$filename" ] ; then echo "$filename is a directory" else echo "I have no idea what $filename is" fi |
Operator | 설명 |
-a file | 파일 존재 여부 체크 (-e와 동일) |
-b file | special block device 파일인지 체크 |
-c file | special device 파일인지 체크 (예, serial device) |
-d file | 디렉토리 체크 |
-e file | 파일 존재 여부 체크 (-a와 동일) |
-f file | 파일이 존재하고 정규 파일인지 체크 (directory, socket, pipe, link, device 등은 아님) |
-g file | set-group-id bit가 세팅된 파일인지 체크 |
-h file | 심볼릭 링크인지 체크 (-L과 동일) |
-k file | sticky bit가 세팅된 파일인지 체크 |
-L file | 심볼릭 링크인지 체크 (-h와 동일) |
-n string | 문자열 길이가 0 byte 이상인지 체크 |
-o file | 당신이 소유한 파일인지 체크 |
-p file | named pipe 파일인지 체크 |
-r file | 당신이 읽을 수 있는 파일인지 체크 |
-s file | 파일이 존재하고, socket인지 체크 |
-t fd | terminal에 연결된 파일 descriptor인지 체크 |
-u file | set-user-id bit가 세팅된 파일인지 체크 |
-w file | 당신이 쓸수 있는 파일인지 체크 |
-x file | 당신이 실행할 수 있는 파일인지 체크 |
-z string | 문자열 길이가 0 byte 인지 체크 |
expr1 -a expr2 | 처음과 두번째 expression이 true인지 체크 |
expr1 -o expr2 | 처음과 두번째 expression중 하나가 true인지 체크 |
file1 -nt file2 | 처음 파일이 두번째 파일보다 새 파일인지 체크 |
file1 -ot file2 | 처음 파일이 두번째 파일보다 오래된 파일인지 체크 |
file1 -ef file2 | 두개의 파일이 하드 혹은 심볼릭 링크로 연결되어 있는지 체크 |
var1 = var2 | 두개의 값이 동일한지 체크 |
var1 -eq var2 | 두개의 값이 동일한지 체크 |
var1 -ge var2 | 첫번째 값이 두번째 값보다 같거나 큰지 체크 |
var1 -gt var2 | 첫번째 값이 두번째 값보다 큰지 체크 |
var1 -le var2 | 첫번째 값이 두번째 값보다 같거나 작은지 체크 |
var1 -lt var2 | 첫번째 값이 두번째 값보다 작은지 체크 |
var != var2 | 두개의 값이 다른지 체크 |
var -ne var2 | 두개의 값이 다른지 체크 |
case “$VAR” in string1) { action1 };; string2) { action2 };; *) { default action } ;; esac |
/etc/init.d$ cat networking PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" [ -x /sbin/ifup ] || exit 0 . /lib/lsb/init-functions # helper function to set the usplash timeout. https://launchpad.net/bugs/21617 process_options() { check_network_file_systems() { if [ -e /etc/iscsi/iscsi.initramfs ]; then exec 9<&0 < /proc/mounts case "$1" in stop) log_action_begin_msg "Deconfiguring network interfaces" force-reload|restart) log_action_begin_msg "Reconfiguring network interfaces" *) exit 0 |
for NUMBER in 0 1 2 3 4 5 6 7 8 9 do echo The number is $NUMBER done |
for FILE in `/bin/ls`; do echo $FILE; done |
"VAR=0" while [ $VAR -lt 3 ]; do echo $VAR VAR=$[$VAR+1] done |
아래의 예로, /tmpp가 없는 경우, 에러 메시지는 stderr로 보내지고, /tmp의 list로 부터 나온 output은 stdout으로 출력됩니다.
$ ls /tmp /tmpp ls: cannot access /tmpp: No such file or directory /tmp: orbit-gdm pulse-PKdhtXMmr18n |
$ ls /tmp /tmmp > output.txt ls: cannot access /tmmp: No such file or directory $ ls /tmp /tmmp 2> errors.txt /tmp: orbit-gdm pulse-PKdhtXMmr18n $ ls /tmp /tmmp 2> errors.txt > ouptput.txt $ ls /tmp /tmmp > everything.txt 2>&1 |
$ ls /tmp orbit-gdm pulse-PKdhtXMmr18n $ ls /tmp > /dev/null $ |
$ ls /tmp/ /tmmp | sort ls: cannot access /tmmp: No such file or directory orbit-gdm pulse-PKdhtXMmr18n /tmp/: $ ls /tmp/ /tmmp 2> /dev/null | sort orbit-gdm pulse-PKdhtXMmr18n /tmp/: $ |
$ dpkg-query -l | grep -i sql | wc -l 3 $ ps auwx | grep firefox 1000 3136 0.0 0.1 3320 808 pts/6 S+ 19:04 0:00 grep --color=auto firefox $ ps auwx | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 2664 1608 ? Ss 16:43 0:01 /sbin/init ... : ... $ whereis -m bash | awk '{print $2}' /usr/share/man/man1/bash.1.gz |
$ which bash /bin/bash $ ls -l /bin/bash -rwxr-xr-x 1 root root 818232 2010-04-18 18:51 /bin/bash $ ls -l `which bash` -rwxr-xr-x 1 root root 818232 2010-04-18 18:51 /bin/bash |
$ ls /bin/b* /bin/bash /bin/bzcat /bin/bzegrep /bin/bzgrep /bin/bzless /bin/bunzip2 /bin/bzcmp /bin/bzexe /bin/bzip2 /bin/bzmore /bin/busybox /bin/bzdiff /bin/bzfgrep /bin/bzip2recover $ dpkg-query -S /bin/bash bash: /bin/bash $ ls /bin/b* | xargs dpkg-query -S bash: /bin/bash bzip2: /bin/bunzip2 busybox-static: /bin/busybox bzip2: /bin/bzcat bzip2: /bin/bzcmp bzip2: /bin/bzdiff bzip2: /bin/bzegrep bzip2: /bin/bzexe bzip2: /bin/bzfgrep bzip2: /bin/bzgrep bzip2: /bin/bzip2 bzip2: /bin/bzip2recover bzip2: /bin/bzless bzip2: /bin/bzmore $ ls /bin/b* | xargs -t dpkg-query -S dpkg-query -S /bin/bash /bin/bunzip2 /bin/busybox /bin/bzcat /bin/bzcmp /bin/bzdiff /bin/bzegrep /bin/bzexe /bin/bzfgrep /bin/bzgrep /bin/bzip2 /bin/bzip2recover /bin/bzless /bin/bzmore bash: /bin/bash bzip2: /bin/bunzip2 busybox-static: /bin/busybox bzip2: /bin/bzcat bzip2: /bin/bzcmp bzip2: /bin/bzdiff bzip2: /bin/bzegrep bzip2: /bin/bzexe bzip2: /bin/bzfgrep bzip2: /bin/bzgrep bzip2: /bin/bzip2 bzip2: /bin/bzip2recover bzip2: /bin/bzless bzip2: /bin/bzmore |
$ ls /bin/b* | xargs -t -I{} dpkg-query -S {} dpkg-query -S /bin/bash bash: /bin/bash dpkg-query -S /bin/bunzip2 bzip2: /bin/bunzip2 dpkg-query -S /bin/busybox busybox-static: /bin/busybox dpkg-query -S /bin/bzcat bzip2: /bin/bzcat dpkg-query -S /bin/bzcmp bzip2: /bin/bzcmp dpkg-query -S /bin/bzdiff bzip2: /bin/bzdiff dpkg-query -S /bin/bzegrep bzip2: /bin/bzegrep dpkg-query -S /bin/bzexe bzip2: /bin/bzexe dpkg-query -S /bin/bzfgrep bzip2: /bin/bzfgrep dpkg-query -S /bin/bzgrep bzip2: /bin/bzgrep dpkg-query -S /bin/bzip2 bzip2: /bin/bzip2 dpkg-query -S /bin/bzip2recover bzip2: /bin/bzip2recover dpkg-query -S /bin/bzless bzip2: /bin/bzless dpkg-query -S /bin/bzmore bzip2: /bin/bzmore |
$ alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto' |
$ alias la='ls -la' alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -la' alias ll='ls -alF' alias ls='ls --color=auto' $ la total 212 drwxr-xr-x 24 greenfish greenfish 4096 2010-10-18 18:27 . drwxr-xr-x 3 root root 4096 2010-09-30 16:34 .. -rw------- 1 greenfish greenfish 9825 2010-10-18 19:50 .bash_history -rw-r--r-- 1 greenfish greenfish 220 2010-09-30 16:34 .bash_logout -rw-r--r-- 1 greenfish greenfish 3103 2010-09-30 16:34 .bashrc drwx------ 4 greenfish greenfish 4096 2010-10-03 20:28 .cache drwxr-xr-x 6 greenfish greenfish 4096 2010-10-04 01:20 .config ... $ unalias la $ unalias -a $ alias $ |
Every 2.0s: cat /proc/loadavg Mon Oct 18 20:19:48 2010 0.06 0.06 0.00 1/176 3877 |
대부분의 경우, root user로 로그인할 필요는 없는데, 의도하지 않았던 변경사항으로 인한 사고를 방지하기 위함입니다. 대부분의 linux user는 일반 login에서 부터 root user로 변경하기 위해 su 명령을 사용하거나, root user로 실행해야 하는 단일 명령을 실행하기 위해 sudo 명령을 이용하기도 합니다.
Ubuntu에서는 sudo 명령으로 user를 추가할 수 있습니다. 대부분 관리자 권한 명령을 실행시킬 때 sudo 명령을 앞에 달아줘야 합니다. 예를 들면 $ sudo useradd -m joe 와 같습니다.
디폴트로, Ubuntu는 root user로 로그인을 하지 못하도록 제약을 걸고 있습니다. 그래서 su로 관리자 권한의 명령을 수행할 수 없습니다.
login as: root root@xxx.xxx.xxx.xxx's password: Access denied |
$ su greenfish Password: $ exit exit $ su root Password: su: Authentication failure |
$ sudo bash # ... # exit exit $ |
그리고, sudo passwd root를 통해 root의 비밀번호를 변경할 수 있습니다.
GNU nano 2.2.2 File: /etc/sudoers.tmp # /etc/sudoers Defaults env_reset # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification # Allow members of group sudo to execute any command after they have # Members of the admin group may gain root privileges |
$ sudo /usr/bin/less /var/log/messages Password: |
$ set | less BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() ... |
$ echo $ABC $ ABC=123 $ exit |
$ echo $ABC $ export ABC=123 |
bash는 로그인 shell으로 부터 startup files를 실행시킵니다. 이 파일은 전체 로그인을 넘나들어 적용되는 설정을 정의합니다. bash는 shell의 초기화를 위해 initialization files를 실행시킵니다. 이는 다시 말하면, shell script를 실행시키는것은 아닙니다.
bash는 startup files을 /etc/profile(이는 system-wide) 혹은 user home directory의 .bash_profile, .bash_login, 그리고 .profile와 같이 개인 설정이 저장된 .으로 시작되는 파일을 찾습니다. (다른 linux 시스템에서 system-wide 파일이 /etc/profile과 /etc/profile.d/에 저장이 되어 있는 경우도 있습니다.)
bash는 initialization files를 /etc/bash.bashrc (이는 system-wide) 혹은 user home directory의 .bashrc에서 찾습니다. (다른 linux 시스템에서 system-wide 파일이 /etc/bashrc에 저장되어 있는 경우도 있습니다.)
shell이 끝날 때 user의 ~/.bash_logout 파일이 실행됩니다. 이러한 파일들을 변경하였지만, 이미 동작하고 있는 shell에는 영향을 미치지는 않습니다.
shell environment를 변경하고 나열할 수 있는 여러 가지 방법이 있는데, 가장 흔한 방법은 user를 변경하는 방법입니다.
$ echo $HISTFILE $HISTSIZE $HISTFILESIZE /home/greenfish/.bash_history 1000 2000 $ history 5 447 ps 448 head .bash_history 449 echo $HISTFILE $HISTSIZE $HISTFILESIZE 450 clear 451 history 5 $ !! history 5 458 ps 459 head .bash_history 460 echo $HISTFILE $HISTSIZE $HISTFILESIZE 461 clear 462 history 5 $ !458 pwd /home/greenfish $ !458 -aux ps -aux Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 2664 1608 ? Ss 16:43 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 16:43 0:00 [kthreadd] ... $ !?aux? ps -aux Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 2664 1608 ? Ss 16:43 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 16:43 0:00 [kthreadd] ... $ !ps ps -aux Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 2664 1608 ? Ss 16:43 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 16:43 0:00 [kthreadd] ... $ !ps:s/aux/A ps -A PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd ... |