Linux 기본 명령어

이동명·2023년 10월 24일
0

Cent OS

목록 보기
1/13
post-thumbnail

Linux 자주 안쓰니까 명령어에 좀 부실한 것 같다. 이번 포스팅으로 다시 복습하자.

파일 내용 확인 명령어

cat

  • ASCII TEXT 로 제작된 일반 파일 내용을 확인할때 사용하는 명령어이다.
file /etc/passwd
	
-> /etc/passwd: ASCII text (ASCII 파일이다.)

cat -n /etc/passwd

-> 라인이 같이 출력된다.

more(less)

  • ACSII TEXT 로 제작된 일반 파일 내용을 한페이지씩 출력하는 명령어이다.

  • 스페이스바를 누르면 한페이지, 엔터를 누르면 한줄씩 볼 수 있음.


more /etc/services

-> 이런식으로 볼 수 있음

cat /etc/services | more

-> 이전 명령어의 출력을 다음 명령어의 입력으로 전달하는 파이프 즉 cat 에서 나온 것을 more로 본다 라는 의미.
  • 라인 위에서부터 N 번째 라인까지 출력하는 명령어이다.

  • 또는, N 글자까지 출력도 가능하다.

-n 몇번째 라인 지정(기본 10)
-c 문자수맊큼 출력


 head /etc/passwd
 -> 기본 위에서 10head -n 5 /etc/passwd
 -> 라인 지정 위에서 5head -c 10 /etc/passwd
 -> -c 는 위에서 문자 10cat /etc/passwd | head -n 5
 -> 이런식으로 파이프 응용도 가능하겠다. passwd의 위에서 5

tail

  • 라인 밑에서부터 N 번째 라인까지 출력하는 명령어이다.

  • 또는 마지막부터 N 글짜까지 출력할 수 있다.


tail /etc/passwd
-> 아래서 10tail -n 5 /etc/passwd
-> 줄 지정 아래서 5tail -c 10 /etc/passwd
-> 뒤에서 10글자

cat /etc/passwd | tail -n 5
-> 이런식으로 파이프 응용 가능 하겠다. 그냥 head 의 반대임

sed, awk

  • 특정 라인을 빼온다

sed -n 5p /etc/passwd
-> 5번째라인

cat -n /etc/passwd | head

-> 명령어로 학인해보니 맞음

sed -n -e '1p' -e '5p' /etc/passwd 
-> 15번 라인 같이 출력

sed -n '5,15p' /etc/passwd
-> 1번부터 15번까지

sed -n '15,$p' /etc/passwd
-> 15번째 부터 싹 다

awk 'NR==5' /etc/passwd
-> 5번째 라인

awk "NR==5 || NR==15" /etc/passwd
-> 5번째 라인 또는 15번 째 라인

awk "NR==5 || NR==15 || NR==20" /etc/passwd
-> 5,15,20 라인

awk "NR>=5 && NR<=15" /etc/passwd
-> 5번라인 부터 15번까지

awk "NR>=15" /etc/passwd
-> 15번부터 끝까지

명령어 여러개 실행

date
-> 2022. 07. 26. () 21:10:00 KST 뭐 이런식으로 날짜 나옴

cal
-> 캘린더 나옴

date ; cal 
-> 날짜랑 캘린더 같이 나옴. 앞의 명렁어 틀려도 뒤에 것 실행됨

date && cal
-> 날짜랑 캘린더 같이 나옴. 앞의 명렁어 틀리면 뒤에거 실행 안 됨

예제

  • /etc/passwd 인데 아래처럼 출력해보자
root:x:0:0:root:/root:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
  • 풀이

cat -n /etc/passwd
-> 으로 해당 라인이 몇번째인지 확인 함 첫번째, 마지막 2개 였음.

cat /etc/passwd | awk 'NR==1 || NR==47 || NR==48'

cat /etc/passwd | awk 'NR==1' && cat /etc/passwd tail -2

cat /etc/passwd | sed -n '1p' && tail -2 /etc/passwd

