글

라벨이 command-line인 게시물 표시

tui 만드는 툴

기존 tui 프로그램으로 변환해주는듯? 이쁘다  https://tui.studio/

터미널 프로그램 만들기 python

 터미널 프로그램을 만들고, 이를 명령어로 부를 수 있게 하는 과정은 주로 다음과 같은 단계를 거칩니다. 예제를 통해 Python을 사용해 간단한 CLI(Command Line Interface) 프로그램을 만들고, 이 프로그램을 터미널에서 명령어로 실행할 수 있도록 하는 방법을 설명해 드릴게요. ### 1. 터미널 프로그램의 기본 개념 이해 터미널 프로그램(명령줄 프로그램)은 터미널에서 명령어로 실행할 수 있는 프로그램을 말합니다. 이를 만들려면 다음 두 가지가 필요해요: 1. **프로그램 코드 작성**: 명령어를 입력하면 수행할 작업을 정의하는 코드 작성. 2. **시스템 경로 설정**: 작성한 프로그램을 터미널에서 명령어로 호출할 수 있도록 설정. Python으로 간단한 CLI 프로그램을 만들어보고, 이를 명령어로 호출하는 과정까지 설명하겠습니다. ### 2. CLI 프로그램 작성 Python을 이용해 간단한 CLI 프로그램을 작성해보겠습니다. 예제로 `hello`라는 명령어를 입력하면 인사말을 출력하는 프로그램을 만들어 볼게요. 1. **Python 프로그램 작성**: `hello.py`라는 파일을 생성하고, 아래와 같이 작성합니다.    ```python    # hello.py    import argparse    # ArgumentParser를 통해 명령행 인자를 설정합니다.    parser = argparse.ArgumentParser(description="Simple CLI example")    # --name 옵션을 추가하여 사용자로부터 이름을 입력받도록 설정    parser.add_argument('--name', type=str, help='Your name', default='World')    # 입력받은 인자들을 args로 저장    args = parser....

파일 권한 변경

 텍스트 파일을 편집하지 못하게 하는 방법 중 하나는 파일의 권한을 변경하는 것입니다. Unix 계열 운영 체제(Linux, macOS 등)에서 파일 권한을 변경하려면 `chmod` 명령어를 사용할 수 있습니다.  다음은 파일을 읽기 전용으로 설정하는 방법입니다: 1. 파일을 읽기 전용으로 설정:    ```bash    chmod 444 filename.txt    ```    이 명령은 모든 사용자에게 읽기 권한만 부여하고, 쓰기 및 실행 권한을 제거합니다. 2. 파일의 소유자만 읽을 수 있게 설정:    ```bash    chmod 400 filename.txt    ```    이 명령은 파일 소유자에게만 읽기 권한을 부여하고, 모든 사용자로부터 쓰기 및 실행 권한을 제거합니다. 3. 파일 소유자만 읽기 및 쓰기 권한을 부여하고, 다른 사용자에게는 아무 권한도 부여하지 않는 방법:    ```bash    chmod 600 filename.txt    ```    이 명령은 파일 소유자에게만 읽기 및 쓰기 권한을 부여하고, 다른 모든 사용자에게는 권한을 부여하지 않습니다. 예를 들어, `example.txt` 파일을 읽기 전용으로 설정하려면 다음과 같이 할 수 있습니다: ```bash chmod 444 example.txt ``` 이 명령을 실행한 후에는 파일을 열어 읽을 수는 있지만, 편집하고 저장할 수는 없게 됩니다. 권한을 변경하려면 해당 파일에 대한 소유자 권한이 필요합니다. 파일을 읽기 전용으로 설정하는 방법에 대해 자세히 설명하겠습니다.  ### 기본 개념 Unix 계열 운영 체제에서는 파일과 디렉토리에 대한 권한을 설정하여 접근을 제어할 수 있습니다. 각 파일에는 세 가지 유형의 사용자에 대해 세 가지 ...

git 커맨드라인 명령어

