스크립트가 있는데 bad interpreter가 나오면 shebang의 CR을 본다
실행 권한이 있는 Linux 스크립트도 shebang 끝의 CR 때문에 인터프리터를 찾지 못할 수 있다. LF·CRLF의 execve errno와 첫 줄 바이트를 비교하고, 없는 경로·권한 오류를 구별해 해당 파일만 LF로 고치는 방법을 설명한다.
빌드노트
Linux·운영 카테고리의 글입니다.
총 48개의 글
실행 권한이 있는 Linux 스크립트도 shebang 끝의 CR 때문에 인터프리터를 찾지 못할 수 있다. LF·CRLF의 execve errno와 첫 줄 바이트를 비교하고, 없는 경로·권한 오류를 구별해 해당 파일만 LF로 고치는 방법을 설명한다.
로그를 삭제해도 열린 파일 디스크립터가 남아 있으면 공간은 유지된다. 격리 Linux에서 1MiB 파일의 삭제 전후와 마지막 FD 해제 후를 비교하고, lsof와 /proc로 보유 프로세스를 확인해 서비스의 로그 재열기 절차를 고르는 방법을 설명한다.
GNU grep의 종료 1은 검색 미발견이고 파일 오류는 보통 2다. 합성 파일의 표준 출력·표준 오류·종료 상태를 비교하고, Bash에서 세 경로를 나누는 처리와 -q가 파일 오류를 0으로 덮을 수 있는 조건을 확인한다.
같은 GNU sort도 로케일에 따라 줄 순서가 달라진다. 같은 33바이트를 C와 작업 폴더에 만든 en_US.UTF-8로 정렬하고 sort -c의 판정 차이를 확인했다. 실행 환경의 우선순위를 읽고 바이트 비교용 정렬과 검사에만 LC_ALL=C를 적용한다.
umask는 생성 요청 모드에서 권한 비트를 지운다. Linux에서 0666·0777 요청과 022·077 마스크를 비교해 일반 파일이 644가 되는 이유, 단순 뺄셈의 오류, 기존 파일과 부모 프로세스에 적용되지 않는 범위를 확인한다.
find의 줄 단위 출력을 기본 xargs로 읽으면 공백·개행에서 이름이 나뉘고 따옴표도 사라진다. GNU 4.9.0·4.10.0에서 인자 바이트를 비교하고, -print0/-0와 빈 입력의 -r 처리를 확인했다.
빈 변수를 인용하지 않으면 [ -n $value ]에 -n 하나만 남아 참이 된다. 실제 인자 수와 종료 상태를 비교해 빈 값·공백·파일 이름 확장의 차이를 확인하고, 큰따옴표나 Bash [[ ]]로 문자열 경계를 유지한다.
CDPATH로 디렉터리를 찾은 cd는 성공해도 경로를 표준출력에 쓴다. cd와 pwd를 함께 명령 치환으로 받았을 때 생기는 두 줄을 확인하고, 자식 안에서 CDPATH를 비우거나 ./project로 현재 위치의 경로를 지정한다.
PATH에서 새 파일이 검색돼도 같은 Bash는 사라진 옛 경로를 기억할 수 있다. type과 hash로 판별하고, hash -d·hash -r·checkhash의 적용 범위를 실제 파일 이동 실험으로 비교한다.
grep -q가 일치를 찾아 0으로 끝나도 생산자의 SIGPIPE 때문에 pipefail 조건은 거짓이 될 수 있다. PIPESTATUS를 즉시 저장해 원인을 구분하고, 입력을 끝까지 소비하는 방식과 조기 종료 정책을 비교한다.
GNU sort -nu는 숫자 키가 같은 줄을 하나로 줄인다. 네 줄 실험으로 sort -n | uniq와 비교하고, 명시적 키와 -s가 전체 줄 중복 제거에 미치는 차이를 확인한다.
Bash heredoc의 종료 표식을 인용하지 않으면 설정 파일 생성 시점에 변수·명령·산술식이 확장된다. 인용 전후의 파일 내용을 비교해 본문 안의 작은따옴표가 확장을 막지 못하는 이유와 <<'EOF'로 표현식을 보존하는 방법을 설명하고, 이후 Bash가 파일을 읽을 때의 해석을 구분한다.