head -1 /etc/passwd && tail -2 /etc/passwd

4가지 방법으로 풀어봤음

file

  • 파일 유형 무엇인지를 확인하는 명령어이다.

file /etc/passwd
->/etc/passwd: ASCII text

file /etc
-> /etc: directory

file /usr/bin/ls
-> /usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ldlinux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=bccb4c17516c6a9ad59c3ec19b347c83236c04c2, stripped
-> == 실행파일이다 그리고 기계어라 cat으로 안보임

file /var/run/utmp
-> /var/run/utmp: firmware 0 v0 (revision 0) V2, 0 bytes or less, UNKNOWN2 0x38365f36, at 0x0 0 bytes , at
0x0 0 bytes
-> 펌웨어 란다

file /usr/bin/lesspipe.sh
-> /usr/bin/lesspipe.sh: POSIX shell script, ASCII text executable
-> 실행파일인데 cat으로 볼 수 있음

검색 관련 명령어

grep


- 파일 및 디렉토리 안에 있는 문자 또는 문자열 내용을 검색하는 명령어이다

-w 해당 문자(문자열)만 검색
-v 해당 문자(문자열)를 제외한 나머지 검색
-i 대소문자 구분하지 않고 검색
-E 문자(문자열) 다수 검색

grep telnet /etc/services
-> /etc/services 가 10000줄이 넘는데 telnet이 포함된 걸 볼 수 있음

grep -w telnet /etc/services
-> 해당 문자(문자열)만 검색함 위의 명령어는 rtelnet, telnets  이런게 나왔었음

grep ^telnet /etc/services
-> ^ 는 라인의 시작을 의미함 즉 telnet 으로 시작하는게 나옴

grep Controller$ /etc/services
-> $ 는 ^ 의 반대로 라인의 끝을 의미함 즉 Controller로 끝나는것들이 나옴

ls -l /usr/bin  | grep mkd
-> 디렉토리 안에 있는 것도 검색가능함 mkd 포함된 결과

ps -ef
-> 동작중인 프로세스 보기

ps -ef | grep sleep
-> 응용가능 sleep 포함된 것

ps -ef | grep sleep | grep -v grep
-> 방금 실행한 명령도 ps 로 잡혀서 -v grep 으로 없애줄 수 있음.

  • 'grep' 명령은 대소문자를 구분하여 문자를 검색한다. 만약, 대소문자 구분 없이 검색하라면 '-i' 옵션을 사용해야 한다.
echo abcd > file1
echo ABCD >> file1

grep ab file1
-> ab 포함 찾아옴

grep AB file1
-> AB 포함 찾아옴

grep -i ab file1
-> ab, AB 둘다 찾아옴

egrep(grep -E)

  • 파일 및 디렉토리 안에 있는 문자 또는 문자열 다수 내용을 검색하는 명령어이다.
cat /etc/services | egrep "^telnet|^ssh|^http"
->telnet, ssh, http 가 포함된 검색결과가 나옴

ps -ef | egrep "gnome-shell|sleep"
-> 이런 활용도 가능하고

rpm -ql openssh
-> openssh 패키지에 포함된 파일 목록을 보여줌.

rpm -ql openssh | egrep -v "/doc|/license|/man"
-> 파일 목록 중에서 doc,license,man 빼고 보여줘

예제 풀어보자

다음과 같이 ps -ef 결과 중에 '/usr/sbin/gdm', 'sleep' 문자열맊 검색되어 출력되도록 한다

UID PID PPID C STIME TTY TIME CMD
root 1212 1 0 19:04 ? 00:00:00 /usr/sbin/gdm
root 4803 963 0 20:09 ? 00:00:00 sleep 60

-> ps -ef | egrep "/usr/sbin/gdm|sleep" | grep -v grep 으로 풀어봤음

 cat /etc/passwd 출력 내용 중에 다음과 같이 출력되도록 한다.
 
root:x:0:0:root:/root:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash

-> cat /etc/passwd | egrep "^root|^user" 으로 풀어봤음

