포스코DX X 비트교육센터 6기 - 리눅스


유저 생성하기

[root@localhost ~]# useradd userl
[root@localhost ~]# cd /home
[root@localhost home]# ls -l
합계 0
drwx------. 2 userl     userl 62  8월 24 09:09 userl
drwx------. 2 webmaster wheel 83  8월 23 14:02 webmaster
[root@localhost home]# useradd -g users user2
[root@localhost home]# ls -l
합계 0
drwx------. 2 user2     users 62  8월 24 09:16 user2
drwx------. 2 userl     userl 62  8월 24 09:09 userl
drwx------. 2 webmaster wheel 83  8월 23 14:02 webmaster
[root@localhost home]# cat /etc/passwd
  • 홈 디렉터리가 안 생기는.
[root@localhost home]# useradd -M user3
[root@localhost home]# ls -l
합계 0
drwx------. 2 user2     users 62  8월 24 09:16 user2
drwx------. 2 userl     userl 62  8월 24 09:09 userl
drwx------. 2 webmaster wheel 83  8월 23 14:02 webmaster

  • useradd : 순수하게 ‘계정만’ 생성해주고, 기본 쉘인 sh가 할당된다. 홈 디렉터리나 비밀번호 등은 따로 설정이 필요하다.
  • adduser : 계정 생성 시 비밀번호와 사용자의 기타 정보를 입력받는다. 옵션을 통해 기본 쉘이나 로그인 옵션 등도 설정할 수 있다. 홈 디렉토리도 자동 생성된다.

  • userdel은 로그인은 안되지만, 아예 삭제는 아님.

명령

[root@localhost home]# userdel userl
userdel: user userl is currently used by process 7628
[root@localhost home]# ls -l
합계 0
drwx------. 2 user2     users 62  8월 24 09:16 user2
drwx------. 2 userl     userl 62  8월 24 09:09 userl
drwx------. 2 webmaster wheel 83  8월 23 14:02 webmaster

지우려면

[root@localhost home]# rm -rf userl
[root@localhost home]# ls -l
합계 0

지워진 것과 안 지워진 것.

[root@localhost home]# cat /etc/shadow
root:$6$bOWj8.Cb27AiBxr5$5C//G3eaILwjtMvCXDjslnOzPaBfUc9vDXvSFgvWpzxQ7ZcL0q/trwhEvw8xzhLw9jVI5Y4aalxu5ydPoM6n51::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-bus-proxy:!!:19592::::::
systemd-network:!!:19592::::::
dbus:!!:19592::::::
polkitd:!!:19592::::::
tss:!!:19592::::::
sshd:!!:19592::::::
postfix:!!:19592::::::
chrony:!!:19592::::::
webmaster:$6$yvfHa31b$DKb7iFNG8WWnug6K148zvGtYwYJf9O1cC3mL0aK9LTOh0GYdHC/J6a7AtNIowZ5vmgXY8w4TeNVO/.Fkfczqu1:19592:0:99999:7:::
userl:$6$/vzrWrLO$K6Zf.x2f7ucLAJReoz1aOehEjhrcPuHjugvvFnlT/s8MqJmmzGVWDs/47AoT3/fD6qgvakOqVb2ztzgS4Jupm1:19593:0:99999:7:::
user2:!!:19593:0:99999:7:::
user3:!!:19593:0:99999:7:::

