우리가 앞으로 여러 파일을 관찰해 볼 텐데 내용이 너무 많은 경우가 있다. 이 때 맨 앞 몇줄만 보거나 맨 뒤 몇 줄만 확인하기 위해 다음 2가지 명령어를 사용할 수 있다. head는 파일의 앞부분을 출력하며 tail은 파일의 뒷부분을 출력한다.
head
* head 명령어
head (옵션) (파일명)
먼저 아래와 같의 몇몇 파일들은 많은 양의 내용이 있고 그만큼 출력량이 많아지게 된다. 이 때 필요한 부분만 지정해서 찾아보도록하자. 물론 이 명령어는 내용의 중간을 출력하는 것이 아닌 끝부분에서 지정한 번째까지 출력하는 명령이다.
숫자는 위와 같이 2가지 방식으로 적용 가능하다.
-c 명령어를 사용해 출력할 용량(바이트)을 지정할 수 있다.
tail
tail 명령어 사용법은 head와 동일하나 추가로 -f 와 -F옵션이 있다. -f는 해당 파일의 끝부분을 계속 출력하고 변화가 있으면 그 내용을 출력한다. -F는 마찬가지로 끝부분을 계속 출력하고 파일이 삭제되거나 변경되면 알려준다. 이번에는 내용이 없는 a.txt를 가지고 실험해볼 것이다.
이렇게 변화를 주면 -f 명령어를 이용해 끝부분을 출력중이던 처음 페이지에 변화가 생긴다.
드디어 파일 생성 마지막 명령어인 vi 옵션이다. 리눅스에서 기본적으로 제공되는 텍스트 편집기 중 하나로 명령 모드와 편집 모드로 나뉘며 커맨드 키도 있고, 처음 보면 복잡해 보일 수 있다. 하지만 어찌보면 제일 중요하고, 많이 사용하고, 힘이 강력하다. 하지만 최대한 쉽게 설명해보겠다.
* 기본 형식
vi (옵션) (경로/파일명)
다음 명령어를입력해서 들어가보면 다음과 같이 내용이 나올것이다.
원래는 이렇게 내용이 많고 복잡하지만 쉽게 하기 위해 위쪽 이미지로 진행하겠다.
처음 들어가면 이 사진과 같이 명령모드로 진입이 되어 있다. 이 때 편집을 하기위해 커맨드를 입력해주어야 하는데 그것에 대해서 알아보자.
이동
이동은 보통 방향키로 진행하는 경우가 많다. 하지만 모든 리눅스가 방향키를 지원하는 것은 아니다 때문에 다음 키를 입력해 이동한다.
h : 왼쪽 j : 아래 k : 위 l : 오른쪽
입력모드
이전에 리눅스는 대소문자를 철저하게 구분한다고 한 적이 있다. 그 예시가 될 수도 있을 것 같다.
a, A : 커서가 한 칸 다음으로 이동한다. / 커서가 맨 뒤로 이동한다.
i, I : 커서가 한 칸 앞으로 이동한다. / 커서가 맨 앞으로 이동한다.
o, O : 현재 커서 아래에 새로운 줄을 생성한 후 이동한다. / 현재 커서 위로 새로운 줄을 생성한 후 이동한다.
s, S : 현재 커서에 있는 한 글자를 지운다. / 현재 커서가 있는 한 줄을 지운다.
명령 모드
1. set number(se nu) : 행 앞에 숫자를 표시해준다.
2. g, G : 명령모드에서 숫자와 gg를 입력하면 해당 줄로 이동한다. (100gg : 100번째 줄로 이동) / 맨 뒤로 이동한다.
3. x : 현재 커서에 있는 글자를 삭제한다.
4. V : 현재 커서를 기준으로 방향키를 위, 아래로 움직이면 움직이는 만큼의 행이 선택된다.
5. yy : 현재 커서가 있는 한 줄, 혹은 V를 이용해 지정한 부분을 복사한다.
6. p, P : 커서 다음 줄에 복사한 것을 붙여넣는다. / 커서 위줄에 복사한 것을 붙여넣는다.
7. u : 명령어 실행한 것을 한 단계 이전으로 돌려 놓는다.
8. /(찾고자 하는 단어) : 검색
9. n, N : 검색 시 다음 단어로 이동 / 이전 단어로 이동
앞에 ' : '를 필수로 붙여야한다.
10. :w : 저장
11. :q : 나가기
12. :wq : 저장 및 종료
13. :q! : 강제 종료
14. :.s/변경하고싶은 내용/변경할 내용 14.1 :s/변경하고 싶은 내용/변경할 내용/g : 줄에 있는 모든 공통사항 변경 17. :1co6 : 1번째 줄을 6번째 줄에 복사 18. :d : 지우기
이외에도 몇가지가 더 있지만 아래를 참고하면 좋을 것 같다.
* 맨 뒷줄을 뜻하는 기호 : $
vi 명령어 사용법 (영어)
출처 : 리눅스 vi --help
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jun 13 2022 00:00:00)
Usage: vim [arguments] [file ..] edit specified file(s) or: vim [arguments] - read text from stdin or: vim [arguments] -t tag edit file where tag is defined
Arguments: -- Only file names after this -v Vi mode (like "vi") -e Ex mode (like "ex") -E Improved Ex mode -s Silent (batch) mode (only for "ex") -y Easy mode (like "evim", modeless) -R Readonly mode (like "view") -Z Restricted mode (like "rvim") -m Modifications (writing files) not allowed -M Modifications in text not allowed -b Binary mode -C Compatible with Vi: 'compatible' -N Not fully Vi compatible: 'nocompatible' -V[N][fname] Be verbose [level N] [log messages to fname] -n No swap file, use memory only -r List swap files and exit -r (with file name) Recover crashed session -L Same as -r -T <terminal> Set terminal type to <terminal> --not-a-term Skip warning for input/output not being a terminal --ttyfail Exit if input or output is not a terminal -u <vimrc> Use <vimrc> instead of any .vimrc --noplugin Don't load plugin scripts -p[N] Open N tab pages (default: one for each file) -o[N] Open N windows (default: one for each file) -O[N] Like -o but split vertically + Start at end of file +<lnum> Start at line <lnum> --cmd <command> Execute <command> before loading any vimrc file -c <command> Execute <command> after loading the first file -S <session> Source file <session> after loading the first file -s <scriptin> Read Normal mode commands from file <scriptin> -w <scriptout> Append all typed commands to file <scriptout> -W <scriptout> Write all typed commands to file <scriptout> --clean 'nocompatible', Vim defaults, no plugins, no viminfo -h or --help Print Help (this message) and exit --version Print version information and exit
이미지 파일 없이 요약해서 정리하니 생각보다 내용이 별로 없는 것 같다. 하지만 엄청 중요하니 리눅스를 하게 된다면 얼른 친해져야 할 필요가 있다.
하드 링크는 원본 파일과 동일한 inode를 가지며, 원본 파일이 삭제되어도 링크 파일을 여전히 사용할 수 있다. 이는 위치 정보를 가지고 있는 이름을 여러 개 생성하는 개념으로, 한 파일을 지워도 하드에서 해당 위치를 찾아갈 수 있다. 하드 링크를 만들기 위해서는 ln [원본파일] [링크파일] 명령어를 사용한다.
링크로 연결되어 있기 때문에 하나의 파일을 수정하면 다른 파일도 수정된다.
하지만 둘 중 어느 파일을 지운다고 해서 지장이 가거나 하지는 않는다.
심볼릭 링크
심볼릭 링크는 원본 파일의 경로를 가리키는 파일이다. 따라서 심볼릭 링크를 수정하면 원본 파일도 수정된다. 심볼릭 링크를 만들기 위해서는 ln -s [원본파일] [링크파일] 명령어를 사용한다.
아까와는 달리 심볼릭 링크된 파일은 파란색 텍스트로 나오고 어느 파일과 링크 되었는지 나오게 된다.
하드 링크와 마찬가지로 둘 중 어느 것이라도 내용을 수정하면 나머지도 마찬가지로 수정이 된다.
하지만 원본 파일이 없어지면 링크된 파일은 링크가 끊어지고 빨간색으로 표시된다.
명령어를 이용해 링크된 파일과 같은 이름의 파일을 만들면 다시 연결은 되지만 내용은 전혀다른 파일이 된다. 이 점을 유의 해야 한다.
기타 옵션들
출처 : 리눅스 ln --help
--backup[=CONTROL] make a backup of each existing destination file -b like --backup but does not accept an argument -d, -F, --directory allow the superuser to attempt to hard link directories (note: will probably fail due to system restrictions, even for the superuser) -f, --force remove existing destination files -i, --interactive prompt whether to remove destinations -L, --logical dereference TARGETs that are symbolic links -n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory -P, --physical make hard links directly to symbolic links -r, --relative create symbolic links relative to link location -s, --symbolic make symbolic links instead of hard links -S, --suffix=SUFFIX override the usual backup suffix -t, --target-directory=DIRECTORY specify the DIRECTORY in which to create the links -T, --no-target-directory treat LINK_NAME as a normal file always -v, --verbose print name of each linked file --help display this help and exit --version output version information and exit
이렇게 경로를 지정해서 다른 곳으로 옮길 수 있다. 만약 작업하는 디렉토리와 복사하고 싶은 파일의 위치가 다르다면 복사하고 싶은 파일 앞에 경로를 입력해주면 복사가 가능하다. 또한 눈치가 빠른사람들은 이름을 변경해서 복사가 가능하다는 것을 알아챘을 것이다.
cp 속성
cp -a : 파일 및 디렉토리를 원래 상태를 유지하면서 복사한다. 즉, 소스 파일의 모든 속성(파일 권한, 소유자, 타임스탬프 등)을 대상 파일에 복사한다. 재귀적으로 디렉토리를 복사하며 하드 링크를 사용하여 파일을 복사한다. 원본 파일에 대한 변경 사항을 복사본에 반영하지 않으며, 대상 파일이 이미 존재하는 경우 덮어쓴다.
cp -r : 디렉토리와 그 내용을 재귀적으로 복사한다. 디렉토리의 권한, 소유자, 타임스탬프 및 모드 등은 그대로 복사된다. 하지만 하드 링크 대신 복사를 사용하여 파일을 복사한다. 원본 파일에 대한 변경 사항을 복사본에 반영하지 않는다. 대상 디렉토리가 이미 존재하는 경우 덮어쓴다.
cp 옵션
-f --force: 이름이 중복된다면 대상을 덮어쓴다.
-n --no-clobber: f와 반대로 덮어쓰지 않는다.
-u --update: 대상 파일이 이미 존재하고, 원본 파일보다 수정된 시간이 더 이후일 경우에만 복사한다.
* 공통 옵션 --help
내가 사용하려는 명령어의 옵션이 궁금하다면 명령어 뒤에 --help를 적어보면 사용할 수 있는 항목이 여럿 나온다. 거기서 찾아 적용하면 될 것이다. 영어가 어렵게 돼있는것도 아니라서 찾는데 크게 어려움은 없을 것이다.
이번 포스팅부터 옵션을 중요한 경우가 아니라면 적용 사진을 넘어가도록 하겠다. 옵션이 너무 많기도 하거니와 다 사용하지도 않기 때문이다. 대신 옵션의 정보만 나열해 적어두도록 하겠다.
* 출처 : 리눅스 cp --help
-a, --archive same as -dR --preserve=all --attributes-only don't copy the file data, just the attributes --backup[=CONTROL] make a backup of each existing destination file -b like --backup but does not accept an argument --copy-contents copy contents of special files when recursive -d same as --no-dereference --preserve=links -f, --force if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used) -i, --interactive prompt before overwrite (overrides a previous -n option) -H follow command-line symbolic links in SOURCE -l, --link hard link files instead of copying -L, --dereference always follow symbolic links in SOURCE -n, --no-clobber do not overwrite an existing file (overrides a previous -i option) -P, --no-dereference never follow symbolic links in SOURCE -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all -c deprecated, same as --preserve=context --no-preserve=ATTR_LIST don't preserve the specified attributes --parents use full source file name under DIRECTORY -R, -r, --recursive copy directories recursively --reflink[=WHEN] control clone/CoW copies. See below --remove-destination remove each existing destination file before attempting to open it (contrast with --force) --sparse=WHEN control creation of sparse files. See below --strip-trailing-slashes remove any trailing slashes from each SOURCE argument -s, --symbolic-link make symbolic links instead of copying -S, --suffix=SUFFIX override the usual backup suffix -t, --target-directory=DIRECTORY copy all SOURCE arguments into DIRECTORY -T, --no-target-directory treat DEST as a normal file -u, --update copy only when the SOURCE file is newer than the destination file or when the destination file is missing -v, --verbose explain what is being done -x, --one-file-system stay on this file system -Z set SELinux security context of destination file to default type