}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate on the chrome↓↓↓===***===>

2019년 8월 18일 일요일

리눅스 기본명령어2 (more, head, tail, alias, touch, stat, mkdir, rm, rmdir, mv, cp, echo)

안녕하세요 마무입니다~
이 포스트에서는 리눅스 명령어 "more" , "head", "tail", "alias", "touch", "stat", "mkdir",  "rm", "rmdir", "cp", "echo"에 대해서 알아볼 겁니다.


------목차------

1. more , head, tail

2. alias

3. touch, stat

4. mkdir

5. rm, rmdir

6. mv

7. cp

8. echo

------------------

입니다.
여기서 못 찾은 정보는
에서 찾아보세요!



1. more, head, tail 



cat과 비슷하게 파일의 내용을 출력하는 명령어입니다만 조금씩 기능이 다릅니다.

more(more) : more의 뜻대로 좀더..조금만 더..이런 느낌이라 생각하시면 됩니다




root홈에 있는 anaconda파일을 more명령어로 열어보겠습니다.









cat과 다른점이 보이십니까? cat은 한번에 터미널에 파일의 모든 내용을 출력한다고 치면
more은 그 파일의 내용을  한 페이지씩 출력합니다. 그리고 퍼센트가 나오죠

여기서 more명령어로 파일을 읽었을 때 쓸 수 있는 단축기를 알려드리겠습니다.

Enter : 글을 한줄씩 읽는다











엔터를 누르면 한 줄이 더 화면에 올라오면서 퍼센트가 올라갑니다.
맨 첨에 #System timezone 이란 글이 한 줄 올라간거 보이시나요?


Space bar : 한 페이지 넘기며 읽는다







현재 보이는 페이지에서 다음 페이지로 넘깁니다


b(back) : b를 클릭할 시 뒤로 한페이지 이동합니다.
space바의 반대개념이라 생각하시면 됩니다.






b를 누르니 다시 맨처음 페이지로 돌아왔죠?


참고로 more명령어로 파일을 읽을 경우 vi처럼 TUI환경으로 바뀌기 때문에
나가려면
q(quit) 단축기를 누르거나 아니면 리눅스에서 하던 명령어를 취소하는
ctrl + c 를 누르시면 됩니다




누르면 이렇게 터미널로 돌아옵니다.


head : 머리라는 느낌으로 파일의 내용의 머리 , 맨 위부터 출력한다는 명령어
기본적으로 맨위부터 10줄을 출력합니다.




이렇게 10줄을 출력합니다. 진짜 10줄인지 궁금하신분들은 세보세요
저는 안세겠습니다ㅎ.

head명령어는 뒤에 -[숫자] 옵션을 붙여주면 숫자행만큼 출력합니다

head -5 anaconda-ks.cfg 하면 10줄이 아니라 5줄을 출력하는거죠






이렇게 말입니다.

자 그럼 tail(tail)은 대충 감이 오시죠? head의 정반대입니다

tail : 꼬리라는 뜻처럼 파일의 내용중 맨 끝에서 10줄을 출력합니다.








빈칸 까지 해서 끝에서부터 10칸을 출력합니다
그리고 head와 마찬가지로 -[숫자]하시면 숫자행만큼 출력합니다.

tail -3 anaconda-ks.cfg하면






이렇게 3행만 출력하죠



2. alias



alias : 치환이라고 보면 됩니다. 이 명령어를 사용하면 기존의 명령어를 나만의 언어로
사용할 수 있게 만들 수 있습니다.

대표적으로 alias를 만들어 쓰는 것이 vim(vi 업그레이드버젼)을 vi명령어로 사용할 수
있게 만들거나 "ls -l" 을 "ll" 로 줄여서 사용하는 것이 있죠

형식은 alias [치환용어]='[명령어]' 또는 "[명령어]" 
입니다.


alias 명령어로 "ls -a" 를 "la"로 바꿔보겠습니다.




이렇게 말이죠 그리고 la를 하는순간 ls -a와 같은 결과가 나오죠?

이번엔 ls -la를 lla로 바꿔보겠습니다.





lla로 ls -la와 같은 결과가 나오는 것을 볼 수 있습니다.

단, 주의점이 있습니다. 이 명령어 창에서 쓴 alias는
쉘 세션이 열릴 동안만 유지가 됩니다. 쉽게 말해서 저희가 터미널을 닫으면
이 alias는 사라진다는 것이죠. 그럼 영구적으로 alias를 등록하려면 어떻게 하느냐

