개발기술/빌드, 배포, 인프라

Command-Line Instructions(CLI)

bsh6226 2024. 1. 24. 13:52


Windows Environment

Window CLI

  • pip install package_name : the Python package installer, to install a Python package (library)
  • python my_script.py : runs a Python script (my_script.py in this case) using the Python interpreter.
  • python -m venv new_environment : run a python module called venv to run virtual environment called new_environment
  • dir - Lists the files and directories in the directory.
  • cd path/to/directory : This command changes the current directory to the specified path
  • md or mkdir - Creates a new directory.
  • del - Deletes one or more files.
  • copy - Copies files from one location to another.
  • move - Moves files from one location to another.
  • cls - Clears the command prompt screen.
  • type - Displays the contents of a text file.
  • exit - Closes the command prompt window.

 

Mac Environment

Window와의 차별점

  • Unix-Based Foundations: macOS is built on a Unix-based architecture, which naturally supports a more command-line-oriented approach to software management.
  • Homebrew : is designed to simplify the installation and management of software on Unix-like systems. Homebrew automates the installation of applications and tools, handling dependencies, updates, and configurations, making it easier for users to manage their software installations. CMI기반의 앱스토어 같이 프로그램을 다운로드 중개해주는 프로그램.

homebrew cmd

  • brew search mariadb : mariadb로 시작하는 이름의 프로그램을 찾아준다. 만약 설치가 이미 되어있으면 체크표시가 뜸.
  • brew --help : brew의 명령어를 보여준다
  • brew install mariadb : mariadb를 인스톨한다.
  • brew services : brew를 통해서 서비스를 조작할 수 있다.
  • brew services info mariadb : mariadb의 상태를 확인한다.
  • brew services stop mariadb : mariadb를 중지시킨다.
  • brew services restart mariadb : mariadb를 재시작시킨다.
  • brew --help : brew의 명령어를 보여준다
  • brew update : 설치목록 최신화
  • brew upgrade : 프로그램 최신화
  • brew search 'program' : 프로그램명 키워드로 다운로드 받을 수 있는 프로그램을 검색한다. 이미 다운로드 받은 프로그램은 볼드체로 표시되어있음
  • brew install 'program'
  • brew infro 'program' : program에 대한 설치위치 등의 정보를 공유해준다.
    • 설치파일 : /opt/homebrew/Cellar/mariadb/11.4.2
    • 설정 : "/etc/my.cnf"
    • 데이터베이스 위치 : /opt/homebrew/opt/mariadb/bin/mysqld_safe --datadir\=/opt/homebrew/var/mysql
    • bin : directory typically holds binary executables
    • brew services info 'program' : 이미 설치된 프로그램의 실행정보에 대해서 공유해준다.
    • brew services restart/stop 'program' : 시작/종료

Mac CLI

  • clear : 터미널의 내용을 모두 삭제해서 정리한다
  • pwd : 현재 경로 확인
  • ls - Lists all files and directories in the current directory.
  • ls -al : 현재 디렉토리상 숨겨진 파일까지 포함하여 디테일하게 정보를 모두 보여줌
    • -a: This option stands for "all". It includes in the listings all files, including those that start with a dot (.). Files starting with a dot are hidden by default in Unix-like systems. This option ensures that no files are omitted from the list, including special directories . (current directory) and .. (parent directory).
    • -l: This stands for "long listing format". It displays detailed information about each file and directory. The output includes the following columns:
  • cd - Changes the current directory to another directory. Usage: cd /path/to/directory.
    • 주소관련 표기방법. 
    • ~: 홈 디렉토리
    • . : 현재디렉토리
    •  ./는 현재경로를 포함한 구분자
    • .. : 부모디렉토리
    • .filename : hidden파일
    •  
  • mkdir - Creates a new directory. Usage: mkdir newfolder.
  • rm - Removes files or directories. Usage: rm filename or rm -r directoryname to remove a directory and its contents. (Linux 옵션참조)
  • cp - Copies files or directories. Usage: cp source destination.
  • mv - Moves files or directories, or renames a file or directory. Usage: mv oldname newname.
  • chmod - Changes the permission of a file or directory. Usage: chmod 755 filename.
  • grep - Searches for patterns within files. Usage: grep 'pattern' filename.
  • echo - Displays a line of text/string that is passed as an argument. Usage: echo "Hello World".
  • top - Displays active processes. It’s the Unix equivalent of Task Manager in Windows.
  • sudo - Executes a command with administrative privileges, necessary for commands that require administrative permissions.
  • netstat - displays information about network connections, routing tables, and network interface statistics.
    • -n: Displays numeric IP addresses and port numbers instead of hostnames.
    • -p: Shows the process associated with each connection.
    • -s: Displays statistics for network protocols (TCP, UDP, IP).
  • base64 : Base64 encoding takes three bytes (3*8 bits) of binary data and splits them into (4*6bits) groups. Each of these 6-bit groups is then represented by a single ASCII character. 
    • ex : base64 image.png > image.txt

 

