리눅스

wooni·2023년 4월 26일
1

Linux

목록 보기
1/6

Linux (리눅스)

1. 리눅스(Linux)란?

  • 컴퓨터 OS커널의 일종인 리눅스 커널을 사용하는 운영체제 (ex : window, macOS)
  • 오픈소스 소프트웨어
  • 리눅스 커널 - Linux OS의 주요 구성요소이자 컴퓨터 하드웨어와 프로세스를 잇는 핵심인터페이스.
  • 커널
    • 메모리 관리 : 메모리가 어디에서 무엇을 저장하고, 얼마나 사용되는지 추적
    • 프로세스 관리 :어느 프로세스가 CPU를 언제 얼마나 오랫동안 사용할지 결정
    • 장치드라이버 : 하드웨어와 프로세스 사이에서 중재자 역할을 수행
    • 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신

                 하드웨어와 사용자간을 연결해주는 운영체제

2. 왜 리눅스를 쓰는가?

  • 오픈소스로 무료로 사용 할 수 있음
  • 보안이 매우 우수(무료배포로 사용자들이 주기적인 버그를 확인하여 취약점을 발견, 개선)
  • 메모리를 낭비하지 않으며 성능을 최대한으로 끌어올림
  • 운영체제가 수행해야 하는 핵심 기능만 정의되 있음. 이외의 부분은3. 리눅스 설치
  • 사용자의 용도에 맞게 커스터마이징 가능

3. 리눅스 설치

4. 리눅스 기본명령어

1) 자주 사용하는 특수문자

기호설명
~tilde, 물결, 출렁이, home - 홈디렉터리로 이동
``
`back quote, back tick - 명령어 결과물 저장
'single quote, " : double quote - 문자열을 출력할때 사용
` 
&&and 연산. 앞 명령어가 참일때만 뒤 명령어 실행
/절대위치 기준 경로 (root가 시작점)
./현재위치 기준 경로 (현재 디렉토리가 시작점, 생략가능)
../현재 위치의 상위 기준 (root/home 이라면 ../는 root임)
~/Home 위치 기준

2) 자주사용하는 명령어

명령어설명
ls현재 위치의 파일 목록 조회
cd디렉터리로 이동
touch이름의 0바이트 파일 생성, 파일의 날짜와 시간을 수정
mkdir이름의 디렉터리 생성
cp파일을 으로 복사
mv파일을 으로 이동
rm파일 삭제
cat파일의 내용을 화면에 출력
redirection명령어의 결과물을 에 저장
alias =명령어를 <alias_name>으로 정의하여 쉽게 사용할 수 있도록 설정
  • ls (List segments) : 현재 위치의 파일 목록 조회**

    • ls -l : 파일의 상세정보
    • ls -a : 숨김 파일 표시
    • ls -t : 파일들을 생성시간순(제일 최신 것부터)으로 표시
    • ls -rt : 파일들을 생성시간순(제일 오래된 것부터)으로 표시
    • ls -f : 파일 표시 시 마지막 유형에 나타내는 파일명을 끝에 표시
      ('/' : 디렉터리, '*' : 실행파일, '@' : 링크 등등,,,)
  • cd (Change directory) :디렉터리 이동**

    • cd [디렉터리 경로] : 이동하려는 디렉터리로 이동 (경로 입력 시 '[', ']'부분은 빼고 입력!)
    • cd ~ : 홈 디렉터리로 이동
    • cd / : 최상위 디렉터리로 이동
    • cd . : 현재 디렉터리
    • cd .. : 상위 디렉터리로 이동
    • cd - : 이전 경로로 이동
  • touch : 0바이트 파일 생성, 파일의 날짜와 시간을 수정

    • touch filename : filename의 파일을 생성

    • touch -c filename : filename의 시간을 현재시간으로 갱신

    • touch -t 202110291608 filename : filename의 시간을 날짜 정보(YYYYMMDDhhmm)로 갱신

            (20211029160 => 2021.10.29.16:08)
    • touch -r oldfile newfile : newfile의 날짜 정보를 oldfile의 날짜 정보와 동일하게 변경

  • mkdir (Make dirctory) : 디렉터리 생성

    • mkdir dirname : dirname이라는 디렉터리 생성
    • mkdir dir1 dir2: 한 번에 여러 개의 디렉터리 생성
    • mkdir -p dirname/sub_dirname : dirname이라는 디렉터리 생성,sub_dirname이라는 하위 디렉터리도 생성
    • mkdir -m 700 dirname : 특정 퍼미션(권한)을 갖는 디렉터리 생성
  • <파일의 퍼미션>

    8진수2진수권한의미
    0000---아무 권한 없음
    1001--x실행 권한만 있음
    2010-w-쓰기 권한만 있음
    3011-wx쓰기,실행 권한 있음
    4100r--읽기 권한만 있음
    5101r-x읽기,실행 권한 있음
    6110rw-읽기,쓰기 권한 있음
    7111rwx모든 권한 있음