쉘이 켜질 때마다 자동으로 alias가 등록되면 되겠죠?
바로 쉘이 켜질때마다 열리는 .bashrc파일에 alias를 등록하면 됩니다

.bashrc는 뭐고 쉘은 뭐지? 하시는 분들은

https://mamu2830.blogspot.com/search/label/%EB%A6%AC%EB%88%85%EC%8A%A4%20%EC%89%98

여기서 보고오시면 되겠습니다~

한번 터미널을 닫았다가 다시 켜서 방금전에 등록한 la lla를 해보겠습니다.





네 안되는 모습을 볼 수 있습니다. 그러면 한번 .bashrc파일을 vi로 열어서
alias la='ls -a' 적어보겠습니다. vi는 밑에서 배울겁니다 그냥 간단히 봐주세요~






이렇게 홈에 있는 숨긴파일 .bashrc를 열어서








이렇게 등록을 해줍니다 그리고 저장하고 나가죠








하지만 아직도 안됩니다. 당연한거죠! 왜냐?? 제가 쉘 포스트에서 말했었죠?

.bashrc는 쉘이 켜질 때 참조하는 파일이라고 그러니 쉘을 다시 새로 열 때
저희가 추가한 alias가 적용이 될겁니다!

쉘 환경 즉, 터미널을 닫았다가 다시 켜서 la를 해보겠습니다.




네 역시 터미널을 껏다 키니 이제야 적용이 된 모습입니다.
이 처럼 alias를 영구적으로 적용하고 싶으시면 .bashrc에 등록하시면 됩니다.



3. touch, stat




touch(touch): 영어 뜻대로 손본다? 살짝 수정한다 이런느낌대로 파일의 날짜를 수정하는 명령어인데 , 옵션없이 그냥 파일명만 지을 경우 "빈 파일"을 만드는 명령어기도 해서 빈 파일을 만들 때도 쓰이는 명령어입니다.

형식은 touch [옵션] [파일] 이고 옵션없이 사용하면 그냥 빈 파일을 만듭니다.










touch 명령어로 이렇게 파일크기가 0인 dont.touch.me 파일을 만든 것을 볼 수 있습니다.

만약 touch명령어로 기존에 있는 파일의 이름을 touch로 사용하면













이렇게 모든시간이 현재시각으로 초기화됩니다.

옵션이 여러개 있는데... 사실 필요가 없어서 굳이 설명은 안하겠습니다.
필요 없는 이유는 밑에 stat에서 설명한 걸 이해하시면 이해가 되실 겁니다.
굳이 알고 싶은 분은 "man touch" ㄱㄱ~


stat(stats): 이 영어의 뜻을 제대로 알고가면 이해가 쉬울 것 같습니다
[ plural ] information based on a study of the number of times something happens or is present, or other facts relating to numbers:--combridge english dictionary-- 
란 뜻대로 파일의 시간을 포함한 정보를  보여주는 명령어라고 보시면 됩니다.


솔직히 개인적으론 "file" 명령어보다 더 좋은 것 같습니다.
명령어 형식은
stat [파일명]  입니다.





이 명령어를 하시면 많은 정보들과 밑에 Access , Modify , Change가 보이실 겁니다.

Aceess 시간은 atime이라고도 불리며, 파일을 접근한 시간입니다. 파일을 열어보거나 하면 그 때 시각으로 바뀝니다.

Modify 시간은 mtime이라고도 불리며 파일의 내용을 수정한 시간입니다.

Change 시간은 ctime이라고도 불리며 파일이 변경된 시간입니다.

이렇게 보면 mtime과 ctime의 차이가 눈에 잘 안띄는데요 이해를 돕기 위해 예시를 들
자면 "vi"나 ">>" 같은 명령어나 기호를 이용해서 내용을 수정하면
mtime과 ctime 둘다 시간이 바뀝니다 하지만

아직 안배우는 파일의 권한을 조정하는 "chmod" 같은 명령어로
파일의 권한을 조정하면 ctime만 바뀝니다.


사진으로 보여드릴게요!






기존에 파일을 생성한 직후 모든 시간이 비슷하죠








하지만 파일의 내용을 읽어서 출력만 하는 "cat"명령어를 사용시
atime만 바뀐 걸 볼 수 있습니다.







이렇게 "echo"와 ">>" 를 이용해서 파일을 읽진 않고 내용만 넣으니까
mtime과 ctime이 둘다 바뀌었습니다.








하지만 이렇게 파일권한 처럼 내용에 관계없이 파일에 관한 걸 바꾸니
ctime만 바뀐 걸 볼 수 있습니다.


