기본 콘텐츠로 건너뛰기

개발 공부 - 자주 쓰는 리눅스 명령어 공부

grep 정리를 하다가 3년 전에 쓰려다 만 글을 꺼내서 추가 기재한다.
이렇게 쌓인 숙제를 하나 씩 해결하면 언젠가 끝날 숙제!
어쨌든 아래와 같다.

0. grep: 파일에서 지정된 패턴을 검색합니다. 패턴에 해당하는 모든 라인을 표시한다.
grep "패턴" 파일 명
grep 을 기본밖에 안 써서, 조금 더 잘 써보려고 상세 정리를 했다.


기본 형식은 아래와 같다.
grep [옵션] 패턴 파일


[자주 사용되는 grep 옵션]


1. -i (ignore case): 대소문자를 구분하지 않고 검색한다.
grep -i "찾는 문자열" file.txt
의외로 이건 별로 안 썼던 것 같다.
보통 log 파일 뒤져 보느라 썼는데, equal 검색만 필요했기 때문이다.
예시 : 특정 디렉토리에서 대소문자 구분 없이 "error" 문자열 검색
grep -i "error" /var/log/syslog


2. -r 또는 -R (recursive): 디렉토리 내의 모든 파일을 재귀적으로 검색한다.
grep -r "찾는 문자열" /path/to/directory
예시 : 현재 디렉토리와 하위 디렉토리에서 "TODO" 주석 검색
grep -r "TODO" .

3. -v (invert match): 패턴과 일치하지 않는 라인을 출력한다.
grep -v "찾는 문자열" file.txt
예시 : 특정 패턴을 포함하지 않는 라인 출력
grep -v "DEBUG" application.log   
   

4. -c (count): 패턴과 일치하는 라인의 개수를 출력한다.
grep -c "찾는 문자열" file.txt
   

5. -l (files with matches): 패턴과 일치하는 라인이 있는 파일의 이름을 출력한다.
grep -l "찾는 문자열" *.txt
이걸 많이 썼다!
   

6. -n (line number): 일치하는 라인의 번호와 함께 출력한다.
grep -n "찾는 문자열" file.txt
예시 : 파일에서 패턴이 일치하는 라인의 번호와 함께 출력
grep -n "ERROR" application.log
   

7. -H (with filename): 일치하는 라인의 파일 이름을 항상 출력한다.
grep -H "찾는 문자열" file.txt
이것도 많이 썼다!
   

8. -A (after context): 일치하는 라인과 함께 이후의 N 라인을 출력한다.
grep -A 3 "찾는 문자열" file.txt
예시는 3 라인이다.
   

9. -B (before context): 일치하는 라인과 함께 이전의 N 라인을 출력한다.
grep -B 3 "찾는 문자열" file.txt
   

10. -C (context): 일치하는 라인과 함께 이전 및 이후 N 라인을 출력한다.
grep -C 3 "찾는 문자열" file.txt
예시 : 파일에서 패턴 일치 라인의 개수 출력
grep -c "WARN" application.log

11. -E (extended regex): 확장 정규 표현식을 사용한다.
grep -E "pattern1|pattern2" file.txt
    

12. -f (file): 패턴을 파일에서 읽어온다.
grep -f patterns.txt file.txt
    

13. -o (only matching): 일치하는 부분만 출력한다.
grep -o "찾는 문자열" file.txt
이 것도 많이 써보려고 한다! 
    

14. --color: 일치하는 부분을 색깔로 강조한다.
grep --color "찾는 문자열" file.txt



기본적으로 위와 같이 사용하지만, 다른 명령어랑 섞어서 좀 명석하게 써 보고 싶으면 아래와 같이 쓴다.
사실 한 번 만들어 놓고 위에 올려서 쓰다가, 머리를 좀 써 보려고 새로 정리 하고 있다.
chatgpt가 나오고 나서는 아예 명령어를 머리 속에서 외주를 줘버려서, 좀 외우고 살아야겠다고 생각했다.


1. cat과 함께 사용
(1) 특정 단어를 포함한 라인만 출력
cat file.txt | grep "찾는 문자열"
이 걸 많이 썼다!


(2) 여러 파일에서 특정 단어를 검색
cat file1.txt file2.txt | grep "찾는 문자열"


(3) 특정 단어를 포함하지 않는 라인만 출력
cat file.txt | grep -v "찾는 문자열"


2. ping과 함께 사용
(1) 네트워크 연결 상태를 확인하며 응답에서 특정 단어 필터링
ping -c 4 google.com | grep "time="


(2) 패킷 손실 여부 확인
ping -c 4 google.com | grep "packet loss"


