ex) 현재 위치에서 aa로 시작하는 파일 모두 찾기 

find . -name 'aa*' -print

 

 

댓글을 달아 주세요

리눅스에 익숙하지 않을 때 많이하는 실수로 윈도우에서 작업한 텍스트를 리눅스로 업로드 후 사용하면 사용이 안됩니다. 예를들어 쉘 파일을 윈도우에서 작업 후 리눅스에서 실행하려고 하면 에러가 발생하는데 리눅스 사용 초기에 한참 고생을 했네요. ㅠㅠ

 

vi로 파일 열어서 아래 명령어 실행하면 됩니다.

:se ff=unix

 

댓글을 달아 주세요

 

비슷한 규칙에 파일명 동시에 일괄 변경하는 방법입니다.

rename '공통내용' '변경할 공통내용' '변경대상'

ex) rename .txt test.txt *  

 

 

댓글을 달아 주세요

 

이클립스로 java, jar 파일 생성하여 리눅스상에서 java, jar 파일 실행하는 방법입니다.

자바코드는 메인함수로 입력되는 값을 출력하는 간단한 코드로 작성했습니다.

 

public class test{
  public static void main(String[] args){
    for(String arg:args){
      System.out.println(arg);
    }
  }
}

 

1. java 파일 실행

1) java 파일 컴파일

javac -d . Test.java

 - 디렉토리 안에 자바파일을 컴파일하여 클래스 생성

 

ex) 여러 lib jar 파일의 클래스 패스 연결해서 컴파일 

javac -d . -cp lib/hadoop-common-2.7.0.jar:lib/hadoop-distcp-2.7.3.jar:lib/hadoop-hdfs-2.6.0.jar:lib/hadoop-annotations-2.7.0.jar:lib/hadoop-mapreduce-client-core-2.3.0.jar DistCpTest.java

 

 

2) java 파일 실행