그래서 굳이 touch+옵션+명령어를 써서 시간을 바꾸는 의미는 없고
그냥 "빈 파일"을 만들 때 사용하시면 됩니다.



4. mkdir



mkdir(make directory)도 영어 뜻대로 디렉토리를 만드는 명령어입니다.
명령어 형식은 mkdir [옵션] [파일이름....] 입니다.

절대위치를 적지 않으면 현재 위치에 디렉토리를 만듭니다.



이렇게 말이죠






touch도 마찬가지지만 이렇게 디렉토리안에 디렉토리,파일를 만들 수 있습니다.







touch도 마찬가지고 이렇게  상대위치를 이용해서 파일을 만들 수도 있습니다.


유용한 mkdir 옵션엔 "-p(parents)"가 있습니다.

-p(parents) : 부모, 즉 상위폴더까지 포함해서 만들어버린다는 뜻입니다.
예로들어 원래 홈에 "z"란 디렉토리가 없어도
mkdir -p z/x 라고 하면 "z"란 디렉토리도 만들고 그 안에 "x"라는 디렉토리를 만드는거죠



위 사진 처럼 말이죠



5. rm, rmdir 



rm(remove) : 이름대로 파일을 제거한다는 뜻입니다.
rmdir(remove directory) : 이름대로 디렉토리를 제거한다는 뜻입니다.

하지만 디렉토리는 "rm" 명령어로 못 지웁니다.





이렇게 말이죠

그럼 rmdir로 디렉토리를 지우면 되지만





또 이렇게 디렉토리의 내용이 들어있으면 안됩니다.
rmdir은 mkdir의 반대개념이니까 "-p" 를 쓰면 되지않느냐?
이야.. 정확합니다. 하지만 아까도 설명해드렸지만 "-p(parents)"는
상위파일까지란 개념으로 저걸 실행하려면

"rmdir -p z/x/c" 이렇게 해야합니다. "rmdir -p z"로 못지운다 이거죠




되게 번거롭지 않습니까. 그래서 저희는 "rm" 명령을 많이 씁니다.

포스트 "리눅스 파일과 디렉토리"에서 설명했었죠?
리눅스는 모든 것을 파일로 다루고 , 디렉토리도 결국 파일이라고

rm -r(recursive)를 이용해 상위 디렉토리만 대상으로 하면 하위까지 싹다 지울 수
있습니다.

물론 파일 하나 하나 지울 때마다 정말로 지울건지 물어봅니다.





이렇게 디렉토리 안에 있는  파일 하나하나 다 물어봅니다.
그럼 이렇게 물어보는 거 없이 한방에 지우게 하려면 어떻게 하느냐?

바로 -f(force) 입니다.

rm -rf [파일] 이렇게 r과 같이 함께 쓰면 물어보는 거 없이 하위폴더까지 싹 지우죠
물론 조심해서 사용해야합니다. "rm -rf /" 이런식으로 해버림 큰일나니까요






이렇게 말이죠, 그래서 사실상 rm만 쓰면 됩니다 그러니 rmdir은 "rmdir이란 명령어가 있구나~" 정도로 생각하시면 되겠습니다.




6. mv



mv(move) : 이름 그대로 파일을 이동시키는 겁니다. 그런데 리눅스에선
이동하는 것 외에 다른용도로도 사용합니다. 그것은 바로 "파일이름 바꾸기"죠

명령어 형식은 mv [옵션] [파일] 입니다

mv명령어를 사용하면 다른 위치로 이동시키면서 파일의 이름을 바꿀 수가 있거든요
이걸 응용해서 현재 위치에서 그냥 mv [파일1] [파일2] 이렇게 하면 파일1은 파일2가 되는
겁니다.







이렇게 bob이란 빈 파일을 만들고 "mv"를 통해 bob1로 바꾼 걸 볼 수 있습니다.
만약 끝에 이름을 안쓰면 어떻게 될까요?

mv bob1 /root/z/x/c 이렇게 한다면 bob1은 c라는 이름으로 바뀔 것이고
mv bob1 /root/z/x/c/이렇게 한다면 c라는 디렉토리 안에 bob1이름으로 이동될 겁니다
(물론 /z/x/c/가 존재한다는 한에) 그만큼 "/"가 얼마나 중요한지 알 수 있는 대목이죠







이렇게 잘 이동된 걸 볼 수 있죠

mv에서 사실 옵션을 쓸 필욘 없긴한데 굳이 쓴다면
-b(backup)을 쓰지 않을까 싶네요 이 옵션을 쓰면 만약 같은 이름의 파일을 덮어씌울 때, 기존에 있는 파일내용이 사라지지 않고 "~"가 붙은 상태로 생긴다는 겁니다.

