42서울 라피신 1주차 (Shell 00~01)
📒 Day1 (shell00)
when
- 23.01.09 월 11:50 ~ 22:30
git clone () [새이름]
압축 해제 tar -xvf
1. exercise 00
1) 파일 생성
cat > z
(내용 작성) z
(파일 종료) ctrl + z
2. exercise 01
1) 파일 커미션 변경
chmod 455 파일명
(r-4, w-2, x-1)
2) 파일 크기 변경
head -c 40 /dev/urandom > testShell00
3) 파일 날짜/시간 변경
touch -t 202306012342 testShell00
4) 파일 묶기
tar -cf testShell00.tar testShell00
3. exercise 02
1) 심볼릭 링크 파일 생성 (원본의 정보만 저장)
ln -s 원본파일 심볼릭링크파일
- 파일 권한 변경
chmod -h 777 test6 - 심볼릭 링크 시간 변경
touch -h -t 202306012220 test6
2) 하드 링크 파일 생성 (원본의 사본 생성해 저장)
ln 원본파일 하드링크파일
3) 여러 파일 한번에 묶기
tar -cf exo2.tar
(해제) tar -xvf exo2.tar
4. exercise 03
1) public key 파일에 저장
cat ~/.ssh/id_rsa.pub
5. exercise 04
1) midLS 파일 생성
cat > midLS
ls -tmp
2) 명령줄 작성
- 수정 날짜 순서 (-t)
- 쉼표로 구분 (-m)
파일 형태 출력 (-F)- 디렉토리에 '/' 추가 (-p)
6. exercise 05
1) 셸 스크립트 생성
vi git_commit.sh
2) git 저장소의 마지막 5개 커밋 ID 표시
git log --pretty=tformat:"%H" -5
3) 셸 실행
bash git_commit.sh | cat -e
7. exercise 06
1) 셸 스크립트 생성
vi git_ignore.sh
2) git 저장소의 무시되는 모든 파일 이름 나열
git ls-files --others --ignored --exclude-standard
- git add 전 디렉터리에 존재하는 파일 표시 (git ls-files)
- --others : git ls-files에 표시된 이외의 내용 표시 (untracked 파일 표시)
- --ignored : 출력에서 무시된 파일만 표시
- --exclude-standard
3) 셸 실행
bash git_ignore.sh | cat -e
8. exercise 07
1) a, b 파일 생성
2) diff : 파일(디렉토리) 비교하여 어떤 파일이 바뀌었는지 나타냄
diff a b > sw.diff
- diff 명령어 결과값이 비어있으면 값이 같음
3) patch : 패치 파일을 이용해 프로젝트나 파일에 패치 적용
patch a sw.diff (a에 변경내용 바꾸면 = b)
9. exercise 08
1) 현재 디렉토리와 하위 디렉토리에서 파일 검색 (전체/)
find . -name [파일명]
2) 파일 이름에 특정 문자열이 포함된 파일 검색 (#, ~로 끝나는 경우)
find . type -f \(-name '#*#' -o -name '*~' \)
- type : 지정된 파일 타입에 해당하는 파일 검색
3) 검색된 모든 파일과 디렉토리 이름 출력 후 삭제
find -print -delete
10. exercise 9
1) magic 파일 생성
vi ft_magic
2) 오프셋 값 / 데이터 종류 / 값 / 출력 문자열
- 41 string 42 42file
magic file : 각 파일은 형식에 따라 고유한 번호나 형식이 있는데, 그 파일 형식을 검사해 주는 것
3) 컴파일
file -C -m ft_magic (선택)
file -m ft_magic
📒 Day2-3 (Shell01)
when
- 23.01.10 화 10:00 ~ 22:00
- 23.01.11 수 9:30 ~
1. exercise 1
1) id : 특정 사용자의 user, group 정보 출력
id -Gn
2) tr (translate characters) : 문자 변환
tr ' ' ','
tr -d '\n'
📁 참고
- echo : 환경변수 출력
- printenv : 현재 설정되어 있는 환경변수 출력
- export : 환경변수 설정
2. exercise 2
1) .sh로 끝나는 파일 찾기
find . -name "*.sh" -type f
2) .sh를 제외한 파일 이름만 출력
-exec basename ".sh" {} \;
- basename : 파일명 출력 (경로, 확장자 제거)
- basename [경로/파일이름][.확장자]
- dirname : 절대경로 출력
3. exercise 3
1) 현재 디렉토리 및 하위 디렉토리 출력
find .
2) 파일 및 디렉토리 개수 출력
wc -l
- wc : 파일 내에서 바이트 수, 단어 수, 행 수 카운트해 출력
- l : 행의 개수 출력
3) 여백 제외
tr -d ' '
4. exercise 4
1) ifconfig : IP주소, MAC주소, 네트워크 상태 확인 및 설정
ifconfig
- a : 비활성화된 네트워크 인터페이스까지 출력
2) mac 주소만 출력
grep -w "ether"
- w : 패턴이 전체 단어와 일치하는 행 출력
3) 앞에 tab 제거
tr -d '\t'
4) 앞에 ether 제거
cut -c 7- (7번째 이후만 출력)
- c : character 기준 자르기
📁 참고
- IP주소 : 인터넷에서 컴퓨터의 연결을 식별 -> inet
- MAC주소 : 하드웨어 자체에 부여된 고유한 식별번호 (물리적 주소) -> ether
ifconfig 명령어 사용법
5. exercise 5
1) 특수문자 포함된 파일명 설정
touch \"\\?$*\'MaRViN\'*$\?\\"
2) 퍼미션, 날짜 수정
chmod 614 [파일명]
touch -t 202210021221 [파일명]
3) 42만 포함하기
- 42를 적으면 LF (Line Feed) 개행문자가 추가되어 크기가 3이 됨
- 개행문자 제거 후 저장
echo 42 |tr -d "\n" > [파일명] - echo : 문자열 터미널 출력
📁 참고
ls 옵션
- l : 긴 목록 형식으로 파일 출력 (long)
- R : 현재 위치 및 하위 파일까지 모두 출력
- a : (.)현재 디렉토리 포함하여 전체 출력
6. exercise 6
1) 목록 출력
ls -l
2) 한 줄 걸러 출력
awk "NR%2==1 { print }"
7. exercise 7
1) 주석 삭제 (주석 #)
grep -v "^#"
2) 짝수행 출력
awk "NR%2==0 { print }"
3) 각 login 거꾸로 반전
cut -f 1 -d ':' |rev
- f : 필드 기준 구분
- d : 필드 구분자 지정
4) 알파벳 역순으로 정렬
sort -r
5) FT_LINE1과 FT_LINE2을 포함한 사이의 값 남기기
awk "NR>="$FT_LINE1" && NR <= "$FT_LINE2""
- NR : 행 데이터 (레코드)
- NF : 열 데이터 (필드)
6) 각 login은 ","로 구분
tr "\n" ","
7) 마지막 , 지우기
sed 's/
- sed "s/패턴/교체 패턴/플래그"
8) 출력 결과는 "."로 끝남 (큰따옴표x)
sed "s/,/, /g"
sed "s/, $/./g"
- g : 등장하는 모든 패턴에 적용
9) 마지막 줄바꿈 개행 제거
tr -d "\n"
8) 환경변수 지정해서 실행
export FT_LINE=7
- env : 환경변수 확인
- echo $FT_LINE : FT_LINE의 환경변수 확인
📁 참고
/etc/passwd
root : x : 0 : 0 : root : /root:/bin/bashroot:x:0:0:root:/root : /bin/bash
- root - 사용자 계정명
- x - 패스워드
- 0 - 사용자 UID (user id)
- 0 - 사용자 GID (group id)
- root - 사용자 이름
- /bin/bash - 로그인 쉘
8. exercise 8
1) '\"?! (5진수) 변환
2) mrdoc (5진수) 변환
3) xargs : input으로 들어온 결과를 명령어에 매개변수로 던져주는 역할
4) bc : 복잡한 공학용 산술과 실수 계산
5) gtaio luSnemf (13진수) 변환
📁 참고
xargs와 pipe 차이
- xargs
앞의 결과를 인자로 받고, 입력을 실행할 프로그램의 인자로 전달하여 실행 - 파이프
앞의 결과를 인자로 받는게 아니라, 앞의 출력을 다음 입력으로 연결
📁 정규표현식
📁 vi
📁 리눅스 명령어
- ls : 현재 위치의 파일 목록 조회
ls -l : 파일의 상세정보
ls -a : 숨김 파일 표시
ls -t : 파일 생성시간순 표시
ls -rt : 파일 생성시간역순 표시
ls -f : 파일 표시시 파일유형 표시 (/ : 디렉터리 , * : 실행파일, @ : 링크파일)
- touch : 파일 생성
touch filename : 파일 생성
touch -c filename : 파일명의 시간을 현재시간으로 갱신
touch -t YYYYMMDDhhmm filename : 파일명의 시간을 날짜 정보 갱신
touch -r oldfile newfile : 날짜 정보를 동일하게 변경
- mkdir : 디렉터리 생성
mkdir dirname : 디렉터리 생성
mkdir dir1 dir2 : 여러개 디렉터리 생성
mkdir -p dirname/sub_dirname] : 디렉터리/하위 디렉터리 생성
mkdir -m 700 dirname : 특정 퍼미션(권한) 갖는 디렉터리 생성
- cd : 디렉터리 이동
cd [디렉터리 경로] : 이동하는 디렉터리 경로 이동
cd ~ : 홈 디렉터리 이동
cd / : 최상위 디렉터리 이동
cd . : 현재 디렉터리
cd .. : 상위 디렉터리 이동
cd - : 이전 경로로 이동
- mv : 파일 이동
mv file1 file2 : 파일 이름 변경
mv file /dir : 파일을 디렉터리로 이동
mv file1 file2 /dir : 여러 개의 파일 디렉터리 이동
mv /dir1 /dir2 : 디렉터리 이름 변경
- cp : 파일 복사
cp file1 file2 : file2 이름으로 복사
cp -f file1 file2 : 강제 복사 (기존 파일 있을 경우 지움)
cp -r dir1 dir2 : 디렉터리 복사
- rm : 파일 삭제
rm filename : 파일 삭제
rm -f filename : 강제 삭제
rm -r dirname : 디렉터리 삭제 (rmdir)
- cat : 파일 화면에 출력 / 새로운 파일 생성 (>)
cat filename : 파일 내용 출력
cat file1 file2 : 여러개 파일 내용 출력
cat file |more : 페이지별로 출력
cat file |head : 처음부터 10번째 줄까지 출력
cat file |tail : 끝에서부터 10번째 줄까지 출력
- ">" : 기존 파일 내용 지우고 저장
- ">>" : 기존 파일 뒤에 덧붙여서 저장
- "<" : 파일의 데이터를 명령에 입력
- pwd : 경로 확인
- chmod : 파일 커미션 변경
- man : 매뉴얼 확인