PATH 환경 변수

  • PATH 환경 변수에 등록된 디렉토리 안에 있는 실행 파일들은 어떤 위치에 있어도 실행이 가능하다.
whereis ls
-> ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

원래 /usr/bin/ls 여기 있는데 /usr/bin/ls 디렉토리가 PATH 환경변수 설정에 되어있는 것

env | grep PATH
-> PATH= /usr/local/bin: /usr/local/sbin: /usr/bin: /usr/sbin: /root/bin

echo $PATH
-> 이렇게도 확인 가능

PATH 라는 환경변수임.

/usr/local/bin:
/usr/local/sbin:
/usr/bin:
/usr/sbin:
/root/bin

위의 디렉토리에 들어있는 명령어들이 어디에서나 사용할 수 있는 이유는 PATH 환경변수에 설정이 되어있기 때문임.

만약 ls 가 들어있는 /usr/bin에서 ls를 지우면 못 씀

지우면 이렇게 써야함 -> /usr/bin/ls -l 

귀찮잖아 그러니까 환경변수에 등록이 해놓은것임. 이건 윈도우도 똑같음

윈도우 환경변수 열어보면 계정 변수랑 시스템 변수 있는데 계정차이임. 그 시스템변수 밑에 PATH라고 있는데 이 곳에 윈도우 쪽 PATH 환경변수들이 들어있음

whereis & which

  • 파일을 찾는 명령어이다.

  • $PATH 홖경 변수에 등록된 디렉토리와 관계 없이 파일을 검색할 수 있다


어디 디렉토리에 있는지 ?
whereis ls
-> /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
-> alias 안 나옴
-> PATH 환경변수에 등록된 디렉토리뿐만 아니라 모든 디렉토리 다 검색

which ls
-> alias ls='ls --color=auto --time-style=long-iso'
 /usr/bin/ls
-> alias 까지 나옴
-> PATH 환경변수에 등록된 디렉토리에서만 찾음

alias

alias
-> alias 다 나옴

alias ls='ls --color=auto --time-style=long-iso'

ls 는 이거 쓰고 있었던거임

find

  • 경로 지정과 다양한 옵션을 이용하여 파일 및 디렉토리를 검색하는 명령어이다.
find / -name httpd
-> root 디렉토리부터 검색할건데 httpd 가 들어간 파일이든 디렉토리든 다 검색

find /etc -name httpd
-> /etc 부터

find /etc -name pass*
-> /etc 부터 pass로 시작되는 것

find /etc -name *conf
-> /etc 부터 conf 로 끝나는 것

find /etc/rc.d -type d
-> 디렉토리만 

find /etc/rc.d -type f
-> 파일만

find / -user root -perm -4000 -type f
-> 

기타 관리 명령어

wc

 wc /etc/passwd
 -> 48 106 2648 /etc/passwd
 -> 라인 단어 글자
 
wc -l /etc/passwd
wc -w /etc/passwd
wc -c /etc/passwd

이렇게 따로따로도 검색가능

rpm -ql
-> 리눅스 설치했을때 설치된 프로그램들

rpm -qa | wc -l
-> 리눅스에 설치된 패캐지 개수를 알수 있다.

ps -ef | wc -l 
-> 리눅스에 실행 중인 프로세스 개수를 알 수 있다.

su, su -

  • 다른 계정으로 전환할때 사용하는 명령어이다

  • su 는 기존 계정의 홖경 변수 사용하며, su - 는 전환된 계정의 환경 변수를 사용한다.


a=123
export a
env | grep ^a
->a=123

echo $a
->100

su user1
echo $a
-> 100

root 계정에서 만든 a라는 변수가 user1 이라는 계정에서도 사용이 가능함

su - user1
echo $a
-> a 변수 안나옴

차이점

- 를 안붙이고 su user1
-> 계정은 user1 이지만 root 계정의 변수를 씀

- 를 붙이고 su user1
-> root 계정의 변수를 안쓰고 user1 의 변수를 씀