예를들자면
~/bob을 ~/z/x/c/로 옮기는데 만약 ~/z/x/c/에 bob이란 파일이 이미 있다면
bob을 덮어씌웠을 때, 원래 ~/z/x/c에 있던 bob파일은 "bob~" 처럼 "~"란 이름이 붙어서
따로 생깁니다.

사진을 보시죠~




아직 안배웠지만, 그냥 echo 123 > bob은 123이란 내용을 "bob"이란 파일에 넣으란 소리입니다. 넣으려는 "bob"이란 파일이 존재하지 않았으면 만들고 넣습니다.

같은 방식으로 한번더 567이란 내용을 z/x/c/디렉토리 안에 bob이란 파일을 만들어서 넣은겁니다.

그리고 "mv -b"로 홈에 있는 bob(123)을 z/x/c/bob로 옮깁니다.
하지만 이미 그곳엔 bob(567)이 있었죠

overwrite, 즉 덮어씌우겠냐 물어보고 저는 yes를 했죠
z/x/c디렉토리로 "cd"명령어로 이동한 뒤 "ls"로 확인하니 bob과 bob~이 있습니다.

"cat"으로 확인해보니 bob은 123이고 bob~은 567로서 기존에 z/x/c/에 있던 bob(567)
이라는 걸 알 수 있습니다.



7. cp



cp(copy) : 이름 그대로 파일을 복사하는 겁니다.

형식은 cp [옵션] [복사할 원본] [복사한 파일] 입니다.
당연한거지만 복사할 때 이름을 바꾸는거 가능합니다. 위치도 바꿀 수 있고요

cp는 그냥 옵션부터 알려드리는게 좋을 것 같으니 옵션부터 알려드리겠습니다.

cp -r(recursive) : -r은 많이 보게되죠? 여러분이 아시는 그 옵션 맞습니다. 하위폴더까지
전부 복사하라는 뜻이고, 디렉토리를 복사할 때 꼭 붙여야 하는 옵션입니다.

 


옵션 없이 "cp a p" 이렇게 하려니 a가 디렉토리라서 안된다고 합니다.

그래서 "cp -r a p" 하니 잘 복사가 된 모습입니다.


cp -p(preserve) : 영어 뜻대로 보존, 즉 원본의 모든 것을 변함없이 그대로 복사한다는
뜻입니다. 다시말해서 그 원본이 만들어진 시간, 권한 모두다 그대로 복사하는거죠
여기서 헷갈리는 분들이 계시죠? "어? 아까 p(parents)랑 헷갈리네" 이렇게 말이죠

실제로 그 기능의 옵션이 "cp"명령어에도 있습니다. 하지만
여기선 "-P(parents)" 이렇게 대문자 P입니다 그런데 솔직히 이거 별로 쓸 일이 없어요
왜냐면 위에 먼저 언급한 "-r" 기능이 훨씬 편하기 때문이죠

"-P"이걸 쓰려면 "cp -r a c" 이렇게 할 것을 "cp -P a/b/c c" 이렇게 해야하거든요..
안쓰는 이유를 아시겠죠?

잠깐 딴 얘기로 샛는데, 아직 chown이나 chgrp같은 명령어를 아직 안배웟으니
다른 유저로 가서 파일을 만든다음 "cp -p" 해서 완전 똑같이 복사한다는 게 뭔지
알려드릴게요

"mamu"라는 유저로 로그인을 한다음 q/w/e 라는 디렉토리를 만들고
다시 "root"로 로그인 한 뒤 "cp -p"를 사용해 root의 홈으로 복사해보겠습니다.



mamu유저로 로그인해 파일을 만들고  ll(ls -l) -d(directory)로
만든 q파일의 inode를 봐줍니다. 그리고 다시 root로 로그인해야겠죠
"su"명령어로 바로 root로 로그인 해줍니다.

q의 파일의 권한과 시간부분을 봐주세요




다른 유저로 로그인하면 자기가 있던 장소에서 유저만 바뀐다고 했었죠?
"mamu의 홈" 에서 root로 로그인했으니 그대로 mamu홈에 있는 겁니다.

디렉토리니까 "cp -rp" 하여 루트홈에 복사를 하고 inode를 확인하니
원본이 만들어진 시간과 권한까지 똑같습니다.

이처럼 "-p(preserve)" 옵션은 원본을 그대로 복사하기에 자주 쓰이게 될 옵션중 하나입니다.



8. echo