AWS을 활용한 리눅스 서버환경설정

 

리눅스

- 소스 비공개 문화에 반발하여 시작한 GNU 프로젝트의 차원에서 공개된 오픈소스(GPL) 운영체제. 누구나 GPL 소스에 접근하고 활용할 수 있으며, 많은 개발자가 참여하기때문에 수정이 빈번하고 호환성문제가 발생할 수 있음. (스스로 해결법 탐색할 수 있는 역량이 필요)

 

AWS 클라우드 컴퓨팅 설정 - 리눅스설치

1 AWS 프리티어 서비스, EC2(서버) 생성진행과정 (우분투 리눅스 OS 기반)

 

- 서버의 콘솔창에 들어가서 우측상단에 위치정보를 서울로 변경. 상단의 검색창에 EC2 검색함. EC2는 서버컴퓨터를 지칭하는 용어이며 EC2 인스턴스는 서버를 말하는 것임.

- 좌측 메뉴의 인스턴스창에 들어가서 우측의 launch an instance 클릭후 원하는 OS(ubuntu 20.04)를 선택하고 instance(컴퓨터)를 free eligible을 선택하고 , 네트워크 설정은 그대로, 메모리용량을 free eligible한 만큼 설정

- key pair는 본인의 이름을 설정해서 다운로드 받아 보관해둔다

- instance의 ip4는 임시 ip이므로, 고유의 ip주소를 할당받기 위해서 다시 콘솔창으로 돌아와 elastic ips에 접속, associate elastic ip address

 

2. 자기 PC에서 EC2(서버)접속

 

