bash script (backup)2020. 10. 15. 20:32

 

반달가면 이글루에서 백업 - bahndal.egloos.com/363294

 

find와 grep을 이용해서 특정 디렉토리와 그 하위 디렉토리에서 특정 문자열이 포함된 파일을 찾을 수 있다. find 명령에 -type f 옵션으로 파일을 출력한 후 grep으로 찾으면 되겠다. 검색 범위는 지정한 디렉토리와 그 하위 디렉토리가 된다.

 

현재 디렉토리와 그 하위 디렉토리에서 myfile이라는 문자열이 포함된 파일을 찾으려면

find ./ -type f | grep "myfile"

 

/etc 디렉토리에서 찾으려면

find /etc -type f | grep "myfile"

 

그렇게 찾은 파일을 rm 명령으로 지우고 싶으면

find /etc -type f | grep "myfile" | xargs rm

 

또는 역따옴표(`)를 이용해서

rm `find /etc -type f | grep "myfile"`

 

디렉토리를 찾고 싶으면 -type d라고 지정하면 된다.

find ./ -type d

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:28

 

반달가면 이글루에서 백업 - bahndal.egloos.com/339889

파일 생성 시점을 파일명에 넣어서 임시 파일을 만드는 경우다.  

 

shell script에서 임시로 파일을 만들어서 사용해야 할 경우, 파일명이 다른 파일과 겹치지 않게 하기 위해 date를 활용할 수 있다. 현재 시각을 임시 파일의 이름에 넣으면 된다. 

현재 시각을 "연월일_시분초" 형식으로, 예를 들어 2012년 11월 29일 17시 45분 23초를 20121129_174523 이런 식으로 얻어서 파일명에 사용하자. 

date "+%Y%m%d_%H%M%S"

 

아래의 예는 현재 시각을 time_stamp라는 변수에 할당하여 임시 파일명을 my_tmp_file.$time_stamp.tmp로 정하고 여기에 "this is my temp file" 문자열을 저장한 경우이다.

 

time_stamp=`date "+%Y%m%d_%H%M%S"`

tmp_file_name="my_tmp_file.$time_stamp.tmp"

echo "this is my temp file" > "$tmp_file_name"

 

시각이 2012년 11월 29일 17시 45분 23초라면 임시 파일은 my_tmp_file.20121129_174523.tmp가 될 것이다.

 

만약 이런 script를 거의 동시에 여러 개를 실행해야 하는 경우라면, 임시 파일 이름이 겹치지 않기 위해 초 단위보다 더 세밀하게 시각을 얻어야겠다. 이럴 때는 나노초(nanosecond)를 포함시키면 된다. time_stamp 변수의 값이 10억분의 1초 단위로 정해지니까 겹칠 일이 없을 것이다. 아래와 같이 하면 된다.

 

time_stamp=`date "+ %Y%m%d_%H%M%S_%N"`

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:21

 

반달가면 이글루에서 백업 - bahndal.egloos.com/356262

 

리눅스에서 date 명령에 추가 조건을 주면 오늘 날짜 말고도 갖가지 날짜를 편리하게 구할 수 있구나!

어제
date -d "yesterday"

내일
date -d "tomorrow"

3일후
date -d "+3 days"

4일전
date -d "-4 days"

지난 금요일
date -d "last friday"

다음주 월요일
date -d "next monday"

 

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2020. 10. 15. 16:59

 

반달가면 이글루에서 백업 - bahndal.egloos.com/530746

 

"윈도우/리눅스 멀티부팅에서 시간이 잘못되는 문제 고치기 - 2" 게시물은 리눅스쪽의 시간을 UTC에서 지역시간(local time)으로 고치는 방법이고 오픈수세(OpenSUSE) 기준이었는데, 그보다는 윈도우쪽 시간 설정으로 지역시간에서 UTC로 바꾸는 쪽이 더 나은 것 같아 이 게시물의 백업은 생략. 

 

리눅스 또는 맥OS와 윈도우를 듀얼부팅할 경우 시간 기준이 서로 달라서 윈도우쪽 시간이 이상하게 나올 수 있다. 이 문제에 대해서 예전에 글을 올린 적이 있는데, 오래간만이긴 하지만 어쨌든 한가지 방법을 더 발견해서 여기에 적어 두기로 했다.

예전에 올렸던 방법은 윈도우를 시작할 때마다 인터넷의 시간 서버와 시간을 동기화하도록 작업을 예약하는 것과, 리눅스쪽 시간 기준을 UTC가 아니라 지역 시간(local time)으로 설정하는 것이었다.

또 다른 해결 방법은 윈도우 레지스트리에서 바이오스 기준 시간을 UTC 기준으로 바꾸는 방법이다.  (UTC와 한국표준시의 차이는 이전 게시물을 참고하자.)

일단 수동으로 레지스트리를 고치는 방법이다. 윈도우 시작 버튼을 누르고 프로그램 검색창에서 regedit이라고 입력하면 레지스트리 편집기(regedit.exe)가 나올 것이다. 레지스트리 편집기를 실행하고 아래의 위치로 가자. (레지스트리 수정은 관리자 권한을 필요로 한다.)

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

 

해당 위치로 간 후에 여기서 새 항목을 하나 만든다. 메뉴에서 "편집(E)" ->  "새로 만들기(N)" -> "DWORD(32비트)값"을 선택하자. 그러면 항목의 이름을 정해야 하는데, "RealTimeIsUniversal"이라고 입력. 이제 해당 항목이 추가된 것이 보일 것이다.

"RealTimeIsUniversal" 항목을 더블클릭하면 값을 입력할 수 있다. 여기에 1을 입력하고 엔터를 누른다. 항목 값이 설정되었으니 레지스트리 편집기는 종료한다.


위의 과정이 귀찮다면, 아래의 첨부파일을 가져다가 저장한 후 압축을 풀고 reg 파일을 더블클릭해서 레지스트리에 적용해도 된다.

 

win7_utc_bahndal_egloos_com.zip
0.00MB

레지스트리 수정이 끝났으면 재부팅하자. 시간이 뭔가 좀 이상해졌을 것이다. 이제 인터넷 시간 서버를 이용해서 시간을 바로잡으면 된다. 작업표시줄에 있는 시간 표시를 클릭하고 "날짜 및 시간설정 변경" 항목을 선택하자.

 

 

시간 설정 창이 나오면 "인터넷 시간" 탭을 선택한 후 "설정 변경(C)" 버튼을 클릭한다.

 

 

시간 서버 항목에 "time.windows.com"을 선택하고 "지금 업데이트(U)" 버튼을  클릭하면 시간 서버와 동기화되면서 시간이 제대로 표시될 것이다.

 

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2020. 10. 15. 16:44

반달가면 이글루에서 백업 - bahndal.egloos.com/345263

 

윈도우와 리눅스를 멀티 부팅으로 사용하면서 서로 번갈아 부팅을 하다 보면 윈도우쪽의 시간이 이상하게 바뀌는 상황을 보게 된다. 아마도 리눅스는 시스템 시간을 UTC로 놓고 여기에 현재 위치(한국)에 따라 시차를 적용하는 반면에 윈도우는 시스템 시간을 지역 시간으로 사용하기 때문인 것 같다.

우리나라 시간은 UTC+9시다. 즉 UTC가 0시면 우리나라는 9시가 된다. 그런데 리눅스가 시스템 시간을 UTC로 맞춰버리면, 다음에 윈도우로 부팅할 때(한국 시간 9시에 부팅했다고 치면) 윈도우는 이 시스템 시간(UTC)를 우리나라 시간(KST)로 인식해서 UTC를(즉 0시를) 표시해 주는 것이다.

리눅스를 UTC로 사용하지 않도록 하는 방법도 있겠지만 그보다는 윈도우의 시간을 UTC 기준으로 맞추는 쪽이 더 정확하다. (UTC는 원자시계로 돌아가는 시간이므로)

자, 그럼 윈도우7의 시간을 제대로 맞춰 보자. 윈도우로 부팅할 때마다 리눅스가 해놓은 UTC를 쓰지 말고 인터넷으로 시간 서버(NTP서버)에 접속해서 시간을 맞추도록 하면 된다. 

사실 윈도우7은 정기적으로 시간 서버에 접속을 해서 시간을 동기화하도록 설정되어 있는데, 일주일에 한번만 하도록 되어 있다. 이걸 시스템 부팅할 때마다 동기화하도록 바꿔주면 되겠다.

1. 시작 버튼을 누르고 "보조 프로그램" -> "시스템 도구" 항목으로 가서 작업 스케줄러를 관리자 권한으로 실행한다. (일반 사용자는 편집할 수 없으니 반드시 관리자 권한으로 실행)

2. 창 왼쪽의 "작업 스케줄러 라이브러리"에서 Microsoft -> Windows -> Time Synchronization 항목으로 가서 속성을 편집하자. 

 

 

3. 속성 편집창의 "트리거" 탭에서 트리거 항목을 편집하자. 기본 설정은 일주일에 한번임을 볼 수 있을 것이다. 이걸 바꾸는 것이다.

 

 

4. 트리거 편집창에서 "작업 시작" 항목을 "시작할 때"로 바꾼다.

 

 

이제 윈도우7의 시계도 제대로 표시가 될 것이다.

 

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2020. 10. 15. 16:35

 

반달가면 이글루에서 백업 - bahndal.egloos.com/332546

 

파일 입출력이 반복적으로 아주 많이 생기는 작업을 할 경우에 램디스크를 만들어 거기서 작업을 하면 좀 더 빨리 할 수 있는데, 리눅스에서는 별도의 S/W 없이 명령어 몇개로 간단하게 램디스크를 만들고 없앨 수 있다.

우선 램디스크에 대응할 디렉토리를 하나 만들자.
mkdir ram_disk

이제 mount 명령어로 램디스크를 만들자. root권한이 필요하므로 sudo로 실행한다. 파일 시스템을 tmpfs로 정하면 램디스크가 된다.
sudo mount -t tmpfs -o size=100m tmpfs ./ram_disk

자, 이제 ram_disk 디렉토리에 100MB 크기의 램디스크가 연결되었다. 파일을 이 디렉토리로 보내면 HDD로 안가고 램디스크가 잡고 있는 메모리로 간다.

램디스크가 제대로 생성되어 ram_disk 디렉토리에 연결이 되었는지 확인해 보자.
df -h | grep tmpfs

다 쓰고 나면 umount 명령으로 램디스크를 해제하고 메모리를 반환하면 된다.
sudo umount ./ram_disk

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:28

 

반달가면 이글루에서 백업 - bahndal.egloos.com/332093

 

파일을 지우려면 우선 해당 파일명을 찾아야 한다. ls -l 명령으로 timestamp가 표시되도록 한 후 awk로 파일명을 골라내자.

예를 들어 5월 24일이 찍힌 파일을 찾으려면 이렇게 할 수 있다.

ls -l | grep "^\-r" | grep "May 24" | awk '{print $9}'

퍼미션 표시에서 (디렉토리나 링크가 아닌) 파일은 -rwxr--r-- 이런 식으로 나올 테니 "-r"로 시작하는 항목만 grep으로 고른다.('-'가 grep에서 연산자로 해석되지 않도록 '\-' 이런식으로 쓰자)

거기서 원하는 timestamp가 있는 항목을 골라낸다.

거기서 파일명이 표시되는 위치인 9번째 항목(field)을 awk 명령으로 골라낸다.

자, 이제 지워야겠으니 위의 명령을 역따옴표(`)로 묶어서 rm 명령에 넘기자.

rm `ls -l | grep "^\-r" | grep "May 24" | awk '{print $9}'`

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:24

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/141751

 

초보자를 위한 리눅스 shell 명령 소개

An Introduction to the Linux Command Shell For Beginners

 

ShellIntro.pdf
0.12MB

 

13쪽 분량의 간단한 명령어 소개 자료

 

먼저 올렸던 "24시간에 배우는 셸 프로그래밍(https://freewin.tistory.com/186)"과 함께 활용.

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:18

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/101289

 

teach yourself shell programming in 24 hours

24시간만에 배우는 셸 프로그래밍

 

Shell_Programming_in_24_Hours.zip
1.64MB

 

영문 자료인데 아무리 봐도 24시간에 배우긴 무리인 것 같긴 하다 -_-;

 

기본적인 내용을 찾아보기 위한 간단한 사전 정도로 활용 가능.

 

Posted by 반달가면

댓글을 달아 주세요