`git init` 명령어를 사용하여 Git 저장소를 초기화할 수 있습니다. 이는 새로운 Git 프로젝트를 시작하거나 기존 프로젝트를 Git 저장소로 변환할 때 사용하는 명령어입니다. 다음은 `git init`을 사용하여 Git 저장소를 초기화하는 단계입니다: 1. **프로젝트 디렉토리로 이동**:    Git 저장소로 만들고 싶은 디렉토리로 이동합니다. 예를 들어, `my_project`라는 디렉토리로 이동하려면 다음 명령어를 사용합니다:    ```sh    cd my_project    ``` 2. **Git 저장소 초기화**:    해당 디렉토리에서 `git init` 명령어를 실행합니다:    ```sh    git init    ```    이 명령어는 `.git`이라는 숨겨진 디렉토리를 생성하여 현재 디렉토리를 Git 저장소로 만듭니다. 3. **파일 추가 및 커밋**:    프로젝트의 파일을 Git에 추가하고 첫 커밋을 만듭니다. 예를 들어, 모든 파일을 추가하고 커밋하려면 다음 명령어를 사용합니다:    ```sh    git add .    git commit -m "Initial commit"    ``` 다음은 단계별로 설명한 예시입니다: ```sh # 프로젝트 디렉토리로 이동 cd my_project # Git 저장소 초기화 git init # 모든 파일 추가 git add . # 첫 커밋 만들기 git commit -m "Initial commit" ``` 이제 `my_project` 디렉토리는 Git으로 버전 관리되는 저장소가 되었습니다. 이후에 원격 저장소를 추가하거나 브랜치를 만들고 관리할 수 있습니다. 예를 들어, GitHub에 원격 저장소를 추가하려면 다음과 같이 할 수 있습니다: ...

[리눅스 명령어] systemctl

 `systemctl`은 리눅스에서 사용되는 명령어로, `systemd` 시스템 및 서비스 매니저를 제어하기 위해 사용됩니다. `systemd`는 현대 리눅스 배포판에서 널리 사용되는 초기화 시스템(init system)과 서비스 매니저로, 시스템 부팅 및 관리를 담당합니다. `systemctl`을 사용하여 시스템 서비스를 시작, 중지, 재시작, 활성화(부팅 시 자동 시작), 비활성화(부팅 시 자동 시작 안 함) 할 수 있습니다. 또한 시스템의 현재 상태, 서비스 상태, 시스템 로그 등을 확인하는 데에도 사용됩니다. 예를 들어, 특정 서비스를 시작하려면 `systemctl start 서비스명`, 상태를 확인하려면 `systemctl status 서비스명`과 같이 사용합니다. 이러한 기능들 덕분에 `systemctl`은 리눅스 시스템 관리에 있어서 중요한 도구 중 하나로 여겨집니다. ELK Stack으로 예를 들자면,  ELK Stack (Elasticsearch, Logstash, Kibana)을 설치하는 방법은 여러 가지가 있지만, `systemctl`을 이용한 설치는 ELK Stack 각 컴포넌트를 시스템 서비스로 관리할 수 있게 해주어 많은 장점을 제공합니다. `systemctl`을 사용하면 다음과 같은 이점이 있습니다: 1. **서비스 관리**: 각 ELK 컴포넌트를 시스템 서비스로 등록하여 쉽게 시작, 중지, 재시작할 수 있습니다. 2. **자동 시작 설정**: 시스템 부팅 시 자동으로 ELK 컴포넌트를 시작하도록 설정할 수 있습니다. 3. **상태 모니터링**: `systemctl status` 명령어를 통해 서비스의 현재 상태를 확인할 수 있습니다. 4. **로그 관리**: 시스템 로그를 통해 서비스의 문제를 쉽게 진단할 수 있습니다. 5. **보안**: 서비스를 더 안전하게 운영할 수 있는 보안 옵션을 제공합니다. 그러나 ELK Stack을 설치하기 전에는 시스템 요구 사항, 네트워크 설정, 보안 설정 등을 고려해야 합니다. 또한...

react ink

리액트로 커맨드 라인 툴 만들기 https://github.com/vadimdemedes/ink-ui

`kill` vs `pkill`

 `kill`과 `pkill`은 프로세스를 종료하는 데 사용되는 리눅스 명령어들이지만, 사용 방식과 목적이 약간 다릅니다. 1. **`kill`**:     - `kill`은 프로세스 ID (PID)를 직접 지정하여 특정 프로세스를 종료합니다.     - 프로세스를 종료하려면 먼저 그 프로세스의 PID를 알아야 합니다. 이를 위해 `ps` 명령어나 `pgrep` 등의 다른 도구를 사용해야 할 수도 있습니다.     - 예:       ```bash       ps aux | grep elasticsearch       kill [PID]       ``` 2. **`pkill`**:     - `pkill`은 프로세스 이름 또는 다른 패턴을 기반으로 프로세스를 찾아서 종료합니다. 따라서 PID를 직접 지정할 필요가 없습니다.     - 이는 여러 프로세스를 일치하는 이름이나 패턴으로 한 번에 종료할 때 특히 유용합니다.     - 예:       ```bash       pkill -f elasticsearch       ``` `pkill`을 사용하는 주된 이유는 특정 프로세스의 PID를 따로 조회하지 않고도 프로세스 이름이나 패턴을 통해 바로 프로세스를 종료할 수 있기 때문입니다. ELK 스택과 같이 여러 컴포넌트로 구성된 시스템에서는 `pkill`이 `kill`보다 종종 더 편리하게 사용될 수 있습니다.

패키지 관리 도구 apt-get yum

## 도구 있는지 확인  시스템에 `apt-get` (데비안/우분투 기반 시스템의 패키지 관리 도구) 또는 `yum` (Red Hat 기반 시스템의 패키지 관리 도구)이 있는지 확인하려면 여러 가지 방법을 사용할 수 있습니다. 1. **명령어의 존재 확인**:    `which` 또는 `command -v`를 사용하여 명령어의 경로를 확인합니다.    ```bash    which apt-get    ```    또는    ```bash    command -v apt-get    ```    위 명령어들 중 하나를 실행하면 `apt-get`의 경로가 출력됩니다. 만약 아무런 출력이 없다면 해당 명령어는 시스템에 설치되어 있지 않습니다.    같은 방식으로 `yum`도 확인할 수 있습니다. 2. **버전 확인**:    설치된 패키지 관리 도구의 버전을 확인하려면 다음과 같이 실행합니다.    ```bash    apt-get --version    ```    또는    ```bash    yum --version    ```    이 명령어들은 각각의 패키지 관리 도구의 버전 정보를 출력합니다. 만약 해당 도구가 설치되어 있지 않다면, 오류 메시지가 출력됩니다. 이러한 방법들을 통해 시스템에 어떤 패키지 관리 도구가 설치되어 있는지, 그리고 그 버전은 무엇인지 확인할 수 있습니다. ## `yum` vs  `apt-get` `yum`과 `apt-get`은 리눅스 배포판에 따라 사용되는 주요 패키지 관리 도구입니다. 각 도구는 배포판의 유형과 철학에 따라 설계되었으며, 특정한 목적과 기능을 갖추고 있습니다. 이...

리눅스 명령어 cat grep 그리고 패턴

