"Shell"이란 무엇인가?
Shell - 키보드로부터 명령을 입력받아 운영시스템에 전달하는 프로그램. 명령어 해석기. 완전한 프로그램언어임(변수정의, 조건문, 반복문, 산술연산등 모두 가능)
Shell program for Linux : bash, ksh, tcsh, zsh.
Terminal?
- Terminal emulator. shell과 상호작용 할 수 있도록 창구를 열어주는 프로그램.
example of terminal emulator : gnome-terminal, konsole, xterm, rxvt, kvt, nxterm, eterm, etc.
emulator
- 〔컴퓨터〕 어떤 기종용(機種用)의 프로그램을 특수한 기법이나 기구를 써서 딴 기종에게 해독·실행시키는 장치 또는 프로그램.
shell session에 접근 할 수 있게 도와준다.
화살표 up, down : 명령어 history를 볼 수 있음.
화살표 좌, 우 : 명령어 커맨드 라인 내에서 입력 커서 옮기기.
관리자 권한으로 접속하는 경우.
# : shell prompt의 입력라인 마지막 문자가 $가 아닌 #인 경우 -> superuser로 세션에 접속되어 있다는 의미. (관리자 권한을 갖고 있어, 시스템상에 존재하는 모든 파일의 삭제 및 덮어쓰기를 할 수 있는 상태라 꼭 필요한 경우가 아니라면 superuser로 operate하지 말 것)
마우스 사용해 텍스트 복사하기
다른 창에서 필요한 단어나 글자 마우스를 사용하여 터미널로 옮기는 방법.
마우스 왼쪽 클릭 후 필요한 단어나 문장을 드래그하여 선택.
-> 필요한 만큼 하이라이트 된 것 확인 후 마우스 왼쪽 클릭 해제 ->
터미널 창에서 마우스 가운데 버튼 (트랙패드 or 터치패드의 경우 왼쪽 오른쪽 버튼 모두 클릭 ).
*** 텍스트를 긁으면 자동으로 복사되는 설정이 있는 경우는 가능, 아닌 경우 불가. (shell 옵션 설정으로 변경 가능)
*** 맥 터미널 사용 시.
맥에서는 드래그해 하이라이트 후 -> 클릭 릴리즈 -> 다시 왼쪽 클릭하여 터미널로 끌고 오면 하이라이트 된 부분이 붙여 넣기 됨.
Focus
- 리눅스 시스템과 윈도우 매니저(Gnome, KDE 등) 설치 시 레거시 운영시스템과 비슷하게 구성되어 "click to focus"로 설정되어 있다.
윈도우가 클릭 시에 활성화됨. 설정에서 "focus follows mouse"로 변경 시, focus는 마우스를 따라가고, 창을 앞으로 가져오고 싶을 때는 창을 클릭하면 됨.
pwd : print working directory
cd : change directory
ls : list files and directories
File System Organization
-> 리눅스의 파일 시스템 구조 역시 계층형 구조로 구성됨.
루트가 하위 디렉토리들과 파일을 포함하고, 각자 하위 디렉토리들 역시 각자의 파일들과 하위 디렉토리들을 포함해 밑으로 내려가는 형식.
윈도우와 동일한 방식. But, 윈도우와 달리 C, D 드라이브로 드라이브를 나누어 한개 이상의 트리를 가질 수 있는 윈도우와 달리 리눅스는 하나의 트리만 가질 수 있다.
PWD
: print working directory. 현재 작업 중인 디렉터리(폴더) 위치 출력.
-> 처음 리눅스 시스템 접속 시 working directory는 홈 디렉터리로 설정되어 있음. 일반적으로 'home/user_name' 형식을 띰.
CD
: Change Working Directory.
원하는 디렉토리로 이동하기 위해 사용하는 명령어.
'cd pathname' 형식으로 사용하며, absolute pathnames(절대 경로) 또는 relative pathnames(상대 경로)를 사용하여 이동.
* 절대 경로 : 루트 디렉토리로 부터 필요 지점까지의 모든 경로 작성 필요.
* 상대 경로 : 현재 디렉토리로 부터 필요 지점이 어디에 존재하는지 작성. (".", ".."을 사용하여 현재 디렉토리 또는 상위 디렉토리 표기)
-> . : 현재 디렉토리
-> .. : 상위 디렉토리
상대 경로로 입력 시 './' 생략 가능. (단, 사용 불가능한 예외 경우도 있음)
단축키
'cd' : 홈디렉토리로 이동.
'cd ~user_name' : 표기된 특정 유저의 홈 디렉토리로 이동.
'cd -' : 직전 디렉토리로 이동.
파일 이름에 대해.
1. 마침표 '.'로 시작하는 파일은 'ls' (list files and directories) 명령어로 출력 시 숨김 처리됨.
'ls -a' 명령으로는 출력 가능.
2. Linux(Unix도 마찬가지)의 파일명은 대소문자 구분됨.
3. 윈도우와 달리 리눅스는 파일 확장자 개념이 없음. (단, 응용 프로그램들은 확장자 구분)
4. 리눅스는 파일명에 띄어쓰기, 쉼표 등의 사용이 가능은 하지만, 마침표, 대시(-), 언더스코어(_)만 사용할 것 권고. 특히 파일명에 띄어쓰기 절대 사용하지 말 것! (대신 언더바 사용이 권고됨)
- ls : list files and directory.
- less : view text files.
- file : classify a file's contents.
: 현재 디렉토리 파일 리스트 출력.
ls /bin : /bin 디렉토리 내 파일 리스트 출력. (또는 특정 디렉토리 설정 가능)
ls -l : 현 디렉토리 내 파일을 long 형식으로 출력
long format?
ls -l file1
-rw-rw-r--. 1 lilo lilo 0 Feb 26 07:08 file1
위와 같이 출력되는 형식.
ls -l /etc /bin : /etc 디렉토리와, /bin 디렉토리의 파일 리스트를 long 형식으로 출력. (/bin 디렉토리 리스트 먼저 출력되고, /etc 디렉토리 리스트가 출력된다)
ls -la .. : 부모 디렉토리에 존재하는 모든 파일을 long forat으로 출력. (마침표로 시작하는 숨김 파일들도 포함되어 출력된다.)
명령어 기본 형식
command -options arguments
Long Format?
ls 커맨드에 -l 옵션을 사용하여 출력하면 long 형식으로 출력된다.
여기서 나오는 결괏값이 위와 같은 형식으로 출력됨.
앞의 '-rw-------'는 파일에 대한 접근 권한을 얘기한다.
첫 번째 자리
- : 파일
d : 디렉토리(폴더)
두 번째 3자리 : 파일 owner의 권한
세 번째 3자리 : 파일 그룹의 권한 (그룹 : 파일 owner 이외에 파일에 대한 접근 권한을 가진 그룹의 이름)
네 번째 3자리 : 이외의 모든 사람들의 권한
: less는 텍스트로 된 파일을 볼 수 있게 해주는 프로그램.
less text_file
위 형식으로 명령어 사용 시 텍스트 편집기 프로그램 실행됨.
less 프로그램에서 사용할 수 있는 명령어는 다음과 같다.
file name_of_file
파일의 형식을 알기 위해 사용하는 명령어.
cd : change directory
ls : list the contents of the directory
file : check file types
less : text file viewer
/ : root directory
/boot : linux 커넬, boot loader 파일 위치. (vmlinux 커넬)
/etc : system 구성 파일. 텍스트로 구성. (/etc/paasswd : user accounts info. /etc/fstab : 시스템 부팅 시 마운트 되는 장비 리스트가 들어있는 파일. /etc/hosts : 시스템에 저장된 네트워크의 호스트 이름과, ip주소. /etc/init.d : 부팅시 시스템 서비스를 시작시키는 스크립트를 담은 디렉토리
/bin, /usr/bin : /bin 은 시스템 운영에 필요한 필수적인 프로그램들이 담긴 디렉토리. /usr/bin 은 시스템 사용자가 사용하는 애플리케이션이 담김. (이 두 디렉토리가 대부분의 프로그램을 포함하고 있다.)
/sbin, /usr/sbin : 시스템 관리 프로그램을 포함하고 있는 디렉토리.
/usr : 유저 애플리케이션을 지원하는 파일들 포함. (/usr/share/x11 : X 윈도우 시스템 지원 파일. /usr/share/dict : 스펠링 check dictionary. /usr/share/doc : 여러 포맷의 doc 파일. /usr/share/man : 매뉴얼 페이지 포함.)
/usr/local : 로컬 기기에 응용프로그램이나 다른 파일을 설치하기 위해 사용되는 디렉토리. (주로 /usr/local/bin에 설치됨)
/var : 시스템 운영시 변경되는 파일을 포함하는 디렉토리. /var/log : 로그 파일 저장됨. /var/spool : queue에 적재되어야 하는 파일을 hold해 놓는 디렉토리.
/lib : 시스템에서 공유하여 같이 사용하는 라이브러리가 들어가는 곳.
/home : 사용자 개별 작업공간. 일반적으로 유저는 이곳에서만 파일 쓰기가 가능하다.
/root : superuser의 홈 디렉토리.
/tmp : 프로그램의 임시 파일들이 저장되는 디렉토리
/dev : system상에 존재하는 기기들을 포함하는 디렉토리. 리눅스에서는 이 기기들이 파일과 같이 취급 된다.
/proc : 실제로는 존재하지 않는 디렉토리. 가상 디렉토리로, 동작중인 프로세스의 정보를 제공.
/media : mounting 을 위해 사용하는 디렉토리. (mounting : 트리에 기기를 attach하는 절차. 기기를 사용하기 위해 먼저 mount 해야함.)
Symbolic Links?
: 다른 파일을 가르키고 있는 파일. symbolic links를 사용하면 하나의 파일이 여러 이름을 가질 수 있다. 같은 프로그램의 여러 버전이 설치되어 있는 경우 특정 버전의 이름을 고정시키는 대신, symbolic link를 대신 사용하고, 이 symbolic link가 필요한 버전의 파일을 가르키도록 지정할 수 있다. symbolic link 생성을 위해 ln 명령어 사용!
cp : copy files and directories
mv : move or rename files and directories
rm : remove files and directories
mkdir - create directories
- 단순히 파일 옮기기는 GUI가 CLI 보다 편하지만, 디렉토리내 모든 HTML파일들에 대해 옮길 디렉토리내에 없거나 새로운 버전으로 다시 저장된 것들에 대해서만 옮기는 경우와 같은 특정 옵션이 주어져야 하는 경우 커맨드 라인을 통해 이동하는 것이 더 쉽다.
[me@linuxbox me]$ cp -u *.html destination
와일드 카드 문자
* : 모든 단어
? : 단일 문자
[characters] : 해당 characters 내의 문자와 일치한것을 찾는다. POSIX character class 표현을 사용할 수도 있음.
POSIX character class?
[:alnum:] | Alphanumeric characters |
[:alpha:] | Alphabetic characters |
[:digit:] | Numerals |
[:upper:] | Uppercase alphabetic characters |
[:lower:] | Lowercase alphabetic characters |
예를들어 [:alnum:] 은, 아스키 표현의 [a-zA-Z0-9]와 같고, [:alpha:]는 아스키 표현의 [a-zA-Z]와 같다.
[!characters] : characters에 속하지 않는 것들을 찾는다. (! == not)
examples
File | Names |
* | All filenames |
g* | All filenames that begin with the character "g" |
b*.txt | All filenames that begin with the character "b" and end with the characters ".txt" |
Data??? | Any filename that begins with the characters "Data" followed by exactly 3 more characters |
[abc]* | Any filename that begins with "a" or "b" or "c" followed by any other characters |
[[:upper:]]* | Any filename that begins with an uppercase letter. This is an example of a character class. |
BACKUP.[[:digit:]][[:digit:]] | Another example of character classes. This pattern matches any filename that begins with the characters "BACKUP." followed by exactly two numerals. |
*[![:lower:]] | Any filename that does not end with a lowercase letter. |
: copies files and directories. 단일 파일 또는 여러 파일을 복사할 수 있다.
- 하나의 파일 복사시
cp file1 file2
- 여러 파일 또는 디렉토리를 다른 디렉토리로 복사
cp file... directory
*** '...' 는 하나 이상의 아이템을 의미.
Command | Results |
cp file1 file2 | file1을 file2로 복사. file2가 없을 경우 자동 생성. file2가 존재 할경우 file1의 내용으로 덮어씌워진다. |
cp -i file1 file2 | 위의 cp와 동일하나, file2가 이미 존재하는 하는 경우 file1으로 overwriting되기 전에 사용자에게 알려줌. |
cp file1 dir1 | dir1 디렉토리에 file1을 복사, 이때 file1이라는 이름 그대로 복사됨. |
cp -R dir1 dir2 | dir1 디렉토리의 내용물들을 복사하여 dir2로 복사한다. dir2가 없을 경우 생성함. dir2가 존재할경우 dir2내에 dir1 디렉토리를 생성 한다. |
파일, 디렉토리를 옮기거나 이름 변경할때 사용.
이름 변경시
mv filename1 filename2
디렉토리 이동시
mv file... directory
Command | Results |
mv file1 file2 | If file2 does not exist, then file1 is renamed file2. If file2 exists, its contents are silently replaced with the contents of file1. |
mv -i file1 file2 | Like above however, since the "-i" (interactive) option is specified, if file2 exists, the user is prompted before it is overwritten with the contents of file1. |
mv file1 file2 dir1 | The files file1 and file2 are moved to directory dir1. If dir1 does not exist, mv will exit with an error. |
mv dir1 dir2 | If dir2 does not exist, then dir1 is renamed dir2. If dir2 exists, the directory dir1 is moved within directory dir2. |
파일 또는 디렉토리 삭제
Command |
Results |
rm file1 file2 | Delete file1 and file2. |
rm -i file1 file2 | Like above however, since the "-i" (interactive) option is specified, the user is prompted before each file is deleted. |
rm -r dir1 dir2 | Directories dir1 and dir2 are deleted along with all of their contents. |
* 리눅스에는 undelete 명령이 없으므로 삭제시 주의해야함. 특히 와일드 카드를 이용해 rm 삭제 명령어를 사용할 경우에는 꼭 ls 커맨드를 사용해 미리 확인해 본 후에 실제 rm 명령어를 사용할 것!
디렉토리 생성.
mkdir directory...
Command | Results |
cp *.txt text_files | Copy all files in the current working directory with names ending with the characters ".txt" to an existing directory named text_files. |
mv dir1 ../*.bak dir2 | Move the subdirectory dir1 and all the files ending in ".bak" in the current working directory's parent directory to an existing directory named dir2. |
rm *~ | Delete all files in the current working directory that end with the character "~". Some applications create backup files using this naming scheme. Using this command will clean them out of a directory. |
type : 명령어 타입에 대한 정보 표시
which :명령어 경로 표시
help : 쉘 기본 제공 명령어에 대한 정보 표시
man : 매뉴얼 페이지
Commands? 명령어는 밑의 네개의 정의 중 하나에 속함.
- 실행 가능한 프로그램
- 쉘 자체에 내장된 명령어
- 쉘 함수
- 기본 명령어를 토대로 사용자가 정의한 명령어.
: 쉘 내장 함수로 커맨드의 타입을 표시해준다.
: 시스템 내에 설치된 프로그램의 버전이 하나 이상인 경우, 그중 어디에 있는 것을 실행할지 결정할때 사용한다. alias, builtins가 아닌 실제 동작 가능한 프로그램만 표시함.
각 명령어에 대한 documentation 확인가능.
쉘 내장 함수에 대해서 기본 제공되는 help 기능. -m 옵션으로 출력 형식 변경 가능.
명령어에 지원되는 syntax나 옵션에 대해 표기. 이 명령어를 지원하지 않는 프로그램도 많음.
맥 터미널에서는 help, --help 대신 whatis "command", apropos "command", man "command" 사용해 명령어 사용법 확인 가능.
manual 또는 man page라고 불리는 도큐먼트를 제공하는 명령어.
man program
* 위의 커맨드라인의 program에 확인하고자 하는 명령어를 입력하면됨.
개요, 설명 및 사용 가능한 옵션들을 알려줌.
대부분의 리눅스 시스템에서는 man 이 less를 사용하여 매뉴얼 페이지를 표시해준다. 즉, 매뉴얼 페이지에서 less 커맨드 사용가능.
/usr/share/doc 디렉토리에 대부분의 응용 프로그램 패키지 documentation file들이 들어있음.
less 커맨드로 확인 가능. HTML포맷인 경우 웹브라우저로 확인. ".gz" 확장자인경우 gzip 압축 프로그램을 사용해 압축한 파일로, 이를 보기 위해서는 less가 아닌 zless 명령어를 사용해야 한다.
웹 기초 MDN - Getting started with the web (0) | 2022.12.09 |
---|---|
Linux Command 공부 - linuxcommand.org (2) (0) | 2022.12.06 |
SourceTree - Organization Repository 안나올때 문제 해결 방법 (0) | 2022.11.04 |
Git은 알겠는데 Git-Flow가 뭐지? (0) | 2022.09.23 |
Serverless 서버리스 서비스란? (0) | 2022.09.23 |