id, groups

  • 계정 ID 정보 확인, 계정 그룹 정보 확인

id
-> uid=0(root) gid=0(root) groups=0(root) 
현재 로그인한 계정의 계정 식별자, 그룹 식별자, 그룹이름

groups
-> 그룹 이름 보여줌

last

  • 로그인 시점부터 로그아웃까지 정보 및 현재 로그인 정보를 확인하는 명령어이다.

still logged in : 현재 접속중인 상태
tty : 본체 터미널 접속 포트
pts : 원격 접속 포트 (ssh 나 telnet으로 접속하면 보임)

last
-> 
root     tty2         tty2             Tue Oct 24 19:06   still logged in
reboot   system boot  4.18.0-365.el8.x Tue Oct 24 19:03   still running

root     tty2         tty2             Thu Oct 19 20:08 - down   (00:55)
reboot   system boot  4.18.0-365.el8.x Thu Oct 19 20:03 - 21:04  (01:00)

-> Tue Oct 24 19:06 에 본체로 로그인 해서 still logged in (아직까지 쓰고있음)

-> Thu Oct 19 20:08 에 로그아웃

이런식으로 기록이 나와있음 /var/log/wtmp 에 들어있긴 함

lastlog

  • 모든 사용자의 마지막 로그인 정보를 확인하는 명령어이다.
lastlog

->
생략..
clevis                                     **한번도 로그인한 적이 없습니다**
gdm              tty1                      화 1024 19:03:50 +0900 2023
gnome-initial-setup                           **한번도 로그인한 적이 없습니다**
sshd                                       **한번도 로그인한 적이 없습니다**
tcpdump                                    **한번도 로그인한 적이 없습니다**
fedora                                     **한번도 로그인한 적이 없습니다**
apache                                     **한번도 로그인한 적이 없습니다**
user1            pts/0                     화 1024 21:15:56 +0900 2023

이런식으로 언제 마지막 로그인 했는지 나옴

lastb

  • 로그인 실패 정보를 확인하는 명령어이다.

lastb
->

root ssh:notty 192.168.2.1 Mon Feb 6 13:53 - 13:53 (00:00)
root ssh:notty 192.168.2.1 Mon Feb 6 13:53 - 13:53 (00:00)

192.168.2.1 이런 ip 로 로그인 시도를 했는데 실패한 흔적 2

who, w

  • 현재 시스템에 접속된 계정, IP 주소, 실행한 프로세스 정보를 확인하는 명령어이다.

who
-> root     tty2         2023-10-24 19:06 (tty2)
root 계정으로 본체접속 함

w
->
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2     tty2             19:06    2:24m  1:54   0.01s /usr/libexec/gsd-disk-utility-

root 로 본체접속해서 로그인했고 /usr/libexec/gsd-disk-utility- 라는 프로세스 사용 중

암튼 w가 조금 더 자세하게 나오고 who 는 간단하게 나옴

외부/내부 명령어

  • 외부 명령어 : 특정 디렉토리에 파일로 존재하는 명령어(Ex : /bin, /sbin, /usr/bin)
  • 내부 명령어 : 쉘에서 제공하는 명령어
  • 구분하는 방법 : man 명령어로 확인 가능
man ls
-> ls 에 대한 메뉴얼

man cd
-> cd 에 대한 도움말만 나오는게 아니라 다른 명령어에 대한 도움말도 나옴

사용자가 명령어를 치면 -> 
bash 라는 쉘이 명령어 받아서 해석을 함 ->
해석한 명령어를 01로 분석을 해서 ->
리눅스 중앙처리장치에 넘김 -> 이를 bash 내부 명령어 라고 불르긴 했었다.

centos 6 버전에선 중요했는데 현재는 크게 중요하지 않음

man rmdir
-> 이건 외부 명령어 왜냐? bash라는게 안나옴

man fg
-> fg가 뭔진 모르겠지만 아무튼 이건 내부 명렁어 bash가 나옴
profile
Web Developer

0개의 댓글