[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
webmaster:x:1000:10::/home/webmaster:/bin/bash
userl:x:1001:1001::/home/userl:/bin/bash
user2:x:1002:100::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash

  • 완전 계정 삭제하기
[root@localhost home]# userdel -r user2
[root@localhost home]# ls -l
합계 0
drwx------. 2 userl     userl 62  8월 24 09:09 userl
drwx------. 2 webmaster wheel 83  8월 23 14:02 webmaster

그룹 만들기

[root@localhost home]# groupadd group1
[root@localhost home]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-bus-proxy:x:998:
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
ssh_keys:x:996:
dip:x:40:
tss:x:59:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:995:
userl:x:1001:
group1:x:1002:

그룹 삭제하기

[root@localhost home]# groupdel group1
[root@localhost home]# groupdel group1
groupdel: 'group1' 그룹이 없습니다
[root@localhost home]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-bus-proxy:x:998:
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
ssh_keys:x:996:
dip:x:40:
tss:x:59:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:995:
userl:x:1001:

루트로 돌아가기

[root@localhost home]# exit
logout
[webmaster@localhost ~]$ 

완전히 root계정으로 돌아가기.

su root 하면, 옛날 환경 변수가 유지된다.

ex) [root@localhost webmaster] 이렇게

그래서 환경변수도 완전히 바꾸려면, 아래와 같이.

[webmaster@localhost ~]$ su - root
암호:
마지막 로그인: 목  8월 24 09:39:55 KST 2023 일시 pts/0
[root@localhost ~]# 

루트 -> 다른 유저로

[root@localhost ~]# su - webmaster
마지막 로그인: 목  8월 24 09:05:50 KST 2023 192.168.0.145에서 시작 일시 pts/0
[webmaster@localhost ~]$ 

ls 의 옵션

  • ls : 정보 없이 이름만 list
  • ls -l : 자세하게 list 소유자, 생성일, 업데이트 정보, 자식 디렉토리 개수 등…
  • ls -la : 사이즈도 나옴
  • ls -lh : 사이즈에 단위가 붙음
  • ls -F : 하위디렉터리도 다 보임

보통 ls -la 정도를 많이 함.

alias

[webmaster@localhost etc]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

  • ll이라고 치면 ls -l이 나옴.

디렉토리 만들기

[webmaster@localhost ~]$ pwd
/home/webmaster
[webmaster@localhost ~]$ mkdir dir1
[webmaster@localhost ~]$ ls
dir1

[webmaster@localhost ~]$ mkdir -p dir2/subdir1
[webmaster@localhost ~]$ ls
dir1  dir2
[webmaster@localhost ~]$ ls dir2
subdir1

디렉토리 지우기

[webmaster@localhost ~]$ rmdir dir1
[webmaster@localhost ~]$ ls
dir2

rm은 디렉토리가 완전히 비어있어야 지울 수 있는 명령어 이다.

그래서 rmdir dir2는 에러 발생.

이렇게 해야 가능

[webmaster@localhost ~]$ rmdir -p dir2/subdir1
[webmaster@localhost ~]$ ls

=> 그래서 rmdir말구, rm 사용하기

경로

  • 절대경로 : 루트에서부터 (/)
  • 상대경로 : 현재 디렉토리를 기준으로하는 것(.././)

현재 디렉토리 확인

pwd

현재 디렉토리 내용 확인

ls , ls-a, ls-l, ls-al(숨김파일)

디렉토리 생성 시, -p라는 명령어

