리눅스 명령어 모음

박영준·2024년 3월 27일
0

Linux

목록 보기
1/8

1. 기본 명령어

pwd

$ pwd
/home/itholic
  • "print working directory"

  • 현재 작업중인 디렉토리 정보 출력

  • 항상 현재 위치 확인하기!

cd

# 어느곳에 있든 홈 디렉토리로 바로 이동
cd ~
  • "change directory"

  • 경로 이동

    • 절대 경로, 상대 경로 이동 가능
    • 절대 경로와 상대 경로 中 상황에 따라 편한 것을 사용
  • 경로 마지막에 /(슬래쉬)는 입력하지 않아도 무방하나, 디렉토리라는 것을 명확히 나타내기 위해 편의상 입력

절대 경로

# 예시1 : d 디렉토리로 이동 + 현재 위치 확인
cd /a/b/c/d/
pwd

# 예시2 : b 디렉토리로 이동 + 현재 위치 확인
cd /a/b/
pwd

# 예시3 : r 디렉토리로 이동하기
cd /q/w/e/r/
  • '현재 위치에 상관 없이' 이동
    • 무조건 최상위에서부터 시작하는 경로이기 때문에, 현재 위치 고려할 필요 X
    • 그냥 최상위부터 해당 디렉토리가 위치하는 곳 까지의 경로를 차례대로 적어주면 됨

상대 경로

# 예시1 : 현재 위치가 a/b/ 디렉토리 일 때, d 디렉토리로 이동 + 현재 위치 확인
cd ./c/d/
pwd

# 예시2 : 현재 경로 /a/b/c/b/ 일 때, 이전(상위) 디렉토리로 2회 이동 + 현재 위치 확인
cd ../../
pwd			# 이때 현재 경로 : /a/b/

a/b/까지의 경로는 자신의 위치이므로, .(마침표)로 표기됨
이후, 나머지 경로인 /c/d/ 를 입력하여 경로 이동함

# 예시3 : 현재 경로가 b 디렉토리일 경우, r 디렉토리로 이동하기
cd ../../q/w/e/r/

../ 로 a로 이동
../ 로 최상위 디렉토리로 이동
q/w/e/r/ 로 r 디렉토리까지 이동

  • '현재 자신이 있는 위치를 기준으로’ 이동

  • 현재 자신이 있는 위치는 .(마침표) 로 표기

  • .. : 이전(상위) 디렉토리로 이동

ls

옵션

-l : 상세히 출력

-a : 경로안의 모든 파일을 나열 (숨김파일도 포함)

-R : 위치한 디렉토리 하부 디렉토리의 파일까지 모두 출력

-r : 내림차순 정렬

-t : 수정된 시간을 기준으로 정렬

예시

# 예시1 : 디렉토리 목록 확인
$ ls
testfile1  testfile2  testfile3

# 예시2 : 자세한 내용 출력. 내용 > 퍼미션(권한), 포함된 파일수, 소유자, 그룹, 파일크기, 수정일자, 파일 이름
$ ls -l
total 0
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile1
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile2
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile3

# 예시3 : 숨겨진 파일을 포함한 모든 파일 보여주기
$ ls -a
./  ../  testfile1  testfile2  testfile3

# 예시4 : 숨겨진 파일을 포함한 모든 파일 자세히 출력
$ ls -al
total 4
drwxr-xr-x 1 itholic 197121 0 116 22:08 ./
drwxr-xr-x 1 itholic 197121 0 116 22:08 ../
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile1
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile2
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile3

# 예시5 : 시간의(t) 역순으로(r) 자세히(l) 출력 (아래부터 최신순 정렬)
## logs 디렉터리에서 가장 최근에 발생한 log 파일을 찾는 데에 유용
ls -lrt
  • "list"

  • 디렉토리 목록 확인

    • ll : ls -l 과 동일(l은 long을 의미). 디렉토리 목록을 상세히 출력

cp

예시1 : 디렉토리 목록 확인
$ ls
testdir/  testfile

# 예시2 : 앞에 파일이 오고, 뒤에도 파일이 오는 경우
# cp [복사할 파일명] [복사한 파일의 새로운 파일명]
$ cp file1 file2

