GNU 코어 유틸리티
1. 개요
GNU 코어 유틸리티(coreutils)는 1990년에 시작되어 2002년에 통합된, 셸에서 사용되는 기본적인 유틸리티 프로그램 모음이다. 파일, 텍스트, 셸 유틸리티를 포함하며, `rm`, `ls`와 같은 명령어를 통해 파일 관리 및 텍스트 처리를 수행한다. `--help`, `--version`과 같은 공통 옵션을 제공하며, POSIXLY_CORRECT 환경 변수 설정에 따라 옵션 해석 방식이 달라진다.
| 이름 | GNU 코어 유틸리티 |
|---|---|
| 개발자 | GNU 프로젝트 |
| 최신 버전 | 9.4 |
| 최신 버전 발표일 | 2024년 2월 24일 |
| 프로그래밍 언어 | C, 셸 스크립트 |
| 운영 체제 | 유닉스 계열 |
| 종류 | 잡종 유틸리티 |
| 라이선스 | 2007: GPL-3.0-or-later 2002: GPL-2.0-or-later |
| 웹사이트 | GNU Core Utilities |
-
유닉스 소프트웨어 -
한/글
한/글은 1980년대 후반부터 개발된 대한민국의 대표적인 워드프로세서로, 다양한 운영체제 지원, 정부 전자 문서 시스템에서의 역할, 꾸준한 기능 발전과 사용자 편의성 및 국제 표준을 고려한 업데이트를 통해 발전해왔다. -
유닉스 소프트웨어 -
베오울프 클러스터
베오울프 클러스터는 여러 대의 컴퓨터를 네트워크로 연결하여 단일 머신처럼 작동하도록 구성한 병렬 컴퓨팅 시스템이며, 1994년 NASA에서 개발되었고, 기성 PC 부품과 리눅스 운영체제를 사용하여 비용 효율적인 슈퍼컴퓨터의 원형이 되었다. -
C로 작성된 자유 소프트웨어 -
PostgreSQL
PostgreSQL은 캘리포니아 대학교 버클리 분교의 Ingres 프로젝트에서 시작되어 전 세계 개발자들의 협력을 통해 발전해온 객체 관계형 데이터베이스 관리 시스템(ORDBMS)이다. -
C로 작성된 자유 소프트웨어 -
김프
김프(GIMP)는 GNU 프로젝트에서 개발된 크로스 플랫폼 기반의 무료 오픈소스 래스터 그래픽 편집기로, 다양한 운영체제를 지원하며 풍부한 기능을 제공하지만 사용자 인터페이스에 대한 비판과 일부 기능의 부족함에 대한 평가도 존재한다. -
GNU 프로젝트 소프트웨어 -
GNU 허드
GNU 허드는 유닉스 운영 체제를 대체하는 것을 목표로 개발된 GNU 프로젝트의 커널로, 마이크로커널 기반의 서버-클라이언트 아키텍처를 사용하며, 파일 시스템 기능을 확장하는 트랜슬레이터 개념을 제공한다. -
GNU 프로젝트 소프트웨어 -
GNU 옥타브
GNU 옥타브는 MATLAB과 높은 호환성을 가지며 수치 해석 계산을 위해 사용되는 자유-오픈 소스 소프트웨어이다.
2. 역사
1990년, 데이비드 매켄지는 GNU 파일 유틸리티를 발표했다.
1991년, 매켄지는 GNU 쉘 유틸리티와 GNU 텍스트 유틸리티를 발표했고, 짐 메이어링이 coreutils의 관리자가 되어 현재까지 유지하고 있다.
2002년, 메이어링은 이전의 텍스트 유틸리티, 쉘 유틸리티, 파일 유틸리티를 다른 여러 유틸리티와 함께 병합하여 GNU 코어 유틸리티를 발표했다.
2.1. 초기 개발
1990년, 데이비드 매켄지는 GNU 파일 유틸리티를 발표했다.
1991년, 매켄지는 GNU 쉘 유틸리티와 GNU 텍스트 유틸리티를 발표했다. 같은 해, 짐 메이어링이 현재 coreutils로 알려진 패키지의 관리자가 되었으며, 이후 계속 유지해 오고 있다.
2.2. GNU 코어 유틸리티 탄생
1990년, 데이비드 매켄지는 GNU 파일 유틸리티를 발표했다.
1991년, 매켄지는 GNU 쉘 유틸리티와 GNU 텍스트 유틸리티를 발표했으며, 짐 메이어링이 현재 coreutils로 알려진 패키지의 관리자가 되어 현재까지 유지하고 있다.
2002년, 메이어링은 이전의 텍스트 유틸리티, 쉘 유틸리티, 파일 유틸리티 패키지를 다른 여러 유틸리티와 함께 병합하여 GNU 코어 유틸리티를 발표했다.
3. 특징
코어 유틸리티 프로그램은 셸에 입력하여 사용할 수 있다. 예를 들어, `rm` 명령은 인수로 주어진 파일을 삭제한다. 이러한 프로그램은 단독으로도 작동하지만, 파이프를 사용하여 여러 개를 조합함으로써 복잡한 처리도 가능하다.
3.1. 옵션
Coreutils에 포함된 명령어에 공통으로 사용되는 옵션은 다음과 같다.
* --help: 해당 명령어의 도움말을 표시한다.
* --version: 버전을 출력한다.
* --: 이후의 인수를 오퍼랜드로 취급한다.
Coreutils 명령어는 환경 변수 `POSIXLY_CORRECT`가 정의되어 있지 않은 경우, 인수가 어떤 순서로 쓰여 있든 옵션을 먼저 해석하고, 오퍼랜드를 나중에 해석한다. 예를 들어 "ls /usr -l"과 "ls -l /usr"은 동일한 결과를 반환한다. (\UNIX의 도구에서는 이러한 경우의 동작이 제각각인 경우가 많다.)
4. 포함된 프로그램
GNU 코어 유틸리티(Coreutils) 5.2.1 버전에는 파일, 텍스트, 셸 관리를 위한 다양한 프로그램이 포함되어 있다.
* 파일 유틸리티는 파일을 복사, 이동, 삭제하고 파일 속성을 변경하는 등 기본적인 파일 관리 작업을 수행한다.
* 텍스트 유틸리티는 텍스트 파일의 내용을 표시, 편집, 검색, 정렬하는 등 텍스트 처리 작업을 수행한다.
* 셸 유틸리티는 운영 체제의 셸과 상호 작용하여 날짜 및 시간 표시, 환경 변수 설정, 프로세스 관리 등 다양한 시스템 작업을 수행한다.
UNIX의 관례에 따라 `test`의 별명으로 `[`가 있으며, 셸에서 `if [ expression ]`과 같이 사용된다.
4.1. 파일 유틸리티
Coreutils 5.2.1 버전을 기준으로, 파일 관리에 사용되는 유틸리티는 다음과 같습니다.
* chgrp: 파일의 소유 그룹을 변경합니다.
* chown: 파일의 소유자를 변경합니다.
* chmod: 파일 또는 디렉토리의 접근 권한을 변경합니다.
* cp: 파일 또는 디렉토리를 복사합니다.
* dd: 파일을 복사하고 변환합니다.
* df: 디스크의 빈 용량을 표시합니다.
* dir: ls와 동일한 기능을 수행합니다.
* dircolors: ls의 표시 색상을 설정합니다.
* install: 파일을 복사하고 속성을 설정합니다.
* ln: 링크를 생성합니다.
* ls: 디렉토리 내용을 나열합니다.
* mkdir: 디렉토리를 생성합니다.
* mkfifo: FIFO (이름 지정된 파이프)를 생성합니다.
* mknod: 특수 파일 (장치 파일 등)을 생성합니다.
* mv: 파일을 이동합니다.
* rm: 파일을 제거합니다.
* rmdir: 빈 디렉토리를 제거합니다.
* shred: 파일 내용을 복구할 수 없도록 파괴합니다.
* sync: 파일 캐시를 디스크에 기록합니다.
* touch: 파일의 접근 및 수정 시간을 변경합니다.
* vdir: ls -l과 동일하게 상세한 디렉토리 내용을 표시합니다.
4.2. 텍스트 유틸리티
* cat: 파일의 내용을 표시하거나 여러 파일을 연결하여 표시한다.
* cksum: 파일의 체크섬과 파일 크기를 계산한다.
* comm: 두 파일을 행 단위로 비교한다.
* csplit: 파일을 문맥에 따라 분할한다.
* cut: 각 행에서 선택한 부분을 표시한다.
* expand: 탭 문자를 공백 문자로 변환한다.
* fmt: 텍스트의 서식을 단락별로 지정한다.
* fold: 입력 행을 지정된 너비에 맞추어 접는다.
* head: 파일의 앞부분을 표시한다.
* join: 두 파일을 읽어 공통 필드를 가진 행들을 결합한다.
* md5sum: MD5 해시 체크섬을 계산하고 확인한다.
* nl: 파일에 행 번호를 붙여 출력한다.
* od: 파일을 8진수 또는 다른 형식으로 출력한다.
* paste: 여러 파일의 행들을 병합한다.
* pr: 인쇄를 위해 파일의 페이지를 나누고 단을 구성한다.
* ptx: 정렬된 색인을 생성한다.
* sha1sum: SHA-1 해시 체크섬을 계산하고 검증한다.
* sort: 텍스트 파일을 행 단위로 정렬한다.
* split: 파일을 지정된 크기로 분할한다.
* sum: 체크섬과 블록 수를 표시한다.
* tac: 파일을 결합하고 역순으로 표시한다.
* tail: 파일의 뒷부분을 표시한다.
* tr: 문자를 변환, 삭제하거나 연속된 문자를 압축한다.
* tsort: 유향 그래프의 위상 정렬을 수행한다.
* unexpand: 공백 문자를 탭 문자로 변환한다.
* uniq: 정렬된 파일에서 중복되는 행을 제거한다.
* wc: 파일의 바이트 수, 단어 수, 행 수를 표시한다.
4.3. 셸 유틸리티
Coreutils 5.2.1 버전을 기준으로, 셸 유틸리티에는 다음과 같은 프로그램들이 포함되어 있습니다.
| | 설명 | |
|---|---|
| basename | 파일 이름에서 디렉터리와 확장자를 제거합니다. |
| chroot | 루트 디렉터리를 변경합니다. |
| date | 현재 시스템 날짜와 시간을 표시하거나 변경합니다. |
| dirname | 경로에서 디렉터리 이름 이외의 부분을 제거합니다. |
| du | 파일의 디스크 사용량을 추정합니다. |
| echo | 한 줄의 텍스트를 표시합니다. |
| env | 환경 변수를 일시적으로 설정하거나 표시합니다. |
| expr | 식을 평가합니다. |
| factor | 수치를 소인수 분해하여 소수의 약수를 표시합니다. |
| false | 아무것도 하지 않고 실패 값을 반환합니다. |
| groups | 로그인한 사용자의 그룹을 표시합니다. |
| hostid | 현재 호스트의 식별 값을 표시합니다. |
| id | 현재 사용자 ID 이름과 그룹 ID 이름을 표시합니다. |
| link | 파일의 새 이름을 생성합니다. |
| logname | 사용자의 로그인 이름을 표시합니다. |
| nice | 프로세스의 우선 순위를 변경합니다. |
| nohup | 로그아웃 후에도 명령의 실행이 계속되도록 허용합니다. |
| pathchk | 파일 이름의 이식성(portability)을 확인합니다. |
| pinky | finger 명령의 경량 버전입니다. |
| printenv | 환경 변수의 전부 또는 일부를 표시합니다. |
| printf | 데이터의 표시 형식을 변환하여 표시합니다. |
| pwd | 현재 디렉터리의 이름을 표시합니다. |
| readlink | 심볼릭 링크의 값을 표시합니다. |
| seq | 일련 번호를 표시합니다. |
| sleep | 지정된 시간 동안 휴지합니다. |
| stat | 파일의 상태를 얻습니다. |
| stty | 터미널의 행 설정을 변경, 표시합니다. |
| tee | 표준 입력에서 읽은 내용을 표준 출력과 파일에 기록합니다. |
| test | 파일 형식의 확인 또는 값의 비교를 수행합니다. |
| true | 아무것도 하지 않고 성공 값을 반환합니다. |
| tty | 터미널 이름을 표시합니다. |
| uname | 시스템의 정보를 표시합니다. |
| unlink | 이름을 삭제하고, 경우에 따라 해당 이름이 참조하는 파일도 삭제합니다. |
| users | 현재 로그인한 사용자를 표시합니다. |
| who | 현재 로그인한 사용자를 자세히 표시합니다. |
| whoami | 사용자의 로그인 이름을 표시합니다. |
| yes | kill 시그널이 전송될 때까지 문자를 계속 표시합니다. |
UNIX의 관례에 따라 `test`의 별명으로 `[`가 있습니다. 셸에서 `if [ expression ]`과 같이 사용하기 위한 것입니다.