java -cp $CLASS_PATH: test.Copy TEST_TEST

 - 클래스패스를 정말 잘 설정해줘야 한다.. (NoClassDefFoundError로 고생함..ㅠㅠ)

   계속 클래스 패스를 잘 못찾아서 저는 콜론도 잘 붙여해결했습니다.

 

 ex) java -cp /home/my/test/*: test.Copy TEST_TEST

 

 

*용어정리

 -classpath: 자바 런타임이 class 파일을 찾을 때 사용하는 경로

 -cp : classpath
 -콜론(:) 클래스 패스들을 연결할 때 사용
 -점(.) java 명령어를 실행하는 디렉토리를 cp로 지정하겠다는 의미
 -d : directory

 

 

2. jar 파일 실행

  1) eclipse로 jar 파일 생성

 

 

메인 클래스를 지정해주지 않으면 no main manifest attribute, in test.jar 에러가 발생합니다.

 

 

 

  2) 생성한 jar 파일을 리눅스 서버로 이동시키고 아래 명령어를 실행합니다.

java -jar test.jar TEST

 

결과 : TEST

댓글을 달아 주세요

 

리눅스 서버에서 외부서버로 파일 전송할 때 scp 명령어를 사용합니다.

주기적으로 파일을 전송해야 할 경우 아래 내용 스크립트 작성에 참고 해주세요.

 

-scp 사용법

expect << EOF
spawn scp /경로/파일명 계정@아이피:/경로
expect "password:"
        send "패스워드\r"
expect eof
EOF

*용어정리

  - expect : scp 사용시 패스워드를 입력해야 하는데 인증 부분을 체크해 줄 명령어

     ex) "password:" 란 문자가 나타나면 send 로 패스워드를 입력해 줍니다.

  - spawn : expect 안에서 scp 명령어를 실행시킬때 사용 (쉘에서 리눅스 명령어 실행시키는 ``와 같은 의미)

  - \r은 패스워드 입력 후 엔터(개행문자)를 입력하기 떄문에 사용

 

-sftp 사용법 (ex: sftp 접속하여 파일 다운)

expect << EOF
spawn sftp $GET_USER@$GET_SERVER_IP
expect "ord:"
send "${GET_PASS}\r"
expect "p>"
send "cd ${GET_PATH}\r"
expect "p>"
send "mget ${GET_FILE_NM}\r"
expect "p>"
send "bye\r"
expect eof
EOF

 

 

댓글을 달아 주세요

 

- PID 하나씩 KILL에 매개변수로 넘겨서 다 죽임

ps -ef | grep '프로세스명' | awk '{print $2}' | xargs kill

 

 

댓글을 달아 주세요

 

리눅스에서 여러 파일들 동일한 내용을 전체 변경하거나 파일에서 원하는 내용만 삭제하고 싶을때

일일이 vi로 열어서 변경하지 않고 sed 명령어를 사용하면 유용합니다.

 

1. 1개 파일 내용 변경

sed -i 's/기존 내용/변경할 내용/g' 파일명.txt

2. 여러 파일 내용 변경

sed -i 's/기존 내용/변경할 내용/g' *.txt

3. 해당 문자가 포함된 줄 삭제

sed -i '/삭제 할 내용/d' *

4. 해당 문자가 포함된 줄만 삭제하지 않고 나머지 내용 모두 삭제 (로그에서 원하는 내용만 보고싶을때 유용)

sed -i '/삭제하지 않을 내용/!d' *

 

 

댓글을 달아 주세요

 

- FTP 계정, 패스워드 생성 방법
1. useradd userID (계정 생성)
2. passwd userID (패스워드 설정)


- FTP 계정 패스워드 만료되지 않도록 설정
1. chage -E -1 -I 0 -m 0 -M 99999 userID (변경) 
2. chage -l userID (조회)


- FTP 계정 패스워드 변경
1. root or sudo (root 계정으로 접속)
2. sudo passwd ${user_id} (패스워드 변경)

 

댓글을 달아 주세요

 

ftp 압축 파일 업로드 할 때 binary 모드 사용해야 파일 깨지지 않고 정상 업로드 됩니다. (자주 까먹는 부분..;;)

 

아래 쉘은 ftp put하는 샘플 코드 입니다.

ftp -n 127.0.0.1 << EOF
quote USER $user
quote PASS $pass
cd $put_path
lcd $local_path
binary
put $file_nm
bye
EOF

 

## binary 모드로 업로드 하지 않으면 일반 텍스트 형태로 올라가 압축 해제 시 아래 에러 메시지가 발생

gzip : test.csv.gz: invalid compressed data--format violated

 

 

댓글을 달아 주세요

 

쉘에서 date 명령어를 많이 사용하는데 여러가지 사용방법입니다. (yyyyMMdd 포맷)

 

1. 현재일자 표현 (당일)

`date +%Y%m%d`

2. 이전 날짜, 이후 날짜 표현 (과거,미래 등)

   - 아래 표현식에서 선호하는 방식 사용하면 됩니다. 

## 현재 일자에서 하루 전
`date -d '1 day ago' '+%Y%m%d'`
`date +%Y%m%d -d -1day`

## 현재 일자에서 하루 후
`date -d '1 day' '+%Y%m%d'`
`date +%Y%m%d -d +1day`

## 현재 일시에서 한시간 전
`date +%Y%m%d%H -d -1hour`

## 현재 일시에서 한시간 후
`date +%Y%m%d%H -d +1hour`

3. 입력받은 변수 날짜의 이전,이후 표현 

## 입력 받은 날짜 변수에 일 더하기
`date "--date=$dt -d +${i}day" +%Y%m%d`

## 입력 받은 날짜,시간 변수에 시간 빼기
`date -d "$dt $hh -2hour" +%Y%m%d%H`

 

 

댓글을 달아 주세요

 

파일 인코딩 변환할 때 일일이 파일 이름 변경하지 않고 아래 명령어로 쉽게 일괄 변경 가능하네요.

find . -type f -execdir iconv -f euckr -t utf-8 {} -o {}.tmp \; -execdir mv -f {}.tmp {} \;

출처: https://wookmania.tistory.com/22 [코드의추억]

 

 

*파일 하나만 인코딩 변환할 때는 아래 방법 이용하시면 됩니다.

 

-리눅스에서 파일 인코딩 확인
file -bi 파일명
ex) file -bi tmp.txt
결과 : text/x-c++; charset=utf-8

-인코딩 변환
EUC-KR -> UTF-8 파일 인코딩 변경
iconv -c -f euc-kr -t utf-8 mergefile > mergefile

 

댓글을 달아 주세요

 

shell 스크립트에서 제일 많이 사용되는 for문의 3가지 사용법입니다.

상황에 맞게 사용하시면 됩니다.

 

1. 배열로 저장한 값 읽어오는 방식

HH_ARR=("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23")
for hh in "${HH_ARR[@]}"; do
	echo $hh
done

 

2. 파일을 읽어서 처리하는 방식 (text 파일을 cat명령어로 실행하여 1줄씩 읽어옴)

for list in `cat text`
do
	echo "$list"
done

 

3. index 값 증가시키며 처리하는 방식

for (( i=0; i<10; i++ )) do
       echo "$i"
done

 

 

댓글을 달아 주세요

 

리눅스에서 vi 또는 데몬 등 실행 스크립트를 수행해서 한글을 다뤄야 하는 경우가 있는데 별도로 설정을 해주지 않으면 한글깨짐 문제로 파일을 제대로 사용할 수가 없습니다.

그럴 경우 간단하게 아래 설정 추가하면 됩니다.

 

/etc/profile에 아래 export 추가하거나

실행하고자 하는 데몬, 스크립트에 추가해도 됩니다.

 

export LANG="ko_KR.UTF-8"

 

 

 

댓글을 달아 주세요

 

리눅스 서버 운영중 서비스 작동에 문제가 생기거나 에러가 발생하여 찾아보면 잦은 경우로

disk I/O Error 발생한다. 해당 디스크 접속해서 ls 명령어로 일일이 조회 해보지 않고 아래 dmesg 명령어로

한번에 disk i/o error 확인 할 수 있다.

 

dmesg | grep 'I/O error'

 

댓글을 달아 주세요

리눅스 서버 관리할 때 해당 경로에 데이터를 주기적으로 삭제하고 싶을때

아래 명령어 crontab에 등록하여 사용하시면 좋습니다.

 

find /data1/data/log/* -type f -mtime +7 -exec rm -rf {} \; (7일 전 파일 삭제)
find /data1/data/log/* -type d -mtime +7 -exec rm -rf {} \; (7일 전 디렉토리 삭제)

 

댓글을 달아 주세요

 

sh test.sh &>/dev/null &

 

실행 명령어에 &>/dev/null 붙여 주시면 로그 출력 없이 스크립트 실행됩니다.

 

댓글을 달아 주세요

비밀번호 입력 없이 ssh 접속하는 2가지 방법입니다.

 

1. 비밀번호 입력없이 접속할 서버에 암호화 키를 등록하여 자동로그인을 합니다.

cd ~/.ssh                                            ##.ssh경로 이동
scp id_rsa.pub $host:$HOME                           ##id_rsa.pub 공개키를 외부서버로 copy
ssh $host                                            ##외부서버 접속(자동 로그인 할 서버)
cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys   ##복사한 공개키를 인증키 파일에 입력해줌

authorized_keys 파일이 없으면 생성하면 됩니다.

 

 

2. 패스워드는 입력하나 인증단계 없이 ssh 접속 

sshpass 명령어를 사용하면 패스워드는 입력하나 인증 단계 없이 접속 가능합니다.

그리고 sshpass를 사용하여 외부 다른서버에 명령어를 호출하여 작업도 할 수 있습니다.

sshpass -p'password' ssh root@hostname "command"

"command" -> 여기 입력하세요.

 

댓글을 달아 주세요

인터넷에 있는 여러 site를 참조했지만 잘 안되서 올려요.

 

[root@localhost ]# vi /etc/my.cnf                     --------------> 자기 환경의 맞는 위치에 my.cnf 파일 열어서 아래내용에서 없는것들을 추가해주세요.

 

[client]
character-sets-dir = utf8

[mysqld]
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

[root@localhost ]# service mysqld restart           --------------> mysql 재시작 해주세요.

 

 

* 설정 파일 수정 없이 한글 적용 (로그인 명령어)

mysql -u user -p --default-character-set=utf8

 

 

댓글을 달아 주세요

리눅스에서 wget 사용하여 파일 다운로드할 경우 나는 에러입니다.

저는 2가지 에러가 나서 정리해봤어요.


1.

Error:

wget: unable to resolve host address



해결방안(solution):

sudo vi /etc/resolv.conf 

nameserver 8.8.8.8 ----->추가


resolv.conf 문서에 nameserver 8.8.8.8 추가 해줍니다.


nameserver 8.8.8.8는 구글 DNS 주소입니다. 

구글 DNS를 이용해서 다운받을 수 있는 방법인거 같습니다.

네임서버를 추가해주고 wget을 이용하여 다시 다운 받습니다.


그러다 보면 또 다른 에러가 발생합니다... 저같은 경우는...


2.

ERROR:

cannot verify archive.apache.org's certificate, issued by `/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4':

  Unable to locally verify the issuer's authority.

To connect to archive.apache.org insecurely, use `--no-check-certificate'.


아래 해결할 수 있는 방법이 나와있는데도 검색해서 알았네요...


해결방안(solution):

wget --no-check-certificate


--no-check-certificate 이 옵션을 사용하면 위에 에러도 잡고 정상적으로 다운로드 되네요.




댓글을 달아 주세요