리눅스 명령어 touch, cat

김규연·2023년 7월 13일
1

linux

목록 보기
5/11
post-custom-banner

⚙️ 리눅스 명령 구조

형식 -> 명령 [옵션][인자]

  • 명령 : 사용자가 컴퓨터 운영체제나 응용프로그램에게 어떤 서비스를 수행하도록 요구하는 것
  • 옵션 : 옵션을 사용하여 명령의 세부 기능을 선택할 수 있다. 리눅스의 기능을 풍부하게 하는 중요한 특징. "-"기호로 시작하며 영문 소문자나 대문자로 구성. 명령에 따라 어떤 옵션이 있고 그 기능이 무엇인지는 해당 명령의 사용법을 참조
  • 인자 : 명령으로 전달되는 값으로 주로 파일명이나 디렉터리명

🧐 파일 생성 명령어 touch, cat

  • touch [옵션][파일이름]
    touch 명령어는 아무것도 없는 빈 파일을 생성하거나 파일의 날짜와 시간을 수정하는 명령어이다. touch의 파일명이 이미 존재한다면 서버의 현재 시간으로 파일의 최근 사용한 시간(access time)과 최근 변경 시간(modify time)을 변경하고 파일명이 존재하지 않는다면 파일의 크기가 0인 빈 파일을 생성한다.
  1. 수정할 파일이 존재하지 않는다면 크기가 0인 빈 파일을 생성한다.
  2. 수정할 파일이 존재한다면 해당 파일의 최근 사용한 시간과 최근 변경 시간을 현재 시간으로 수정한다.
  3. 별다른 옵션이 없다면 atime, ctime, mtime 모두 변경된다.

📌 리눅스 타임 스탬프 종류

  • atime : 파일에 마지막으로 접근한 시간 (access time)
    • 에디터 프로그램 또는 명령어로 단순히 read를 하였다면 atime이 변경된다.
  • ctime : 최종 상태 변경 시간 (change time)
    • 파일 퍼미션 변경, 소유자 변경, 하드 링크 생성, 삭제 등 각종 속성값이 변경된 시점에 ctime이 기록된다.
    • touch 명령어로 ctime을 변경할 수 없다.
  • mtime : 최종 수정 시간 (modify time)
    • echo명령어나 cat명령어로 리다이렉션을 이용해 파일을 덮어쓰면 변경된다.
    • 파일의 데이터를 수정하는 것은 파일 속성 중 하나이므로 ctime값이 함께 변한다. (ctime이 mtime보다 포괄적은 개념으로 볼 수 있다)

📌 touch 옵션

옵션설명
-a현 시간으로 파일의 접근 시간, 변경 시간을 수정
-c기존 파일이 없으면 파일이 생성되지 않음
-m현재 시간으로 파일의 수정 시간, 변경 시간을 수정
-d지정한 시간으로 접근 시간, 수정 시간이 변경되고 변경시간은 현제 시간으로 수정 (yyyy-MM-dd hh:mm:ss 포맷으로 지정)
-r지정한 파일의 접근 시간, 수정 시간으로 파일이 수정되고 변경 시간은 현재 시간으로 수정
-t지정한 시간으로 접근 시간, 수정 시간을 수정하고 변경 시간은 현재 시간으로 수정 (yyyyMMddhhmm.ss 포맷으로 지정)

  • cat [옵션][파일이름]
    리눅스의 cat명령어는 concatenate에서 따온 명칭으로 그 이름에서 유추할 수 있듯 본래의 기능은 여러 파일의 내용을 하나로 합쳐주는 역할을 한다. 리눅스에서 cat명령어는 단순히 파일을 합치는 것에만 사용하는 것이 아니고 파일의 내용을 단순 출력하여 확인하거나, > 이나 >> 와 같은 리다이랙션 기호화 함께 사용하여 파일을 생성하고 저장하는 용도로도 사용될 수 있다.

📌 리다이렉션 기호

