티스토리 뷰
grep '^[A-Z].*Cat' pass.txt | python encode.py >> ans.txt
# 대문자로 시작하고, .(아무문자, 줄바꿈제외)*(0개이상), Cat을 포함하는 줄을 pass.txt에서 찾아라
0. 리눅스
- GNU 프로젝트(자유 소프트웨어 프로젝트- 누구나 자유롭게 사용,수정,재배포 가능한 유닉스와 호환되는 완전한 운영체제를 만드는 것)의 일환으로 개발됨
1) 리눅스 구조
- 하드웨어(CPU, 메모리 등) > 커널(하드웨어 제어, 소프트웨어와의 커뮤니케이션을 돕는 시스템 관리자)
> shell (사용자가 입력한 명령어를 해석해 커널에 전달) > 응용 프로그램(오피스, 웹브라우저 등)
2) 리눅스 종류
패키지 | 패키지관리자 | 운영체제 이름 |
레드햇 | yum | CentOS, 페도라 |
데비안 레드헷 | apt | 우분투, 리눅스 민트, 라즈비안 |
안드로이드 | apk | 안드로이드 OS |
* apt: Advanced Packing Tool, 데비안 리눅스(.dev) 또는 파생된 배포판(우분투)에서 소프트웨어를 설치, 제거, 업데이트 할 떄 사용, sudo로 관리자 권한 획득 필요
** root: 모든 권한을 가지고 있는 최고 관리자
용도 | 명령어 |
설치 | apt install |
삭제 | apt remove |
업데이트 | apt update |
패키지 검색 | apt search |
설명확인 | apt show |
패키지 정보 조회 | apt-cache |
3) 리눅스 활용 분야
- 멀티 유저와 멀티 태스킹을 지원하며 다양하고 강력한 네트워킹을 사용할 수 있다.
- 네트워크 서버 장비, 개발서버 등
- 라즈베리파이(임베디드 시스템). IOT최적화
- TV 셋톱박스, 정밀 의료기기 등
4) 우분투
- 개인용 PC 환경에 최적화, 간결하고 쉽고 많은 사용자(커뮤니티), 약 6개월 단위로 업데이트(보안, 버그 이슈 해결)
- 우분투 버전: 나온년도.나온월(예: 19.04)
- 우분투 LTS(가장 안정적인 버전-서버는 5년지원)
5) shell은 커널과 사용자 사이를 이어주는 역할, 사용자의 명령을 해석해 커널에 명령을 요청
- bash, sh, csh, ksh 등
6) 리눅스 디렉토리 구조: tree 명령문을 통해 확인 가능
sudo apt install tree
- root 시작
- home: 계정 생성시 home의 하위 디렉토리로 생성됨
- bin: 명령어들이 저장되어 있음
- lib: 라이브러리
- etc:설정파일
7) 파일 속성: ls -al
- | rw-r-r- | 1 | root | root | 8980 | Mar23 09:35 | test.txt |
파일 유형 (-:파일, d:폴더) |
파일 권한 | 링크 수(ln) | 파일 소유자 | 소유 그룹 | 파일 크기 (Byte) |
마지막 변경시간 | 파일 이름 |
8) 파일의 권한 변경: chmod [파일권한] [변경할 파일 위치 또는 이름]
소유자 | 그룹 | 그외사용자 | ||||||
r | w | - | r | - | - | r | - | - |
4 | 2 | 0 | 4 | 0 | 0 | 4 | 0 | 0 |
6 | 4 | 4 |
- r:읽기(4), w:쓰기(2), x:실행(1) : 777은 모든 사용자가 모든 권한을 얻는다는 의미
9) 소유권 변경: chown [소유할유저]:[소유할그룹] [소유권을 변경하고 싶은 디렉토리/파일명]
- root 권한이 있어야 실행가능
1. pwd
- 현재 작업중인 디렉터리의 경로
2. ls
- 현재 디렉터리에 있는 파일과 폴더 목록을 출력
3. mkdir [이름]
- 새로운 디렉터리(폴더) 생성
* 삭제는 rmdir [이름] , 단 폴더가 비어있어야만 삭제가능
4. touch test.txt
- 파일생성
5. cd
- 입력된 경로로 이동
- change directory
* 절대경로와 상대경로(현재 작업 디렉터리를 기준으로 상대적인 위치를 지정)
- .는 현재 디렉터리, ..는 상위 디렉터리
6. 명령어 옵션
1) -a: 숨김 파일을 포함하여 모든 파일과 디렉토리를 출력
2) -l: 파일과 디렉터리의 상세 정보를 출력(파일 권한, 소유자, 생성 시간)
3) -r: 파일을 수정한 시간 역순으로 정렬해 출력
4) -t: 파일을 수정한 시간 순서대로 정렬해 출력
5) -R: 하위 디렉터리를 포함하여 전체 파일 목록을 출력
6) -S: 파일 크기 순서대로 정렬하여 출력
7) man ls : 옵션들 자세히 알려줌
8) --help: 명령어의 사용 방법과 기능에 대한 정보를 포함한 도움말
* ls -al 처럼 몹션을 묶어서 사용할 수도 있다.
** .파일명인 경우 숨김 파일임
- 단축키 지정: ll(=ls -lh)으로 자세한 파일 리스트를 확인할 수 있음
- 단축기 설정 방법: alias ll='ls -lh'
8) alias 입력시 저장된 별칭 조회됨
7. mv [이름] [경로]
- 파일이나 디렉터리를 이동하거나 이름을 변경
- move
8. cp [option] [대상 위치 및 이름] [복사하고 싶은 위치]
- 파일이나 디렉터리를 복사
- copy
- 디렉터리를 복사하려면 cp -r로 옵션을 주어야 함
`-r`은 하위 디렉토리와 파일 전체를 복사
-`p`: 소유주, 그룹, 권한, 시간 정보를 그대로 복사
9. rm [이름]
- 파일이나 디렉터리를 삭제
- remove
- 디렉터리를 삭제하려면`rm -rf`로 옵션을 주어야 함
`-r`은 디렉토리와 그 하부 파일까지 삭제(rmdir과 달리 폴더가 비어있지 않아도 rm -r로 통째로 삭제가능)
`-f`는 삭제 여부를 묻지 않고 바로 삭제
`-i`는 삭제할 것인지 확인
-`rf`는 삭제 여부를 묻지 않고 하부 파일이 있는 디렉토리까지 삭제
10. 리다이렉션(방향 재설정)
- 표준 스트림: 컴퓨터 프로그램과 그 외부에 연결된 입출력 통로
stdin | 키보드입력 |
stdout | 화면출력 |
stderr | 오류내용출력 |
1) 출력 리다이렉션 : 덮어쓰기, 추가하기
- `>` : 해당 파일에 넣어라
- [ 0>:표준 입력, 1>:표준 출력, 2>: 표준 에러]
- `>>`: 해당 파일 텍스트 마지막에 추가해라(없으면 파일 생성)
2) 입력 리다이렉션: 입력받기
- `<`는 파일을 표준 입력으로 전달
- 예시: wc는 줄 수, 단어 수, 문자 수를 출력
- Here Document: 여러 줄의 텍스트를 입력하여 특정 명령어에 인자로 전달하는 방법
- "<< 문자열" 형태로 "문자열"이라는 특정 문자열이 나타날 때가지 표준 입력을 받아들임
11. vi [이름]
- 키보드만으로 파일을 편집할 수 있는 터미널 기반 에디터
- 파일 내용을 변경하거나 저장하는 작업을 수행하는 명령 모드와 텍스트를 입력하는 입력 모드가 있다
1) 명령어
- i : 현재 커서 위치에 문자를 삽입해 입력 모드로 전환
- a: 현재 커서 다음에 문자를 삽입해 입력 모드로 전환
- o: 현재 행 다음에 새로운 행을 만들고, 문자를 삽입하며 입력 모드로 전환
- x: 현재 커서 위치의 문자를 삭제
- dd: 현재 커서가 위치한 행을 삭제
- :w: 파일을 저장
- :q: vi를 종료
- :q! :변경사항을 저장하지 않고 vi를 강제 종료
- :wq: 파일을 저장하고 vi를 종료
- ESC: 입력 모드를 종료하고 명령 모드로 전환
2) 입력모드와 명령모드
- 입력 모드에서는 키보드를 이용해 커서 위치를 이동할 수 있음
- 명령 모드에서 `:`을 입력한 이후 파일을 저장하거나 종료하는 등 명령어 입력 가능
12. 파이프
- 한 프로세스의 출력을 다른 프로세스의 입력으로 연결함으로써, 두 개 이상의 명령어를 조합하여 복잡한 작업을 수행
- 파이프를 이용해 파일 및 디렉터리 목록에서 특정 문자를 포함한 파일과 디렉터리를 찾을 수 있음
1) grep [option] [pattern] [파일명]
- 파일 안에서 원하는 문자를 포함하는 단어 찾아줌
- 파이프를 이용해 파일 및 디렉터리 목록에서 특정 문자를 포함한 파일과 디렉터리를 찾을 수 있음
`-i` : 대소문자를 구분하지 않고 검색
`-v`: 패턴과 일치하지 않는 행 출력
`-c`: 패턴과 일치하는 행의 갯수 출력
`-w`: 패턴과 단어 단위로 매칭되어야 출력
grep '^[A-Z].*Cat' pass.txt | python encode.py >> ans.txt
문자열 시작이 대문자로 시작하고 .(아무문자, 줄바꿈제외)*(0개이상), Cat을 포함하는 문자열을 pass.txt에서 찾고,
encode.py의 input으로 사용한 뒤,
출력값은 ans.txt에 넣어라
2) find [파일명]
- 특정 파일 찾기
3) sort [파일명]
- 텍스트로 된 파일 내용을 정렬하는 명령어, 파이프를 이용해 정렬된 텍스트에서 특정 문자를 찾을 수 있음
4. &&
- 명령어를 순차적으로 실행 (단, 앞의 명령어가 실패하면 뒤의 명령어를 실행하지 않는다)
5. ;
- 앞의 명령어가 성공적으로 실행되지 않나도 뒤에 것이 실행 됨
6. &
1) 프로세스를 백그라운드에서 실행
* 백그라운드란? 사용자의 입력과 출력으로부터 독립적으로 실행되는 경우 ↔ 포어그라운드
2) &1 : 표준 출력으로 출력을 지정한다는 의미
- 발생한 에러를 파일로 저장하는 방법
* 표준스트림: 입력은 0, 출력은 1, 에러는 2
3) job
- 백그라운드로 실행되는 작업을 보여주는명령어
- job은 프로세스와 달리 터미널 명령을 통한 작업만을 의미
- job을 통해 프로세스를 실행할 수 있지만 터미널이 종료되면 job과 함께 프로세스도 종료
- 각각의 터미널마다 job은 따로 존재
- kill %작업번호로 종료 가능
7. sleep [숫자]
- n초 동안 멈춰줌
- Ctrl+C 누르면 바로 종료됨
8. ps [option]
- 현재 실행 중인 프로세스의 정보를 출력
* PID : 프로세스 ID
`-e`: 현재 실행 중인 모든 프로세스 정보
`-f`: 모든 정보 확인
`-a`: 실행중인 전체 사용자의 모든 프로세스 (유저가 root인지 뭔지)
`-u`: 프로세스에 대한 자세한 정보(사용자, 프로세스 시작 시간 등)
`-x`: 실시간으로 프로세스가 어떻게 변경되는지 계속 보여줌, 모든 프로세스(터미널에서 제어하고 있지 않은 프로세스까지)에 대한 정보
* TTY: 프로세스가 연결된 터미널(번호)
** TIME: 프로세스가 실행되고 얼마나 지났는가
***CMD: 프로세스 이름
**** PPID: 부모 프로세스
9. kill [option] [PID:프로세스 아이디]
- 프로세스 종료
`-l`: 사용 가능한 시그널 목록
`-1`: 재실행
`-9`: 강제 종료
`-15`: 정상종료
10. Crtl + C
- 현재 포어그라운드에서 실행되고 있는 프로세스 즉시 종료
11. Crtl + Z
- 프로세스 정지
- `fg % 1`을 입력해 다시 프로세스를 실행할 수 있음(fg는 포어그라운드를 의미)
12. sudo mount [option] [device] [마운트할 디렉토리]
- mount: 현재 시스템에 마운트 된 정보 출력(파일 시스템명은fdisk -l로 확인)
- 파일 시스템의 일부를 다른 디렉터리에 연결하는 것을 말함
- 다른 매체의 파일 시스템을 사용할 때 사용하며, 이를 통해 파일 공유가 가능(예: USB 정보를 폴더로 접근한 것)
*sudo: super user(관리자)의 보안 권한으로 프로그램을 구동할 수 있도록 하는 명령어로, 보통 사용자 비밀번호를 요구함
** option
`-a`: /etc/fstab에 명시된 파일 시스템을 마운트 할 때 사용
`-t`: 파일 시스템의 유형을 지정, 생략할 시 /etc/fstab 파일을 참조
`-o`: 추가적인 설정을 적용할 떄 사용, 다수의 조건을 적용할떄는 콤파(,)로 구분
13. df
- 디스크의 용량을 출력
- `-h` 옵션을 사용하면 디스크 용량에 단위를 붙여서 출력
14. du
- 디렉터리 내의 파일 및 디렉터리의 용량을 출력
- `-h` 옵션을 사용하면 디스크 용량에 단위를 붙여서 출력
15. 심볼릭 링크(바로가기)
- 원본 파일이나 디렉터리를 참조하는 링크를 연결해둔 것
- `ln -s [링크걸 원본 경로] [링크이름]`을 이용해 심볼릭 링크를 생성할 수 있음(링크 이름은 .쓰면 원본의 이름으로생성됨)
du -h redirection.txt
- 예시: 바탕화면>link-test> deep-path >test-file.txt(this is test for link) 구조 일때,
ln -s ./ link-test /deep-path . => 현재 경로에 deep-path 바로 가기를 만들겠다
=> cd deep-path 후 ls 시 바로 test-file.txt나옴
16. whoami
- 로그인한 사용자 ID를 알려주는 명령어
- `id -un`은 동일한 역할을 한다
17. passwd
- 기존 비밀번호를 새로운 비밀번호로 변경
18. 다양한 명령어 ( | 로 연결해 사용)
- head: 처음 N줄 출력
- tail: 마지막 N줄 출력
- alias: 지정 명령어
- more: 화면 단위 출력
- diff: 파일 비교
- su: 현재 사용자 변경
- which: 절대 경로
- wc: 라인, 단어의 수
- shutdown: 시스템 종료
19. nano [편집하려는 파일 이름]
- 나노 텍스트 에디터 단축키(대문자로 입력하지 않아도 됨)
- ctrl+O: 저장
- ctrl+X: 종료
- ctrl+W: 검색
- Alt+6: 복사
- ctrl+U: 붙여넣기
- ctrl+^: 여러 줄 선택
20. 정규표현식
- 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 일종의 형식
- 예: 전화번호 => ^010(\D?d{4}){2} : 010-xxxx일수도있또 010xxxx일수도있으므로 \D?
메타문자 | 의미 | 메타문자 | 의미 |
^ | 문자열의 시작 | \d | 숫자 |
$ | 문자열의 끝 | \D | 숫자가 아닌 것 |
. | 하나의 문자와 대응 | \w | 알파벳 대소문자,숫자,_ = [a-zA-Z0-9_] |
\s | 공백문자 | \W | \w에 해당하지 않는 글자 |
\S | 공백문자가 아닌 것 | \n | 개행문자 |
\ | 메타 문자를 문자 그대로 사용 | \t | 탭 문자 |
\b | 단어구분자 |
- 선택패턴
패턴 | 의미 | 패턴 | 의미 |
| | 또는 | [ ] | 대괄호 속 문자 중 하나 |
[0-9] | 0부터 9까지의 숫자 하나 | [A-Z] | A부터 Z까지 알파벳 대문자 하나 |
[ ^ ] | not | [a-z] | 소문자 알파벳 |
- 수량 한정자
수량자 | 의미 | 예 | 수량자 | 의미 | 예 |
? | 0개 또는 1개 | apples? => apple, apples s가 0개 또는 1개 |
{n} | n개 | a{2} => aa a{3} => aaa |
* | 0개 이상 | ab* => a, ab, abbb b가 0개 이상 |
{n,m} | n개 이상, m개 이하 | a{2,3} => aa, aaa |
+ | 1개 이상 | ab+ => ab,abbb b가 1개이상인것만 |
{n,} | n개 이상 | a{2,} => aa,aaa,aaaa,,,, |
- 그룹패턴
- () 괄호는 그룹을 나타냄, 그룹은 전체 패턴 내에서 하나로 묶여지는 패턴, 한 번생성한 그룹은 재사용가능
- 예: (to)ma\1 은 tomato와 매칭됨 => \1이 (to)를 가리킴
21. 리눅스 프로세스의 특징
- 부모 자식 프로세스가 있다 (복사된 프로세스가 자식, 원본이 부모, fork로 복사)
- 커널에 의해 관리된다
- 모든 프로세스에는 소유자가 있다
- 프로세스마다 식별을 위한 ID가 부여된다.(PID)
* PID 1번은 init 프로세스, 2번은 kthreadd 프로세스가 실행 => 이후 생성된 프로세스들은 이 프로세스들을 fork해 생성됨
** init 프로세스는 나머지 모든 시스템의 부모 프로세스
*** thread프로세스는 모든 스레드의 부모 프로세스
22. 프로세스의 메모리 구성
- 커널 주소 공간, 사용자 주소 공간으로 분리되며, 커널 부분은 사용자가 접근할 수 없다.
메모리 | 구분 | 구분 | 설명 |
0xFFF 가장 높은 영역 |
커널 | 커널 주소공간 | 사용자가 접근 X |
스택 | 사용자 주소공간 |
함수 매개변수, 복귀 주소, 지역 변수와 같은 임시 자료 (함수 호출시 생성, 함수 사용이 끝나면 제거됨) |
|
user space | 프로그램이 사용되는 라이브러리가 저장되는 공간 | ||
힙 | 동적인 메모리 할당 변수를 해제할 경우 힙 영역에서 사라짐 |
||
BSS | 초기화 되지 않은 정적 변수 ( 프로그램이 실행될때 생성되고, 프로그램이 종료되면 시스템에게 반환됨) |
||
데이터 | 전역 변수와 초기화된 정적 변수 | ||
0x0000 가장 낮은 영역 |
코드(Text) | 프로그램 코드 |
23. at [옵션] [시간] [날짜] [+증가시간]
- 지정된 시간에 1회 실행
* option
`-m`: 출력 결과가 없더라도 작업이 완료될 때 사용자에게 메일을 보냄
`-f`: 스크립트 파일 등을 실행할 때 사용
`-l`: 예약된 작업 목록 출력 (=atq)
`-v`: 작업이 수행될 시간 출력
`-d`: 예약된 작업을 삭제 (=atrm)
24.crontab [option]
- 지정된 시간에 따라 주기적으로 실행, 콤마(,)를 통해 2가지 이상의 시간 표현이 가능하다
`-l`: 현재 계정의 설정된 crontab정보
`-e`: 현재 계정의 crontab 정보 수정
`-r`: 현재 계정의 crontab 정보 모두 삭제
`-u`: 특정 사용자의 crontab 정보를 다루게 해준다.(root 권한 필요, sudo)
25. SSH 원격 접속
- Secure Shell의 줄임말로, 네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령 실행 등을 할 수 있도록 해주는 프로토콜(데이터 암호화)
- SSH를 통해 다른 컴퓨터에서 리눅스에 접속해 명령어 및 프로그램을 실행할 수 있다
* telnet : 네트워크를 통해 다른 컴퓨터에 접근하거나 명령 실행등을 할 수 있는 프로토콜이나, 보안적으로 치명적
(보내지는 패킷 데이터는 암호화 되어있지 않아, 사용자의 비밀번호 등이 노출된다)
26. openssh
- 우분투에서 사용하는 ssh구동 패키지
- 다른 컴퓨터에서 우분투에 접속하려면 openssh-server 패키지를 설치해야 한다.
- openssh 설치여부 확인
dpkg -l | grep openssh
- openssh-server 설치
sudo apt-get update
apt-get openssh-server
- ssh 서버 실행(sudo 권한 필요)
sudo service ssh start
service --status-all | grep +
- ssh 포트 확인 (네트워크 상태 확인)
sudo netstat -antp
- ssh 접속하기 (openssh client가 설치되어 있어야함)
ssh [서버아이디]@[아이피 혹은 서버이름 혹은 도메인]
'AI > CS' 카테고리의 다른 글
[CS] 운영체제 (0) | 2025.03.23 |
---|---|
[CS] 네트워크 (0) | 2025.03.18 |
[CS] 컴퓨터개론 (0) | 2025.03.18 |
[CS] IT 리터러시 (0) | 2025.03.17 |
[CS] 알고리즘 - 그리디 (0) | 2025.03.05 |
- Total
- Today
- Yesterday
- 고득점 Kit
- 빅데이터 분석기사
- 기초
- 오픽
- opic
- 30분
- 프로그래머스
- 뉴스
- 갓생
- 실기
- 스크랩
- 루틴
- 아침운동
- ChatGPT
- Ai
- 아침
- 티스토리챌린지
- 오블완
- 미라클모닝
- 줄넘기
- 운동
- 다이어트
- SQL
- IH
- llm
- 습관
- Python
- 경제
- C언어
- 영어회화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |