프로젝트/42Seoul

42서울 라피신 1주차 (Shell 00~01)

soohykim 2025. 4. 9. 12:53
728x90
반응형

📒 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 }"

  • awk : 파일에서 선택된 레코드 값 조작
  • awk "NR == [숫자] { 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

  1. root - 사용자 계정명
  2. x - 패스워드
  3. 0 - 사용자 UID (user id)
  4. 0 - 사용자 GID (group id)
  5. root - 사용자 이름
  6. /bin/bash - 로그인 쉘

8. exercise 8

1) '\"?! (5진수) 변환

2) mrdoc (5진수) 변환

3) xargs : input으로 들어온 결과를 명령어에 매개변수로 던져주는 역할

4) bc : 복잡한 공학용 산술과 실수 계산

5) gtaio luSnemf (13진수) 변환

📁 참고

xargs와 pipe 차이

  • xargs
    앞의 결과를 인자로 받고, 입력을 실행할 프로그램의 인자로 전달하여 실행
  • 파이프
    앞의 결과를 인자로 받는게 아니라, 앞의 출력을 다음 입력으로 연결

📁 정규표현식

정규표현식 메타문자 정리

📁 vi

vi 사용법

📁 리눅스 명령어

  1. ls : 현재 위치의 파일 목록 조회

ls -l : 파일의 상세정보
ls -a : 숨김 파일 표시
ls -t : 파일 생성시간순 표시
ls -rt : 파일 생성시간역순 표시
ls -f : 파일 표시시 파일유형 표시 (/ : 디렉터리 , * : 실행파일, @ : 링크파일)

  1. touch : 파일 생성

touch filename : 파일 생성
touch -c filename : 파일명의 시간을 현재시간으로 갱신
touch -t YYYYMMDDhhmm filename : 파일명의 시간을 날짜 정보 갱신
touch -r oldfile newfile : 날짜 정보를 동일하게 변경

  1. mkdir : 디렉터리 생성

mkdir dirname : 디렉터리 생성
mkdir dir1 dir2 : 여러개 디렉터리 생성
mkdir -p dirname/sub_dirname] : 디렉터리/하위 디렉터리 생성
mkdir -m 700 dirname : 특정 퍼미션(권한) 갖는 디렉터리 생성

  1. cd : 디렉터리 이동

cd [디렉터리 경로] : 이동하는 디렉터리 경로 이동
cd ~ : 홈 디렉터리 이동
cd / : 최상위 디렉터리 이동
cd . : 현재 디렉터리
cd .. : 상위 디렉터리 이동
cd - : 이전 경로로 이동

  1. mv : 파일 이동

mv file1 file2 : 파일 이름 변경
mv file /dir : 파일을 디렉터리로 이동
mv file1 file2 /dir : 여러 개의 파일 디렉터리 이동
mv /dir1 /dir2 : 디렉터리 이름 변경

  1. cp : 파일 복사

cp file1 file2 : file2 이름으로 복사
cp -f file1 file2 : 강제 복사 (기존 파일 있을 경우 지움)
cp -r dir1 dir2 : 디렉터리 복사

  1. rm : 파일 삭제

rm filename : 파일 삭제
rm -f filename : 강제 삭제
rm -r dirname : 디렉터리 삭제 (rmdir)

  1. cat : 파일 화면에 출력 / 새로운 파일 생성 (>)

cat filename : 파일 내용 출력
cat file1 file2 : 여러개 파일 내용 출력
cat file |more : 페이지별로 출력
cat file |head : 처음부터 10번째 줄까지 출력
cat file |tail : 끝에서부터 10번째 줄까지 출력

  • ">" : 기존 파일 내용 지우고 저장
  • ">>" : 기존 파일 뒤에 덧붙여서 저장
  • "<" : 파일의 데이터를 명령에 입력
  • pwd : 경로 확인
  • chmod : 파일 커미션 변경
  • man : 매뉴얼 확인

 
728x90
반응형