3. ps와 함께 사용
(1) 실행 중인 프로세스 중 특정 프로세스 찾기
ps aux | grep "process_name"


(2) 특정 사용자에 의해 실행된 프로세스 찾기
ps aux | grep "username"


4. ls와 함께 사용
(1) 디렉토리 내 특정 확장자를 가진 파일 목록
ls -l | grep "\.txt$"


(2) 숨김 파일 제외
ls -la | grep -v "^\."


5. dmesg와 함께 사용
(1) 부팅 메시지에서 특정 키워드 검색
dmesg | grep "error"
한 번도 안 써봤다! 충격!
커널 메모리 버퍼 관련 명령어는 권한도 없기도 하고 공부 할 때 빼고는 안 써볼 것 같아서 빼지 않고 기재한다.

(2) 최근 커널 로그에서 USB 관련 메시지 찾기
dmesg | grep -i "usb"


6. find와 함께 사용
(1) 특정 디렉토리에서 파일 검색 후 내용 검색
find /path/to/directory -type f -name "*.txt" -exec grep "찾는 문자열" {} \;


(2) 특정 확장자를 가진 파일 내용 검색
find . -name "*.log" | xargs grep "찾는 문자열"


7. awk와 함께 사용
(1) awk로 특정 필드 추출 후 패턴 검색
awk '{print $2}' file.txt | grep "찾는 문자열"


(2) 로그 파일에서 특정 시간대의 로그 검색
awk '/2024-08-29 12:00:00/,/2024-08-29 12:59:59/' logfile.log | grep "ERROR"


8. tail과 함께 사용 (매우 많이 쓴다!)
(1) 실시간 로그 모니터링 중 특정 단어 필터링
tail -f logfile.log | grep "찾는 문자열"


9. sort와 함께 사용
(1) 중복되지 않은 단어 목록 추출 및 정렬
cat file.txt | grep "찾는 문자열" | sort | uniq


(2) 특정 단어 포함 라인을 정렬하여 출력
grep "찾는 문자열" file.txt | sort


10. sed와 함께 사용
(1) 특정 패턴을 가진 라인을 출력하고, 해당 라인에서 문자열 치환
grep "찾는 문자열" file.txt | sed 's/old_string/new_string/g'


(2) 특정 단어를 포함한 라인을 제외하고 나머지 라인만 출력
grep -v "찾는 문자열" file.txt | sed '/unwanted_pattern/d'


11. 종합 예시
(1) ps, grep, awk를 조합하여 특정 프로세스의 메모리 사용량 출력
ps aux | grep "process_name" | awk '{print $4}'


(2) find, grep, sort, uniq를 조합하여 특정 디렉토리 내에서 특정 단어를 포함한 파일 목록을 중복 제거 후 정렬
find /path/to/directory -type f -exec grep -l "찾는 문자열" {} + | sort | uniq


grep 이후에 많이 쓰는 명령어는 아래와 같다.


1. 파일 / 디렉토리 목록 표시
ls : 디렉토리 파일 / 목록 표시
ll = ls -l : 자세한 정보도 포함해서 표시

   
2. 디렉토리 변경
cd : 이동!


3. 현재 경로 표시
pwd : 현재 위치한 경로 표시


4. 새 디렉토리 생성
mkdir 새디렉토리명
   

5. 파일 / 디렉토리 삭제
rm 파일명
rm -r 디렉토리명
: -r 옵션을 넣으면 디렉토리/내용 재귀 삭제가 된다.


6. 파일 / 디렉토리 복사
cp 원본 대상
cp -r 디렉토리 원하는_위치
 
  
7. 파일 / 디렉토리 이동 or 이름 변경
mv 원본 대상
   

8. 파일 생성 or 수정 시간 변경
touch 파일명

   
9. 파일 내용 화면 표시
cat 파일명
: 사실 이걸로 많이 안 보고 vim으로 본 것 같은데 나만 그런 걸 수도 있으니 조용히 있는다.


10. 파일 내용 페이지 단위로 표시
기본적으로 more는 한 페이지씩 넘어가고, less는 스크롤로 보여준다.
more 파일명
less 파일명
    

11. 호스트 or IP 주소에 대한 네트어크 연결 테스트
연결 상태, 응답 시간을 확인 가능하다.
ping 호스트명 또는 IP주소
    

12. 현재 실행 중인 프로세스 목록 표시
-aux 옵션을 사용하면 상세 정보를 보여준다. 
ps
ps -aux
    

13. 프로세 종료 
특정 프로세스 ID를 사용해서 종료한다.
kill 프로세스ID
    

