#command

[Linux] find 명령어 완벽 가이드: 파일 검색부터 일괄 처리까지

리눅스 시스템 관리에서 가장 강력한 도구 중 하나인 find 명령어의 옵션과 사용법을 정리합니다. 파일명, 권한, 시간, 크기 등 다양한 조건으로 파일을 검색하고 -execxargs를 통해 후처리하는 방법을 다룹니다.

Test Environment

  • OS: CentOS 7
  • Shell: Bash

1. 기본 구문 (Syntax)

find 명령어는 지정된 경로 하위의 모든 트리를 탐색하므로 검색 범위 설정에 주의해야 합니다.

find [경로] [조건] [동작]

주요 검색 조건 (Predicates)

  • -name [pattern]: 파일 이름으로 검색 (와일드카드 사용 가능)
  • -type [d/f]: 파일 타입 (d: 디렉토리, f: 일반 파일)
  • -user [name]: 소유자 이름으로 검색
  • -group [name]: 그룹 이름으로 검색
  • -perm [mode]: 파일 권한으로 검색
  • -size [n]: 파일 크기로 검색 (+n: 이상, -n: 이하, 단위: k, M, G)
  • -empty: 빈 파일 또는 빈 디렉토리 검색

시간 관련 조건 (Time Stamps)

시간 옵션에서 +n은 n일 이전(Old), -n은 n일 이내(New)를 의미합니다.

  • -atime [n]: Access Time (마지막 접근 시간, 일 단위)
  • -mtime [n]: Modify Time (마지막 수정 시간, 일 단위)
  • -ctime [n]: Change Time (메타데이터 변경 시간, 일 단위)

2. 기본 사용 예제

파일명 및 타입 검색

# 1. 현재 디렉토리(.)에서 이름에 'test'가 포함된 파일 찾기
find . -name "*test*" -print

# 2. 시스템 전체(/)에서 'foobar'라는 이름의 파일 찾기
find / -name "foobar" -print

# 3. 디렉토리만 찾기
find . -type d

# 4. 숨겨진 파일(점으로 시작하는 파일) 찾기
find . -name ".*" -print

권한(Permission) 및 소유자 검색

# 1. 권한이 700인 파일 찾기
find . -perm 700 -print

# 2. 권한이 400 이거나 200인 파일 찾기 (논리 연산 OR 사용)
# 괄호 앞에는 반드시 escape(\) 처리가 필요합니다.
find . \( -perm 400 -o -perm 200 \) -print

# 3. 특정 사용자(foobar) 소유의 파일 찾기
find / -user foobar -print

# 4. 소유자나 그룹이 없는(삭제된 계정 등) 파일 찾기 (고아 파일)
find / \( -nouser -o -nogroup \) -print

# 5. 실행 권한이 있는 파일 찾기 (Others에게 쓰기 권한이 있는 경우 등 보안 점검 시 유용)
find / -perm -2 -print

3. 고급 활용 및 일괄 처리 (Actions)

검색된 파일에 대해 -exec 또는 xargs를 사용하여 추가 명령을 수행할 수 있습니다.

-exec 옵션 사용

{}는 검색된 파일명을 의미하며, \;로 명령을 종료합니다.

# 1. 이름이 core인 파일을 찾아 상세 정보 출력(ls -l)
find . -name core -exec ls -l {} \;

# 2. *.bak 파일을 찾아 즉시 삭제
find . -name "*.bak" -exec rm -f {} \;

# 3. *.txt 파일 내에서 특정 문자열 치환 (Perl 이용)
find / -name "*.txt" -exec perl -pi -e 's/OldString/NewString/g' {} \;

xargs 파이프 연계

많은 수의 파일을 처리할 때는 -exec보다 xargs가 성능상 유리할 수 있습니다.

# 1. 파일 내용에서 특정 문자열 검색 (grep)
find . -type f | xargs grep "검색어"

# 2. 100MB 이상인 파일을 찾아 크기순 보기
find / -size +100M -print | xargs ls -lh

# 3. 최근 30일 동안 수정되지 않은 파일 목록 저장
find / -mtime +30 -print > old_files.txt

4. 실무 유용한 패턴 정리

디스크 정리 및 관리

# 1. 빈 파일(0 byte) 찾기
find / -empty -print
# 또는
find / -size 0 -print

# 2. 최근 30일간 접근하지 않은 파일 리스트 추출
# ! (NOT) 연산자와 -a (AND) 연산자 조합
find / ! \( -atime -30 -a \( -type d -o -type f \) \) | xargs ls -l > not_access.txt

# 3. 특정 디렉토리 하위의 *.bak 파일을 백업 폴더로 이동
# (주의: 백틱 ` 사용 시 파일명이 너무 많으면 에러 발생 가능성 있음)
mv `find . -name "*.bak"` /home/bak/

