greendreamtrre.tistory.com/106?category=891838 추가적인 명령어 정리
greendreamtrre.tistory.com/107?category=891838 vi 에디터 정리
명령 관련
man 명령어 : 도움말 (space bar로 다음 페이지로 넘기고, q로 종료한다.) (i.e. man ls 를 치면 ls의 명령어 사용법이 나온다.)
명령어 --help : 도움말. man은 라이센스 뭐 이런것도 나오고 그런데 --help는 정말 명령어만 딱 간결하게 나온다.
(대신 --help로는 안 나오는 것도 있다.)
history : 명령어 로그를 보여줘
!번호 : history를 하면 명령어 로그에 번호가 붙는데, !35를 하면 로그에 있는 35번 명령어를 실행한다.
!w : whoami와 같다.
!l : ls -al, ll과 같다.
!h : history와 같다.
control + ↑ ↓ : 이전, 이후 입력했던 명령어.
| more : 파이프라인 뒤에 more는 화면을 넘어가는 긴 파일을 단계별로 보여준다. (return : 줄 단위 넘김. space bar : 페이지 단위 넘김.)
A | B | C : 파이프라인. A명령을 실행하고, B명령을 실행하고, C 명령을 실행해라.
clear : 화면 지우기.
sudo apt-get install... : root의 권한을 잠시 빌려와서 설치를 한다. (sudo apt-get update : 리눅스 업데이트)
경로 이동 관련
cd 경로 : '경로'로 이동.
cd / : 최상단 경로로 이동.
cd ~ : home 으로 이동.
cd .. : 상위 경로로 한 단계 이동
tree : 폴더, 파일을 트리 구조로 보여준다. (미설치시 sudo apt install tree 필요.) (tree -L n : n번째 하위 디렉토리까지만 보여준다.)
pwd : print working directory 현재 경로 보여줘.
touch 파일명 : 빈 파일 생성.
ls : 파일을 보여준다. (숨김파일은 X)
기본적으로 ls 명령어는 -l을 붙이는거로 하자. -s, -h, -u, -c 등은 -l 옵션이 붙지 않아 자세히 나오지 않으면 별로 볼게 없다...
옵션 | 기능 |
-a | All 모든 파일과 디렉토리를 보여준다.(숨김파일도 보여줌.) |
-l | List 리스트 형식으로 자세히 보여준다. |
-r | Reverse 뒤집어 보여준다. |
-s | Size 크기를 보여준다. |
-h | Human 사람한테 맞춰 KB, MB, GB 단위로 보여준다. |
-u | 접근 시간으로 보여준다. |
-c | 변경 시간으로 보여준다. |
ls -a : 모든 파일과 디렉토리를 보여줘.(숨김파일도 보여줌.)
ls -al : 모든 파일과 디렉토리를 자세히 보여줘.(숨김파일도 보여줌.) (=ll 약간 다른 듯 한데 그냥 거의 같다.)
ls -alr : 모든 파일과 디렉토리를 거꾸로 보여줘.
ls -als : -al + 파일 크기를 보여줘.
ls -alh : -al + 파일 크기를 보여줘. (human(사람)이 보기 좋게 KB, MB, GB 단위로 보여줌.) / 용량 순서가 아님!!
ls -alhr :-al + 파일 크기를 거꾸로보여줘. (human(사람)이 보기 좋게 KB, MB, GB 단위로 보여줌.) / 용량 순서가 아님!!
ls -alu : 접근 시간을 보여줘. (u, c 옵션을 주지 않으면 수정시간을 출력한다.)
ls -alc : 변경 시간을 보여줘. (u, c 옵션을 주지 않으면 수정시간을 출력한다.)
more 파일명 : 해당 파일을 열어줘.
cat 파일명 : 해당 파일을 열어줘. (파일 내용이 길 경우 cat 파일명 | more 를 쓰면 단계별로 볼 수 있다.)
tail 파일명 : 파일의 마지막 10줄을 보여줘.
tail -f 파일명 : 파일의 마지막 10줄을 실시간으로 보여줘. (오류를 보거나 로그를 보고싶을 때 사용한다. 디버기용.)
tail -F 파일명 : 파일의 마지막 10줄을 주기적으로 보여줘. (주기적으로 파일을 열어서 보여준다. -f가 더 실시간임.)
tail -n 30 파일명 : 파일의 마지막 30줄을 보여줘.
tail -n +30 파일명 : 파일의 30번째 줄 이후부터 보여줘. (앞에서부터 30번째 줄 이후 즉, 31번째 줄부터.)
grep ABC : ABC라를 문자열을 찾아줘. (특정 파일에서 특정 문자열을 찾을 때 사용한다.)
활용법 :
ll | more : ll 명령어를 more로 페이지를 끊어 본다.
ll | grep ABC : ll 명령어를 ABC를 포함하는 것만 본다.
cat 파일명 | more 를 써서 단계별로 보던 것처럼 grep 역시 파이프라인과 함께 활용할 수 있다.
예를 들어 어떤 파일에 다음과 같이 저장되어있다고 하자.
DIFB
SOIIH
ABCD
IHHF
DBSO
cat 파일명 | grep ABC : 파일명에서 ABC라는 문자열을 찾아줘. -> ABCD 를 출력.
cat 파일명 | grep -w ABC : 파일명에서 ABC라는 문자열을 word 단위로 찾아줘. -> 없어서 출력 안 함. 만약 -w ABCD 였다면 ABCD를 출력.
cat 파일명 | grep -n ABC : 파일명에서 ABC라는 문자열의 라인 number를 함께 찾아줘. -> 3:ABCD 를 출력.
cat 파일명 | grep -v ABC : 파일명에서 ABC가 있는 문자열의 라인을 제외하고 출력해줘.
-> DIFB
SOIIH
IHHF
DBSO 를 출력.
mkdir : 디렉토리 생성.
rmdir : 디렉토리 삭제. (해당 명령어는 디렉토리 내부가 비어있어야 삭제된다. rm -r 디렉토리를 이용하면 비어있지 않아도 삭제 가능.)
mv 구파일명 신파일명 : 파일명 변경.
mv 파일명 디렉토리 : 파일을 디렉토리로 이동. (디렉토리를 전부 입력해도 되고, 상위 디렉토리로 보내려면 mv 파일명 ../)
mv 구폴더명 신폴더명 : 폴더명 변경. (이미 신폴더명이 있을 경우 디렉토리니까 그 안으로 이동한다. 아래 이해하기 참고.)
cp 구파일명 신파일명 : 파일을 복사.
cp 파일명 디렉토리 : 파일을 디렉토리로 복사.
cp -r 구폴더명 신폴더명 : 폴더를 복사. (이미 신폴더명이 있을 경우 디렉토리니까 그 안으로 이동한다. 아래 이해하기 참고.)
rm 파일명 : 파일을 삭제.
rm -r 폴더명 : 폴더를 삭제. (내부 파일도 같이 삭제.)
이해하기
mv (ABC) (DEF) 를 우선 DEF를 만들고 ABC 자신의 알맹이를 DEF에 던진다는 개념으로 생각하자. 그러면 DEF가 없다면 ABC는 그 만들어진 DEF의 자리에 자기 자신을 던져 넣고 들어가면 되는거고, 이미 DEF가 있다면 그 만들어진 자리에 자기 자신을 던져 넣고 들어가면 되는거다. 그렇다면 이 개념 하나로 mv, cp는 물론 뒤에 적는게 파일명인지 디렉토리명인지를 구분 없이 한 번에 이해할 수 있다. (cp도 같은 개념이나 다른점은 그저 폴더일 경우에는 명령어를 작동시키기 위해 cp -r이 붙는다는 것 뿐이다.)컴퓨터처럼 생각하기!!
리눅스 검색
find -name Doc* : 현재 디렉토리와 하위 디렉토리 내에 'Doc'로 시작하는 모든 것을 검색
find -inum doc* : 대소문자 구별 하지 않고 검색. 위 조건에 대소문자 구별만 제거된 검색이다.
find -type f : 파일만 검색 (cf. d : 디렉토리, f : 파일, l : 링크, s : 소켓)
find -empty : 빈 파일 검색
find -atime n : access(접근) -(이전) n(n일) -> n일 이전에 접근한 파일 검색
find +atime n : access(접근) +(이후) n(n일) -> n일 이후에 접근한 파일 검색
find -ctime n : change(변경) -(이전) n(n일) -> n일 이전에 변경된 파일 검색
find +ctime n : change(변경) +(이후) n(n일) -> n일 이후에 변경된 파일 검색
find -mtime n : modify(수정) -(이전) n(n일) -> n일 이전에 수정된 파일 검색
find +mtime n : modify(수정) +(이후) n(n일) -> n일 이후에 수정된 파일 검색
change는 파일의 소유자나 권한 등 파일 자체의 변경을 의미하고,
modify는 파일 내부의 값의 변경을 의미한다.
time은 min으로 바꿀 수 있다. 이 경우 시간이 아니라 분 단위로 검색한다.
find -maxdepth n : 하위 디렉토리를 n번 까지만 검색
find -min depth n : 하위 디렉토리를 n번 부터 검색
which java : 자바 설치 경로 확인
유닉스계에서는 파일/폴더에 대해 사용자별 그룹별로 권한을 다르게 주어 관리를 한다.
파일/폴더의 소유권은 처음 생성자가 가진다.
파일/폴더의 소유자 변경 : chown 명령어를 사용.
파일/폴더의 소유그룹 변경 : chgrp 명렁어를 사용.
// 소유권 변경
chmod [options] mode file1
sudo chmod 777 Study\ 05.22\ Spring_HellowWorld.war
// 소유자 변경
chown [OPTIONS] USER[:GROUP] FILE(s)
chown -R tomcat:tomcat /var/lib/tomcat9
codechacha.com/ko/linux-chmod/
codechacha.com/ko/linux-chown/
시스템 관련
top : CPU 사용량 정보
vmstat : Ram 사용량 정보
df -h : 디스크 사용량 정보
ps -ef : 프로세스를 보여줘. (ps -ef | more, ps -ef | grep 1234 등으로 활용 가능하다.)
커널 버전 확인 (어떤 계열의 리눅스인지 모른다면 우선 이 방법을 써서 어떤 계열인지 확인한다.)
cat /proc/version
## 위 명령어가 안 먹히는 경우 위 방법 보다 자세하지 않지만 다음을 이용한다.
uname
uname -r
uname -a
특정 프로세스 강제로 죽이기
sudo kill -9 프로세스번호 : 특정 프로세스가 사용중이라 명령을 실행할 수 없는 경우 강제로 죽인다. (sudo deluser로도 해결 안 되는 경우도 이 방법으로 점유중인 프로세스를 죽이고 나면 정상적으로 삭제할 수 있다.)
우분투 버전 확인
# 우분투
cat /etc/issue
cat /etc/lsb-release
# 레드헷(CentOS)
cat /etc/redhat-release
rpm -qa *-release
# 데비안
cat /etc/debian_version
# 페도라
cat /etc/fedora-release
# 그 외
grep . /etc/*-release
cat /etc/*-release | uniq
grep . /etc/issue*
netstat : 네트워크 상태를 보여준다.
옵션 | 기능 |
-a | All 모든 연결 및 수신 대기 포트를 보여준다. |
-l | Listen 현재 연결된 포트를 보여준다. |
-n | Number 숫자 형태로 보여준다. |
-t | TCP만 보여준다. |
-u | UDP만 보여준다. |
-p | PID를 보여준다. |
-r | Routing table |
-c | 명령을 반복 실행 (종료 : Control + z) |
netstat -anp : 네트워크 상태를 보여줘. (listen 중인 포트 뿐 아니라 established된 포트를 보여준다.) (DGRAM : UDP, STREAM : TCP)
netstat -antp : 네트워크 상태를 보여줘. (listen/established 상태의 TCP만 보여준다.) (활용 : ssh 22번 포트가 열려있나 확인할 수 있다.)
netstat -anup : 네트워크 상태를 보여줘. (listen/established 상태의 TCP만 보여준다.)
netstat -anutp : 네트워크 상태를 보여줘. (listen/established 상태의 TCP/UDP만 보여준다.)
netstat -lntp : 네트워크 상태를 보여줘. (listen중인 TCP만 보여준다.)
netstat -lnup : 네트워크 상태를 보여줘. (listen중인 UDP만 보여준다.)
netstat -lnutp : 네트워크 상태를 보여줘. (listen중인 TCP/UDP만 보여준다.)
netstat -rn : 라우팅 테이블을 보여줘.
/etc/init.d 에 가면 실행 가능한 서비스가 있다. (i.e. apport, atd, cron, dbus, lvm2, mdadm, open-iscsi, ssh, udev, uuid...)
/etc/init.d/ssh start : ssh 서비스 시작.
/etc/init.d/ssh stop : ssh 서비스 종료.
/etc/init.d/ssh restart : ssh 서비스 재시작.
호스트 네임 변경 (hostnamectl)
방법 1(높은 버전의 리눅스에서는 아래 방법은 안 된다.) :
// 현재 호스트 네임 확인
hostname
// 호스트 네임 변경
hostnamectl set-hostname ABC
// 변경 확인
hostname
방법 2(보통 구버전 리눅스) :
// 현재 호스트 네임 확인
hostname
// 호스트 네임 변경
vi /etc/hostname
// 변경 확인
hostname
ifconfig

이름 | 설명 |
enp0s5 | 네트워크 번호 (맥에서 ifconfig en0 할 때 나오던거랑 같은거) |
flags | 네트워크 상태 |
MTU | 전송 패킷 단위 (공유기에 있는 그거. 1500이 기본값.) |
inet | 할당된 IP주소 (IPv4) |
inet6 | 할당된 IP주소 (IPv6) |
ether | 해당 네트워크의 하드웨어 주소 |
RX packets | 받은 패킷 |
Rx errors | 받은 패킷 중 에러난 것 |
Tx packets | 보낸 패킷 |
Tx errors | 보낸 패킷 중 에러난 것 |
ifconfig -a : 네트워크 모두 보여줘
ifconfig enp0s5 : enp0s5 네트워크만 보여줘
ifconfig enp0s5 up : enp0s5 네트워크를 켜
ifconfig enp0s5 down : enp0s5 네트워크를 꺼
shutdown -h now : 종료 (처음에는 root 계정이 아니라 에러 발생한다. 그 경우 헤결법은 아래 접은글 참조.
sudo passwd root : super user do 관리자 권한으로 root의 비밀번호를 설정해라 (root 계정은 다른 계정의 비밀번호 변경도 가능하다.)
1234 -> 현재 로그인 한 일반 사용자 비밀번호 입력
1234 -> root 계정 비밀번호 입력
1234 -> root 계정 비밀번호 재입력
shutdown -h now : 이제 성공적으로 종료된다. 만약 그래도 안 되면 su shutdown -h now
shutdown -p now : 이것도 종료
shutdown -r now : 재부팅
사용자 관련 (계정이나 그룹의 생성, 삭제와 같은 것은 root 계정에서만 가능함)
adduser kopo : kopo 계정을 생성. (기본적으로 비밀번호 생성함. 분실시 아래 명령어로 재설정) (=useradd)
deluser kopo : kopo 계정을 삭제. (=userdel)
passwd kopo : kopo 계정의 비밀번호 변경. (일반 사용자 비밀번호를 잊어버린 경우 root 권한으로 변경 가능)
passwd root : root 계정의 비밀번호 변경. (root 계정은 비밀번호 잃어버린 경우 접속 불가)
id root : root 계정의 UID, GID, groups 를 보여준다. (id kopo를 하면 kopo의 정보를 보여주고 생략하면 현재 계정 정보를 보여준다)
groups root : root 계정이 속한 그룹을 보여준다. (groups kopo를 하면 kopo의 정보를 보여주고 생략하면 현재 계정 정보를 보여준다)
whoami : 현재 로그인 된 계정 확인.
su kopo : kopo 계정으로 전환.
su - : switch user root
su 와 su - 는 root 계정으로 전환한다는 점에서는 같지만
su는 root 계정의 환경변수를 가져오지 않고 현재의 환경변수를 사용하고
su - 는 root 계정의 환경변수까지 모두 사용한다.
sudo 커맨드를 사용하려면 '/etc/sudoers' 파일에 사용자가 등록되어 있어야 한다.
루트 권한 획득 후 'visjdo'를 실행하면 이 파일을 편집할 수 있다.
# visudo
내용은 다음과 같다. 기존의 root 사용자 밑에 넣어주자...
root ALL=(ALL:ALL) ALL
사용자 ALL=(ALL:ALL) ALL
exit : 로그아웃
env : 환경변수를 모두 보여줘. (=printenv)
export ABC=DEF : ABC라는 환경변수에 BBB라는 값을 생성.
echo ABC : ABC라는 환경변수 보기. (=env | grep ABC 처럼 grep과 파이프라인을 활용해서도 가능하다.) (echo $HOME, echo $PATH)
참고 : 기본 쉘 확인하기 echo $0
source ~/.zshrc : 환경변수 바로 실행 (~/.bashrc이거나 /etc/bash.bashrc 인 경우도 있다.)
addgroup ABC : ABC라는 그룹 생성. (groupadd는 불가능하다. adduser처럼 useradd가 될 것 같지만 불가능.)
addgroup -g 1005 ABC : GID를 직접 할당해서 ABC라는 그룹 생성.
addgroup kopo ABC : kopo 계정을 ABC 그룹에 할당. (id kopo로 확인 가능.)
sudo ~~~ 이런 수퍼유저 권한을 얻어 명령을 실행하는게 무조건 되는게 아니다.
'id 계정이름' 을 했을 때 해당 계정이 sudo 그룹에 포함이 되어 있어야 가능하다.
i.e.
id kopo
udi=1000(kopo) gid=1000(kopo) groups=1000(kopo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd),1003(kopostudy)
id kopo2
udi=1001(kopo2) gid=1001(kopo2) groups=1001(kopo2)
라면 kopo 계정은 sudo를 이용할 수 있지만 kopo2는 sudo를 이용할 수 없다.
따라서 kopo2에게 sudo를 이용할 수 있도록 권한을 주려면
addgroup kopo2 sudo 를 해주면 된다.
delgroup kopo ABC : kopo 계정을 ABC 그룹에서 삭제. (id kopo로 확인 가능.)
프로세스 점유로 삭제 실패시(returned error code 8. Exiting.)
// 삭제할 유저가 'kopo'일 때('kopo'외에 다른 로그인 가능한 계정이 있어야한다. root 접속을 열어두거나...)
// 1. root 계정 전환
su -
// 2. kopo의 프로세스 확인
ps -aux | grep kopo
// 3. kopo의 프로세스 죽이기
sudo pkill -u kopo
// 4. 프로세스 죽었나 확인
ps -aux | grep kopo
// 5. 만약 남은 프로세스가 있다면 프로세스 아이디로 강제로 죽이기(root 계정이라 sudo 없이 해도 된다.)
kill -9 프로세스번호
// 6. 계정 로그인('kopo'가 아닌 다른 계정으로 로그인한다.)
// 7. root 계정 전환
su -
// 8. 계정 삭제
deluser kopo
// 9. 계정 삭제 확인
id kopo
cat /etc/group : 모든 그룹을 본다. (vi도 된다)
cat /etc/passwd : 모든 계정을 본다.
cut -f1 -d: /etc/passwd : 모든 계정을 본다.(계정 이름만 잘라서 본다. cat이 아니라 cut이다. d: 뒤에 ' /etc/passwd'(d: 뒤에 공백 한 칸 포함)를 꼭 붙인다.)
adduser를 통해 추가된 계정만 보기
grep /bin/bash /etc/passwd
grep /bin/bash /etc/passwd | cut -f1 -d:
vi 편집기 (nano 에디터가 더 쉽다고 한다...)
vimtutor ko : vim 연습기
help register<return> : for information
q<return> : to exit
help<return> or <F1> for on-line hlep
help version8<return> for version info
vi a.txt : a.txt라는 파일이 있다면 해당 파일을 열고, 없다면 임시로 생성해서 연다.
i : insert 모드로 전환. (=a)
esc : command 모드로 전환. (명령할 때는 : 를 붙이고 한다.)
:q! : quit (저장하지 않고 종료)
:w : write (저장)
:wq : write and quit (저장 후 종료)
h j k l : ← ↓ ↑ → (그냥 방향키 쓰자...)
gg : 맨 위로 커서 이동
G : 맨 아래로 커서 이동
H : 화면 위로 커서 이동
M : 화면 중간으로 커서 이동
L : 화면 맨 아래로 커서 이동
:set nu : 라인 보기
/ABC : 'ABC' 를 찾는다.
아... 근데 putty에서는 전부 이렇게 해야하는데 맥에서는 real 터미널로 접속해서 그런지
Control + 방향키, 마우스로 드래그, Command + F, Command + C, Command + V 등이 다 된다..... -_-;;
gg, G, dd, :q!, :w, :wq, :set nu 이것만 알면 나머지는 맥에서 쓰던것처럼 다 되네;;; 하지만... 우리나라 회사는 맥은 비싸서 다 윈도우만 쓰겠지.........

SSH 설치하기(리눅스 설치 화면에서 SSH 설치 옵션 선택을 안 했다면 별도로 설치해줘야한다.)
$ dpkg -l | grep openssh-server
$ sudo apt-get install openssh-server
$ sudo service ssh start
root 계정 암호 생성하기
sudo passwd root
UNIX 비번 설정하라고 나온다. 이때 입력한 비밀번호로 ssh에 root 접속할 때 사용한다.
ssh -p (port number) id@address
로 접속하면 된다.
Root 계졍 SSH 접속하기
Root는 보안상 SSH 접속이 불가능하다. vi 에디터를 통해 설정을 변경한다.
vi /etc/ssh/sshd_config 로 열어서 PermitRootLogin 항목을 찾아 yes로 바꿔준다. (vi 에디터에서 'i' 또는 'a'를 누르면 편집이 가능.)
esc를 눌러 편집 종료하고 :wq (저장하고 종료함)를 입력하여 종료.
(편집 없이 나갈때는 control + z 누르면 나가지는데 임시파일이 남는다. 안 좋은 방법.)
이제 ssh 서비스를 재시작한다.
/etc/init.d/ssh restart (또는 service ssh restart)
SSH 연결 끊어짐 (Connection to localhost closed by remote host.)
// 1. 접속 허용할 대역 설정
vi /etc/hosts.allow
// 주석이 끝난 다음 아래 내용을 추가
192.168.0.10 <- 192.168.0.10 접속을 허용
192.168.0. <- 192.168.0.x 대역 접속을 허용
192.168. <- 192.168.x.x 대역 접속을 허용
// 2. 접속 거절할 대역 설정 (ALL로 설정하면 1번에서 허용한 대역을 제외하고 모두 거절된다.)
vi /etc/hosts.deny
// 주석이 끝난 다음 아래 내용을 추가
sshd: ALL
'개발자 > OS(Linux, Docker, VM...)' 카테고리의 다른 글
vi 에디터 (vim 에디터) (0) | 2020.04.09 |
---|---|
리눅스 명령어 10가지 종류 (0) | 2020.04.09 |
유닉스계 시스템 권한(Permission) - 유닉스, 맥, 리눅스, iOS, 안드로이드... (0) | 2020.04.09 |
SSH로 접속하기 (0) | 2020.03.25 |
GID, UID , PID, 그리고 GID/UID 찾는 방법 (0) | 2020.03.25 |