마지막인 echo(echo)이네요
echo(echo) : 이름 뜻 그대로 메아리, 그냥 입력한 한 줄의 글을 메아리마냥
다시 터미널에 출력해서 보여주는 겁니다.

형식은 echo [옵션] [출력할 내용] 입니다.



이렇게 말이죠. 별로 쓸 일 없을 것 같은 녀석이지만
리다이렉션(>,<,>>,<<)와 함께 쓰이면 나름 쓸만한 녀석입니다.
제 포스팅을 보시다보면 제가 쓰는 걸 종종 보셨을 텐데

파일 만들고 안에 글 쓰고 저장하고 나오는 귀찮은 작업을
echo [내용] > [파일] 이렇게 간단하게 끝낼 수 있습니다.



간단하쥬?


>와 >>의 차이는 "리눅스 기본명령어1"에서 다뤘었죠? 기억이 안나신다면 다시 보고오세요~ ㄱㄱ
3. 리눅스의 파일과 디렉토리, i-node, 소프트, 하드 링크파일이란?


그리고 이녀석이 진정한 의미로 쓰일 때는 바로 스크립트 그러니까
프로그래밍을 할 때 씁니다.

C언어 배웠던 분들이시라면 다들 아실 "printf"와 같은 역할을 하는거죠
C언어 모르시는 분들이라면.. 음.. 그냥 화면에 내용을 출력하는 겁니다.
printf("앙 기모리 \n"); 뭐 이렇게 하면 프로그램이 실행될 때

앙 기모리

이렇게 뜨거든요 "echo 앙 기모리" 가 이거랑 같은 겁니다.

echo의 옵션에는 -n(no newline)과
                      -e(enable escape character) 이렇게 있습니다.


 -n(no newline) : 이름대로 새로운 라인 없이 출력합니다 다시말해 
이걸 쓰면 다음 행에서 시작하지 않습니다. 이게 무슨소리냐 원래

긴말 필요 없습니다. 사진을 보시죠





무슨 의미인지 아시겠죠?


-e(enable escape character) : 영어 뜻대로 이스케이프 문자를 허용한다는 뜻인데
"이스케이프 문자"란 일반적으로 우리가 아는 뜻의 문자를 escape, 벗어나서
다른 걸 뜻하는 문자라는 겁니다

예로들어 C언어 해보신 분들은 다 아시겠지만 "n"은 우리가 아는 영어단어 "n"인데 여기에 \를 붙이면 줄바꿈 문자 "\n(newline)" 되는 겁니다.

이스케이프 문자 종류는

              \a     경고음 (벨)
              \b     백스페이스
              \c     마지막 개행문자를 사용하지 않는다.
              \f     폼 피드
              \n     개행문자
              \r     캐리지 리턴
              \t     수평 탭
              \v     수직 탭
              \\     백슬래쉬
   
그래서 개행문자 \n을 사용하면(개행문자랑 걍 줄바꿈문자라고 생각하세요~)

echo -e abc\ndef 하면 

abc
def

이렇게 된다는 거죠



하 오늘도 겨우 포스팅을 마무리 했네요 ㅠㅠ

저는 아무래도 자세하게 포스팅하다보니 한번 포스팅할 때마다 평균적으로 8시간정도
걸립니다 ..

그러니! 꼭 도움들이 됐으면 좋겠고 도움이 되셨다면 꼭!좀 좋아요와 댓글과 구독
부탁드려요 ㅜㅜ 앞으로 더 좋은 퀄리티 포스트를 만드는데 도움이 됩니다!

그럼 이상 마무였습니다~!



댓글 6개:

  1. 잘 보고 있습니다. 너무 재미있어요~~

    답글삭제
    답글
    1. 감사합니다 ㅎㅎ 재밌었다니 하핳... 다행이네요!

      삭제
  2. 리눅스를 1도 모르는 사람입니다.
    여기 저기 찾아보고 책도 좀 읽어 봤지만
    여기 처럼 정말 자세히 설명해 주시는 곳은 보지 못했습니다.
    감사드립니다.

    답글삭제
    답글
    1. 시간을 많이 투자해서 자세히 적는 제 방식이 도움이 돼 정말 다행입니다!!
      다른 포스트들도 도움이 되길 바랄게요!!
      따뜻한 댓글 감사합니다

      삭제
  3. 진지하게 책 출판하셔도 될것같아요!
    그 어떤 책보다 쉽고 자세하게 잘 나와있네요

    답글삭제
    답글
    1. 도움이 돼 정말 다행입니다! 언젠가는 꼭 출판하고 싶네요 ㅎㅎ

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!

* 바쁜 개인 일정으로 댓글 답변이 많이 느립니다 *