LinuxTips
From Chaehyun
리눅스 명령어 정리
명령어 reference
아파치
- 재시작
- /usr/sbin/apachectl -k restart
- /usr/sbin/apachectl -k graceful
- /etc/rc.d/init.d/httpd start
mysql
- /etc/init.d/mysqld start
- /etc/rc.d/init.d/mysqld start
- php 5.2 버전 업을 하기 위해서는
- /etc/yum.repos.d/centos-test.repo 파일을 생성하고 아래 구문 추가
[c5-testing] name=CentOS-5 Testing baseurl=http://dev.centos.org/centos/5/testing/$basearch/ enabled=1 gpgcheck=1 gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
- yum update php
screen
- .screenrc 샘플
screen -h 10000 -t xlos 2 screen -h 10000 -t xlos 1 screen -h 10000 -t xlos 0 bind c screen -t xlos bind ^C screen -t xlos bindkey "\033[15~" select 0 bindkey "\033[17~" select 1 bindkey "\033[18~" select 2 bindkey "\033[19~" select 3 bindkey "\033[20~" select 4 bindkey "\033[21~" select 5 bindkey "\033[23~" prev bindkey "\033[24~" next vbell off defscrollback 10000 caption always "%{kg}%?%-Lw%?%{wb}%n*%f %t%?(%u)%?%{kg}%?%+Lw%?"
파일 묶기
- tar : tape archive 에서 따온 말
- tar -xzvf tmp.tar : 묶은 파일 풀기
- x : extract
- z : gzip
- v : verbose (장황한)
- f : file
- tar -cvzf mt.tar mt : 파일 묶기
- c :create
- v : verbose
- f : file
- tar -tvf mt.tar : 리스트만 보기
- t : list
압축
- gzip garbage.txt : 압축하기
- gzip -l garbage.txt.gz : 압축 정보 보기
- gunzip garbage.txt.gz : 압축 해제
- gunzip -N garbage.txt.gz : 원본 파일로 압축 해제
- ls -laR $HOME | gzip > filelist.gz : 홈 디렉토리 아래 존재하는 모든 파일 목록을 압축
- gunzip -c filelist.gz | more : 파일을 삭제하지 않고, 결과를 stdout 으로 출력 (=zcat 과 동일)
현재 디렉토리만 출력하는 명령어
- echo ${PWD##*/}
- PWD는 현재 path를 가지고 있는 환경변수
- ##*/ : */를 만날 때 까지 모든 스트링을 제거하라
- 결국 현재 디렉토리만 남는다
- pwd | rev | awk -F \/ '{print $1}' | rev
- pwd : 현재 디렉토리 출력
- rev : string 반전
- awk -F : 다음 delimiter를 사용해서 문자열 나누기
디렉토리 분류
/ | 루트 디렉토리 |
/bin | 기본 명령어 |
/dev | 장치를 쓸 때 필요한 특수 파일 위치 |
/etc | 환경 설정 파일 위치 |
/home | 일반 사용자의 홈 디렉토리 |
/lib | 공유 라이브러리와 커널 모듈 |
/lost+found | 부팅할 때 파일 시스템에 이상이 있는지 진단, fsck 명령어에 의해 사용 파일 시스템 복구 후, 복구된 파일이 저장됨 |
/mnt | cd-rom과 플로피 장치에 대한 마운트 포인트 제공 |
/opt | 크기가 큰 리눅스 패키지 설치함 |
/root | 시스템 관리자 홈 디렉토리 |
/sbin | 시스템 운영에 필요한 명령어 위치 |
/tmp | 임시 파일을 저장하는 위치 |
/usr | 패키지 설치 시 이 디렉토리에 설치됨 |
/var | 가변 자료가 저장, 메일, 로그 등 |
/usr/bin | 응용프로그램 설치 시 일반 사용자 명령어가 추가됨 |
/usr/sbhin | 응용프로그램 설치 시 관리자 명령어가 추가됨 |
/var/log | 시스템 로그 파일 |
/var/spool/mail | 서버의 메일 임시 보관 장소 |
- 출처 : http://onemind.kr/97
- http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/Linux-Filesystem-Hierarchy.txt
- Compliance requires that:
shareable | unshareable | |
static | /usr
/opt | /etc
/boot |
variable | /var/mail
/var/spool/news | /var/run
/var/lock |
/bin Essential command binaries /boot Static files of the boot loader /dev Device files /etc Host-specific system configuration /lib Essential shared libraries and kernel modules /media Mount point for removeable media /mnt Mount point for mounting a filesystem temporarily /opt Add-on application software packages /sbin Essential system binaries /srv Data for services provided by this system /tmp Temporary files /usr Secondary hierarchy /var Variable data
파이프 라인
- | : 왼쪽 명령의 표준 출력 (stdout)을 오른 쪽 명령의 표준 입력 (stdin)으로 사용
- who | tr -s " " | cut -f3 -d " "
- ps -ef | more
- 리다이렉션
- stdin : 0, stdout : 1, stderr : 2
- 대부분 파이프의 리다이렉션은 명령 라인의 끝에서 출력 방향을 다시 지정하여 파이프 라인의 필터된 출력을 파일이나 화면 상에 출력한다.
- grep user /etc/pass*d | sort > sort.out
- grep user < /etc/pass*d 2> grep.err | sort > sortd.user 2> sort.err
- grep할 때 에러가 발생하면, grep.err 파일로 저장하고, sort한 경과를 sortd.users 파일로 저장하는데, 에러가 발생하면 sort.err 파일로 저장
출처 : http://rockdrumy.tistory.com/entry/Linux-Pipes%ED%8C%8C%EC%9D%B4%ED%94%84-%EB%AA%85%EB%A0%B9
환경 변수
- .bashrc : bash가 실행될 때 마다 수행됨
- .bash_profile : bash가 login shell로 사용될 때 (처음 login할 때) 수행됨
- 보통은 .bash_profile에서 .bashrc 를 부르는 형태
인증키 사용
- 참고글1
- 참고글2
- 개인키 : 각 사용자들만 가지고 있는 키
- 공개키 : 서버에 심을 키. 유출 해도 상관 없음
- 각 사용자는 개인키/공개키 쌍을 만든 다음, 공개키를 서버에 복사해두면, 개인키로 접근할 수 있다.
- 정리 : 내가 가지고 있는 거 : private key, 서버가 가지고 있는 거 : public key
- server에서 ssh-copy-id -i $HOME/.ssh/id_rsa.pub hduser@skp004 한 번 더해줘야 함??
sed (stream editor)
- 참고글
- ed 명령어와 grep 명령어를 합친 명령어
- sed는 라인을 하나 씩 읽고, 수정하고, 출력하므로 기억장치 안의 버퍼를 사용하지 않는다. --> 매우 큰 파일을 처리할 때 주로 사용됨
- cat /etc/sudoers | sed /'hello world$'/d > /tmp/sudoers.tmp
- /etc/sudoers 파일에서 hello world로 끝나는 라인을 삭제하고, 나머지 라인들을 /tmp/sudoers.tmp 파일에 저장
chattr
- chattr - change file attributes on a Linux second extended file system
- A file with the 'i' attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
bash 팁
- #!/bin/bash
- 현재 스크립트의 디렉토리 : SCRIPT_HOME=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
- 상위 디렉토리 : SCRIPT_HOME=$(readlink -f $(dirname $(readlink -f ${BASH_SOURCE[0]}))/..)
squid 실행
- /etc/rc.d/init.d/squid start
screenrc 설정 파일
screen -h 10000 -t xlos 2 screen -h 10000 -t xlos 1 screen -h 10000 -t xlos 0 bind c screen -t xlos bind ^C screen -t xlos bindkey "\033[15~" select 0 bindkey "\033[17~" select 1 bindkey "\033[18~" select 2 bindkey "\033[19~" select 3 bindkey "\033[20~" select 4 bindkey "\033[21~" select 5 bindkey "\033[23~" prev bindkey "\033[24~" next vbell off defscrollback 10000 caption always "%{kg}%?%-Lw%?%{wb}%n*%f %t%?(%u)%?%{kg}%?%+Lw%?"
ssh 암호 없이 로그인하기
- ssh-keygen -t rsa
- ~/.ssh/id_dsa.pub 파일을 복사한 다음,
- 원하는 서버로 접속하여 ~/.ssh/authorized_keys 에 추가 (한 줄에 하나 씩 여러 개도 가능)
- 혹시 안될 경우 (CentOS)
- sudo vim /etc/ssh/sshd_config
- StrictModes no
- sudo /etc/init.d/sshd restart
maven 설정
- mvn -Declipse.workspace=/home/1000649/Works eclipse:add-maven-repo
- project directory에서
- mvn test-compile
network 속도 측정
- http://theeye.pe.kr/entry/simple-network-performance-measuring-tool-is-iperf
- iperf -s
- iperf -c hostname
nslookup
- dig @8.8.8.8 naver.com
- nslookup (엔터)
- server 8.8.8.8
- skp000.reople.com
- /etc/resolve.conf
- 이 설정은 서비스 재시작을 하지 않아도 적용이 됩니다.
ubuntu에 apache php5 설치
- http://www.rain9.com/wp/?p=501
- sudo apt-get install apache2
- sudo apt-get install php5 libapache2-mod-php5
- sudo apt-get install mysql-server
- sudo apt-get install phpmyadmin
- sudo apt-get install php5-mysql
- sudo apt-get install php5-curl
- sudo /etc/init.d/apache2 restart
apache 경로
- /etc/apache2 (apache2 설정 경로)
- /etc/apache2/apache2.conf (아파치 설정 파일)
- /etc/apache2/mods-available (모듈 설정 파일 경로)
- /etc/apache2/mods-enabled (모듈 설정 파일 enabled 경로, mods-available 경로의 실제 모듈 설정 파일을 심볼릭 링크파일로 걸어놓아야 작동됨)
- /etc/apache2/conf.d (아파치 conf 파일 경로, charset, phpmyadmin.conf, security)
- /etc/apache2/sites-available (site 설정 경로, virtualhost 설정도 여기에 파일로 생성)
- /etc/apache2/sites-enabled (site 설정 enabled 경로, sites-available 설정 파일을 심볼릭 링크 파일을 sites-enabled 경로에 만들어놔야 작동됨)
centOS 에서 apache 실행
- /etc/init.d/httpd restart
jar 만들기
- http://www.ibm.com/developerworks/kr/library/j-jar/
- manifest 생성
- Main-Class: HdfsFileReader
- jar cmf manifest hdfsreader.jar HdfsFileReader.class
password 한 번에 바꾸기
- echo -e "linuxpassword\nlinuxpassword" | passwd linuxuser
ubuntu에서 python-mysql 설치하기
- apt-get install mysql-server python-mysqldb
ubuntu에서 SunJDK Sun Java 설치하기
- http://www.java.com/ko/download/manual.jsp#lin 에서
- http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u31-download-1501634.html
- Linux (자동 압축 풀기 파일) 다운로드
- /usr/bin 으로 bin 파일 이동
- 설치
- sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/latest/bin/java" 1
- sudo update-alternatives --config java
- java –version
scp 사용법
- scp -P 22 -r /programming/ftp [email protected]:/home/jaemng
- src 먼저, dest
- -r 옵션은 recursive
- scp -P 22 [email protected]:/home/jaemng/.emacs .
- 원격지에 있는 파일을 가져오는 것도 가능
mysql csv file import
- LOAD DATA LOCAL INFILE '/mnt/users/chaehyun/data/user-reactiontag-to-things.out' INTO TABLE `userhistory` FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'
ubuntu에서 php 설치 경로
- /etc/php5/apache2/php.ini
비번 없이 sudo 사용하기
- vi /etc/sudoers
- hadoop ALL=(ALL) NOPASSWD: ALL
특정 도메인 먼저 검색
- domain name
- sudo vim /etc/resolv.conf
- search reople.com 을 제일 첫 줄에 넣어주면, 항상 reople.com 을 붙여서 먼저 검색하게 됨
ssh 끊김 방지
- /etc/ssh/sshd_config 에 추가
- ClientAliveInterval 600
- ClientAliveCountMax 3
- sudo /etc/init.d sshd restart
랜덤하게 라인 고르기 random line sampling
- awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01) print $0}'
- cat fancy.txt | awk 'BEGIN { srand() } rand() >= 0.998 { print; }' > fancy_sample_date.txt
sed recursive하게 적용하기
- find . -type f -print0 | xargs -0 sed -i 's/<title>SKPOP Open Platform/<title>Code Sprint 2012/'
mysqldump를 이용한 mysql 백업
#!/bin/bash filename=$(date +%Y%m%d%H%M) mysqldump -ucodesprint -p codesprint > /mnt/backup/tmp/$filename.sql tar czfP /mnt/backup/mysql/$filename.tar.gz /mnt/backup/tmp/$filename.sql rm -f /mnt/backup/tmp/$filename.sql find /mnt/backup/mysql/ -ctime +3 -exec rm -f {} \;
어느 명령어가 실행되나?
- which python
메모리 사용량 기록하기
- top -p 7518 -d 3600 -n 24 | grep java > java_log.txt &