예를 들어 '777'의 경우 이진수로 111111111이고 rwxrwxrwx라는 의미를 가지므로 파일 소유자, 소유 그룹, 일반 사용자에게 읽기, 쓰기, 실행의 모든 권한을 주는 설정이다.

  • cp (Copy) : 파일 복사
    • cp file1 file2 : file1을 file2라는 이름으로 복사
    • cp -f file1 file2 : 강제복사 (file2라는 파일이 이미 있을 경우 강제로 기존 file2를 지우고 복사 진행)
    • cp -r dir1 dir2 : 디렉터리 복사. 폴더 안의 모든 하위 경로와 파일들을 복사
  • mv (Move) : 파일 이동
    • mv file1 file2 : file1 파일을 file2 파일로 변경
    • mv file1 /dir : file1 파일을 dir 디렉터리로 이동
    • mv file1 file2 /dir : 여러 개의 파일을 dir 디렉터리로 이동
    • mv /dir1 /dir2 : dir1 디렉터리를 dir2 디렉터리로 이름 변경
  • rm (Remove) : 파일 삭제
    • rm file1 : file1을 삭제
    • rm -f file1 : file1을 강제 삭제
    • rm -r dir : dir 디렉터리 삭제 (디렉터리는 -r 옵션 없이 삭제 불가)
  • cat (Catenate) : 파일의 내용을 화면에 출력, 리다이렉션 기호('>')를 사용하여 새로운 파일 생성
    • cat file1 : file1의 내용을 출력
    • cat file1 file2 : file1과 file2의 내용을 출력
    • cat file1 file2 | more : file1과 file2의 내용을 페이지별로 출력
    • cat file1 file2 | head : file1과 file2의 내용을 처음부터 10번째 줄까지만 출력
    • cat file1 file2 | tail : file1과 file2의 내용을 끝에서부터 10번째 줄까지만 출력
  • redirection ('>', '>>') : 화면의 출력 결과를 파일로 저장
    • '>' 기호 : 기존에 있는 파일 내용을 지우고 저장
    • '>>' 기호 : 기존 파일 내용 뒤에 덧붙여서 저장
    • '<' 기호 : 파일의 데이터를 명령에 입력
  • cat file1 firle2 > file3 : file1, file2의 명령 결과를 합쳐서 file3라는 파일에 저장
    • car file4 >> file3 : file3에 file4의 내용 추가
    • cat < file1 : file1의 결과 출력
    • cat < file1 > file2 : file1의 출력 결과를 file2에 저장
  • alias : 자주 사용하는 명령어들을 별명으로 정의하여 쉽게 사용할 수 있도록 설정
    • alias 별명 = 명령어 정의
    • ex) alias lsa = 'ls -a' : lsa를 실행하면 -a 옵션을 갖는 ls를 실행합니다.
    • unalias lsa
    • unalias lsa : lsa라는 alias를 해제

5.Vi Editor

  • 윈도우에서 메모장과 같은 UNIX계열의 범용 에디터

  • 커서의 위치 중요

  • 실행방법

  • $ vi 파일명

  • 입력모드

    i 커서 앞, I - 줄 맨앞 a 뒤 ,A -줄 맨뒤 ,
    o- 다음줄, O - 윗줄
    cc - 삭제 후 작성,ctrl + J - 줄바꿈 삭제
    r-문자 바로 바꾸기 , R - 확인 후 덮어쓰기
    $-줄 맨뒤 , ^-줄 맨앞 [[-행 맨앞, ]]-행 맨뒤

  • vi기본 설정파일
    • 명령어
      $vi ~/.vimrc

  • 창 분할 명령어
:vs 파일명 // 세로로 분리
:sp 파일명 // 가로로 분리
:new file
  • 커서이동 : ctrl+ww (^ww)
- vim tutorials

$vimtutor -g ko //한글판

  • 개발 언어별 컴파일 가능
C, C++, JAVA ...

예제 별찍기

  • C언어