보안 점검

# 1. Root 권한으로 실행되는 SetUID 파일 찾기 (+4000)
find / \( -user root -a -perm +4000 \) -print

# 2. Others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한 제거
find / -perm -2 -exec chmod o-w {} \;

Next Step:
find 명령어로 파일을 찾은 뒤, 로그 분석이나 텍스트 처리가 필요하다면 grep, awk, sed 명령어의 정규표현식(Regex) 활용법을 학습해 보시길 권장합니다.

Open Stream →
#IBM HTTPServer

[WebSphere] IHS Plugin Key(kdb) 만료일 확인 및 패스워드 갱신 (gsk7capicmd)

IBM HTTP Server(IHS) 플러그인이 사용하는 키 데이터베이스 파일(plugin-key.kdb)에는 내부 패스워드 만료일이 존재합니다. 만료 시 웹 서버 플러그인이 HTTPS 통신을 초기화하지 못해 장애가 발생할 수 있습니다. 이를 확인하고 갱신하는 gsk7capicmd 명령어 사용법을 정리합니다.

1. 문제 상황 및 증상

플러그인 키 파일의 패스워드가 만료되면 웹 서버(IHS) 재기동 시 또는 플러그인 전파(Propagation) 후 다음과 같은 에러가 발생하며 WAS와의 SSL 통신이 실패합니다.

ERROR: lib_security: initializeSecurity: Failed to initialize GSK environment
ERROR: ws_transport: transportInitializeSecurity: Failed to initialize security

2. 만료일 확인 (Check Expiry)

gsk7capicmd 명령어를 사용하여 현재 plugin-key.kdb 파일의 패스워드 만료일을 확인합니다.

기본 정보:

  • 기본 패스워드: WebAS
  • 명령어 위치: [IHS_ROOT]/bin 또는 [GSK_ROOT]/bin

Windows 환경

C:\IBM\HTTPServer\bin> gsk7capicmd -keydb -expiry -db "C:\IBM\HTTPServer\Plugins\config\webserver1\plugin-key.kdb" -pw WebAS

Validity: Thursday, 26 April 2012 11:20:31 AM Eastern Daylight Time

Unix/Linux/AIX 환경

# 경로 이동 (예시)
cd /usr/bin
# 또는 /usr/opt/ibm/gskta/bin/gsk7capicmd

# 만료일 확인
./gsk7capicmd -keydb -expiry -db "/IBM/Plugins/config/webserver1/plugin-key.kdb" -pw WebAS

Validity: Friday, 27 April 2012 00:20:31 AM KORST

3. 패스워드 변경 및 만료일 연장 (Change Password)

패스워드를 변경함과 동시에 만료 기간을 연장합니다. 변경된 패스워드는 반드시 -stash 옵션을 사용하여 저장해야 플러그인이 자동으로 파일을 읽을 수 있습니다.

주요 옵션 설명

  • -changepw: 패스워드 변경 모드
  • -new_pw: 새로운 패스워드 (기존 패스워드 재사용 불가)
  • -expire: 만료일 설정 (일 단위). 0으로 설정 시 만료되지 않음(권장).
  • -stash: 패스워드를 .sth 파일에 암호화하여 저장 (필수)

명령어 실행 예시

# Windows
gsk7capicmd -keydb -changepw -db "C:\path\to\plugin-key.kdb" -pw WebAS -new_pw WebAS1 -expire 0 -stash

# Unix/Linux/AIX
./gsk7capicmd -keydb -changepw -db "/path/to/plugin-key.kdb" -pw WebAS -new_pw WebAS1 -expire 0 -stash

Note: GSKit 7.0.3.17 이전 버전은 -expire 파라미터를 지원하지 않을 수 있습니다. 이 경우 최신 버전으로 업데이트하거나 패스워드를 주기적으로 변경해야 합니다.


4. 기타 플랫폼별 대응 (z/OS, IBM i)

z/OS (gskkyman 사용)

  1. plugin-key.kdb 파일 위치로 이동 후 gskkyman 실행.
  2. 메뉴에서 "3 - Change database password" 선택.
  3. 현재 패스워드(WebAS) 및 신규 패스워드 입력.
  4. 만료일(Expiration days) 입력 프롬프트에서 엔터(Enter)를 눌러 만료 없음(No expiration) 설정.
  5. 변경 후 반드시 Stash 파일 갱신: gskkyman -s -k plugin-key.kdb

IBM i (Digital Certificate Manager 사용)

