-
[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 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 {} \;
'Linux Shell' 카테고리의 다른 글
[42경산] 3기 1차 라피신 회고 - shell 명령어 (3) (0) 2025.03.10 [42경산] 3기 1차 라피신 회고 - shell 명령어 (2) (0) 2025.03.05 [42경산] 3기 1차 라피신 회고 - norminette 문서 핵심 내용 요약 (0) 2025.03.03 [42경산] 3기 1차 라피신 회고 - shell 명령어 (2) (0) 2025.03.03