# 예시3 : 앞에 파일이 오고, 뒤에 디렉토리가 오는 경우
# cp [복사할 파일명] [복사할 파일을 붙여넣을 디렉토리명]
$ cp file1 file2 dir1/
dir1/  file1  file2				# 여기서는 file1, file2 처럼 여러개의 파일을 복사했음

# 예시4 : 디렉토리 전체 복사
cp -r dir1/ dir2/
dir1/  dir2/
  • "copy"

  • 파일 or 디렉토리 복사(사실상 복사해서 붙여넣는 것)

    • 단, 디렉토리 복사 시에는 -r 옵션 필요

팁!
tree 명령어 사용시, 디렉토리 구조를 트리 형석으로 확인 가능

$ tree dir1
$ tree dir2

mv

# mv [옵션] [이동시킬 디렉토리/파일] [이동 될 위치]

# 예시1 : 현재 디렉토리의 log.txt 파일을 folder 디렉토리로 이동
mv log.txt folder

# 예시2 : 현재 디렉토리의 log.txt 파일의 이름을 log2.txt로 변경
mv log.txt log2.txt

# 예시3 : /app/bin/logs 디렉토리의 log.txt 파일을 /app/dw 디렉토리로 이동
mv /app/bin/logs/log.txt /app/dw
  • "move"

  • 용도

    1. 파일 or 디렉토리 이동

      • cp와 달리, 디렉토리 이동 시에도 -r 옵션 필요없음
    2. 이름 변경

mkdir

# 예시1 : new_folder 디렉토리 생성
mkdir new_folder

# 예시2 : /home/user/위치에 new_folder 디렉토리 생성
mkdir /home/user/new_folder

# 예시3 : new_folder, new_folder2, new_folder3 디렉토리 생성
mkdir new_folder new_folder2 new_folder3

# 예시4 : 

# 예시5 : 


# 예시6 : 
  • "make directory"

  • 디렉토리 생성

    • -p 옵션 : 하위 디렉토리까지 한 번에 생성
  • 경로를 지정하지 않으면 현 위치를 Defualt로 함

rm

# 예시1 : 디렉토리 목록 확인
$ ls
testdir/  testfile1  testfile2

# 예시2 : rm -f 파일 명
$ rm -f testfile1
$ ls
testdir/  testfile2

# 예시3 : rm -rf 디렉토리 명 
$ rm -rf testdir/
$ ls
testfile2
  • "remove"

  • 파일 or 디렉토리 삭제

    • 단, 디렉토리 삭제 시에는 -r 옵션 필요
    • -f 옵션 : 삭제 여부 묻지 않고 바로 삭제
  • 주의!
    디렉토리 삭제 시에는 하위 디렉토리까지 모두 삭제돼버림. 복구 불가

touch

# 최근 업데이트 일자 확인
$ ls -l
total 0
-rw-r--r-- 1 itholic 197121 0 116 22:08 testfile1

# touch [파일명]
$ touch testfile1
$ ls -l
total 0
-rw-r--r-- 1 itholic 197121 0 116 22:43 testfile1

$ touch testfile2
$ ls -l
total 0
-rw-r--r-- 1 itholic 197121 0 116 22:43 testfile1
-rw-r--r-- 1 itholic 197121 0 116 22:44 testfile2
  • 파일 or 디렉토리의 최근 업데이트 일자를 현재 시간으로 변경
    • ls -l : 최근 업데이트 일자 확인

vi

# 예시1 : a.txt 파일 편집하기
$ vi a.txt

# 예시2 : .bash_profile 을 vi편집기로 실행
vi .bash_profile
  • 리눅스 에디터(편집기)

.bash_profile

  • 사용자 계정에서 환경을 설정해주는 파일
  • 리눅스에서 너무 긴 명령어 이거나 특정 파일을 실행할 때
    보다 간결, 쉽게 사용하기 위해서 명령어를 명명하기 위해 사용하는 파일

. .bash_profile
bash_profile을 재실행, 한번더 읽음 (.은 현재 디렉토리를 의미)

단축키

  • Ctrl + B : 한 페이지 위로 이동 (log 볼 때 유용)
  • Shift + g : 가장 아래로 이동
  • Shift + G : 가장 위로 이동

