Bash에서 구분자로 문자열 나누기 — IFS read, readarray, 파라미터 확장 실측 비교
CSV 한 줄, PATH 같은 콜론 목록, 설정 파일의 key=v1;v2;v3처럼 구분자로 이어진 문자열을 배열로 나누는 일은 셸 스크립트에서 매일 나온다. 그런데 흔히 쓰는 방법들은 공백이 든 필드, * 같은 glob…
CSV 한 줄, PATH 같은 콜론 목록, 설정 파일의 key=v1;v2;v3처럼 구분자로 이어진 문자열을 배열로 나누는 일은 셸 스크립트에서 매일 나온다. 그런데 흔히 쓰는 방법들은 공백이 든 필드, * 같은 glob…
API 응답을 페이지별로 모은 리스트, 파일마다 읽은 줄 목록처럼 리스트의 리스트를 한 줄로 펴야 하는 경우는 흔하다. 방법은 list comprehension, itertools.chain, sum(xss, []) 등 여럿인데, 어느 것이 빠른지에 대한 통념과…
레지스터 플래그, 권한 비트, 상태 마스크처럼 정수 하나의 특정 비트만 켜고 끄는 코드는 드라이버부터 일반 애플리케이션까지 어디에나 있다. 연산 자체는 |, &, ^ 한 줄이지만, 시프트할 리터럴의 타입을 잘못 고르면…
빌드 산출물이나 .env 같은 파일을 실수로 커밋한 뒤 뒤늦게 .gitignore에 추가해도, git은 그 파일을 계속 추적하고 변경을 M으로 보여준다. .gitignore는 아직 추적하지 않는(untracked) 파일에만 적용되기 때문이다. 흔히 쓰는 git rm…
설정 파일이나 같은 저장소의 다른 스크립트를 읽으려면 스크립트 자신이 있는 디렉터리를 알아야 한다. pwd는 호출한 쪽의 작업 디렉터리일 뿐이라 쓸 수 없고, dirname $0은 실행 방식에 따라 결과가 달라진다. 흔히…
Ubuntu 서버에서 DNS 서버를 바꾸려고 /etc/resolv.conf를 열면 nameserver 127.0.0.53 한 줄만 보이고, 직접 고쳐도 재부팅하면 원래대로 돌아간다. 18.04부터 이름 해석을 systemd-resolved가 맡고 있기 때문이다. 실제 업스트림 DNS는 Netplan(DHCP 포함)이나 resolved.conf에서…
Docker Engine을 설치하고 나면 바로 몇 가지 불편과 위험이 드러난다. 일반 계정으로 docker ps를 치면 권한 오류가 나고, 컨테이너 로그는 기본 설정에서 크기 제한 없이 디스크를 채운다. Docker 데몬을 재시작하면…
처음 쓴 Dockerfile은 대개 동작은 하지만 코드 한 줄만 고쳐도 의존성 설치부터 다시 돌고, 이미지가 1GB를 넘기고, 컨테이너 안 프로세스가 root로 뜬다. 만든 이미지를 다른 서버로 옮기려 해도 레지스트리 주소와…
서버에 데이터용 디스크를 새로 붙이면 lsblk에는 보이지만 파티션도 파일시스템도 없어 바로 쓸 수 없다. 마운트 후 재부팅하면 사라지고, /etc/fstab에 잘못 등록하면 부팅이 멈추기도 한다. 이 글에서는 Ubuntu 24.04에서 새 디스크…
wsl --install로 배포판을 설치하면 디스크 이미지(ext4.vhdx)가 C:\Users\<사용자>\AppData\Local\... 아래에 만들어진다. 개발 도구와 Docker 이미지를 쌓다 보면 이 파일이 수십 GB로 불어나 C: 드라이브를 압박한다. 이 글에서는 처음부터 다른 드라이브에 설치하는 --location,…