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는 파일 내부의 값의 변경을 의미한다.
     timemin으로 바꿀 수 있다. 이 경우 시간이 아니라 분 단위로 검색한다.

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

 

 

 

+ Recent posts