#include <stdio.h>
  2 void  main()
  3 {
  4     int i = 0, j = 0, k = 0;
  5 
  6     for ( i = 0; i < 5; i+=2 )
  7     {
  8         for ( k = 0; k < i; k+    =2)
  9         {
 10             printf(" ");
 11         }
 12         for (j = 0; j < 5-i; j    ++)
 13             printf("*");
 14         printf("\n");
 15     }
 16 }
  • 간편실행방법
    • vi .c 파일생성시
$ vi a.c
$ gcc b.c
$ echo $PATH
$ PATH=$PATH:.
$ a.out

6. Shell

  • 사용자들이 내리는 명령어들을 해성하여 기계어로 번역한 다음 운영체제인 kernel에게 전달 해주는 역할
  • 명령어가 잘못되었거나 해석하지 못했을 경우 kernel에 전달되지 않고 shell에서 미리예약된 메시지를 보낸다

아래는 Shell 관련 명령어

명령어설명
ls현재 디렉토리에 있는 파일과 폴더를 나열합니다.
cd현재 작업 중인 디렉토리를 변경합니다.
pwd현재 작업 중인 디렉토리의 경로를 출력합니다.
mkdir새로운 디렉토리를 생성합니다.
rm파일이나 디렉토리를 삭제합니다.
cp파일이나 디렉토리를 복사합니다.
mv파일이나 디렉토리를 이동하거나 이름을 변경합니다.
cat파일의 내용을 출력합니다.
grep지정한 문자열을 포함하는 행을 검색합니다.
top시스템의 현재 상태와 프로세스를 모니터링합니다.
ps현재 실행 중인 프로세스 목록을 출력합니다.
kill실행 중인 프로세스를 종료합니다.
chmod파일이나 디렉토리의 권한을 변경합니다.
chown파일이나 디렉토리의 소유자를 변경합니다.
ping네트워크 상태를 확인합니다.
ssh원격 호스트에 접속합니다.
scp로컬 시스템과 원격 시스템 간에 파일을 복사합니다.

Shell 변수

  • 환경변수(Environment variables) $ env
    • 환경변수란, 컴퓨터 시스템이나 프로그램이 사용하는 값으로, 사용자가 직접 설정하여 쉘에서 사용할 수 있습니다.
    • 쉘에서는 'export' 명령어를 사용하여 환경변수를 설정할 수 있습니다.
    • 대표적인 환경변수로는 'PATH', 'HOME', 'USER' 등이 있습니다.
  • 쉘 설정 파일(Shell configuration files)
    • 쉘 설정 파일은 사용자가 쉘을 사용할 때, 매번 입력해야 하는 환경 변수, 함수, 별칭 등을 미리 설정해 놓는 파일입니다.
    • 쉘의 종류에 따라 설정 파일 이름과 경로는 다를 수 있습니다.
    • 대표적인 쉘 설정 파일로는 'bashrc', 'zshrc', 'profile' 등이 있습니다.
  • 쉘 스크립트(Shell script) $ set
    • 쉘 스크립트는 쉘에서 실행할 수 있는 프로그램으로, 쉘 명령어와 제어 구조, 변수 등을 사용하여 작성됩니다.
    • 쉘 스크립트는 텍스트 파일로 작성되며, 실행 권한이 필요합니다.
    • 쉘 스크립트는 반복적인 작업, 자동화된 작업, 시스템 관리 등에 사용됩니다.

bash 경로 설정

현재경로에 실행파일이 존재하더라도 PATH변수에 경로가 등록되어 있지 않다면 에러 발생
./을 붙인 후에 실행해야 명령어 인식

$PATH=$PATH:
$echo $PATH


파일의 종류

SymbolMeaning
ddirectory
-file
lsoftlink
ccharacter device
bblock device
ssocket
pnamed pipe
  • 하드링크
    • 동일한 파일을 가리키는 두 개 이상의 파일
    • 원본 파일과 하드링크 간의 차이점은 없으며, 원본 파일이 삭제되어도 하드링크로 참조하는 파일이 있으면 파일 데이터는 그대로 유지
  • 소프트링크(심볼릭 링크)
    • 다른 파일을 가리키는 작은파일
    • 원본 파일과 달리 별도의 inode를 가지며, 원본 파일이 삭제되면 소프트링크는 끊어짐
    • 원본 파일과 다른 이름과 위치를 가질 수 있으므로 링크된 파일을 다른 위치에 이동하거나 이름을 변경할 수 있다