리다이렉션 기호방향의미
>표준 출력명령 > 파일 : 명령의 결과를 파일로 저장
>>표준 출력(추가)명령 >> 파일 : 명령의 결과를 기존 파일에 추가하여 저장
<표준 입력명령 < 파일 : 파일의 내용을 명령에 입력

📌 cat 옵션

옵션long 옵션성명
-A--show-all옵션 -vET와 같음. 탭이나 줄바꿈을 포함한 문자를 표시
-b--number-nonbrank비어있지 않은 라인에만 첫번째 열에 번호를 표시
-e-옵션 -ve와 같음. 줄바꿈을 포함한 문자를 표시
-E--show-ends라인의 마지막과 비어있는 라인에도 '$'기로를 표시
-n--number모든 라인(비어있는 라인에도) 앞 번호를 출력
-s--squeeze-blank두번 이상 연속된 빈 라인을 출력하지 않음
-t-옵션 -vT와 같음. 탭을 포함한 문자를 표시
-T--show-tabs탭 문자를 ^|로 바꿔서 출력
-v--show-nonprinting탭과 줄바꿈을 제외한 문자를 ^,M-를 사용하여 표시

📚 실습 및 활용

📝 touch [파일이름]

파일이름의 파일을 생성한다.

[root@localhost ~]# touch hello
[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 13 10:55 hello

ls 명령어를 이용해서 확인해보면 hello라는 파일이 하나 생성된 것을 확인해 볼 수 있다.

📝 touch -t [날짜시간정보][파일이름]

파일이름의 시간을 날짜 정보(YYYYMMDDhhmm.SS)로 갱신해준다. (202307121132.12 -> 2023.07.12.11:32.12)

[root@localhost ~]# touch -t 202307121132.12 hello
[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 12 11:32 hello

📝 touch -c [파일이름]

기존 파일이 없으면 파일이 생성되지 않는다.

[root@localhost ~]# touch -c welcome
[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 12 11:32 hello
-rw-r--r--. 1 root root    0  7월 13 11:07 world
-----------------------------------------------------------------------------
[root@localhost ~]# touch -c hello
[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 13 11:09 hello
-rw-r--r--. 1 root root    0  7월 13 11:07 world

위와 같이 welcome이라는 파일은 존재하지 않아 파일이 생성되지 않는다. 하지만 hello를 입력하면 시간이 바뀌어 있는것을 확인해 볼 수 있다. 즉, 현재 시간으로 갱신해주는 역할을 하는 옵션이라고 생각해볼 수 있다.

📝 touch -r [파일이름1][파일이름2]

파일이름2의 날짜 정보를 파일이름1의 날짜 정보와 동일하게 변경해준다.

[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 13 11:09 hello
-rw-r--r--. 1 root root    0  7월 13 11:07 world
[root@localhost ~]# touch -r hello world
[root@localhost ~]# ls -l
합계 4
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 13 11:09 hello
-rw-r--r--. 1 root root    0  7월 13 11:09 world

📝 cat > [파일이름]

파일이름에 내용을 입력하고 ctrl+D로 내용편집을 종료하면 파일이름1이라는 파일이 내용과 함께 생성된다.

[root@localhost ~]# cat > hi
dfd <- 입력한 내용
[root@localhost ~]# ls -l
합계 8
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    0  7월 13 11:09 hello
-rw-r--r--. 1 root root    4  7월 13 12:01 hi
-rw-r--r--. 1 root root    0  7월 13 11:09 world

📝 cat [기존파일] > [새로운파일]

기존파일의 내용이 새로운파일에 복사되어 파일이 생성된다.

[root@localhost ~]# cat hi > bro
[root@localhost ~]# ls -l
합계 12
-rw-------. 1 root root 1214  7월 12 16:23 anaconda-ks.cfg
-rw-r--r--. 1 root root    4  7월 13 13:14 bro
-rw-r--r--. 1 root root    0  7월 13 11:09 hello
-rw-r--r--. 1 root root    4  7월 13 12:01 hi
-rw-r--r--. 1 root root    0  7월 13 11:09 world
[root@localhost ~]# cat bro
dfd

bro라는 파일이 생성되고 hi에 들어있는 내용(dfd)이 bro에 들어간 것을 확인할 수 있다.

📝 cat [기존파일] >> [다른기존파일]

다른기존파일에 기존파일 내용이 이어써진다.

[root@localhost ~]# cat >  file.txt
 Hello World
[root@localhost ~]# cat > text.txt
My name is Kim
[root@localhost ~]# cat file.txt >> text.txt
[root@localhost ~]# cat text.txt
My name is Kim
Hello World

📝 cat [기존파일1][기존파일2] ... >> [새로운파일]

기존파일 여러개를 하나로 합쳐서 새로운파일로 생성한다.

[root@localhost ~]# cat >  file.txt
 Hello World
[root@localhost ~]# cat > text.txt
My name is Kim
[root@localhost ~]# cat file.txt text.txt >> newfile
[root@localhost ~]# cat newfile
Hello World
My name is Kim

📝 cat [기존파일1][기존파일2] ... >> [다른기존파일]

기존파일 여러개를 하나로 합쳐 기존다른파일에 이어써진다.

[root@localhost ~]# cat >  file.txt
Hello World
[root@localhost ~]# cat > text.txt
My name is Kim
[root@localhost ~]# cat > welcome.txt
Welcome~~
[root@localhost ~]# cat file.txt text.txt >> welcome.txt
[root@localhost ~]# cat welcome.txt
Welcome~~
Hello World
My name is Kim

📝 cat [파일이름1][파일이름2] ... [파일이름n]

하나의 파일 또는 여러게의 파일을 출력할 수 있다.

[root@localhost ~]# cat >  file.txt
 Hello World
[root@localhost ~]# cat > text.txt
My name is Kim
[root@localhost ~]# cat file.txt text.txt
Hello World
My name is Kim

📝 cat -A [파일이름] 또는 cat -vET [파일이름]

탭 또는 줄바꿈을 포함한 문자를 표시한다. -A 옵션을 사용하면 탭(^|$)과 줄바꿈($)이 표시가 된다. cat -A 옵션은 탭 또는 줄 바꿈이 들어가면 안 되는 파일, 소스파일 등 파일의 내용을 검사할 떼 유용하다.

[root@localhost ~]# cat > name.txt
My name is Kim

My name is Lee
[root@localhost ~]# cat -A name.txt
My name is Kim^I$
$
My name is Lee$

📝 cat -b [파일이름]

비어있지 않은 라인에만 첫번째 열에 번호를 표시한다. 즉, 공백 라인은 번호를 표시하지 않는다.

[root@localhost ~]# cat > number.txt
This is number one

This is number two
This is number three
[root@localhost ~]# cat -b number.txt
     1  This is number one

     2  This is number two
     3  This is number three

📝 cat -e [파일이름]

줄바꿈을 포함한 문자를 표시한다.

[root@localhost ~]# cat > number.txt
This is number one

This is number two
This is number three
[root@localhost ~]# cat -e number.txt
This is number one$
$
This is number two$
This is number three[

📝 cat -n [파일이름]

비어있는 라인을 포함해 모든 라인의 앞 번호를 출력한다.

[root@localhost ~]# cat > number.txt
This is number one

This is number two
This is number three
[root@localhost ~]# cat -n number.txt
     1  This is number one
     2
     3  This is number two
     4  This is number three

📝 cat -s [파일이름]

두 번이상 연속된 빈 라인을 출력하지 않는다.

[root@localhost ~]# cat > number.txt
This is number one


This is number two
This is number three
[root@localhost ~]# cat -s number.txt
This is number one

This is number two
This is number three

📝 cat -t [파일이름]

탭을 포함한 문자를 표시한다.

[root@localhost ~]# cat > name.txt
My name is Kim

My name is Lee
[root@localhost ~]# cat -t name.txt
My name is Kim^I

My name is Lee
profile
오늘도 뚠뚠 개미 개발자
post-custom-banner

0개의 댓글