- 맥의 터미널에 접속하여 ('cd' 'pem이있는파일') ('chmod 400' 'pem파일') 맥 내에서 파일의 권한변경 (ssh -i pem파일 ubuntu
@15.164.40.88(givenipaddress) (yes) aws의 클라우드 컴퓨터에서 우분투라는 기본 사용자이름과 ip를 명시하여 대상을 실행함.


리눅스 쉘 사용법 정리

- 모든 것은 파일이라는 철학 아래에서 인터렉션이 파일을 읽고 쓰는 것처럼 이루어져있음 (마우스, 키보드 디바이스 관련 기술도 포함)

- 리눅스의 철학은 여러 기본단위의 프로그램들이 유기적으로 각자의 역할을 하면서, 이를 조합하여 전체 시스템이 동작하도록함.

(ls | grep의 경우에도, lsgrep이란 명령어가 아닌 ls와 grep을 유기적으로 조합하여 사용함)

- 리눅스에는 여러가지 shell이 있지만 ubuntu에서도 그렇고 bash shell이 범용으로 쓰이기에 bash 명령어 위주로 학습할것.

- 리눅스는 다중사용자를 전제로하며 사용자를 개인 그리고 그룹으로 구분하여 권한을 관리한다. root는 수퍼관리자이다.

- 리눅스는 커널동작과의 복잡하고 다양한 내용이 있어 필요에 따른 선별적으로 공부가 필요하다.

 

 

2.1 유용한 보조기능

 

  • Tab 키
    • 명령어 자동 완성: 터미널에서 명령어 입력 중 Tab 키를 누르면 자동 완성됩니다.
    • 명령어 제안: 명령어나 파일명의 일부를 입력하고 Tab 키를 두 번 누르면 가능한 명령어 목록을 표시합니다.
  •  위쪽 화살표: 이전에 입력했던 명령어들을 순환하며 다시 사용할 수 있습니다.

 

2.2 리눅스 기본명령어

 

  • man '명령어': 명령어의 메뉴얼 페이지로 이동해 모든 옵션을 조회합니다. ''로 메뉴얼 페이지에서 나올 수 있습니다.
  • clear: 이전에 입력한 명령어 기록을 삭제합니다.
  • exit: 시스템을 종료합니다.
  • head & tail: 파일의 첫 10줄(head)과 마지막 10줄(tail)을 출력합니다.
  • sleep: 지정된 시간 동안 아무 작업도 하지 않는 프로세스를 실행합니다.
  • *: 모든 파일이나 디렉토리와 일치합니다.
  • '테이블/컬럼명 as 별칭': 테이블이나 컬럼명을 지정한 별칭으로 표시합니다.
  • desc '테이블명': 테이블의 모든 컬럼 정보를 표시합니다.

 

 

2.3 권한관리

 

  • chmod [숫자] [파일명] : 파일이나 디렉토리의 권한을 변경합니다. 예: chmod 755 파일명
    • 숫자규칙 : 소유자+그룹+기타 순으로 자릿수가 매겨지며 r은 4 w는 2 x는 1이며 이것의 합이 각 주체의 자릿수에 간다
    • chmod -R [숫자] [파일명] : -R옵션은 directory의 모든 파일의 권한을 일괄적으로 바꾼다
  • whoami: 현재 로그인한 사용자 ID를 표시합니다.
    • root는 슈퍼관리자ID이고 모든 권한이 부여되기때문에 파일을 삭제시 복구가 어려우므로 root라는 사용자는 잘사용하지 않는다. 대신, 슈퍼관리자권한이 필요할때 sudo 명령어를 사용한다.
  • sudo: 관리자 권한으로 명령을 실행합니다. 예: sudo apt-get update
    • apt-get update는 시스템업데이트로 관리자권한이 필요한데 sudo로 실행시켜야만 실행가능
  • ssh -i [filepath]: Secure Shell, 보안 네트워크를 통해 다른 컴퓨터에 안전하게 원격 접속합니다.
    • -i [filepath] : The -i option specifies the path to the file that contains the private key used for authentication.
  • ifconfig: 네트워크 인터페이스와 IP 정보를 확인합니다.

 

 

2.3 폴더 및 파일 탐색관련

 

 

  • vi 'filename': vi 에디터로 파일을 열거나 새 파일을 생성합니다.
    • :wq는 에디터에서 나옴
  • mkdir 'name': 새 디렉토리를 생성합니다.
  • rm [options] [filepath] : remove, 파일이나 디렉토리를 삭제합니다. 리눅스는 휴지통이란 기능이 없기때문에 매우 조심스럽게 사용해야하며, 그러므로 root와 같은 슈퍼관리자로는 작업을 안함. 
    • -r옵션 : recursive, 하위디렉토리를 포함한 모든 파일 삭제 
    •  -f옵션 : force, 강제로 파일이나 디렉토리 삭제 
    • 예: rm -rf 디렉토리명: 현재 directory 내의 directory1 하위의 모든 것 삭
  • cd: change directory, 다른 디렉토리로 이동합니다.
    • 키워드 :  '/' : root, '..' 상위디렉토리, '.' 현재디렉토리 '~' 사용자의 홈폴더, '-' : 이전에 있었던 폴더
    • 참조방식 : 절대참조 /home/ubuntu/temp.txt, 상대참조 ./temp.txt
  • cat '파일명': concatenation, 파일의 내용을 출력합니다.
  • pwdprint working directory, 현재 디렉토리의 경로를 표시합니다.
  • ls: list, 디렉토리 내용을 나열합니다
    • -ls a : 숨김파일까지 조회
    • -ls al : 숨김파일의 정보까지 상세히 확인가능, '.'으로 시작하는 파일은 주로 숨김파일 및 폴더임
  •  ls의 조회결과
    • 파일 타입: 각 항목의 첫 글자는 파일의 타입을 나타냅니다.
      • d: 디렉토리
      • -: 일반 파일
      • l: 링크 파일(바로가기)
    • 권한: 각 파일의 접근 권한을 나타내며, 세 부분으로 나뉩니다.
      • 소유자 권한 (rwx): 읽기(r), 쓰기(w), 실행(x), r: read, w:write, x:execute
      • 그룹 권한 (rwx): 그룹 사용자의 읽기, 쓰기, 실행 권한
      • 기타 사용자 권한 (rwx): 그룹이나 소유자에 속하지 않는 사용자의 권한
    • 링크 개수: 해당 파일이나 디렉토리가 몇 개의 링크를 가지고 있는지 나타냅니다.
    • 사용자명과 그룹명: 파일이나 디렉토리의 소유자와 그룹을 나타냅니다.
    • 파일 크기: 파일의 크기를 바이트 단위로 표시합니다.
    • 생성일자: 파일이나 디렉토리의 최종 수정 날짜와 시간을 나타냅니다.
    • 파일명: 파일이나 디렉토리의 이름을 표시합니다.

 

 

  • grep [-option] patterntosearch [direfctory]  : global regular expression print, 파일이나 입력 스트림에서 특정 패턴과 일치하는 라인을 찾아 출력합니다. 다양한 옵션을 사용할 수 있습니다:
    • -i (ignore case): 대소문자를 구분하지 않고 검색합니다.
    • -v (invert match): 지정한 패턴을 포함하지 않는 라인을 출력합니다.
    • -n (line number): 검색 결과에 라인 번호를 추가합니다.
    • -l (list): 패턴과 일치하는 파일명만 출력합니다.
    • -c (count): 패턴과 일치하는 라인의 수만 출력합니다.
    • -r (recursive): 하위 디렉토리까지 검색합니다.
  • find [path] [options] [expression] : 지정한 경로에서 주어진 조건에 맞는 파일이나 디렉토리를 찾아내는 데 사용됩니다. 다양한 옵션으로 검색 조건을 세부적으로 설정할 수 있습니다
    • -name: 특정 이름을 가진 파일을 찾습니다.
    • -type: 파일 타입을 기준으로 검색합니다 (예: f는 일반 파일, d는 디렉토리).

 

2.4 리다이렉션과 파이프

  • 하나의 프로세스는 반드시 stdin stdout stderr 3가지 스트림(경로)를 갖고 있음. 이는 프로그램으로의 input과 output, error 메세지의 이동경로를 말하며 stdout과 stderr은 기본적으로 콘솔출력창으로 향함
  • >,< : 명령어 표준 출력을 콘솔창이 아닌 파일에 작성할때 사용함(>), 반대로 파일의 내용물을 프로그램의 입력으로 사용(<). 파일에 작성시 파일이 존재하지않으면 파일을 생성함
  • head < file : 파일의 최초 10줄만 출력함 (파일 읽기 명령어는 file 에서 명령어 변수로 stream이 이동되나 일반적으로 생략됨)
  • >>,<< : 기존 입력내용에 내용을 추가하고싶으면 본 기호를 사용함.
  • 파이프(|) : 파이프 앞의 프로세스의 출력이 그 다음 프로세스의 입력으로 사용. (ls | grep ab ; ab를 포함한 스트림만 출력, 폴더 내의 파일을 찾을 때 유용함 )

 

2.5 프로세스 관리

- 포그라운드 프로세스 : 쉘에서  해당 명령을 실행한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하게하는 프로세스. 특별한 커맨드를 넣지 않으면 기본으로 포그라운드 프로세스로 실행된다. 

- ctrl+c : 포그라운드 프로세스 취소

- 백그라운드 프로세스 : 사용자 입력과 관계없이 실행되는 프로세스로 맨뒤에 &를 붙여줌. 특히, 시간이 오래걸리는 작업에 많이 사용됨. [작업번호] processID로 표기된다.

- jobs : shell 에서 실행되고 있는 명령어 중 백그라운드 프로세스의 작업에 대한 정보를 확인

- fg %number : job number을 백그라운드 프로세스를 포그라운드로 변경함

 

  • ps [option] : 현재의 자기유저가 실행한 프로세스 출력
    • -a (all) : 다른 소유자가 실행시킨 프로세스도 포함 
    • -u (useroriented): 누가 프로세스의 소유자인지 정보도
    • -x (expand) :  터미널로 실행되는 프로세스 외의 모든 프로세스를 보여줌, 데몬프로세스(24시간 계속켜져있는) 등등 
    • -l (long): 프로세스 관련 상세정보도  
    • -e (environment) : 프로세스 환경변수정보도 
    • -f (forest tree): 프로세스관 관계도 출력한다)
  • ps [aux] : 모든 프로세스와 정보 출력 (stat : running,stop,idle(커널용 쓰레드) time : cpu 사용시간 ;command : 프로세스실행명령, []는 커널이 사용하는 것 )
  • -- 출력정보의 내용은 man ps 한후 원하는 정보는 /string 그리고 n을 누르면 문자열찾기로 정보확인가능
  • - kill [-9(option : 무조건)] [%작업번호 or PID] : 프로세스 종료시키는 명령어. 

 

