일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sql
- html
- dfs
- union_find
- string
- JPA
- List
- scanner
- javascript
- GC로그수집
- deque
- 스프링부트
- Calendar
- set
- map
- Properties
- 큐
- alter
- CSS
- date
- spring boot
- BFS
- math
- 리소스모니터링
- NIO
- priority_queue
- 스택
- Union-find
- Java
- 힙덤프
- Today
- Total
매일 조금씩
02/03 ! - Linux(2) : 파일 관련 명령어, 사용자 관련 명령어, 프로세스 관련 명령어, 작업 스케줄링 본문
02/03 ! - Linux(2) : 파일 관련 명령어, 사용자 관련 명령어, 프로세스 관련 명령어, 작업 스케줄링
mezo 2021. 2. 25. 20:04개발자가 보는 리눅스
1. 서버환경설정
기본 명령어
jsp
tomcat
database
오픈소스는 라이센스가 있는데 자유롭게 사용하게 풀어놓은 것이다.
리눅스 커널과 응용프로그램을 붙이는데 두개가 라이센스가 다르다.
그리고 패키지의 종료도 다 다르다.
리눅스는 유닉스 계열의 운영체제다.
유닉스의 오픈소스가 리눅스이다.
셸 : 터미널, 종류가 배시셸, 씨 셸 등 있다.
하드웨어, 리눅스 커널, 셸, 응용프로그램
터미널 -> 셸 -> 커널 -> 하드웨어
임베디드는 하드웨어, 리눅스 커널 까지 한다.
리눅스
터미널의 명령 프롬프트가 다르다.
1. master
[master@localhost ~]$
2. root (신)
[root@localhost ~]#
디렉토리 관련 명령어
pwd
* 리눅스 기본 디렉토리
작업디렉토리
홈 디렉토리(기본 디렉토리)
* mount : 외부장치가 디렉토리에 연결되는 것 (드라이브 X)
절대경로 : /
상대경로
ls
cd
mkdir / rmdir
파일 관련 명령어
touch
cp / mv / rm
ln
cat (head / tail / | / more)
grep
find
whereis (which)
메모장에서 한글 치려면 한글로 바꿔준뒤
shift + space 하면 한글 / 영어 왔다갔다함
소스 편집용 메모장이다.
x-window 환경
- 그놈 - gedit
- kde
gedit
vi -> vim
Ctrl+C : 프로세스 종료
Ctrl+Z : 프로세스 정지 (Stop)
보통 입력할 때 i 많이 씀
입력보드에서 빠져나올 땐 esc를 누른다. 그럼 --끼워넣기-- 가 사라지고 : 입력이 가능해진다.
:set number 줄번호 보이기
:set nonumber 줄번호 취소
자바 소스 편집, 컴파일
java 프로그램 언어를 실행시키려면 jdk가 있어야 하고 jdk안엔 jre가 있고 이건 oracle에서 만든다. 원랜 sun에서 만들고 오픈소스로 공개를 했고 이걸 통해서 openJDK라는 오픈소스 JDK를 만들었다. 오라클에서 만든건 라이센스가 있고 openJDK는 오픈라이센스다.
JRE만 있고 JDK가 없는 상태다. JDK를 깔아야 한다.
설치는 관리자만 할수 있다.
지금은 그냥 명령어 몰라도 된다. 그냥 쳐라
JDK 설치명령어는 다음과 같다.
[master@localhost ~]$ su - root
암호: (암호입력)
[root@localhost ~]# yum install java-1.8.0-openjdk-devel
설치 완료후 JDK 의 버전 확인해보면
잘나온다.
그럼 java 파일을 만들어서 편집해보자.
다음으로
JFrame 을 만들어보자.
실행시키면 JFrame이 나온다.
* linux 에서 할수 있는것
java
c / c++
python
nano : 최신형 에디터이다. vi가 어려워서 직접 타이핑이 가능하게 해놨다.
file : 파일에 대한 특성을 알고싶을 때
groups : 현재사용자가 소속된 그룹이 알고싶을 때
사용자 관련 명령어
사용자 생성
사용자는 누가되나?
1. root
2. root에게서 권한을 위임 받는 사람
사용자가 할수 있는 것
1. 로그인 - 설정파일 등록
/etc/passwd <- 로그인 가능한 사용자, 불가능한 사용자 다 나옴, 어떤 셸을 쓰는지도 나옴.
암호는 없다(x표시되서 나옴)
/etc/shadow <- 사용자가 여기에 등록된다. 여기에 없는 경우도 있다.
암호가 여기선 내부적으로 암호화되어서 보인다. 암호가 안정해졌을 땐 !!로 나온다.
암호를 정해줘야 로그인가능.
2. 로그인 디렉토리가 생성됨 (홈 디렉토리)
/home/사용자아이디
3. 그룹에 속함
사용자 생성하고
확인하면 나온다.
아직 암호가 설정되지 않아 암호가 !!로 나온다. 그럼 로그인이 안되므로 암호를 설정하러 간다.
암호가 암호화 되어서 보인다.
그럼 한번 로그인이 되는지 보자
로그인 됨
사용자 삭제
사용자를 지우면 사용자가 사용하던 디렉토리는 남아있고 (데이터가 있을수 있기때문에 함부로 못지움)
/etc/passwd , /etc/shadow 등에서 확인 할수 있는 설정에서만 사라짐.
그래서 디렉토리는 직접지워야 한다.
userdel -r user1 으로 다 지울 수도 있는데 이건 쓰지마라.
su 사용자아이디 - 사용자의 권한만 가져옴. 경로 변함 없음(기본 사용자환경)
su - 사용자아이디 - 재로그인(다시 로그인한 사용자환경)
사용자 -> (암호) -> 다른 사용자
-> (암호) root
root -> (X) -> 사용자
* 그룹(권한 집합)
/etc/group
- 숫자(아이디)
chmod : 파일이나 디렉토리의 접근 권한을 변경한다.
umask : 기본 접근 권한 확인하고 변경하기
chown : 사용자, 그룹 변경 (root만 할수 있음)
w : 현재 로그인된 사용자 상태
who : w랑 같지만 w가 더 자세함.
터미널이 같으면 한사람만 나온다. 즉 같은 터미널에서 여러 로그인을 잡는게 아니고
다른 터미널의 로그인 상황을 보는거다.
프로세스 관련 명령어
프로그램 실행이란?
프로그램을 실행하는걸 프로세스라고 한다.
1. 프로세스 - 번호를 갖고 있다. -> 프로세스 번호 (pid)
cpu + 메모리
ps : 실행되고 있는 프로세스의 정보 출력
ps a : 프로세스의 현재 터미널의 정보를 모두 보여준다.
ps au : 프로세스의 정보 + 현재 터미널의 정보 + 사용자의 정보 까지 보여준다.
ps -e : 실행중인 프로세스를 모두 보여줌 (ps a와 비슷하지만 다른 종류의 - 가 붙는 옵션임)
ps -ef : 실행중인 프로세스의 자세한 정보 출력
근데 이렇게 프로세스를 확인하면 너무 길게 나와서
검색을 한다. ( 명령에 | 를 덧붙여서 사용 )
만약 gedit을 실행시켰을 때와 껐을때 확인해보면 다음과 같이 나온다.
이 프로세스들을 PID를 통해서 강제로 종료시켜 버릴수 있다.
kill : 프로세스 강제 종료
ex) kill -9 14807
top : 실시간으로 현재 실행되고 있는 프로세스 정보를 출력
pstree : 프로세스의 트리가 보임
포그라운드 프로세스 : 실행시 다른 명령어입력 못함
백그라운드 프로세스 : 실행시켜놓고 다른 명령어 입력 가능
jobs : 현재 실행중인 백그라운드 확인 가능
fg : 포그라운드로 변경
bg : 백그라운드로 변경
Ctrl + z : 백그라운드를 잠시 멈춰둠
스레드는 프로그램 내부에 있는 거여서 못보지만 이렇게 프로세스는 여러가지 명령어로 확인이 가능하다.
'현재 활동 > 유틸리티 > 시스템 정보' 에서 나오는 것과 같은 내용이다.
작업 스케줄링
특정시간에 프로세스를 가동시키는 방법 2가지
1. at : 일회성
2. crontab : 다회성
가장 먼저 표준시로 맞춰져 있는 시간을 지금 현재 내 시간과 맞게 맞춰준다.
at으로 스케줄링에 사용하기 위해 mail을 사용하려는데 깔려있지 않다.
프롬프트창을 새로 열어서 root로 변경하여 설치한다.
yum install mail
yum install sendmail
그리곤 설치한 mail을 시작 시켜준다.
systemctl start sendmail.service
그러고 난후 원래의 프롬프트 창에서 확인해보면? 실행된다.
mail : 메일을 확인하는 명령어
여기서 root 창에서 1을 입력하면 master가 보낸 메일 내용을 확인 가능하다.
이렇게 mail이 잘 동작하는 것을 확인했으면
이제 이걸 활용해서 스케줄링을 실행해보자.
1. at
at은 mail로 보내진다.
가장 먼저 at 명령어가 실행될 수 있는 실행 서비스 프로그램이 있는지 확인한다.
그리고 나서 at으로 등록을 시킨다.
그리고 mail 을 확인 하면
2. crontab
가장 먼저 crontab 명령어가 실행될 수 있는 실행 서비스 프로그램이 있는지 확인한다.
실행중인걸 확인 가능하다.
분, 시, 일, 월 , 요일 순으로 되어 있다.
crontab -e
하면 입력 vi 화면 나옴
거기서
32,50 * * * * echo "every 32, 50 min"
입력 후 저장하고 나오면
이렇게 crontab -l 했을 때 나온다.
근데 실행안되서 절대 경로 확인 한 후
절대 경로가 들어간 걸로 다음과 같이 수정했다.
그래도 안되서 아래와 같이 수정했다.
40,50 * * * * /usr/bin/ls -l ~master > ~master/list.txt
40,50 * * * * /usr/bin/ls -l ~master > ~master/list.txt
에서 >는 /usr/bin/ls -l ~master 의 결과를 화면에 찍지말고 ~master/list.txt에 넣어달라는 의미이다.
그리고 시간이 된 후 확인하면
at 명령어로 01:04에 "안녕하세요" 보내지게 하기
at> 에 쓰여진 것의 실행결과를 mail로 보내기 때문에
가장 먼저 "안녕하세요" 가 출력되는 파일을 만들어야한다.