14. 파일 / 디렉토리 권한 변경
권한은 숫자로도 설정 가능하다. (rwx or 755 처럼)
chmod 권한 파일명
chmod 755 파일명 (예: 읽기/쓰기/실행 권한 부여)
    

15. 파일 / 디렉토리의 소유자 변경
chown 사용자명:그룹명 파일명
    

16. 파일 / 디렉토리를 아카이브하거나 압축을 해제
-c 옵션은 아카이브 생성, -x 옵션은 압축 해제를 한다.
tar -cvf 아카이브파일명.tar 디렉토리명
tar -xvf 아카이브파일명.tar
    

17. 인터넷에서 파일 다운로드
wget URL
    
    




댓글

이 블로그의 인기 게시물

Ebook - 전자책 drm 상관 없이 pdf로 만들기

yes24와 교보문고에서 ebook을 구매 해야 했는데 너무 불편하고, 필기가 매우 화날 정도로 안 좋아서 원시적으로 사용하기로 했다. 1. 목적 : ebook에서 필기 및 사용이 불편하여 pdf로 변환  2. 용도 : 개인 사용 목적이며 화질이 다소 저하되어도 필기만 용이하면 상관 없음 3. 방법 1) 휴대폰 및 카메라로 동영상을 촬영했다. DRM 때문에 프로그램으로는 촬영이 안 되는 것을 확인했다. (사실 개인 사용 목적이면 기본 화면 캡쳐를 사용해도 된다...) 2) 마우스 클릭 해주는 매크로를 사용했다. (1) key_macro.exe > https://blog.daum.net/pg365/250 듀얼 모니터에서 위치 이탈 현상이 있긴 해도 괜찮았다. (2) AutoClick.exe > http://bestsoftwarecenter.blogspot.com/2011/02/autoclick-22.html 이 걸로 잘 사용했다. 3초마다 한 번 클릭하도록 사용했다. 3) 동영상을 이미지로 변경해주는 프로그램을 사용했다. Free Video to JPG Converter > https://www.dvdvideosoft.com/products/dvd/Free-Video-to-JPG-Converter.htm (240826: 다운로드 시 정상적으로 되지 않아서 URL 수정) 일 하면서 듀얼 모니터에 켜 놨는데 속도가 괜찮았다. * Every frame 으로 사용해야 한다. 4) 중복 사진 제거해주는 프로그램을 사용했다. VlsiPics  > http://www.visipics.info/index.php?title=Main_Page 생각보다 느리니 퇴근시에 걸어놓고 가면 된다. 한번 play가 끝나면 Auto-select 하고 Delete 하면 된다. 5) 이미지를 일괄 Crop 작업 해주는 프로그램을 사용했다. JPEGCrops > https://jpegcrops.softonic.kr/ *...

개발 공부 - json JSONObject 사용 시 백슬래시(\), 원화 표시(\) 제거 및 치환

import org.json.simple.JSONObject; String dataString = new String(authData.toJSONString()); dataString = dataString.replaceAll("\\\\", ""); String 으로 안 바뀌는 가 싶어서 String 으로 변환 해 주고 작업 하였다. 사실 toJSONString 해도 정상 동작 해야 하는데 이유를 잘 모르겠음. 그리고 나서 다시 이클립스 구동 하니 toString 도 먹은 걸로 봐서 이상하다고 생각! String dataString = authData.toString(); dataString = dataString.replaceAll("\\\\", ""); 어쨌든 백 슬래시 제거를 해줘야 하는데 \\ 도 아니고 \\\\를 해야 변환이 가능했다는 결말이었습니다. 참고 : https://stackoverflow.com/questions/15450519/why-does-string-replace-not-work/15450539 test =test.replace("KP", "");  replace 후에 담아 주지 않으면 적용이 안 됩니다!

개발 공부 - OracleXETNSListener 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다.

여러 가지 요인이 있지만 PC 이름 변경시 OracleXETNSListener 서비스 시작이 불가능합니다. 고치는 법은 C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN 와 같은 설치 경로에서 listener.ora와 tnsnames.ora 의 pc명을 바꾼 PC명으로 바꿔주면 됩니다. 그래도 안 된다면 cmd 창에서 services.msc 를 입력 후 OracleXETNSListener 서비스를 시작 시키면 됩니다. 오류명: OracleXETNSListener 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다. 일부 서비스는 다른 서비스 또는 프로그램에서 사용되지 않으면 자동으로 중지됩니다. 참고한 사이트들 1. http://blog.naver.com/visioner7/120165951652 2. http://database.sarang.net/?inc=read&aid=6819&criteria=oracle&subcrit=&id=&limit=20&keyword=ora-12560&page=5 이런 걸 보면 오라클은 앙칼진 시골 아가씨야