ABOUT ME

-

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

    이번 포스팅에서는,

    ls

    ssh-keygen

    cat

    chmod

    ln

    fallocate

    git

    patch/diff

    touch

    명령어를 복습한다.

     

    1. ls 명령어

    ls는 'list segments'의 준말
    ls -l 명령어를 사용하여 디렉토리 내부 요소를 나열할 때 6개월 이내일 경우는 월, 일, 시간만이 표시되고 6개월 이상일 때는 연도가 표시된다.

    주요옵션

      -l 옵션: ' long listing format,  터미널상에 출력은 순서대로 다음과 같은 의미를 가진다.

        - 허가권(d: 폴더, I: 소프트(심볼릭)링크, b: 블록, c: 문자 특수 파일)

        - 링크 개수
        - UID (User ID, 사용자 고유 식별자)

        - GID (Group ID, 그룹 고유 식별자)

        - 용량
        - 생성 날짜 및 시간
        - 이름

      -i 옵션: inode, 각 파일의 inode 번호를 출력.

         - inode는 파일 시스템에서 파일의 메타데이터를 저장하는 데이터 구조  

      -t 옵션: time-based sorting,  최근 생성시간을 기준으로 정렬

      -m 옵션: comma-separated list,  쉼표(',')를 구분자로 나열

      -p 옵션: slash appended to directories, 디렉토리 이름 끝에 슬랙시('/')를 추가하여 디렉토리임을 표시.
      -R 옵션: recursive, 지정된 디렉토리와 하위 디렉토리까지 재귀적으로 탐색하여 내용을 출력

      --full-time 옵션: 시간 정보를 초 단위까지 포함하여 더 정밀하게 출력

    2. Github 연동을 위한 ssh-key 생성

    ssh-keygen
    # (enter 3 times)
    cd ~/.ssh
    cat id_rsa.pub
    # intra.42.fr 프로필에서 SSH Key 등록

    3. 파일 읽고, 쓰기 위한 cat 명령어

    # 파일 쓰기
    cat > [파일 경로/이름]
    # 끝내려면 Ctrl + d
    # 파일 읽기
    cat [파일 경로/이름]

    4. 권한을 부여하는 chmod 명령어

    chmod를 사용하기 위해서는 Mode 파라미터에 대한 문자열 표현법과 8진수 표현법에 대해 알아야 해요.

    두 가지 표현법 중 어느 것을 써도 문제될 것은 없지만, 내 동료가 무엇을 쓸지 모르니까요.

    참고자료

    # Exercise 01
    chmod a=x testShell1100 
    ls -l
    # total 0
    # ---x--x--x 1 morkim 2025_gyeongsan 0 Jan 20 11:58 testShell1100
    chmod u=r testShell1100 
    chmod g=r testShell1100 
    chmod o=xr testShell1100
    ls -l
    # -r--r--r-x 1 morkim 2025_gyeongsan 0 Jan 20 11:58 testShell1100

    (좌) 8진수 표현법, (우) 문자열 표현법

    5. 링크 파일 생성

    Windows의 바로가기 파일 같은 기능을 수행하는 파일인 링크 파일을 생성하는 명령어에요.

    종류에는 하드링크와 하드링크의 단점을 보완한 소프트(심볼릭)링크가 있습니다.

    심볼릭 링크 생성 참고자료

    하드 링크/심볼릭 링크 참고자료

    # 소프트링크
    ln -s [원본] [파일명]
    # 하드링크
    ln [원본] [파일명]

    6. 더미 파일을 만들거나 용량을 설정하는 fallocate 명령어

    더미 파일을 만드는 방법(fallocate, truncate, dd) 참고자료

    fallocate -l [용량크기] [변경할 파일]

    7. 연습 문제

    아래와 같은 결과가 나오도록 파일을 생성해보면 chmod와 fallocate, 링크 파일을 이해하는데 도움이 많이 된다.

    %>  ls  -l
    total  XX
    drwx--xr-x  2  XX  XX   XX  Jun  1  20:47  test0
    -rwx--xr--  1  XX  XX     4  Jun  1  21:46  test1
    dr-x---r--  2  XX  XX   XX  Jun  1  22:45  test2
    -r-----r--  2  XX  XX     1  Jun  1  23:44  test3
    -rw-r----x  1  XX  XX     2  Jun  1  23:43  test4
    -r-----r--  2  XX  XX     1  Jun  1  23:44  test5
    lrwxrwxrwx  1  XX  XX     5  Jun  1  22:20  test6  ->  test0
    %>

    8. git user 이름과 이메일 설정

    git config --global user.name "myname"
    git config --global user.email "myname@email.com"
    # git 설정 출력
    git config --list

    9. 커밋 해시를 포함한 git 로그 출력

    %H 옵션: 커밋 해시

    %h 옵션: 짧은 길이 커밋 해시
    커밋 이력 조회 참고자료

    git 커밋 히스토리 조회 참고자료

    git log --pretty=tformat:"%H" -5

    10. 현재 git에 제외되거나 무시될 자료만 출력

    # git에 무시되면서 추적되지 않는 제외된 표준 기준 파일 리스트
    git ls-files --others --ignored --exclude-standard
    
    # git 파일 목록
    # --others 추적되지 않는
    # --ignored 무시되는
    # --exclude-standard 표준 제외 항목(전역+.gitignore)

    11. 두 파일의 차이점을 출력해 주는 patch 명령어

    패치(patch) 파일은 두 파일의 차이점을 출력해 주는 프로그램인 diff에 의해 생성된 파일을 의미

    patch 파일을 만드는 방법은 크게 git, diff 명령어를 사요하는 방법이 있음

    - diff 명령어

    diff [원본파일] [수정파일] > [파일명].patch

    - git diff 명령어

    # 수정 후 commmit 했다면 diff로 변경사항 출력
    git diff > [파일명].patch
    # 여러개의 commit을 1개의 patch 파일로 생성
    git diff [original-commit-id] [update-commit-id] > [파일명].patch

    - patch 명령어

    patch [적용할 파일] < [패치 파일명]

    - diff와 patch 사용 예시

    diff a b > sw.diff
    # (변경사항 뽑기) diff 명령어는 파일 a 와 파일 b 안에 있는
    # 내용들의 차이점을 비교하고 합쳐 새로운 sw.diff라는 파일을 만듦
    
    patch a < sw.diff
    # (변경사항 적용) patch 명령어는 파일 sw.diff 안에 있는 내용 중
    # 파일 a와 겹치는 내용을 빼내고 남아 있는 글 만을 파일 a에 적용
    
    patch a sw.diff -o c
    # (적용할 변경사항 사항을 외부로 파일로 출력) patch 명령어는 파일 sw.diff 안에 있는
    # 내용 중 파일 a와 겹치는 내용은 그대로 넣고, 다른 부분을 적용해 파일 c로 출력

    12. 파일도 생성 및 수정 시간을 변경할 수 있는 touch 명령어

    touch 명령어를 사용하여 파일의 수정 시간을 수정 및 설정 가능해요.

    -t 옵션은 YYYYMMDDhhmm 형식으로 시간을 지정할 수 있어요.
    ls -l 명령어를 사용하여 디렉토리 내부 요소를 나열할 때 6개월 이내일 경우는 월, 일, 시간만이 표시되고 6개월 이상일 때는 연도가 표시 되니 참고해주세요.

    touch -t 202501010000 file.txt
    # -t: 시간을 설정하는 옵션
    # 202501010000은 YYYYMMDDhhmm 형식입니다.
    ls -l file.txt
    # 출력 예시: -rw-r--r-- 1 user user 1234 Jan  1  2025 file.txt

     

    일반적인 파일의 경우 -t 옵션으로 생성 및 수정 시간을 변경할 수 있지만, 소프트(심볼릭) 링크의 날짜를 변경하려고 할 때는 추가적인 옵션을 붙여줘야 해요.

    왜냐하면 touch 명령어가 링크 자체의 시간을 변경하지 않고, 심볼릭 링크가 참조하는 실제 파일의 수정 시간을 변경하게 되기 때문이예요. 즉, touch는 링크가 아닌 링크가 가리키는 파일의 수정 시간을 변경해요.

    그래서 심볼릭 링크의 수정 날짜를 touch 명령어로 변경하려면 -h 옵션을 사용하여 심볼릭 링크 자체의 mtime을 설정해야 해요. 이렇게 하면 링크 자체의 시간을 수정할 수 있어요.

    touch -h -t 202501010000 your_symlink

     

    find 명령어와 조합해서 아래와 같이 일괄적으로 심볼릭 링크만을 대상으로 사용할 수도 있어요.

    -type l 은 심볼릭 링크만을 대상으로 선택

    -exec touch -h는 각 심볼릭 링크에 대해 수정 시간을 변경

    역슬래시('\')의 의미는 특수 문자를 이스케이프(escape)하는 것이다.

    여기서 '\;'는 '-exec' 옵션의 끝을 나타내며, 쉘이 세미콜론을 다른 명령어 구분자로 해석하지 않도록 해요.
    쉘에서 세미콜론(';')은 명령어 구분자로 사용하기 때문입니다.

    find . -type l -exec touch -h -t 202501010000 {} \;

     

Designed by Tistory.