3가지 모드

  1. 명령 모드
    • vi 실행 시, 가장 먼저 접하는 모드
  2. 입력 모드 (insert 모드)
    • 문서 편집할 수 있음
      • 방법 : i
    • 화면 하단에 --INSERT-- 라고 표시됨
  3. ex 명령 모드 (클론 모드)
    • :(콜론)을 눌러서 전환 가능
      • 방법 : shift + ;
    • 화면 맨 아랫줄에서 명령 수행

명령어

i키 : 명령모드 -> 입력모드로 전환
ESC키 : 입력모드-> 명령모드로 전환

u키 : Ctrl + z
Ctrl+r : 되돌리기한 것을 다시 실행(복구)

n키 : 뒤로 검색
N키 : 앞으로 검색

:q : 종료 (저장하지 않고 실행하면 오류 발생)

:q! : 저장하지 않고 종료

:w : 저장

:wq : 저장 후 종료

:wq 파일 이름 : 저장후 파일 이름 지정

find

파일명으로 찾기 (-name)

# 현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"

# 현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"

# 현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"

# 현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"

# 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete

타입으로 찾기 (-type)

# 현재 디렉토리에서 모든 디렉토리 찾기
find . -type d

# 현재 디렉토리에서 모든 파일 찾기
find . -type f

# 현재 디렉토리에서 menu.jsp가 들어가는 파일 찾기
find . -name "*menu.jsp*" -type f

파일 내부 문자열 찾기

find . -name "*.jsp" | xargs grep [찾을문자열]

configure

# 나에게 라이브러리 등의 도구들이 다 있는지 체크
./configure
  • 설치 전에 여러가지 옵션들을 설정하며, 컴파일 환경을 검사하는 단계
  • 소스 파일에 대한 환경설정을 해주는 명령어

2. su, su -, sudo

su

# root 계정의 환경 변수를 가져오지 않고, 현재 계정의 환경 변수를 사용
su root
  • "Switch User"

  • 현재 계정을 로그아웃하지 않고, 다른 계정으로 전환

su -

# 기본 /root 디렉토리로 이동 (환경 변수를 가져온다는 의미)
su - root

참고: 환경 변수

sudo

  • "SuperUser DO"

  • 현재 계정에서 단순히 root 의 권한 만을 빌리는 것

    • sudo 명렁어를 실행하게 되면 root 권한으로 명령어를 실행
    • 즉, 하나의 명령에 대하여 일시적으로 root 권한을 사용
  • 실행하기 전 현재 사용자의 비밀번호를 물어봄

3. 압축

압축 해제

# zip 압축 해제
# unzip 압축 파일명.zip
unzip test.zip

# 특정 디렉토리에 zip 파일 압축 해제
# unzip 압축해제할파일명.zip -d 원하는폴더경로
unzip test.zip -d ./home/devkuma 

# tar 압축 해제
tar -xvf 파일명.tar

압축