하드링크&소프트링크

- cp [-rf] [filecopied] [newfile/path]: 파일을 복사함

- ln targetFile fileName (하드링크) : 파일원본과 동일한 자격의 개체가 생겨 원본파일이 삭제되어도 원본 역할을 함. file 하드링크파일 역시 엔트리가 inode를 가리켜서 inode를 가리키는 파일엔트리가 2개가 되는 격.

- ln [-s] targetFile fileName (소프트링크) :   윈도우의 바로가기와 동일한 개념으로 원본파일이 삭제되면 원본파일을 찾을 수 없음. 소프트링크파일 엔트리는 별도의 inode를 만들고 해당 Inode는 원본 파일엔트리를 가리켜서 바로가기 파일과 동일한 역할을 함.

 

우분투 패키지관리

-리눅스는 오픈소스로 각 개발자가 달라 함부러 업그레이드시에 호환성 문제가 발생할 수 있기에 검증된 부분만 업데이트 해야한다. 하여, 공식적으로 배포된 패키지만 사용하며, 혹시나 문제발생시에 구글링이 필수적임

- 여러가지 리눅스 배포판(패키징) 중 하나이며 데비안 계열의 deb라는 패키징 관리시스템을 사용함. 운영체제의 여러 프로그램의 업데이트 여부와 소스 등을 관리하는 정보를 인덱스 정보라고함.

- sudo apt-get update : 인덱스 정보를 최신으로 업데이트함.- sudo apt-get upgrade : 인덱스 정보를 기반으로 운영체제 프로그램을 업데이트함.  (현업에서 안한다)

- sudo apt-get install package명 : 패키지를 설치한다

- sudo apt-get remove package명 : 패키지를 삭제한다.  sudo apt-get remove --purge package명 : 설정파일까지  같이 삭제한다.

 

 

vi 에디터

- vi filename : 해당 파일을 객체로 에디터가 실행되며, 해당 파일이 존재하지 않으면 새로 생성하여 에디터 실행.( :wq는 파일을 저장후에 나옴, :q는 저장하지 않고 나옴)

- esc : to exit the mode