티스토리 뷰

AI/CS

[CS] 리눅스

brave_sol 2025. 3. 18. 12:53
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
링크
«   2025/04   »
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
글 보관함