ABOUT ME

세상 흥미로운 존재에 대한 기록

Today
Yesterday
Total
  • [42경산] 3기 1차 라피신 회고 - shell 명령어 (2)
    Linux Shell 2025. 3. 5. 11:43

    오늘 포스팅은,

    man ascii

    cc

    alias/export

    tr

    find

    wc

    ifconfig

    awk

    sed

    cat /etc/passwd

    sort

    cut

    paste

    bc

    gnome-terminal

    linux shell 명령어를 다룬다.

     

    1. 터미널상에서 아스키코드를 볼 수 있는 man ascii

    42경산의 C 라피신은 ASCII(미국 정보 교환 표준 부호)를 봐야 하는 경우가 자주 생긴다.

    이럴 때, 외부망과 연결이 차단되어 웹 검색이 불가한 리눅스 계열 환경의 시험에서 유용할 게 써먹을 수 있다.

    C 코드 상에서는 char 형으로 선언된 변수를 문자 그대로 사용해서 연산을 하거나,

    두 문자의 차이만큼 루프를 돌리는 로직을 자주 사용한다.

    • A: 65
    • Z: 90
    • a: 97
    • z: 122
    • a - A == 32
    man ascii

     

    2. C 컴파일 명령어 cc

    C 컴퍼일러를 사용해서 컴파일을 수행하고, 지정한 이름의 out 파일을 생성하는 명령어이다.

    gcc 라는 명령어도 존재하지만, 나는 cc 명령어에 태그를 추가해 gcc로 별칭(alias)을 만들어 사용했다.

    (alias 는 ~/.zshrc 파일에 정의해 뒀다.)

    # alias gcc="cc -Wall -Wextra -Werror"
    gcc test.c -o test.out

     

    3. alias와 export (환경변수)

    alias 추가: alias [변수]='[명령어]'

    alias 제거: unalias [등록별칭]

     

    환경변수 설정: export [변수]='[값/경로]'

    환경변수 확인: echo $[환경변수]

    환경변수 제거: unset [환경변수]

     

    4. 문자를 변환하거나 삭제하는 tr

    tr [옵션]... SET1 [SET2]

    문자를 변환하거나 삭제하는 데 사용되는 리눅스 명령어이다.

    주로 표준 입력에서 문자를 읽어 변환한 후 표준 출력으로 내보낸다.

     

    주요 옵션

    • -d, --delete SET1에서 문자들을 삭제
    • -s, --squeeze-repeats SET1의 연속된 중복 문자를 하나로 압축
    • -c, -C, --complement SET1의 보수를 사용 (SET1에 없는 모든 문자에 대해 작업 수행)
    # 1. 소문자를 대문자로 변환
    echo "안녕하세요 hello" | tr 'a-z' 'A-Z'
    # 출력: 안녕하세요 HELLO
    
    # 2. 특정 문자 삭제
    echo "Hello, World!" | tr -d ',!'
    # 출력: Hello World
    
    # 3. 연속된 문자 압축
    echo "안녕하세요요요    세상아아" | tr -s '요 아'
    # 출력: 안녕하세요 세상아
    
    # 4. 특정 문자 변환
    echo "리눅스" | tr '리눅스' '윈도우'
    # 출력: 윈도우
    
    # 5. 숫자만 남기기
    echo "abc123def456" | tr -cd '0-9'
    # 출력: 123456

     

    5. find

    현재 디렉토리와 모든 하위 디렉토리에 있는 일반 파일과 디렉토리의 수를 세고 표시 (시작 디렉토리인 '.' 포함)

    find . -type f,d | wc -l

     

    find의 type 옵션

    • 한 번에 여러 유형을 검색하려면 쉼표(,)로 구분하여 type 목록을 작성 (GNU 확장)
    • `-type c` 파일은 c 유형이다.
    • b: 블록(버퍼링됨) 특수
    • c: 문자(버퍼링되지 않음) 특수
    • d: 디렉토리
    • p: 명명된 파이프(FIFO)
    • f: 일반 파일 (regular file)
    • l: 심폴릭 링크
      • `-L` 옵션이나 `-follow` 옵션이 적용되는 경우 심볼릭 링크가 끊어지지 않고 유효해야 검색 작업이 제대로 수행될 수 있다. (끊어진 심볼릭 링크의 경우 find 명령은 무시되거나 오류 처리)
      • `-L` 또는 `-follow` 옵션을 사용하면, 심볼릭 링크 자체를 검색하는 것이 아니라 링크가 가지리키는 실제 파일이나 디렉토리를 검색 대상으로 삼는다.
      • `-L` 이 적용될 때 심볼릭 링크를 검색하려면 `-xtype`을 사용
    • s: socket
    • D: door (Solaris)

    6. 줄이나 단어 수를 세는 wc

    wc [옵션] [파일]

    파일에 대한 줄바꿈, 단어, 바이트 수를 출력한다.

    두 개 이상의 파일이 지정된 경우 전체 줄을 출력한다.

    단어는 공백으로 구분된 0이 아닌 길이의 문자 시퀀스이다.

    파일이 없거나 파일이 `-`일 경우 표준 입력을 읽는다.

     

    주요 wd 옵션

    항상 줄바꿈, 단어, 문자, 바이트, 최대 줄 길이 순서로 출력한다.

    • -l, --lines 줄바꿈 수를 출력
    • -w, --words 단어 수를 출력
    • -m, --chars 문자 수를 출력
    • -c, --bytes 바이트 수를 출력
    • -L, --max-line-length 주어진 파일이나 입력에서 가장 긴 행의 문자 수를 출력
      • 파일 내에서 가장 긴 줄의 길이를 확인하고자 할 때 유용

    7. ifconfig

    ifconfig [-v] [-a] [-s] [interface]

    네트워크 인터페이스 정보를 출력

    이 정보는 네트워크 인터페이스의 상태, 설정, 데이터 흐름 및 오류를 이해하는 데 유용합니다.

    ifconfig
    • 네트워크 인터페이스 이름: docker0, enp0s31f6, lo, virbr0
      • docker0: Docker가 생성한 가상 네트워크 브리지
      • enp0s31f6: 실제 물리적 이더넷 인터페이스
      • lo: 루프백 인터페이스 (자기 자신과 통신)
      • virbr0: 가상화(예: KVM)에서 생성된 가상 브리지
    • flags (플래그): 네트워크 인터페이스 상태와 기능을 나타냄
      • UP: 인터페이스가 활성화되어 있음.
      • BROADCAST: 브로드캐스트 통신 가능
      • MULTICAST: 멀티캐스트 통신 지원
      • RUNNING: 인터페이스가 활성화되어 작동 중
      • LOOPBACK: 루프백 인터페이스
    • Maximum Transmission Unit
      • 네트워크 인터페이스에서 보낼 수 있는 최대 패킷 크기(바이트).
        • ex) mtu 1500은 패킷 크기가 최대 1500바이트임을 나타냅니다.
    • IP 주소
      • inet: IPv4 주소. 예: 172.17.0.1, 10.12.18.4는 각각 docker0와 enp0s31f6의 IPv4 주소.
      • netmask: 서브넷 마스크. 예: 255.255.0.0은 IPv4 서브넷 마스크를 나타냅니다.
      • broadcast: 브로드캐스트 주소. 예: 172.17.255.255, 10.12.255.255는 각 인터페이스의 브로드캐스트 주소.
    • MAC 주소
      • ether: 인터페이스의 하드웨어(MAC) 주소. 예: 02:42:83:1d:54:63, 20:88:10:79:51:86 등.
    • RX (수신) 및 TX (송신) 정보
      • RX packets / TX packets: 수신/송신한 패킷 수.
      • RX bytes / TX bytes: 수신/송신한 데이터 크기. 예: 18047954998 (18.0 GB)는 18GB 데이터를 수신했음을 나타냅니다.
      • RX errors / TX errors: 수신/송신 중 발생한 오류 수.
      • dropped: 네트워크 트래픽 중 손실된 패킷 수.
      • overruns: 네트워크 버퍼 오버플로로 손실된 패킷 수.
      • frame: 수신 프레임 오류.
      • carrier: 송신 오류(전송 신호 문제).
      • collisions: 네트워크 충돌 발생 수.
    • inet6 (IPv6 주소)
      • 예: fe80::2288:10ff:fe79:5186은 enp0s31f6의 IPv6 주소.
      • prefixlen: IPv6 서브넷 크기.
      • scopeid: IPv6 주소의 범위 (예: link는 로컬 네트워크를 의미).
    • 루프백 인터페이스 (lo)
      • 루프백 인터페이스는 시스템 자체와 통신할 때 사용됩니다:
      • inet 127.0.0.1: 루프백의 IPv4 주소.
      • inet6 ::1: 루프백의 IPv6 주소.
    • 기타 정보
      • device interrupt: 인터페이스와 연결된 하드웨어 인터럽트 번호 (예: device interrupt 19)
      • txqueuelen: 송신 큐 길이. 예: txqueuelen 1000은 송신 대기열의 최대 길이를 나타냅니다.

    예제 1. 모든 MAC 주소를 출력하는 방법

    ifconfig | awk '/ether/ {print $2}'
    • ether라는 문자열이 포함된 줄을 찾고, 두 번째 필드(필드 구분자 기본값: 공백 또는 탭)를 출력
    • MAC 주소는 ether 문자가 포함된 줄의 두 번째 필드에 위치
    • awk는 기본적으로 공백을 필드 구분자로 상용하므로 자연스럽게 공백이 무시됨
    • 네트워크 인터페이스 중에서 MAC 주소와 관련된 정보만 선택적으로 출력

    예제 2. 네트워크 인터페이스 이름과 함께 MAC 주소를 출력하는 방법

    ifconfig | awk '/^[a-zA-Z0-9]/ {iface=$1} /ether/ {print iface, $2}'

     

    • `/^[a-zA-Z0-9]/ {iface=$1}` 네트워크 인터페이스 이름(예: enp0s31f6, docker0)이 있는 줄을 찾고, 첫 번째 필드(인터페이스 이름)를 iface 변수에 저장
    • `/ether/ {print iface, $2}` MAC 주소(ether가 포함된 줄)의 두 번째 필드(MAC 주소)를 출력하며, 인터페이스 이름(iface)과 함께 출력

    8. awk

    awk '패턴 {액션}' 파일

    • 패턴: 특정 조건을 지정합니다. 생략 시 모든 행 선택(예: 특정 단어, 숫자 범위 등)
    • 액션: 조건에 맞는 데이터를 처리하거나 출력하는 명령을 작성합니다. 중괄호 포함 생략 시 해당 줄 출력
    • 파일: 입력 파일(혹은 명령어 결과)을 지정

    awk는 텍스트 데이터를 처리하고 분석하는데 사용되는 텍스트 프로세싱 도구(명령어)이다.

    주로 파일이나 명령어의 출력(입력 스트림)에서 특정 패턴을 검색하거나 데이터를 조작하는 데 사용된다.
    awk는 입력 파일을 한 줄씩 읽어 각 줄을 필드(열) 단위로 분리, 조건(패턴)을 확인, 조건이 참인 경우 작업 실행한다.

    간결한 구문. 대용량 텍스트 파일 처리에 효율적이며 다양하 텍스트 형식을 지원한다. (CSV, 로그 등)

     

    유용한 옵션

    • -f script.awk 외부 파일에 저장된 스크립트를 실행
    • -v 변수=값 awk 내부에서 사용할 변수를 외부에서 설정

    (1) awk 기본 사용법
    각 줄의 첫 번째 필드를 출력
    `{}`를 생략하면 기본적으로 모든 내용을 출력 (= {print $0})

    awk '{ print $1 }' 파일


    (2) 필드 구분자 변경
    기본값은 공백이나 탭으로 나누지만, '-F' 옵션으로 변경 가능

    awk -F ',' '{ print $2 }' 파일.csv


    (3) 조건 변경
    세 번째 필드의 값이 100보다 큰 경우, 첫 번째와 세 번째 필드를 출력

    awk '$3 > 100 { print $1, $3 }' 파일


    (4) 내장 변수 사용

    • NR: 현재 처리 중인 줄 번호
    • NF: 현재 줄의 필드 개수
    • $0: 현재 줄 전체
    awk '{ print NR, NF, $0 }' 파일
    # 첫 번째 줄부터  ls -l 명령에 대해 홀수번째 줄만 표시하는 명령줄
    ls -l | awk 'NR%2==1'


    (5) 패턴 사용

    # 특정 문자열이 포함된 줄 출력
    awk '/keyword/ { print $0 }' 파일
    # 특정 필드 값 비교
    awk '$1 == "value" { print $0 }' 파일


    (6) 실용적인 예시

    • END 블록: 파일을 모두 처리한 후 마지막 작업을 수행
    # 로그 파일에서 특정 IP 출력
    awk '/192.168.0.1/ { print $0 }' access.log
    # CSV 파일에서 합계 계산
    awk -F ',' '{ sum += $3 } END { print "Total:", sum }' data.csv
    # 행 번호와 내용 출력
    awk '{ print NR ": " $0 }' 파일

     

    (7) ifconfig 예제

    echo "MAC 주소 출력\n";
    ifconfig | awk '/ether/ {print $2}';
    echo "\n네트워크 인터페이스 이름과 MAC 주소 출력\n";
    ifconfig | awk '/^[a-zA-Z0-9]/ {iface=$1} /ether/ {print iface, $2}';
    echo "\n특정 이름을 제외한 네트워크 인터페이스 이름과 MAC 주소 출력\n";
    ifconfig | awk '/^[a-zA-Z0-9]/ {iface=$1} /ether/ && 
    iface !~ /^(lo|docker|virbr)/ {print iface, $2}';

     

    9. sed

    sed [옵션] '명령' [파일명]

    Unix/Linux 시스템에서 자주 사용되는 스트림 편집기로, 텍스트 데이터를 처리하고 변환하는 데 사용한다.

    주요기능으로는 텍스트 검색 및 치환, 특정 행 추가/삭제, 패턴 기반의 필터링, 텍스트 변환 (대소문자 변환 등)이 있다.

    sed는 파일을 수정하지 않고, 입력 데이터를 읽어들여 결과를 출력한다.

    물론 필요에 따라 파일을 직접 수정할 수도 있다.

     

    주요 명령어 및 사용법

    (1) 치환 (s 명령)
      - `/g` 플래그: 모든 일치 항목을 변경 (기본적으로 첫 번째 일치 항목만 변경)
      - `/i` 플래그: 대소문자를 구분하지 않음

      # 텍스트를 다른 텍스트로 대체
      sed 's/찾을_문자열/바꿀_문자열/' 파일명
      # 'hello'를 'hi'로 치환
      sed 's/hello/hi/' file.txt
      # 파일 내 모든 'hello'를 'hi'로 치환
      sed 's/hello/hi/g' file.txt


    (2) 특정 행 삭제 (d 명령)
    파일에서 특정 행을 삭제

      # 2번째 줄 삭제
      sed '2d' 파일명
      # 3~5번째 줄 삭제
      sed '3,5d' 파일명


    (3) 특정 행 추가 (a 명령)

      # 지정된 행 뒤에 새 텍스트를 추가
      sed '2a\추가할 텍스트' 파일명
      # 2번째 줄 뒤에 'New line' 추가
      sed '2a\New line' file.txt


    (4) 특정 행 변경 (c 명령)

      # 지정된 행을 새로운 텍스트로 대체
      sed '3c\새로운 텍스트' 파일명


    (5) 패턴 일치하는 행 출력 (p 명령)

    • 옵션 -n은 기본적으로 모든 출력을 억제하고, 명시적으로 지정한 출력만 표시한다.
    • p는 해당 줄을 출력하라는 명령을 의미
      # 특정 패턴과 일치하는 행만 출력
      sed -n '/찾을_패턴/p' 파일명
      # 'error'가 포함된 행 출력
      sed -n '/error/p' file.txt


    (6) 파일 직접 수정 (-i 옵션)

      # 결과를 파일에 저장 ((주의!) 원본 파일 덮어쓰기)
      sed -i 's/hello/hi/g' file.txt

     

    (7) 실전 예제

    # 1. 특정 단어 치환
    echo "apple orange banana" | sed 's/orange/grape/'
    # 출력: apple grape banana
    
    # 2. 빈 줄 제거
    sed '/^$/d' file.txt
    
    # 3. 특정 패턴으로 시작하는 행 삭제
    sed '/^ERROR/d' file.txt
    
    # 4. 파일에서 라인 번호 추가
    sed = file.txt | sed 'N;s/\n/\t/'
    # (1) = 명령은 각 행 줄 번호를 출력함
    # 각 행 번호와 해당 행을 번갈아 출력합니다.
    # apple => 1
    #          apple
    # (2-1) N 명령: 다음 행을 읽어와 현재 처리 중인 행에 추가합니다. 결과적으로 한 번에 두 줄을 처리할 수 있습니다.
    # (2-2) s/\n/\t/ : 줄 바꿈 문자(\n)를 탭 문자(\t)로 바꿉니다. 즉, 라인 번호와 해당 행 사이를 탭으로 구분합니다.
    # apple => 1 apple
    
    # 5. 특정 줄만 출력
    # 1번, 3번, 5번 줄 출력
    ls -l | sed -n '1p;3p;5p'
    # 1번 ~ 3번 줄 출력
    ls -l | sed -n '1,3p'
    # 첫 번째 줄부터 시작해서 2줄 간격으로 출력 (홀수 줄만 출력)
    ls -l | sed -n '1~2p'

     

    언제 awk와 sed를 선택할까?

      awk sed
    목적 필드(열) 기반 작업, 조건부 처리, 계산 행(줄) 기반 작업, 문자열 대체, 범위 처리
    강점 데이터 분석, 열 추출, 조건부 출력 문자열 치환, 정규식 기반 처리
    복잡한 조건 처리 적합 (if, else, 연산 가능) 제한적 (패턴 중심)
    속도 큰 데이터 처리에 유리 간단한 작업에서는 더 빠를 수 있음
    구문 프로그램 스타일 (유연하고 구조화된 작업 가능) 간단한 명령어 스타일 (직관적이고 짧은 구문)

     

    결론

    • awk 선택
      • 데이터를 열 중심 처리나 조건부 작업(계산, 필터링 등)이 필요한 경우
      • 복잡한 논리가 요구되거나 데이터를 구조적으로 분석해야 할 때
    • sed 선택
      • 텍스트 파일의 행 중심 처리(특정 줄 삭제, 범위 처리, 문자열 치환 등)가 필요한 경우
      • 간단한 텍스트 변환 작업(정규식 치환 등)이 필요한 경우
    • 둘다 함께 선택: sed로 특정 행을 추출하고 awk로 데이터를 분석하는 방식으로 조합

     

    추가 예제

    각 단계는 /etc/passwd 파일을 정리, 필터링, 변환, 조합하여 최종 출력물을 생성

    • 단계별 설명
      • /etc/passwd 파일을 cat 명령어로 읽음
      • 주석 제거: 6번 필드를 제거하고, 파일의 짝수 번째 줄만 출력
        • -F 필드 식별자를 기본 설정인 공백에서 콜론으로 설정
        • BEGIN {OFS=":"} 결과 출력 필드 구분자(OFS)를 콜론으로 설정
      • 로그인 이름 추출: 구분자 콜론(:)을 기준으로 첫 번째 필드(로그인 이름)만 선택
      • 로그인 이름의 텍스트 뒤집기
      • 역알파벳 순으로 정렬 (sort -r): 역순 정렬 (내림차순)
      • 범위 내 줄 선택
        • awk를 사용해 FT_LINE1에서 FT_LINE2에 해당하는 줄만 선택
        • l1과 l2는 환경 변수로 전달
      • 선택된 사용자명을 쉼표와 공백(, )으로 연결해서 한 줄로 출력
      • 마지막의 쉼표와 공백(, )을 마침표(.) 치환
    • 환경 변수 설정
      • export FT_LINE1=2
      • export FT_LINE2=4
    cat /etc/passwd | \
    awk -F ':' 'BEGIN {OFS=":"} NR % 2 == 0 {$6=""; print}' | \
    cut -d ":" -f1 | \
    rev | sort -r | \
    awk -v l1=$FT_LINE1 -v l2=$FT_LINE2 'NR==l1,NR==l2' | \
    awk '{printf "%s, ", $0}' | \
    sed 's/, $/./'

     

    10. cat /etc/passwd

    /etc/passwd 파일은 UNIX 및 Linux 시스템에서 사용자의 계정 정보를 저장하는 텍스트 파일입니다.

    이 파일은 각 줄이 하나의 사용자 계정을 나타내며, 다음과 같은 형식으로 구성됩니다.

    사용자이름:암호:사용자ID:그룹ID:설명:홈디렉토리:로그인쉘
       $1    $2    $3     $4   $5     $6     $7

     

    • 사용자 이름 (username) ($1 필드)
      • 사용자의 계정 이름이며 로그인 시 입력하는 이름으로 시스템에서 고유함. (root, nobody 등)
    • 암호(password): ($2 필드)
      • 암호 필드는 원래 암호화된 사용자 암호를 저장했지만, 보안 문제로 인해 현재는 대부분 x 또는 *로 표시
      • `x`: 암호화된 실제 암호는 `/etc/shadow` 파일에 저장됩니다.
      • `*` 또는 빈 값: 계정 잠금 상태
    • 사용자 ID (UID): ($3 필드)
      • 사용자 계정을 식별하는 고유 숫자
      • `0`: root (슈퍼유저)
      • `1~99`: 시스템 계정 (예약된 계정)
      • `1000 이상`: root (일반 사용자 계정, 일부 배포판은 500부터 시작)
    • 그룹 ID (GID): ($4 필드)
      • 사용자와 연관된 기본 그룹의 ID를 나타낸다.
      • `/etc/group` 파일에서 GID를 참조하여 그룹 이름을 확인할 수 있다.
    • 설명 (comment):($5 필드)
      • 사용자를 설명하는 필드(보통 사용자 이름, 부서 등을 작성)
      • 일반적으로 GECOS 필드라고 하며 쉼표로 구분된 여러 정보를 포함할 수 있음
      • 사용자 전체 이름, 사무실 번호, 전화번호 등
    • 홈 경로 (home directory): ($6 필드)
      • 사용자의 홈 디렉토리 경로이며 사용자가 로그인 할 때 시작 디렉토리로 지정된다. (`/home/morkim`, `/root`)
    • 로그인 셸 (login shell): ($7 필드)
      • 사용자가 로그인 시 실행되는 기본 셸
      • `/bin/bash`: Bash 셸
      • `/bin/zsh`: Zsh 셸
      • `/bin/sh`: POSIX 호환 셸
      • `/sbin/nologin` 또는 `/bin/false`: 로그인을 비활성화하기 위해 설정

    예시

    root:x:0:0:root:/root:/bin/bash
      사용자 이름: root
      암호: x (/etc/shadow에서 암호 확인)
      UID: 0 (슈퍼유저)
      GID: 0 (슈퍼유저 그룹)
      설명: root
      홈 디렉토리: /root
      로그인 셸: /bin/bash
    morkim:x:1000:1000:KimMorgan:/home/morkim:/bin/bash
      사용자 이름: morkim
      UID: 1000 (일반 사용자)
      GID: 1000 (기본 그룹)
      설명: KimMorgan
      홈 디렉토리: /home/morkim
      로그인 셸: /bin/bash

     

    11. sort 명령어

    sort [옵션] [파일]

    텍스트 파일의 줄 들을 정렬하는 명령어

     

    주요 옵션

    • -r 역순 정렬 (내림차순)
    # 오른차순 정렬
    sort [파일]
    # 내림차순 정렬 (역순 정렬)
    sort -r [파일]

     

    12. cut 명령어

    cut [옵션] [파일]

    파일의 각 줄에서 섹션을 제거하는 명령어

     

    주요 옵션

    • -d 필드 구분자 (delimiter) 선택 옵션
    • -f 필드선택 옵션
    cut -d ':' -f 1


    13. paste 명령어

    paste [옵션] [파일]
    파일의 줄들을 합치는 명령어

     

    주요 옵션

    • -d, --delimiters=LIST 필드 구분자를 Tab 대신 LIST의 문자를 재사용
    • -s, --serial 입력을 한 줄로 직렬화(줄바꿈을 제거하고 하나의 줄로 합침)
    • - 표준 입력(stdin)을 처리하도록 지정하는 역할
      • paste는 기본적으로 파일을 입력으로 받는다.
      • 파일 입력이 없을 경우 명시적으로 표준 입력(-)을 지정해야 한다.
    paste -sd ', ' -

     

    14. 고급 계산기 프로그램 bc

    Desk Calculator의 약자로, 유닉스 및 리눅스에서 사용되는 고급 계산기 프로그램입니다.

    주로 다양한 수학적 계산을 수행하는 데 사용됩니다.

     

    진법 연산을 위해 awk와 dc를 함께 사용하는 예제

    입력받은 각 줄에 대해 계산을 수행

    • `$0`: `awk`에서 `$0`은 현재 처리 중인 전체 입력 줄을 의미
      • 이 코드에서 $0은 입력된 숫자나 문자열이 됩니다.
    • `ibase=5`: `ibase`는 `bc`에서 입력 진법을 설정하는 옵션
      • 여기서는 5진법으로 입력을 받겠다고 설정합니다.
      • 즉, 후속 계산은 5진법 숫자들을 기반으로 처리됩니다.
    • `obase=D`: `obase`는 `bc`에서 출력 진법을 설정하는 옵션
      • 여기서는 16진법(D는 16을 의미)으로 출력을 하겠다고 설정합니다.
    echo "13" | awk '{print("ibase=5;obase=D;"$0)}' | bc

     

    dc는 후위 표기법 (Reverse Polish Notation, RPN)을 사용하는 계산기이며, 정수 계산을 주로 다룹니다.

    • 후위표기법(RPN): 연산자가 피연산자 뒤에 오는 방식입니다. 예를 들어, 3 4 +는 3 + 4와 동일합니다.
    • 소수점 계산(-l)은 기본적으로 지원하지 않지만, dc 내에서 소수점을 설정할 수도 있습니다.

    dc는 스택 기반으로 작동합니다.

    • 계산은 스택을 이용하여 이루어지며, 각 연산은 스택에 쌓인 값을 사용하여 수행됩니다.

    터미널 상에서 사용법 (주요 스택 조작 명령어)

    • p: 스택에서 가장 위의 값을 출력
    • d: 스택에서 가장 위의 값을 복사
    • c: 스택에서 가장 위의 값을 제거
    • r: 스택에 값을 추가
    • q: dc 종료
    # dc를 실행하면 계산을 시작할 수 있는 대화형 환경에 들어갑니다.
    dc
    # p는 결과를 출력하는 명령어
    3 4 + p
    # 소수점 계산 (l 명령어)
    4 3 / p  # 정수 계산, 결과는 1
    l         # 소수점 계산 활성화
    4 3 / p   # 결과는 1.33333
    5 3 + p  # 5 + 3 = 8
    5 3 - p  # 5 - 3 = 2
    5 3 * p  # 5 * 3 = 15
    6 3 / p  # 6 / 3 = 2
    q        # 종료
    echo "3 4 +" | dc     # 7
    echo "10/3" | bc -l   # 3.333...(20자리까지)

     

    13. 우분투에서 기본 터미널, 크롬, 디스코드, 슬랙 실행 명령어 찾기

    #(1) 기본 터미널 (Ctrl + Alt + T)
    # `.desktop` 파일에서 실행 명령어 찾기
    cat /usr/share/applications/org.gnome.Terminal.desktop | grep Exec=
    # 터미널 실행 명령어
    gnome-terminal
    
    # (2) Chrome 명령어
    # 기본 브라우저의 `.desktop` 파일 확인 (시스템의 기본 웹 브라우저 설정을 확인)
    gio mime x-scheme-handler/http
    # chrome `.desktop` 파일 찾기
    find / -name "com.google.Chrome.desktop" 2>/dev/null
    # chrome 실행 명령어 찾기
    cat /var/lib/flatpak/exports/share/applications/cohttp://m.google.Chrome.desktop | grep Exec=
    # chrome 실행 명령어
    /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=/app/bin/chrome cohttp://m.google.Chrome`
    
    # (3) Discord 명령어
    # 디코 `.desktop` 파일 찾기
    find / -name '*discord*' 2> /dev/null | grep ".desktop"
    # 디코 실행 명령어 찾기
    cat /var/lib/flatpak/exports/share/applications/com.discordapp.Discord.desktop | grep Exec=
    # 디스코드 실행 명령어
    /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=discord com.discordapp.Discord
    
    # (4) Slack 명령어
    # 슬랙 `.desktop` 파일 찾기
    find / -name '*slack*' 2> /dev/null | grep ".desktop"
    # 슬랙 실행 명령어 찾기
    cat /var/lib/flatpak/app/cohttp://m.slack.Slack/x86_64/stable/d12f724a177af6efbfe977c934cca969c88f61c1410c4487e02d540c3a30bb49/files/share/applications/com.slack.Slack.desktop | grep Exec=
    # 슬랙 실행 명령어
    /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=cohttp://m.slack.Slack --file-forwarding cohttp://m.slack.Slack @@u %U @@
Designed by Tistory.