아래 코드는 링크되지 않은 코드예시

  #include <stdio.h>
  void f(int * x)
  {
      printf(" x = %d byte \n", sizeof(x));
  }

  int main(void)
  {
      int a[100] = {0, };
      printf(" a = %d  byte \n", sizeof(a));
      f(a);
      return 0;
  }   

결과 a = 40 byte x = 8 byte


다양한 명령어 모음


/dev/null

A. /dev/null

B. 1>/dev/null

C. 2>/dev/null

A와 B은 같은 의미 그럼 B와 C의 차이는?

1 의 의미는 STDOUT(standard output)

STDOUT은 표준출력으로, 정상적인 메시지를 출력하고

2 의 의미는 STRERR(standard error)

STDERR은 표준에러로, 에러메시지를 출력하는것이다

다시 말해

B는 표준출력을 /dev/null로 redirection하고 (정상적인 메시지를 null로)

C는 표준에러를 /dev/null로 redirection 한다 (에러메시지를 null로)

이파일에 쓰는 모든것은 영원히 사라진다는것으로 아무것도 아닌(null) 장차파일이라고 볼수 있다(?)

어떠한 작업의 출력되는 내용을 보고 싶지 않을때, 이곳으로 그 출력을 보내버리면,

아무것도 보여지지 않게 되는것이다. 이럴때 아주 유용하게 쓰이게 된다


find

 `find [옵션] [경로] [표현식]`

명령어 모음

조건설명
-name해당 이름의 파일을 찾음. 해당 이름에는 정규 표현식을 활용할 수 있음
-type지정된 파일 타입에 해당하는 파일 검색
-user해당 유저에게 속한 파일 검색
-empty빈 디렉토리 혹은 크기가 0인 파일 검색
-delete검색된 파일 혹은 디렉토리 삭제
-exec검색된 파일에 대해 지정된 명령 실행
-path지정된 문자열 패턴에 해당하는 경로에서 검색
-print검색 결과를 출력. 검색 항목은 newline으로 구분됨 (기본 값)
-print0검색 결과를 출력. 검색 항목은 null로 구분됨
-size파일 크기를 사용하여 파일 검색
-mindepth검색을 시작할 하위 디렉토리 최

1. 파일명으로 찾기 (-name)

#현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"

#현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"

#현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete

#현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"

#현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"

2. 타입으로 찾기 (-type)

# 현재 디렉토리에서 모든 디렉토리 찾기
find . -type d

# 현재 디렉토리에서 test가 들어가는 디렉토리 찾기
find . -name "*test*" -type d

# 현재 디렉토리에서 모든 파일 찾기
find . -type f

3. 파일 크기로 찾기 (-empty, -size)

# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색
find . -empty

# 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제
find . -name "*test*" -empty -delete

# 현재 디렉토리에서 1024byte인 파일 검색
find . -size 1024c

# 현재 디렉토리에서 1024byte보다 큰 파일 검색
find . -size +1024c

# 현재 디렉토리에서 1024byte보다 작은 파일 검색
find . -size -1024c

# 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색
find . -size +1k -size -10k

4. 검색된 파일에서 추가 명령 실행하기 (-exec)

# 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력
find . -name "*test*" -exec ls -l {} \;

# 현재 디렉토리에 있는 파일에서 "test"가 들어가는 내용 찾기 
find . -type f -exec grep "test" {} \;

# 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제
find . -name "*.txt" -exec rm {} \;

sort

텍스트로 된 파일의 행 단위 정렬을 할때 사용되는 명령어

사용법
sort [옵션] [파일이름]

명령어 모음

옵션내용
-b처음 공백을 무시하는 옵션입니다.
-d공백과 알파벳 문자 순으로 정렬하는 옵션입니다.
-f대/소문자를 구분하지 않는 옵션입니다.
-r내용을 비교하여 내림차순으로 정렬하는 옵션입니다.
-c정렬이 이미 되어 있는 경우 정렬하지 않는 옵션입니다.
-k지정한 열을 기준으로 정렬하는 옵션입니다.
-o결과를 파일로 출력하는 옵션입니다.
-u중복된 행을 하나의 행으로 합쳐서 출력하는 옵션입니다.

tr

tr 명령은 반복되는 문자 제거, 대문자 소문자로 변환, 기본 문자 바꾸기 및 제거와 같은 작업을 수행

사용법
tr OPTION... SET1 [SET2]

명령어 모음