[webmaster@localhost ~]$ mkdir test02/test021
mkdir: `test02/test021' 디렉토리를 만들 수 없습니다: 그런 파일이나 디렉터리가 없습니다
[webmaster@localhost ~]$ mkdir -p test02/test021
[webmaster@localhost ~]$ ls
test01  test02
[webmaster@localhost ~]$ ls test02
test021  test022

깃에 있는 파일 다운로드 하기

[webmaster@localhost ~]$ ls
[webmaster@localhost ~]$ wget https://raw.githubusercontent.com/poscodx-bitacademy/centos-practices/main/lx/etc/profile
--2023-08-24 11:09:08--  https://raw.githubusercontent.com/poscodx-bitacademy/centos-practices/main/lx/etc/profile
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2003 (2.0K) [text/plain]
Saving to: ‘profile’

100%[===========================================>] 2,003       --.-K/s   in 0s      

2023-08-24 11:09:08 (31.0 MB/s) - ‘profile’ saved [2003/2003]

[webmaster@localhost ~]$ ls
profile

파일 권한

-rw-rw-rw-.

  • 앞에 owner
  • 중간 group
  • 뒤에 others

image

touch

파일의 시간 바꾸기

[webmaster@localhost ~]$ date
2023. 08. 24. (목) 11:34:03 KST
[webmaster@localhost ~]$ touch test.txt
[webmaster@localhost ~]$ ls -l
합계 8
-rw-r--r--. 1 webmaster wheel 2003  8월 24 11:09 profile
-rw-rw-rw-. 1 webmaster wheel   13  8월 24 11:34 test.txt
-rw-r--r--. 1 webmaster wheel    0  8월 24 11:33 test3.txt

cp

파일을 복사하는 명령어

보안/안전을 위해서 alias 설정하기

vi .bash_profile

image

이러면, cp -i test.txt dowork 이렇게 해야 파일 overwrite하시겠습니까? 를 물어보는데,

cp test.txt dowork해도 물어보게됨.

좀 더 안전하게 사용할 수 있음!!!

/bin/cp test2.txt test.bak.txt 라고 하면 파일 overwrite하시겠습니까? 안 물어봄.

mv

cp 명령어는 파일을 복사 하지만 mv 명령어는 파일을 이동하는 명령어이다.

  • 강사님 말씀. mv빠르다. cp 작업보다. 그래서 mv, cp 중 뭘 써야하는 지 고민해보고, 되도록 mv를 사용하는 것이 좋다.

디스크 내용 복사가 아님.

[webmaster@localhost ~]$ ls
dowork  hihi  profile  test.bak.txt  test.txt  test3.txt
[webmaster@localhost ~]$ mv test3.txt test5.txt
[webmaster@localhost ~]$ ls
dowork  hihi  profile  test.bak.txt  test.txt  test5.txt

rm ****가장 주의******

파일을 삭제 하는 명령이다.

특히, 파일을 삭제하면 복구가 불가능하기 때문에 파일 삭제에는 항상 주의가 필요하다.

webmaster@localhost ~]$ ls
dowork  hihi  profile  test.bak.txt  test.txt  test5.txt
[webmaster@localhost ~]$ rm test5.txt
[webmaster@localhost ~]$ ls
dowork  hihi  profile  test.bak.txt  test.txt
[webmaster@localhost ~]$ 

rm -rf 디렉터리

(rf하면 디렉터리도 지울 수 있음)

cat

파일의 내용을 화면에 출력

옵션

-n : 줄 번호를 표시한다.
-b : 빈 행은 제외하고 줄 번호를 표시한다.
-E : 각 행마다 끝에 $ 문자를 출력한다.

cat [옵션] 파일명

more

화면 단위로 분할해서 파일 내용을 출력 한다.

  • 단점 : 엔터로 한 줄 씩 내려가는데, 위로 올라갈 수 없다.
  • 스페이스로는 다음 페이지로 넘어간다.

find

파일을 찾는다.

[root@localhost ~]# cd /var
[root@localhost var]# find . -name 'log'
./log
[root@localhost var]# find . -name '*log'
./lib/systemd/catalog
./lib/rsyslog
./log
./log/tallylog
./log/lastlog
./log/maillog
./log/tuned/tuned.log
./log/audit/audit.log
./log/anaconda/anaconda.log
./log/anaconda/syslog
./log/anaconda/X.log
./log/anaconda/program.log
./log/anaconda/packaging.log
./log/anaconda/storage.log
./log/anaconda/ifcfg.log
./log/anaconda/ks-script-dPuFie.log
./log/anaconda/journal.log
./log/boot.log
./log/yum.log
[root@localhost var]# find . -name "*.log"
./log/tuned/tuned.log
./log/audit/audit.log
./log/anaconda/anaconda.log
./log/anaconda/X.log
./log/anaconda/program.log
./log/anaconda/packaging.log
./log/anaconda/storage.log
./log/anaconda/ifcfg.log
./log/anaconda/ks-script-dPuFie.log
./log/anaconda/journal.log
./log/boot.log
./log/yum.log

디렉토리는 다 755임

find . =perm 755 하면 /home 디렉터리 아래에 755 퍼미션을 가지고 있는 파일을 찾을 수 있음.

echo

[root@localhost ~]# echo "hello"
hello
[root@localhost ~]# echo "hello" > hello.txt
[root@localhost ~]# cat hello.txt
hello
[root@localhost ~]# ls
anaconda-ks.cfg  dowork  hello.txt  jdk-17.0.8_linux-x64_bin.tar.gz

  • append

image

연산자

  • 명령어 > 파일 : 파일이 없으면 생성하고, 있다면 기존의 내용을 지운다.
  • 명령어 » 파일 : 파일이 없다면 생성하고, 있다면 기존의 내용에 추가한다.
  • 명령어 < 파일 : 파일에서 표준 입력(stdin)을 받는다.

###chown

파일 소유자나 소유그룹을 변경하기 위한 명령어이다.

파일 압축하기

압축 유틸리티 중 가장 많이 사용하는 것은 tar, gzip, bzip2 이다.

사용법

  • 묶을 때 : tar [옵션] 생성파일.tar 묶을 파일
  • 해제할 때 : tar [옵션] 파일.tar

깃(Git) 깔기

git 2.9.5 설치

  1. 의존성 라이브러리
  2.    # yum install curl-devel
       # yum install expat-devel
       # yum install gettext-devel
       # yum install openssl-devel
       # yum install zlib-devel
       # yum install perl-devel
    
  3. 다운로드
   # wget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
  1. 압축 풀기
  # tar xvfz git-2.9.5.tar.gz

4.소스 디렉토리 이동

  # cd git-2.9.5
  # pwd
  1. 컴파일 & 빌드 환경 : configure

이 리눅스가 이 소스를 컴파일할 관리가 있는지 configure 해보는 과정이다.

  # ./configure --prefix=/usr/local/poscodx2023/git
  1. 빌드
  # make all
  1. 설치
  # make install

(+) old git version 처리

# whereis git
git: /usr/bin/git /usr/share/man/man1/git.1.gz
# mv /usr/bin/git /usr/bin/git.old
# ln -s /usr/local/poscodx2023/git/bin/git /usr/bin/git
  1. 설정(/etc/profile)
# git
import PATH=$PATH:/usr/local/poscodx2023/git/bin
  1. 확인
# /usr/local/poscodx2023/git/bin/git --version

# git --version
  1. git 사용하기
# mkdir my-workspace
# cd my-workspace
# git clone https://github.com/talkingOrange/java-study.git
# cd javastudy
# mvn clean package

Maven 3.8 설치

  1. 작업 디렉토리 /root

  2. 다운로드

   # wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
  1. 압축 풀기
   # tar xvfz apache-maven-3.8.8-bin.tar.gz
  1. 설치
   # mv apache-maven-3.8.8 /usr/local/poscodx2023/maven3.8
   # ln -s /usr/local/poscodx2023/maven3.8 /usr/local/poscodx2023/maven
  1. 설정(/etc/profile)
  • [root@localhost ~]# vi /etc/profile
# maven
export PATH=$PATH:/usr/local/poscodx2023/maven/bin
  • [root@localhost ~]# source /etc/profile
  1. 확인
# mvn --version

Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /usr/local/poscodx2023/maven
Java version: 17.0.8, vendor: Oracle Corporation, runtime: /usr/local/poscodx2023/java17
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.95.1.el7.x86_64", arch: "amd64", family: "unix"

방화벽설정으로 실행 시키기

  • IP주소 설정을 위해
cd my-workspace/
cd java-study/

cd network/
cd target/

systemctl stop firewalld

systemctl disable firewalld