# 특정 디렉토리에 모든 파일을 test.zip으로 압축
zip test.zip ./*

# 현재 폴더와 그 하위 폴더까지 모두 압축
zip -r test.zip ./*

4. 기타 명령어

# 모든 파일
./*

# 다음 명령어도 이어서 수행하도록
;

5. 쉘(shell, sh)

# 확장자가 sh인
*.sh

# 확장자가 sh인 파일에 대해 모든 사용자에 모든 권한 추가
chmod 777 *./sh

# 톰캣 서버 시작 - 톰캣(tomcat) 실행. tomcat의 bin 경로인 경우
./startup.sh

# 톰캣 서버 시작 - 톰캣(tomcat) 실행. tomcat의 bin 경로가 아닌 경우
/usr/local/tomcat/bin/startup.sh  

# 톰캣 서버 종료 - tomcat의 bin 경로인 경우
./shutdown.sh

# 톰캣 서버 종료 - tomcat의 bin 경로가 아닌 경우
/usr/local/tomcat/bin/shutdown.sh  
  • 사용자와 운영체제 커널 간의 인터페이스 역할(다리 역할)을 수행

  • 텍스트 기반의 명령어 해석기

  • GLI 환경(터미널)에 사용자가 입력한 명령을 해석/관리해서 운영체제가 해당 명령어를 알아들을 수 있게 해주는 프로그램

/usr/local/tomcat

  • 리눅스에서 설치한 톰캣의 경로

6. echo

# 전역 변수 및 환경 변수의 값 확인
echo $환경_변수

7. grep

옵션

-r : 하위 디렉토리를 포함한 모든 파일에서 검색

-m 숫자 : 최대로 표시될 수 있는 결과 제한

-c : 일치하는 행의 수 출력
-v : 일치하지 않는 행만 출력
-n : 포함된 행의 번호를 함께 출력
-l : 패턴이 포함된 파일의 이름 출력

-i : 대소문자 구분 X
-I : 대소문자 구분 O

-w : 단어와 일치하는 행만 출력
-x : 라인과 일치하는 행만 출력

-E : 패턴을 정규표현식으로 찾기
-F : 패턴을 문자열로 찾기

예시

grep [옵션] [정규표현식] [파일명]

# mylog.log 파일의 끝에서부터 새로 추가되는 내용을 모니터링하면서, 그 中 'aaa'라는 문자열이 포함된 라인들만 출력
tail -f mylog.log | grep 'aaa'

# 하위 디렉토리를 포함한 모든 파일(r)에서 hso10 이 포함된 행 번호(n)를 대소문자 구분없이(i) 검색
grep -rni hso10
  • 파일 내에서 특정 문자열을 검색

  • pipe(|)를 사용해 다른 명령어와 함께 사용하는 경우가 많음

8. systemctl

# systemctl [명령] [서비스명]
systemctl start httpd		# 아파치 서비스 시작
sysyemctl start tomcat.service		# 톰캣 서비스 시작

# 서비스 상태 확인 (서비스가 구동 중인지 아닌지 확인 가능)
systemctl status

9. ps

옵션

e 옵션 : (커널 프로세스를 제외한) 모든 프로세스를 출력

f 옵션 : 풀 포맷으로 보여줌 (UID, PID 등... 을 함께 표시)

  • UID : User Id. 프로세스 소유자의 이름
  • PID : Process Id. 프로세스 식별변호
  • PPID : Parent PID. 부모 프로세스 ID

예시

# 실행중인 프로세스 목록과 상태 확인
ps [옵션]

# 풀 포맷으로 모든 프로세스의 목록과 상태를 확인
ps -ef

# 모든 프로세스 中 [찾을대상]만 출력
ps -ef | grep [찾을대상]
ps -ef | grep java
ps -ef | grep tomcat
ps -ef | grep apache
  • "process state"

  • 가동중인 상태

  • 중지된 상태

10. source

source [환경 설정 파일명]
  • 스크립트 파일을 수정한 후, 수정된 값을 바로 적용하기 위해 사용
    • ~/.bashrc 파일의 경우
      • ~/.bashrc 파일을 수정 후 저장해도, 수정한 내용이 바로 적용되지 않음
        • ~/bashrc 파일은 유저가 로그인 할 때 읽어들이는 파일이기 때문에,
          로그아웃 후 로그인하거나 리눅스를 재시작해야 적용이 됨

11. sed 명령어

# %s/[원본단어]/[바꿀단어]
:%s/foo/bar		# 모든 'foo'라는 문자열을 'bar'로 한꺼번에 치환

# %s/[원본단어]/[바꿀단어]/[옵션]
:%s/foo/bar/i		# 대소문자 구분없이 치환 (foo부터 Foo, FOo, FOO, fOo, fOO, foO, FoO 등... 까지도)
:%s/foo/bar/g		# 전역 치환
:%s/ORACLE/oracle/g
  • "stream editor", "스트림 편집기"

  • 주로 문자열을 치환 or 삭제할 때 사용

13. tail

# 파일의 끝 부분을 보여주는 명령어
# 주로 로그 파일의 최근 내용을 확인하고 싶을 때 사용 (system.println(); 와 같은 로그가 보임)
tail

# f옵션 ("follow")
# tail 명령이 종료가 되지 않고, 계속적으로 대기하면서 들어오는 문자를 출력
# log 파일을 실시간 모니터링 시 사용 가능
# 파일의 마지막 10라인을 실시간으로 계속 출력
tail -f

# 서비스 중인 톰캣의 로그 확인
tail -f /usr/local/tomcat/logs/catalina.out

# nohup.out의 로그들을 출력
tail -f nohup.out

# jhoms 재기동 할 때 확인
tail -f app.console

# tomcat 재기동 할 떄 확인
tail -f ../logs/catalina.out

catalina.out

  • 서버상에서 발생한 모든 내용(서버의 기동, 정지, 개시 등)을 기록한 로그가 쌓인 파일
  • 주의!
    • vi catalina.out 으로 열 경우, 매우 용량이 크다면 서버가 터질 수 있음
    • 이땐 로그를 여러 파일로 나눠서 여는 방법을 사용하기도 함
      • 예시 : split -b 800m catalina.out.2020-09-25 800m 단위로 로그파일을 나눠서 생성

nohup

  • "no hangups"
  • nohup 명령을 실행한 위치에 'nohup.out'이라는 log 파일이 생성됨
  • 눅스, 유닉스에서 명령어나 쉘 스크립트 파일(*. sh)을 데몬 형태로 실행시키는 프로그램
  • 터미널이나 세션이 종료되어도, 해당 프로세스가 종료되지 않고 진행한 작업이 완료될 때까지 수행하도록 함

14. SQL

# oradcle 계정으로 변경
su - oracle

# Oracle 데이터베이스에 관리자로 접속할 때, 사용자가 아닌(/) 슈퍼관리자인 SYS 계정으로 접속
sqlplus / as sysdba

# 사용자를 삭제할건데(drop user), 사용자의 이름인 intraware와 관련된 모든 객체(테이블, 뷰, 인덱스 등)를 함께 삭제
SQL> drop user intraware cascade;
User dropped.		# 처리 결과

# Oracle 데이터베이스를 시작
SQL> startup
ORACLE instance started.		# 처리 결과

# 세션을 수정할건데(alter session), 내부 파라미터의 값 "_oracle_script"을 true로 설정 
SQL> alter session set "_oracle_script"=true;
Session altered.		# 처리 결과

15. 기타 팁

gg : 첫 행으로 이동

Shift + g : 마지막 행으로 이동


윈도우 OS 에서 설치없이 리눅스 명령어 연습할 수 있는 사이트
https://bellard.org/jslinux/


참고: [linux] 리눅스 기본 명령어/자주 쓰는 명령어
참고: [linux] 리눅스 cd 명령어 실습 (절대경로, 상대경로)
참고: [Linux] 리눅스 ls 명령어 사용법 & 옵션 정리 (디렉토리 목록 확인)
참고: [리눅스 명령어][파일 처리] 파일 복사(cp)
참고: [Linux] 리눅스 mv 명령어 사용법, 리눅스 파일 이동 하는 법
참고: [Linux] 리눅스 mkdir 명령어(디렉토리 생성) 사용법 & 옵션 정리
참고: 리눅스 기초 명령어3 - ll, ls -R, ls -F
참고: [리눅스] vi 에디터 사용법
참고: 리눅스(Linux) su / su - / sudo 명령어, 차이
참고: 리눅스 cp 명령어 사용법 정리 (파일, 디렉토리 복사, 백업)
참고: 쉘(Shell, sh)에 대해여...(개요, 종류, Bash의 기본기능)
참고: [Linux] tar, gz, zip 압축 및 압축 해제
참고: [Linux] CentOS 7 자주쓰는 Tomcat 사용 명령어
참고: [Linux] 리눅스 echo 명령어, echo 옵션 및 사용법
참고: [Linux] systemctl 명령어 & 프로세스 상태 확인
참고: [리눅스/Vi] vi editor 문자열 치환(replace) 방법
참고: netstat 명령어 옵션 및 사용법
참고: 리눅스(Linux) netstat 명령어 사용법, 네트워크 상태 확인하기
참고: nohup 사용법과 nohup.out 파일 명 변경, 로그 없이, 날짜 별로 rotation 하는 방법 ( Linux )
참고: 리눅스 vi editor line(행) 이동 관련 명령 키
참고: 리눅스 많이 사용하는 기본명령어 5가지 모음
참고: [Linux] 리눅스 find 명령어 (파일 및 폴더 찾기, 옵션)

profile
개발자로 거듭나기!

0개의 댓글