리눅스 명령어
리눅스 명령어 기본 설명
1. **ls**:
- `ls` 명령어는 "list"의 약자로, 디렉터리의 내용을 나열합니다.
- 다양한 옵션들을 통해 출력 결과를 사용자가 원하는 대로 조절할 수 있습니다.
- `-l`: 상세한 정보(권한, 소유자, 크기, 수정일 등)와 함께 목록을 출력합니다.
- `-a`: 숨겨진 파일을 포함해 모든 파일을 출력합니다.
- `-h`: 크기를 사람이 읽기 쉬운 형식으로 출력합니다.
2. **df**:
- `df`는 "disk free"의 약자로, 사용 가능한 디스크 공간을 보여줍니다.
- 일반적으로 파일 시스템별로 사용된 공간과 사용 가능한 공간을 표시합니다.
- `-h`: 크기를 사람이 읽기 쉬운 형식으로 출력합니다.
3. **du**:
- `du`는 "disk usage"의 약자로, 디렉터리나 파일이 사용하고 있는 디스크 공간의 크기를 보여줍니다.
- `-h`: 크기를 사람이 읽기 쉬운 형식으로 출력합니다.
- `-s`: 주어진 경로의 총 사용량만 표시합니다.
4. **ln**:
- `ln` 명령어는 파일이나 디렉터리에 대한 링크를 생성합니다.
- 기본적으로 하드 링크를 생성하지만, `-s` 옵션을 사용하면 심볼릭 링크(소프트 링크)를 생성할 수 있습니다.
5. **top**:
- `top` 명령어는 시스템의 현재 상태를 실시간으로 모니터링하며, CPU 사용률이 높은 프로세스 순서대로 출력합니다.
- 이를 통해 어떤 프로세스가 리소스를 많이 사용하고 있는지 파악할 수 있습니다.
6. **vi**:
- `vi`는 텍스트 편집기 중 하나로, 리눅스 환경에서 널리 사용됩니다.
- 모드 기반의 편집기로서, 명령 모드와 삽입 모드를 주로 사용합니다.
- `vi`는 기본적으로 모든 리눅스 배포판에 포함되어 있으며, 텍스트 파일 편집에 꼭 필요한 도구입니다.
7. **grep**:
- `grep`은 파일 내에서 문자열 패턴을 검색하는 명령어입니다.
- 주요 옵션:
- `-i`: 대소문자를 구분하지 않고 검색합니다.
- `-r` 또는 `-R`: 디렉터리 내의 모든 파일에서 재귀적으로 검색합니다.
- `-v`: 지정한 패턴과 일치하지 않는 라인을 출력합니다.
예제: `grep "example" file.txt` - `file.txt`에서 "example" 문자열을 검색합니다.
8. **tail**:
- `tail`은 파일의 마지막 부분을 출력하는 명령어입니다.
- 주요 옵션:
- `-n`: 출력할 라인의 수를 지정합니다.
- `-f`: 파일의 변화를 실시간으로 모니터링하며, 새로 추가되는 라인을 계속 출력합니다.
예제: `tail -n 10 file.txt` - `file.txt`의 마지막 10라인을 출력합니다.
9. **awk**:
- `awk`는 텍스트 데이터를 처리하고 리포트를 생성하는 스크립트 지향 언어입니다.
- 주로 열 기반의 데이터를 처리할 때 사용합니다.
예제: `echo "apple:10:red" | awk -F':' '{print $2}'` - ':'를 구분자로 사용하고 두 번째 열을 출력합니다.
10. **sort**:
- `sort`는 입력된 텍스트 라인을 정렬하여 출력하는 명령어입니다.
- 주요 옵션:
- `-n`: 숫자로 정렬합니다.
- `-r`: 역순으로 정렬합니다.
예제: `echo -e "3\n1\n2" | sort -n` - 숫자 순서대로 정렬하여 출력합니다.
11. **uniq**:
- `uniq`는 텍스트에서 중복된 라인을 제거하는 명령어입니다.
- 주로 `sort` 명령어와 함께 사용되어 중복된 라인을 제거합니다.
- 주요 옵션:
- `-c`: 중복된 라인의 수를 함께 출력합니다.
- `-d`: 중복된 라인만 출력합니다.
예제: `echo -e "a\na\nb" | sort | uniq` - 중복된 라인을 제거한 후 출력합니다.
12. **mount**:
- `mount`는 파일 시스템을 연결하거나 연결 해제하는 명령어입니다.
- 주로 외부 장치나 네트워크 저장소를 현재 시스템에 연결할 때 사용됩니다.
- 예제: `mount /dev/sda1 /mnt/mydrive` - `sda1` 장치를 `/mnt/mydrive`에 연결합니다.
13. **nfs (Network File System)**:
- NFS는 네트워크를 통해 파일 시스템을 공유할 수 있게 하는 프로토콜입니다.
- `nfs` 서버에서 공유된 디렉터리는 클라이언트에서 마운트할 수 있으며, 마운트된 후에는 로컬 파일 시스템처럼 사용할 수 있습니다.
- 예제: `mount -t nfs server:/shared/directory /mnt/nfs` - NFS 서버의 공유 디렉터리를 클라이언트의 `/mnt/nfs`에 연결합니다.
14. **scp (Secure Copy Protocol)**:
- `scp`는 SSH 프로토콜을 사용하여 리모트 및 로컬 시스템 간에 파일을 안전하게 전송하는 명령어입니다.
- 예제: `scp file.txt user@remote-host:/path/` - `file.txt`를 원격 호스트의 지정된 경로로 복사합니다.
15. **ping**:
- `ping`는 ICMP 프로토콜을 사용하여 네트워크 연결 상태를 테스트하는 명령어입니다.
- 대상 호스트가 응답하면 연결이 정상적으로 이루어진 것을 나타냅니다.
- 예제: `ping google.com` - google.com 도메인에 핑을 보냅니다.
16. **netstat (Network Statistics)**:
- `netstat`는 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등 네트워크 관련 정보를 표시하는 명령어입니다.
- 예제: `netstat -tuln` - 현재 시스템에서 수신 대기 중인 TCP/UDP 연결을 출력합니다.
17. **tcpdump**:
- `tcpdump`는 네트워크 트래픽을 실시간으로 캡처하고 분석하는 도구입니다.
- 다양한 필터 옵션을 사용하여 특정 트래픽만을 캡처할 수 있습니다.
- 예제: `tcpdump -i eth0 -n port 80` - `eth0` 인터페이스의 80번 포트(일반적으로 HTTP)로의 트래픽을 캡처합니다.
이러한 명령어와 서비스들은 리눅스/유닉스 환경에서 네트워킹 및 시스템 관리 작업을 수행할 때 주로 사용됩니다. 각 명령어에는 다양한 옵션이 있으므로 필요에 따라 `man` 페이지나 `--help` 옵션을 사용하여 자세한 정보를 확인하실 수 있습니다.
18. **ctags**:
- `ctags`는 소스 코드에서 태그를 생성하는 프로그램입니다.
- 생성된 태그 파일을 사용하면 텍스트 기반의 편집기(예: Vim, Emacs)에서 빠르게 변수나 함수 정의로 이동할 수 있습니다.
- 예제: `ctags -R .` - 현재 디렉터리의 모든 소스 파일에 대한 태그 파일을 생성합니다.
19. **cscope**:
- `cscope`는 C 코드 내에서 함수, 변수 및 매크로 정의를 찾아주는 검색 도구입니다.
- 큰 프로젝트에서 코드를 탐색하고 이해하는 데 유용합니다.
- `cscope`를 사용하여 호출 관계, 사용 위치, 정의 위치 등을 찾을 수 있습니다.
20. **taglist**:
- `taglist`는 Vim 텍스트 편집기의 플러그인으로, 생성된 태그 파일을 사용하여 소스 코드의 개요(함수, 변수, 클래스 등)를 제공합니다.
- 이를 통해 빠르게 코드를 탐색하거나 구조를 이해할 수 있습니다.
21. **valgrind**:
- `valgrind`는 메모리 누수, 사용 후 해제된 메모리 접근, 배열 범위 초과 접근 등의 문제를 탐지하는 도구입니다.
- 또한 CPU와 메모리의 성능 프로파일링도 지원합니다.
- 예제: `valgrind ./your_program` - 프로그램 실행 시 메모리 관련 문제를 검출합니다.
22. **gdb (GNU Debugger)**:
- `gdb`는 대표적인 C/C++ 디버거로, 프로그램의 실행 흐름을 제어하고 변수 값을 조사하는 데 사용됩니다.
- 런타임에서 발생하는 오류를 진단하거나, 특정 조건에서의 프로그램의 동작을 검사할 때 유용합니다.
- 예제: `gdb ./your_program` - 프로그램을 gdb에서 로드합니다.
23. **trace**:
- 여기서 언급된 `trace`는 특정한 도구를 지칭하는 것이 아니라, 일반적인 시스템 호출 또는 함수 호출 추적을 의미할 수 있습니다.
- `strace`나 `ltrace`와 같은 리눅스 도구를 사용하여 시스템 호출이나 라이브러리 호출을 추적할 수 있습니다.
- 예제: `strace ./your_program` - 프로그램 실행 시 수행되는 시스템 호출을 모니터링합니다.
이러한 도구들은 C/C++ 개발자들에게 코드를 작성, 디버그, 탐색하는 데 필수적인 도구로 간주됩니다. 각 도구의 세부적인 사용 방법이나 옵션은 해당 도구의 공식 문서나 `man` 페이지를 참조하시면 됩니다.
`man`은 "manual"의 줄임말로, 리눅스와 유닉스 기반 시스템에서 프로그램, 라이브러리 함수, 구성 파일, 시스템 호출, 프로토콜 등에 대한 설명을 제공하는 도구입니다.
`man`을 사용하여 문서를 참조하는 방법은 아래와 같습니다:
1. **기본 사용법**:
```bash
man [항목 번호] 명령어/프로그램/기능 이름
```
항목 번호는 생략 가능하며, 주로 사용되는 항목에는 다음과 같은 번호가 있습니다:
- `1`: 사용자 명령어
- `2`: 시스템 호출
- `3`: 라이브러리 함수
- `5`: 구성 파일과 파일 포맷
- `8`: 시스템 관리 명령어
예를 들어, `ls` 명령어에 대한 설명을 보려면 다음과 같이 입력합니다:
```bash
man ls
```
또는 `printf` 라이브러리 함수에 대한 설명을 보려면 다음과 같이 입력합니다:
```bash
man 3 printf
```
2. **내부 탐색**:
`man` 페이지 내에서는 다음 키를 사용하여 탐색할 수 있습니다:
- `Space`: 다음 페이지로 이동
- `b`: 이전 페이지로 이동
- `q`: `man` 페이지 종료
- `/`: 검색 (예: `/pattern` 입력 후 Enter를 누르면 "pattern"이라는 문자열 검색)
- `n`: 다음 검색 결과로 이동
- `N`: 이전 검색 결과로 이동
3. **특정 섹션 참조**:
때로는 특정 섹션 번호로 `man` 페이지를 조회해야 할 수도 있습니다. 예를 들어, `socket`에 대한 시스템 호출 문서를 참조하려면:
```bash
man 2 socket
```
`man`은 리눅스/유닉스 환경에서 필수적인 참조 도구로, 다양한 명령어나 함수, 설정 파일 등에 대한 상세한 정보와 사용법을 제공합니다.
댓글
댓글 쓰기