리λ μ€ μμ€ν κ΄λ¦¬μμ κ°μ₯ κ°λ ₯ν λꡬ μ€ νλμΈ
findλͺ λ Ήμ΄μ μ΅μ κ³Ό μ¬μ©λ²μ μ 리ν©λλ€. νμΌλͺ , κΆν, μκ°, ν¬κΈ° λ± λ€μν 쑰건μΌλ‘ νμΌμ κ²μνκ³-execλxargsλ₯Ό ν΅ν΄ νμ²λ¦¬νλ λ°©λ²μ λ€λ£Ήλλ€.
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) νμ©λ²μ νμ΅ν΄ 보μκΈΈ κΆμ₯ν©λλ€.