시나리오 기반 문제 해결
현재 디렉토리 및 하위 디렉토리에서 10MB 보다 큰 모든 파일을 찾은 다음, 해당 경로와 크기를 사람이 읽기 쉬운 형식으로 나열해야 합니다. 어떻게 해야 할까요?
답변:
find . -type f -size +10M -exec du -h {} \;를 사용합니다. find는 파일을 찾고, -type f는 파일을 지정하며, -size +10M은 크기로 필터링하고, -exec du -h {} \;는 찾은 각 파일에 대해 du -h를 실행합니다.
로그 파일 /var/log/app.log가 빠르게 증가하고 있습니다. 지난 24 시간 동안 'ERROR'라는 단어를 포함하는 모든 줄을 추출하여 새 파일 errors_today.log에 저장해야 합니다. 로그 항목은 타임스탬프로 시작한다고 가정합니다.
답변:
먼저 24 시간 전의 타임스탬프를 결정합니다. 그런 다음 awk 또는 sed와 함께 grep을 사용하여 필터링합니다. 예시: grep 'ERROR' /var/log/app.log | awk '$1 >= "$(date -d '24 hours ago' +'%Y-%m-%d')"' > errors_today.log. 사용 가능한 경우 logrotate 또는 journalctl을 사용하면 더 강력한 솔루션이 될 수 있습니다.
Name,Age,City 열이 있는 CSV 파일 data.csv가 있습니다. Age별로 내림차순, Name별로 오름차순으로 정렬한 다음 Name과 City만 출력해야 합니다.
답변:
sort와 cut, awk를 사용합니다. (head -n 1 data.csv; tail -n +2 data.csv | sort -t',' -k2nr -k1n)로 정렬합니다. 그런 다음 cut -d',' -f1,3 또는 awk -F',' '{print $1 "," $3}'로 열을 선택합니다. 결합: (head -n 1 data.csv; tail -n +2 data.csv | sort -t',' -k2nr -k1) | awk -F',' '{print $1 "," $3}'.
백그라운드에서 myscript.sh 스크립트가 실행 중인데 멈춘 것으로 의심됩니다. 상태를 확인하는 방법과 응답이 없는 경우 정상적으로 종료하고, 필요한 경우 강제로 종료하는 방법은 무엇인가요?
답변:
ps aux | grep myscript.sh로 상태를 확인합니다. 정상적으로 종료하려면 kill <PID>를 사용합니다. 응답이 없으면 강제 종료를 위해 kill -9 <PID>를 사용합니다. 정리 작업을 허용하기 위해 항상 정상 종료를 먼저 시도해야 합니다.
/etc 디렉토리의 백업을 생성하고, gzip을 사용하여 압축하고, /tmp/etc_backup_YYYYMMDD.tar.gz에 저장해야 합니다. 이 작업을 어떻게 자동화할 수 있나요?
답변:
tar와 gzip을 사용합니다. tar -czf /tmp/etc_backup_$(date +%Y%m%d).tar.gz /etc. 이 명령어는 날짜가 포함된 이름으로 압축된 tar 아카이브 (-c 생성, -z gzip, -f 파일 이름) 를 생성합니다.
네트워크 문제를 해결 중입니다. 로컬 머신에서 특정 포트 (예: 8080) 가 열려 있고 수신 대기 중인지, 그리고 어떤 프로세스가 사용하고 있는지 확인하는 방법은 무엇인가요?
답변:
netstat -tulnp | grep :8080 또는 lsof -i :8080을 사용합니다. netstat은 네트워크 연결을 보여주고, -t는 TCP, -u는 UDP, -l은 수신 대기 중, -n은 숫자, -p는 프로세스 ID 입니다. lsof는 네트워크 소켓을 포함한 열린 파일을 나열합니다.
URL (http://example.com/file.zip) 에서 파일을 다운로드하여 현재 디렉토리에 downloaded_file.zip으로 저장해야 합니다. 명령줄 도구를 사용하여 어떻게 할 수 있나요?
답변:
wget 또는 curl을 사용합니다. wget 사용 시: wget -O downloaded_file.zip http://example.com/file.zip. curl 사용 시: curl -o downloaded_file.zip http://example.com/file.zip. 두 도구 모두 HTTP/HTTPS 다운로드에 일반적입니다.
많은 파일이 있는 디렉토리가 있는데, .txt로 끝나는 모든 파일의 이름을 .log로 변경해야 합니다. 어떻게 달성할 수 있나요?
답변:
for 루프와 mv를 사용합니다. for f in *.txt; do mv "$f" "${f%.txt}.log"; done. "${f%.txt}.log" 구문은 .txt 접미사를 제거하고 .log를 추가합니다.
/var 디렉토리에서 가장 큰 파일 5 개를 찾고, /var/cache 및 /var/log와 같은 하위 디렉토리는 제외해야 합니다.
답변:
du와 sort를 사용합니다. du -ah --exclude=/var/cache --exclude=/var/log /var | sort -rh | head -n 5. du -ah는 사람이 읽기 쉬운 형식으로 크기를 나열하고, sort -rh는 역순으로 숫자를 정렬하며, head -n 5는 상위 5 개를 가져옵니다.
스크립트가 매일 오전 3 시에 실행되어야 합니다. 이 작업을 어떻게 예약할 수 있나요?
답변:
cron을 사용합니다. crontab 에 항목을 추가합니다: 0 3 * * * /path/to/your/script.sh. 이는 매월, 매일, 매일의 3 시 0 분에 스크립트를 실행함을 의미합니다.