옵션내용
-d지정한 문자셋의 문자를 삭제하는 옵션입니다.
-s중복된 문자를 제거하는 옵션입니다.
-c지정한 문자셋에 없는 문자만을 변환하는 옵션입니다.
-t문자 변환 대상 문자셋을 지정하는 옵션입니다.
-u소문자를 대문자로 변환하는 옵션입니다.
-l대문자를 소문자로 변환하는 옵션입니다.

tar

여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령

명령어 모음

옵션내용
-c새로운 아카이브 파일 생성
-x아카이브 파일에서 파일 추출
-t아카이브 파일 내용 목록 표시
-r아카이브 파일에 파일 추가
-u아카이브 파일에 새로운 파일 추가 또는 업데이트
-f아카이브 파일 이름 지정
-v아카이브 작업 중 처리한 파일 목록 표시
-zgzip으로 압축된 아카이브 파일 생성 및 추출
-jbzip2로 압축된 아카이브 파일 생성 및 추출
-k파일 추출 시, 해당 파일이 이미 존재하는 경우 덮어쓰지 않음
-O추출한 파일을 표준 출력으로 출력
-C아카이브 파일을 추출할 위치 지정
--exclude아카이브 작업 시 특정 파일 또는 디렉토리를 제외
--remove-files아카이브에 추가한 파일을 삭제
--same-owner아카이브에서 파일 추출 시, 파일 소유자를 원본과 동일하게 유지

간단 활용예시

활용예시내용
tar cvf T.tar *현재 디렉토리의 모든 파일과 디렉토리를 tar로 묶기
tar cvf T.tar [PATH]대상 디렉토리를 포함한 모든 파일과 디렉토리를 tar로 묶기
tar cvf T.tar [FILE_1] [FILE_2]파일을 지정하여 tar 아카이브로 묶기
tar xvf T.tartar 아카이브를 현재 디렉토리에 풀기
tar xvf T.tar -C [PATH]tar 아카이브를 지정된 디렉토리에 풀기
tar tvf T.tartar 아카이브의 내용 확인하기
tar zcvf T.tar.gz *현재 디렉토리를 tar로 묶고 gzip으로 압축하기
tar zxvf T.tar.gzgzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기
tar jcvf T.tar.bz2 *현재 디렉토리를 tar로 묶고 bzip2로 압축하기
tar jxvf T.tar.bz2bzip2로 압축된 tar 아카이브를 현재 디렉토리에 풀기
tar cvfw T.tar *tar 아카이브 묶거나 풀 때 파일 별 진행 여부 확인하기

ftp client

파일전송 프로토콜

  • FTP의 종류
    • anonymous FTP : 익명 ftp 또는 공개 ftp 사이트. 누구나 접속 가능.
    • full service FTP : 해당 시스템의 계정을 소유한 사람만 접속 가능.

사용법
$ftp [url] or [ip]

명령어 모음

카테고리명령어설명
일반 명령어help 또는 ?명령어 보기.
 ls파일 및 디렉토리 목록 보기. shell에서 ls와 같다.
 dir파일 및 디렉토리의 접근 권한과 목록을 자세히 출력.
  유닉스쉘에서 ls -al과 같은 효과.
 pwd현재 디렉토리 위치 확인.
 cdRemote System에서 디렉토리 이동.
 lcdLocal System의 디렉토리 변경.
  파일 수신시 보관하려는 디렉토리를 변경할 때 사용.
 closeftp> 프롬프트에서 원격지 시스템의 연결을 끝낸다.
  ftp 프로그램은 종료하지 않는다.
 disconnect원격지 시스템의 접속 종료. ftp 프로그램은 종료하지 않는다.
 quit 또는 bye원격지 시스템의 접속을 종료하고 쉘상태로 복귀한다.
환경 설정 명령어bin 또는 binarybinary 파일을 전송하기 위한 세팅.
 asciitext 파일을 전송하기 위한 세팅.
 promptmput 또는 mget 명령시 대화형식 처리를 무시.
 hash파일의 전송상황 표시. #로 표시.
파일 전송 명령어get하나의 파일을 Remote System에서 Local System으로 가져 온다.
 mget여러 개의 Local System으로 가져 온다.
 put하나의 파일을 Local System에서 Remote System으로 올린다.
 mput여러 개의 파일을 Remote System으로 올린다.
기타 명령!쉘로 잠시 나가 쉘명령을 수행.
 appendLocal 시스템에서 원격시스템으로 파일의 전송시 이어받기.
 bell명령어 수행 후 벨소리 On/Off.
 case파일 전송시 대,소문자 구분을 변환.
 cdup상위 디렉토리로 이동.
profile
Backend

0개의 댓글