`cat`과 `grep`을 함께 사용하는 것은 파일에서 특정 패턴이나 문자열을 검색할 때 유용합니다. 그러나 일반적으로 `grep`만으로도 파일 내부를 검색할 수 있기 때문에 `cat`을 꼭 사용할 필요는 없습니다. 그렇지만 `cat`과 `grep`을 함께 사용하는 방법을 이해하는 것은 중요합니다. 1. **기본 예시**:    ```bash    cat filename.txt | grep "search_term"    ```    이 명령어는 `filename.txt` 파일에서 "search_term" 문자열을 검색하여 일치하는 모든 라인을 출력합니다. 2. **여러 파일에서 검색**:    ```bash    cat file1.txt file2.txt | grep "search_term"    ```    `file1.txt`와 `file2.txt`의 내용에서 "search_term" 문자열을 검색하여 일치하는 모든 라인을 출력합니다. 3. **대소문자 구분 없이 검색**:    ```bash    cat filename.txt | grep -i "search_term"    ```    `-i` 옵션을 사용하면 대소문자를 구분하지 않고 "search_term"을 검색합니다. 4. **라인 번호와 함께 검색 결과 출력**:    ```bash    cat filename.txt | grep -n "search_term"    ```    `-n` 옵션을 사용하면 일치하는 문자열이 있는 라인의 번호도 함께 출력됩니다. 다시 한번 강조하지만, `cat` 없이 `grep`만 사용하여 파일 내부를 직접 검색할 수 있습니다. 예를 들어: ```bash grep "search_term" ...

리눅스 명령어 ll cat

1. **ll**    - **설명**: `ll`은 `ls -l`의 약자로, 파일과 디렉터리에 대한 상세한 정보를 표시하는 명령어입니다. 여기에는 파일의 권한, 링크 수, 소유자, 그룹, 크기, 마지막 수정 날짜 및 파일/디렉터리 이름이 포함됩니다.    - **예시**:      ```bash      ll      ```      이 명령어를 사용하면 현재 디렉터리의 모든 파일과 디렉터리에 대한 상세 정보를 볼 수 있습니다. 2. **cat**    - **설명**: `cat`은 concatenate(연결)의 줄임말로, 파일의 내용을 화면에 출력하거나 여러 파일을 함께 연결하는 데 사용됩니다. 주로 파일의 내용을 빠르게 확인할 때 사용합니다.    - **예시**:      - 파일 내용 출력:        ```bash        cat filename.txt        ```        이 명령어는 `filename.txt`의 내용을 화면에 출력합니다.      - 여러 파일 연결:        ```bash        cat file1.txt file2.txt > combined.txt        ```        `file1.txt`와 `file2.txt`의 내용을 합쳐 `combined.txt`에 저장합니다. `ll`은 파일과 디렉터리의 상세한 정보를 확인하기 위해, `cat`은 파일의 내용을 빠르게 확인하거나 파일을 연결하...

리눅스 명령어 free disk lscpu fdisk

1. **free**    - **설명**: 시스템의 전체 메모리 사용량, 여유 메모리, 스왑 메모리에 관한 정보를 보여줍니다.    - **예시**:      ```bash      free -h      ```      `-h` 옵션은 사람이 읽기 쉬운 형태로 출력합니다 (예: M은 메가바이트를 의미). 2. **df -h** (참고로, `disk -h`는 올바른 명령어가 아닙니다. 아마 `df -h`를 의미하셨을 것 같습니다.)    - **설명**: 파일 시스템의 전체 용량, 사용된 용량, 여유 용량, 사용률 등의 정보를 제공합니다.    - **예시**:      ```bash      df -h      ```      `-h` 옵션은 사람이 읽기 쉬운 형태로 출력합니다. 3. **lscpu**    - **설명**: CPU 아키텍처에 관한 정보를 제공합니다. 이를 통해 CPU의 속성, 코어 수, 소켓 수 등을 파악할 수 있습니다.    - **예시**:      ```bash      lscpu      ``` 4. **fdisk -l**    - **설명**: 연결된 모든 디스크와 해당 파티션 정보를 표시합니다.    - **예시**:      ```bash      sudo fdisk -l      ```      관리자 권한이 필요한 경우 sudo를 사용하여 명령어를 실행할 수 있습니다. 이 명령어들은 리눅스...

nohup 명령어로 세션과 독립적으로 백그라운드에서 실행하기

 `nohup`은 "no hang up"의 줄임말로, 쉘 스크립트나 명령어를 터미널 세션과 독립적으로 백그라운드에서 실행하게 하는 리눅스/유닉스 명령어입니다. 터미널이나 쉘 세션에서 프로그램을 실행하면, 해당 세션을 종료할 때 프로그램도 함께 종료됩니다. 그러나 `nohup`을 사용하면, 사용자가 로그아웃하거나 터미널을 종료하더라도 프로세스가 계속 실행되게 할 수 있습니다. **사용 방법**: ``` nohup 명령어 &  ``` `&`는 명령어를 백그라운드에서 실행하라는 의미입니다. 예를 들어, `my_script.sh` 스크립트를 `nohup`으로 실행하려면 다음과 같이 합니다: ``` nohup ./my_script.sh & ``` 기본적으로, `nohup`은 `nohup.out`이라는 파일에 명령어의 출력을 저장합니다. 다른 파일로 출력을 리다이렉트하려면: ``` nohup ./my_script.sh > my_output.log & ``` `nohup`은 오랜 시간 동안 실행되는 작업, 큰 데이터셋의 처리, 원격 서버에서의 작업 등에서 유용하게 사용됩니다.

리눅스 명령어

리눅스 명령어 기본 설명 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**:   ...

scp (Secure Copy Protocol): 내 컴에 있는 파일을 다른 컴으로 보내기

 `scp` (Secure Copy Protocol)은 SSH 프로토콜을 사용하여 두 컴퓨터 간에 파일을 안전하게 복사할 수 있는 명령줄 기반의 네트워크 프로토콜입니다. 다음은 `scp`를 사용하여 파일을 다른 컴퓨터로 보내는 기본적인 방법입니다. ### 파일을 원격 컴퓨터로 보내기 원격 컴퓨터로 파일을 보내려면 다음과 같은 명령어를 사용합니다: ```bash scp [옵션] [로컬 파일 경로] [사용자명]@[원격 컴퓨터 주소]:[원격 경로] ``` 예를 들어, `myfile.txt`라는 파일을 원격 컴퓨터의 `/home/username` 디렉토리로 보내려면 다음과 같이 입력할 수 있습니다: ```bash scp myfile.txt username@remote_address:/home/username/ ``` ### 원격 컴퓨터에서 파일 가져오기 원격 컴퓨터에서 파일을 로컬 컴퓨터로 가져오려면 다음과 같은 명령어를 사용합니다: ```bash scp [옵션] [사용자명]@[원격 컴퓨터 주소]:[원격 파일 경로] [로컬 경로] ``` 예를 들어, 원격 컴퓨터의 `/home/username/myfile.txt` 파일을 로컬 컴퓨터로 가져오려면 다음과 같이 입력할 수 있습니다: ```bash scp username@remote_address:/home/username/myfile.txt /local/directory/ ``` ### 몇 가지 유용한 옵션: - `-r`: 디렉토리 전체를 재귀적으로 복사합니다. - `-P [포트 번호]`: 원격 서버의 SSH 포트 번호를 지정합니다. 기본값은 22입니다. - `-p`: 원본 파일의 수정 시간과 접근 시간을 유지합니다. ### 주의사항 - 원격 컴퓨터의 주소와 사용자명, 그리고 원격 컴퓨터에 접근할 수 있는 권한이 필요합니다. - 원격 컴퓨터에 SSH 서비스가 실행 중이어야 하며, 필요한 포트가 방화벽에 의해 차단되지 않았어야 합니다. 이 외에도 `scp`는 다양한 옵션과 기능을 제공하므로, `man scp` 명령어...