IBM i 환경(V5R4, V6R1, V7R1)에서는 브라우저 기반의 DCM 도구를 사용합니다.

  1. HTTP Admin 서버 시작: STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
  2. 브라우저 접속: http://[machine]:2001
  3. Digital Certificate Manager > Select a certificate store 선택.
  4. Other System Certificate Store 선택 후 plugin-key.kdb 경로 입력.
  5. Reset password 클릭 후 신규 패스워드 설정.
  6. 옵션에서 "Password does not expire""Automatic login"(Stash 효과) 체크.

Next Step:
작업 완료 후 반드시 웹 서버(IHS)를 재기동하여 플러그인이 갱신된 plugin-key.kdbstash 파일을 정상적으로 로드하는지 확인하십시오.

Open Stream →
#WebSphere

[WebSphere] manageprofiles 명령어로 프로파일 생성, 삭제, 백업하기

WebSphere Application Server(WAS) 환경에서 프로파일(Profile)의 생명주기를 관리하는 manageprofiles 명령어 사용법을 정리합니다. 프로파일 생성, 삭제, 백업 및 복구 과정을 포함합니다.

Test Environment

  • OS: Windows 10
  • Version: WebSphere Application Server (WAS) v8.0

1. manageprofiles 개요

manageprofiles는 WAS의 런타임 환경인 프로파일을 CLI 환경에서 관리하는 핵심 도구입니다.

주요 모드 (Modes)

  • -create: 새 프로파일 작성
  • -delete: 기존 프로파일 삭제
  • -deleteAll: 모든 프로파일 삭제
  • -backupProfile / -restoreProfile: 프로파일 백업 및 복구
  • -listProfiles: 현재 생성된 프로파일 목록 조회
  • -validateRegistry: 프로파일 레지스트리 유효성 검사

2. 프로파일 생성 (Create)

새로운 런타임 환경(Dmgr, Managed Node 등)을 구성합니다.

구문 및 주요 인수

manageprofiles -create [옵션]

  • -templatePath: (필수) 생성할 프로파일의 템플릿 경로 (예: dmgr, default, managed 등)
  • -profileName: (필수) 생성할 프로파일의 이름
  • -profilePath: (필수) 프로파일이 실제로 설치될 파일 시스템 경로
  • -isDefault: (선택) 이 프로파일을 기본 프로파일로 설정할지 여부

사용 예시 (Windows Batch)

Deployment Manager (Dmgr) 생성

manageprofiles.bat -create ^
 -profileName Dmgr01 ^
 -templatePath "C:\nd61\WebSphere\AppServer\profileTemplates\dmgr" ^
 -profilePath "C:\nd61\WebSphere\AppServer\profiles\Dmgr01"

Application Server (Managed Node) 생성

manageprofiles.bat -create ^
 -profileName AppSrv01 ^
 -templatePath "C:\nd61\WebSphere\AppServer\profileTemplates\managed" ^
 -profilePath "C:\nd61\WebSphere\AppServer\profiles\AppSrv01"

3. 프로파일 삭제 (Delete)

더 이상 사용하지 않는 프로파일을 제거하거나, 레지스트리에서 정보를 삭제합니다.

구문

manageprofiles -delete -profileName [프로파일이름]

사용 예시

# 특정 프로파일 삭제 (Unix/Linux 예시)
./manageprofiles.sh -delete -profileName Dmgr01
./manageprofiles.sh -delete -profileName AppSrv01

# 모든 프로파일 일괄 삭제
./manageprofiles.sh -deleteAll

4. 백업 및 복구 (Backup & Restore)

기존 프로파일의 구성 정보를 백업하거나 복원합니다. 마이그레이션이나 장애 대비용으로 사용됩니다.

구문

  • 백업: manageprofiles -backupProfile -profileName [이름] -backupFile [경로]
  • 복구: manageprofiles -restoreProfile -backupFile [경로] (복구 시에는 백업 파일 경로만 지정하면 해당 파일 내의 정보로 복원됩니다.)

사용 예시

:: 프로파일 백업
manageprofiles -backupProfile -profileName Dmgr01 -backupFile "c:\backup\Dmgr01_2023.zip"

:: 프로파일 복구
manageprofiles -restoreProfile -backupFile "c:\backup\Dmgr01_2023.zip"

Next Step:
프로파일 생성이 완료되었다면, addNode 명령어를 통해 Managed Node를 Dmgr(Deployment Manager)에 연합(Federation)하는 과정을 진행해 보십시오.

Open Stream →
#Linux

[Linux] OS 기본 계정 관리 및 권한 설정 완전 정복 (chmod, chown)

Linux(CentOS/RHEL) 환경에서의 기본적인 사용자 계정 생성, 비밀번호 설정, 그리고 파일 권한(Permission) 및 소유권(Ownership) 관리를 위한 필수 명령어 정리 노트입니다.

1. 사용자 계정 관리 (User Management)

리눅스 시스템에서 사용자를 추가하고, 비밀번호를 설정하며, 계정 정보를 확인하는 방법입니다. 모든 작업은 root 권한이 필요합니다.

