본문 바로가기
빌드노트 검색

빌드노트

Linux·운영

Linux·운영 카테고리의 글입니다.

글 검색

글 목록

총 48개의 글

  1. pipefail을 켰는데 diff <(...)의 생산자 실패가 보이지 않는다

    같은 한 줄을 출력하고 7로 끝난 생산자를 diff <(...)에 연결해도 diff는 0이었다. pipefail과 PIPESTATUS의 범위를 구분하고, 생산자 상태를 따로 확인한 뒤 파일을 비교하는 방법을 설명한다.

  2. Bash 백그라운드 작업은 실패했는데 $?는 0이다

    Bash에서 & 직후의 0은 자식의 완료 상태가 아니다. 종료 0·7인 자식으로 차이를 확인하고, $!로 저장한 PID에 각각 wait해 실패를 배치 상태로 전달한다. 인자 없는 wait와 여러 PID를 한 번에 기다리는 경우의 한계도 비교한다.

  3. sed -i 뒤에 심볼릭 링크가 일반 파일이 됐다

    GNU sed -i는 심볼릭 링크가 있던 이름을 새 일반 파일로 교체할 수 있다. 링크·대상의 종류와 inode·내용을 비교하고, --follow-symlinks로 대상을 편집할지 새 파일로 결과를 남길지 고른다.

  4. Bash 함수에서 명령은 실패했는데 local 다음 상태는 0이다

    Bash 함수에서 local value=$(command) 뒤의 상태 0은 내부 명령의 성공을 보장하지 않는다. 같은 출력과 종료 상태 7을 내는 명령으로 선언·대입을 합친 경우와 분리한 경우를 비교하고, 대입 직후 실패를 저장해 반환하는 방법을 설명한다.

  5. Bash에서 for i in {1..$n}이 한 번만 도는 이유

    Bash의 {1..$n}은 매개변수 확장보다 먼저 처리되어 숫자 목록이 되지 않는다. 짧은 출력 비교로 문자열 하나가 남는 것을 확인하고, 0..99 입력 검증과 산술 for로 변수 횟수를 표현한다. 0회·선행 0·POSIX sh의 경계도 구분한다.

  6. 세 줄처럼 보이는 파일인데 wc -l은 2다

    wc -l은 LF 개수를 센다. 마지막 LF만 다른 파일과 빈 파일·빈 줄을 실제 바이트로 비교하고, 미종결 텍스트 레코드를 포함할 때의 awk NR과 CSV·JSON 파서의 적용 경계를 구분한다.

  7. test -e는 실패하는데 ln은 File exists라고 한다

    test -e가 거짓이어도 끊어진 심볼릭 링크는 이름을 차지한다. -L과 readlink를 함께 보고, 저장된 대상 경로가 틀렸는지 파일만 누락됐는지를 구분한다.

  8. 하드링크로 보관한 파일까지 같이 바뀌는 이유

    하드링크는 원본과 같은 inode를 공유하므로 truncate·write의 영향을 함께 받는다. device·inode·링크 수와 실제 내용을 비교하고, 새 파일로 이름을 교체했을 때 이전 하드링크가 남는 차이를 확인한다.

  9. Bash에서 파일이 없는데도 *.log가 인자로 넘어간다

    Bash는 *.log에 맞는 파일이 없으면 기본적으로 패턴 자체를 인자로 남긴다. 빈 폴더와 공백 포함 두 파일로 기본·nullglob·failglob를 비교하고, 배열 개수로 호출을 결정하는 방법과 failglob의 종료 상태 경계를 확인한다.

  10. 다른 폴더에 복사하자 끊어진 상대 심볼릭 링크

    상대 심볼릭 링크의 대상 경로는 링크가 놓인 폴더에서 해석한다. CWD를 바꿔 읽기, 링크만 복사해 실패하기, 새 위치에 맞는 상대경로로 복구하기를 합성 파일 실습으로 비교한다.

  11. echo로 보이는 변수를 자식 프로그램이 읽지 못할 때

    Bash에서 echo로 확인한 값이 자식에게 없는 이유를 셸 변수와 환경의 차이로 설명한다. 합성 변수의 대입·명령 앞 대입·export를 비교하고, 자식의 변경이 부모로 돌아오지 않는 실제 출력으로 전달 범위를 고른다.

  12. Bash에서 2>&1을 붙였는데 오류 로그가 파일에 안 들어간다

    Bash의 >file 2>&1과 2>&1 >file을 실제로 비교한다. ERR가 부모 stdout으로 빠지는 결과와 복제 뒤 stdout을 다른 파일로 바꾼 결과로 연결 시점을 설명하고, 로그 목적지와 종료 코드를 구분한다.