계정 생성 및 비밀번호 설정

useradd 명령어로 계정을 생성하고 passwd로 비밀번호를 설정합니다. (CentOS 계열에서 adduseruseradd의 심볼릭 링크입니다.)

  • useradd [옵션] [계정명]: 계정 생성
  • passwd [계정명]: 비밀번호 설정 (생략 시 현재 로그인된 계정의 비밀번호 변경)
# 1. 기본 생성 예시
[root@localhost ~]# useradd testuser
[root@localhost ~]# passwd testuser
Changing password for user testuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# 2. 옵션을 지정하여 상세 생성 예시
# -d: 홈 디렉토리 지정
# -u: UID 지정 (500번대 이상 권장)
# -g: GID 지정 (기존 그룹)
# -c: Comment (사용자 설명)
# -s: 쉘 지정 (/bin/bash 등)
[root@localhost ~]# useradd -d /home/was -u 510 -g 500 -c "WAS Admin" -s /bin/bash wasadmin

계정 관련 주요 파일 경로

  • /etc/passwd: 사용자 계정 정보가 저장됨 (형식: User:PWD:UID:GID:Comment:Home:Shell)
  • /etc/group: 그룹 정보가 저장됨

기타 유용한 명령어

  • su - [계정명]: 해당 계정으로 로그인 (환경변수 로드 포함)
  • usermod: 계정 속성 수정 (옵션은 useradd와 유사)
  • userdel -r [계정명]: 계정 및 홈 디렉토리까지 완전 삭제

2. 권한 관리 (Permission - chmod)

리눅스는 다중 사용자 시스템이므로 파일과 디렉토리에 대해 읽기(r), 쓰기(w), 실행(x) 권한을 엄격히 구분합니다.

권한 표기법 (Octal vs Symbolic)

  • r (Read, 4): 파일 읽기 / 디렉토리 목록 확인
  • w (Write, 2): 파일 수정 / 디렉토리 내 파일 생성 및 삭제
  • x (Execute, 1): 파일 실행 / 디렉토리 진입(cd)

권한 합산 예시:

  • 7 (rwx) = 4 + 2 + 1 : 모든 권한
  • 5 (r-x) = 4 + 0 + 1 : 읽기 및 실행
  • 6 (rw-) = 4 + 2 + 0 : 읽기 및 쓰기

chmod 사용 예제

# 1. 심볼릭 모드 (u:소유자, g:그룹, o:기타)
chmod u+x run.sh      # 소유자에게 실행 권한 추가
chmod g-w data.txt    # 그룹에게 쓰기 권한 제거

# 2. 8진수 모드 (실무에서 가장 많이 사용)
chmod 755 script.sh   # 소유자(rwx), 그룹(rx), 기타(rx)
chmod 644 config.conf # 소유자(rw), 그룹(r), 기타(r) - 일반적인 설정 파일
chmod 600 private.key # 소유자(rw)만 접근 가능 - 보안 중요 파일

# 3. 재귀적 변경 (-R 옵션)
chmod -R 755 /var/www/html # 하위 디렉토리 및 파일 전체 적용

3. 소유권 관리 (Ownership - chown)

파일이나 디렉토리의 소유자(Owner)와 소유 그룹(Group)을 변경할 때 사용합니다. 주로 파일 전송 후 권한을 맞출 때 사용됩니다.

# 소유자만 변경
chown user1 file.txt

# 소유자와 그룹을 동시에 변경 (소유자:그룹)
chown was:wasgroup app.log

# 디렉토리 하위 모든 파일의 소유권 변경 (-R)
chown -R apache:apache /var/www/html

4. 파일 정보 확인 및 해석 (ls -al)

ls -al 명령어를 통해 현재 권한 상태를 정확히 파악하는 것이 중요합니다.

drwxr-xr-x  2  root  root  4096  Dec 9 10:00  etc
----------  -  ----  ----  ----  -----------  ---
    (1)    (2)  (3)   (4)   (5)      (6)      (7)
  1. 파일 타입 및 권한: 첫 글자가 d면 디렉토리, -면 파일. 이후 3자리씩 소유자/그룹/기타 권한.
  2. 링크 수: 하드 링크의 개수.
  3. 소유자(User): 파일의 소유 계정 ID.
  4. 소유 그룹(Group): 파일의 소유 그룹 ID.
  5. 파일 크기: Byte 단위 크기.
  6. 수정 시간: 마지막 수정 날짜.
  7. 파일 이름: 파일명.

Next Step:
기본적인 권한 관리에 익숙해졌다면, SetUID, SetGID, Sticky Bit와 같은 특수 권한 설정을 학습하여 보안 레벨을 한 단계 높여보시기 바랍니다.

Open Stream →