그런데 무료로 한게 아니고 대부분 돈을 내고 인증서를 샀습니다. 그리고 1년에 한번 갱신하는 형태로 진행을 했습니다.
그런데, Let's Encrypt는 무료이고 3개월에 한번씩 갱신을 해줘야 합니다.
Crontab의 사용법
오늘은 간단한 사용법을 알려 드리고, Crontab 만으로 다른 글을 하나 더 적도록 하겠습니다.
crontab에 스케쥴을 등록해보자.
sudo crontab -e
음 위 명령어를 입력 합니다.
sudo crontab -e
[sudo] password for talkit:
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]:
crontab 을 처음 수행하면 무슨 편집기로 편집 할꺼냐고 묻습니다.
저희는 vi를 쓸줄 안다고 생각하고 ^^
2번을 선택 합니다. ^^
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
~
~
~
~
위와 같이 나올껍니다.
vi는 계속 알려 드려야 하는데 일단
:$를 입력하시고 엔터 치십시오
그러면 맨 마지막줄로 갈껍니다.
그리고 o 키를 누르신 다음
0 5 * * * /usr/bin/certbot renew --quiet
요렇게 해주면 인증서 만료일이 30일이내면 자동으로 매일 새벽 5시에 인증서를 갱신합니다. 자동 갱신 후에는 다시 30일이 남아야 갱신을 하겠죠 ^^
그런데, 여기서 힌트를 하나 얻어야 합니다.
저 같은경우는 늘 컴퓨터를 켜두는 편이긴 한데 켜두질 않는 경우는 수동으로 하면 되겠지요 ^^
sudo certbot --nginx -d example.com -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Waiting for verification...
Challenge failed for domain example.com
http-01 challenge for example.com
Cleaning up challenges
Some challenges have failed.
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: example.com
Type: connection
Detail: 공인아이피: Fetching
http://example.com/.well-known/acme-challenge/f8kAgZFm0jvoMhu3mbtN5F7IS7B7xcXupFP1XN7C-NU:
Timeout during connect (likely firewall problem)
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address. Additionally, please check that
your computer has a publicly routable IP address and that no
firewalls are preventing the server from communicating with the
client. If you're using the webroot plugin, you should also verify
that you are serving files from the webroot path you provided.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
저는 집에 있는 컴픀터에 SSL인증 중이라서 ^^ 오류가 나네요 T.T 제가 보안 때문에 몇가지 검사를 위해서 서버에 접속을 했는데 접속이 안된답니다. ^^
그래서 저는 IP타임 공유기의 설정을 변경해서 다시 아래 명령어를 수행 했습니다.
sudo systemctl restart nginx
talkit@ubuntu:~$ sudo certbot --nginx -d example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/example.com
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2023-04-01. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
위와 같이 성공 했습니다.
오 ^^
오 저 앞에 Not secure가 없어졌습니다. ^^
이번 글은 여기까지 하고, 다음글에서는 Let's Encrypt의 갱신 자동화에 대해서 글을 또하나 적어보고, 또한 도메인 구매와 도메인 설정(DNS)에 관해서 알아보겠습니다.
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
일단 SSL이라든지 여러가지 설정이 주석으로 정의 되어 있습니다만, 주석부분은 대부분 지워 버리면 실제로 위와 같은 결과만 나옵니다. ^^
default 서버는 80번 포트에서 대기 중이구요. /var/www/html 폴더에 html 파일이 있습니다.
그리고 시작 파일은 index.html, index.htm, index.nginx-debian.html 이 시작 파일 입니다.
default를 없애고, example를 만들어 보도록 하겠습니다. 저는 앞으로 여기서 mattermost를 만들어야겠지요 ^^ 아닌가 mattermost는 나중에 ^^
sudo mkdir /var/www/example
example 디렉토리를 웹 홈에 만들구요.
sudo vi /var/www/example/index.html
index.html 파일을 생성 합니다.
리눅스/Linux vi/vim NIX에서 가장 유명한 텍스트 편집기 - 글쓰기. One of the best text editor on NIX fields. - Writing https://talkit.tistory.com/699
위 글을 보시면 vi로 글쓰는 방법이 나와 있습니다. ^^
<html>
<body>
NGINX 테스트 웹페이지에 오신 것을 환영합니다.
<body>
</html>
위 코드를 index.html에 붙여 넣으십시오. 저장하고 나오시면 됩니다.
:wq 안 잃어버리셨죠 ^^
sudo vi /etc/nginx/sites-available/example.com
example.com 블락을 만들기위해서 파일을 하나 만들겠습니다.
server {
listen 80;
root /var/www/example;
index index.html;
server_name 127.0.0.1;
}
sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-01-01 00:30:21 PST; 10s ago
Docs: man:nginx(8)
Process: 3211 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 3212 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 3213 (nginx)
Tasks: 17 (limit: 19071)
Memory: 13.6M
CGroup: /system.slice/nginx.service
├─3213 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─3214 nginx: worker process
├─3215 nginx: worker process
├─3216 nginx: worker process
├─3217 nginx: worker process
├─3218 nginx: worker process
├─3219 nginx: worker process
├─3220 nginx: worker process
├─3221 nginx: worker process
├─3222 nginx: worker process
├─3223 nginx: worker process
├─3224 nginx: worker process
├─3225 nginx: worker process
├─3226 nginx: worker process
├─3227 nginx: worker process
├─3228 nginx: worker process
└─3229 nginx: worker process
Jan 01 00:30:21 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 01 00:30:21 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
재시작 했으면 상태도 한번 확인해주시고 ^^
브라우져에서 확인을 하면
저같은 경우는 위와 같이 나옵니다. ^^
잘 만들어서 잘 구동이 되고 있네요 ^^
오늘은 여기까지 하겠습니다. 제 목표는 저기 Not secure 없애는 거여서 다음글 또는 그 다음 글에서 아마 가능 할 것으로 생각 됩니다. ^^
이번에 적으려고 하는 NGINX도 웹서버의 일종입니다. Apache 보다는 좀 더 뒤에 나온 제품이어서 좀 더 신선한 기능들을 제공하긴 하지만, 서로 경쟁 관계여서 요즘은 NGINX가 좀 더 점유율을 가져가고 있다고 알고 있습니다. ^^ 서로를 보고 보완을 하고 있는 것으로 알고 있습니다.
[무료소프트웨어] 무료 보안쉘 클라이언트 PuTTY 최신 버전 다운로드 및 설치하기. How to Install the latest version PuTTY that is free Secure Shell Client. https://talkit.tistory.com/674
리눅스에 접속하시는 방법은 위 글들에서 설명해 두었습니다. 참고해서 접속하시면 될 것 같습니다.
리눅스에 NGINX 설치
저는 계속 Putty러 접속을 합니다.
여러분들이 VMWARE에 우분투를 설치하셨거나, 우분투 리눅스 VPS를 하나 가지고 계시거나 하다는 전제 하에서 이 글은 시작 하고 있습니다.
리눅스에 접속하기
서버에 우선 접속하십시오.
Putty를 여시고 저기 주소에 입력하시거나 아래에 있는 저장된 세션에서 선택해서 접속 하시면 됩니다.
login as: talkit
talkit@192.168.0.27's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-56-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 updates can be applied immediately.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Thu Dec 29 23:51:08 2022 from 192.168.0.3
talkit@ubuntu:~$ ps -ef | grep nginx
talkit 2021 2007 0 23:50 pts/0 00:00:00 grep --color=auto nginx
talkit@ubuntu:~$
저는 잘 접속이 되었구요.
접속해서 ps로 nginx가 없는 것 까지 확인 했습니다. 제가 Mattermost를 설치하면서 nginx도 설치 했거든요 ^^
nginx 설치 이전으로 VMWARE파일을 돌려 놨습니다.
NGINX 설치하기
그 다음 과정을 계속 진행 하겠습니다.
sudo apt update
위 명령어는 옵셔널 이긴 하지만 한번씩 해주는 것이 좋습니다.
sudo apt install nginx
NGINX 설치는 정말 간단합니다. ^^
sudo apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream
nginx-common nginx-core
Suggested packages:
fcgiwrap nginx-doc
The following NEW packages will be installed:
libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream
nginx nginx-common nginx-core
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 605 kB of archives.
After this operation, 2,141 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 nginx-common all 1.18.0-0ubuntu1.4 [37.7 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-http-image-filter amd6 4 1.18.0-0ubuntu1.4 [14.8 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.18.0-0ubuntu1.4 [13.0 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-mail amd64 1.18.0-0ubu ntu1.4 [42.9 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-stream amd64 1.18.0-0u buntu1.4 [67.4 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 nginx-core amd64 1.18.0-0ubuntu1.4 [425 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 nginx all 1.18.0-0ubuntu1.4 [3,620 B]
Fetched 605 kB in 2s (293 kB/s)
Preconfiguring packages ...
Selecting previously unselected package nginx-common.
(Reading database ... 160070 files and directories currently installed.)
Preparing to unpack .../0-nginx-common_1.18.0-0ubuntu1.4_all.deb ...
Unpacking nginx-common (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package libnginx-mod-http-image-filter.
Preparing to unpack .../1-libnginx-mod-http-image-filter_1.18.0-0ubuntu1.4_amd64.deb ...
Unpacking libnginx-mod-http-image-filter (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package libnginx-mod-http-xslt-filter.
Preparing to unpack .../2-libnginx-mod-http-xslt-filter_1.18.0-0ubuntu1.4_amd64.deb ...
Unpacking libnginx-mod-http-xslt-filter (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package libnginx-mod-mail.
Preparing to unpack .../3-libnginx-mod-mail_1.18.0-0ubuntu1.4_amd64.deb ...
Unpacking libnginx-mod-mail (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package libnginx-mod-stream.
Preparing to unpack .../4-libnginx-mod-stream_1.18.0-0ubuntu1.4_amd64.deb ...
Unpacking libnginx-mod-stream (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package nginx-core.
Preparing to unpack .../5-nginx-core_1.18.0-0ubuntu1.4_amd64.deb ...
Unpacking nginx-core (1.18.0-0ubuntu1.4) ...
Selecting previously unselected package nginx.
Preparing to unpack .../6-nginx_1.18.0-0ubuntu1.4_all.deb ...
Unpacking nginx (1.18.0-0ubuntu1.4) ...
Setting up nginx-common (1.18.0-0ubuntu1.4) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx. service.
Setting up libnginx-mod-http-xslt-filter (1.18.0-0ubuntu1.4) ...
Setting up libnginx-mod-mail (1.18.0-0ubuntu1.4) ...
Setting up libnginx-mod-http-image-filter (1.18.0-0ubuntu1.4) ...
Setting up libnginx-mod-stream (1.18.0-0ubuntu1.4) ...
Setting up nginx-core (1.18.0-0ubuntu1.4) ...
Setting up nginx (1.18.0-0ubuntu1.4) ...
Processing triggers for systemd (245.4-4ubuntu3.19) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for ufw (0.36-6ubuntu1) ...
talkit@ubuntu:~$
중간에 Y 한번만 눌러 주시면 됩니다.
sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-12-31 23:56:28 PST; 51s ago
Docs: man:nginx(8)
Main PID: 2701 (nginx)
Tasks: 17 (limit: 19071)
Memory: 13.8M
CGroup: /system.slice/nginx.service
├─2701 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─2702 nginx: worker process
├─2703 nginx: worker process
├─2704 nginx: worker process
├─2705 nginx: worker process
├─2706 nginx: worker process
├─2707 nginx: worker process
├─2708 nginx: worker process
├─2709 nginx: worker process
├─2710 nginx: worker process
├─2711 nginx: worker process
├─2712 nginx: worker process
├─2713 nginx: worker process
├─2714 nginx: worker process
├─2715 nginx: worker process
├─2716 nginx: worker process
└─2717 nginx: worker process
Dec 31 23:56:28 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 31 23:56:28 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
리눅스 서비스를 확인하면 이미 nginx가 활성화 되어 있는 상태 입니다. ^^
방화벽 설정 - 생략
방화벽 관련 설정도 있지만 방화벽 설정은 안해서 ^^
웹서버에 브라우져로 접속해 보기
웹서버가 켜져 있는걸 확인 했으니까 브라우져로 접속을 해보겠습니다.
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
vi를 전문적으로 다룰 것이 아니어서 일단, 파일을 열고 또는 새파일을 만들고, 저장하고, 편집하기 위한 명령어들을 알려 드리겠습니다.
일반적으로 윈도우즈의 편집기들은 문장의 줄이나 칸을 이동할때 화살표키를 이용합니다.
그런데, vi는 화살표가 되는 버전도 있지만 전통 적으로는 다른 키를 이용 합니다.
k - 위로 이동(↑)
j - 아래로 이동(↓)
l - 우측으로 이동(→)
h - 좌측으로 이동(←)
화살표로도 가능 합니다. 그런데 사용하시다 보면, hjkl의 조합이 얼마나 편한지 느껴 지실 겁니다. ^^
이유는 화살표키로 가지 않아도 바로 이동할 수 있기 때문입니다.
vi 모드를 익히셔야 합니다.
여러가지 모드가 있는 것으로 알고 있는데 저는 두가지만 설명 드리겠습니다.
Esc 모드와 INSERT 모드 입니다.
Esc 모드 - 모든 작업을 하다가 <Esc>키를 누르면 Esc 모드로 이동한다. 검색이나, 이동등을 위한 모드 이다.
INSERT 모드 - <i><o><O>키 중 하나를 누르면 사용가능한 편집 모드 입니다.
<i> - 입력한 자리 부터 편집을 할 수 있다.
<o> - 입력한 자리 한줄 아래에 새로운 줄을 만들고 편집을 할 수 있다.
<O> - 입력한 자리 한줄 위에 새로운 줄을 만들고 편집을 할 수 있다.
언제든지 <Esc>키를 누르면 Esc 모드로 이동한다.
Esc 모드에서 제가 사용하는 법을 바로 보여 드리겠습니다.
위 동영상에서 잘 보실 수 있을 겁니다. 그리고 실제로 해보시기를 권합니다. ^^
글의 주제가 글을 쓰는 주제라서 이제 글쓰기를 알려 드리겠습니다.
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
자 이제 실제로 한번 vi 로 입력해 보겠습니다. 내용은 애국가 1절 위의 내용을 입력하시는 걸로 하겠습니다. ^^
vi 애국가.txt
애국가 파일을 만들겠습니다.
하면 빈 파일의 애국가.txt가 만들어지고 Esc 모드로 있을 겁니다.
우리는 INSERT 모드로 변경을 해야 합니다.
위에서 <i>를 누르면 현재 위치에서 편집을 할 수 있는 모드로 간다고 했습니다.
동상이 잘 안만들어 지네요 T.T 위에는 잘 만들어 졌는데 말이죠.
그럼 해보겠습니다.
일단 애국가.txt가 없다고 생각하고
위 명령어를 리눅스 쉘상에서 내려 주십시오.
<i>키를 입력하고 애국가 1절을 입력해보십시오.
위의 글을 복사하셔서 <i> 키 누르고 마우스 오른쪽 키를 누르셔도 됩니다.
연습해보신다고 생각하셔 하나하나 치셔도 됩니다.
방법은 어떻게든 애국가 1절을 모두 입력해 보십시오 ^^
그리고, 모두 입력 하셨으면 Esc 모드로 빠져 나가기위해서 <Esc>키를 누르시고
:wq 를 입력합니다.
제가 가끔 설명하면서 쳤던 그 명령어입니다.
w가 쓰기 q가 문서 나가기 입니다. ^^
그러면 최초로(?) 리눅스에서 문서를 하나 만드셨네요. 물론 최초는 아시겠지만요.
이제 만드셨으면, 2절을 입력해 보겠습니다. 추가로요 ^^
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
2절을 vi에서 입력하기 위해서 또 여셔야겠지요 ^^
vi 애국가.txt
명령어는 동일 합니다.
다른점은 여셨을때 비어 있었다면, 지금은 1절이 입력 되어 있습니다.
자 화살표 키로 입력 하셔도 되겠지만 hjkl을 이용해서 맨 마지막줄로 이동해 주십시오
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
~
~
~
~
~
아까 잘 따라 하셨으면 vi로 열었을때 저정도가 나올껍니다. 내용은 솔직히 애국가 1절이 아니어도 상관 없습니다.
j 4번 누르셨나요?
방법은 두가지 입니다. i를 누르시고 화살표로 맨 마지막으로 이동하신 다음에 엔터를 친다. 이게 첫번째 방법이고
소문자 o키를 누른다가 두번째 방법입니다. 왜냐면 저기 보전하세 다음 줄에 ^^ 넣어야 하니까요.
한글일때는 당황하지 마시고 한영키를 누르셔서 o키를 누르시면 됩니다. ^^
엔터를 한번 치겠습니다. 1절과 구분하기 위해서 요
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
~
~
~
~
~
~
~
아마도 여러분의 화면에는 이 비슷한 화면이 떠 있을 겁니다.
그럼 이제 저장하고 나가 보십시오.
<Esc> 누르고, :wq 누르셨지요?
이 기상과 이 맘으로 충성을 다하여
괴로우나 즐거우나 나라 사랑하세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
이번에는 동일한 과정을 거쳐서 4절을 입력해보겠습니다.
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
이 기상과 이 맘으로 충성을 다하여
괴로우나 즐거우나 나라 사랑하세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
~
~
~
~
~
~
~
~
~
설명은 일부러 안드렸습니다. 잘 따라 하셨을 꺼라고 생각 됩니다. ^^
오늘 위에서 설명 드린 것은 다 설명 드리고 끝내려고 합니다. ^^
제가 일부러 이렇게 했습니다. ^^
1절
2절
4절
이 있네요 앗 3절을 입력을 안했습니다.
중간에 끼워 넣으면 되지요 너무 걱정 안하셔도 됩니다. ^^
가을 하늘 공활한데 높고 구름 없이
밝은 달은 우리 가슴 일편단심일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
자 어떻게 해야 할까요?
방법은 여기서도 2가지 정도가 있습니다.
첫번째로 hjkl을 잘 이용해서 2절의 마지막 보전하세 가 있는 줄로 갑니다.
그리고 소문자 o키를 누르시면 됩니다. ^^ 이게 첫번째구요.
여기서 대문자 O도 사용하셔야지요 ^^
2절의 보전하세 다음줄로 갑니다. ^^ 빈줄이죠 ^^
빈줄에서 대문자 O를 눌러 보십시오.
비디오 녹화를 잘 익혀서 ^^ 이런건 비디로로 보여 드리면 좋을 것 같습니다. ^^
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
가을 하늘 공활한데 높고 구름 없이
밝은 달은 우리 가슴 일편단심일세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
이 기상과 이 맘으로 충성을 다하여
괴로우나 즐거우나 나라 사랑하세
무궁화 삼천리 화려강산
대한 사람 대한으로 길이 보전하세
~
~
~
~
~
~
~
여기까지 잘 따라 하셨을 것으로 믿습니다.
오늘은 글쓰기 였고, 입력만 있는 글 쓰기였습니다. 다음 vi에서는 글을 수정하는 방법을 알려드리겠습니다.
지금도 일종의 수정을 하셨지만, 줄을 지우거나, ^^ 글자를 지우기도 해야 하지 않겠습니까 ^^
이번 글에서는 제가 지난 번에 리눅스를 설치 하면서 뭔가를 설치해보고자한다고 말씀 드렸는데 그것 중에 하나가 Mattermost라는 툴입니다.
이툴은 Slack이라는 협업도구(?)를 대체하는 프로그램 입니다.
Mattermost는 Slack과 마찬가지로, 웹사이트에서 가입해서 사용할 수 있습니다.
하지만, Slack과는 다르게 Self-managed server를 제공 합니다.
그래서 저는 테스트 겸 제가 셋팅해 놓은 VMWARE ubuntu에 그리고 궁극적으로 외부의 VPS에 설치하고자 합니다.
Mattermost 설치전으로 되돌릴수 있도록 백업을 하고 있습니다. ^^
zip파일로 VM폴더를 묶어 두면 나중에 복원하거나 다른 것을 해볼 때 사용 가능 합니다.
이부분은 다음에 VMWARE 백업 이라는 주제로 한번 글을 써보겠습니다.
오늘은 Mattermost 설치에 주안점을 두겠습니다.
Mattermost 공식 홈페이지에는 기본적으로 docker를 이용해서 설치하고 사용하는 법을 알려 주고 있습니다. 그런데 제가 docker잘 모릅니다. T.T
그래서 일단 Ubuntu에 직접 설치하는 것을 생각하고 있습니다.
순서를 조금 요약해보겠습니다.
1. Ubuntu 설치
2. Database 설치
3. Mattermost server 프로그램 설치
4. Mattermost server 프로그램 설정
5. Mattermost server 상에 TLS 설정
6. NGINX server 설치
7. Mattermost server를 위한 proxy로 NGINX 설정
8. SSL과 HTTP/2와 함께 NGINX 설정
이글에 보시면 SSH를 설치하는 방법이 나와 있습니다. 우분투를 기준으로 하고 있어서 다음에 레드햇 계열에서 어떻게 설치하는지를 한번 보도록 하겠습니다.
그럼 오늘도 putty를 켜보겠습니다.
저글에 있는대로 ifconfig 명령어를 VM에서 실행하시거나 실제 IP주소를 받으신 다음에 접속 하시면 됩니다.
오늘도 접속이 잘 되었습니다.
SCP를 사용한다면, 구지 FTP 서버를 설치할 필요가 없다고 생각됩니다.
하지만, 서버 운영하는데 연계라던지 여러가지 업무가 있는데 상대편의 솔루션이 SCP를 지원해주지 못하는 기관 등이 있으면 어쩔 수 없이 FTP 서버를 설치 하셔야 합니다.
그래서 오늘은 서버 설치를 진행하고 다음 글에서 FTP 클라이언트를 이용해서 접속도 해보겠습니다.
sudo apt install vsftpd
리눅스에서 요즘 많이 사용하는 ftp서버는 vsftpd입니다.
그래서 요놈을 설치하도록 하겠습니다.
저는 옛날에 proftpd라는 프로그램을 많이 사용을 했습니다.
sudo apt install vsftpd
[sudo] password for talkit:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
vsftpd
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 115 kB of archives.
After this operation, 338 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu focal/main amd64 vsftpd amd64 3.0.3-12 [115 kB]
Fetched 115 kB in 2s (75.7 kB/s)
Preconfiguring packages ...
Selecting previously unselected package vsftpd.
(Reading database ... 160013 files and directories currently installed.)
Preparing to unpack .../vsftpd_3.0.3-12_amd64.deb ...
Unpacking vsftpd (3.0.3-12) ...
Setting up vsftpd (3.0.3-12) ...
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /lib/systemd/system/vsftpd.service.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.19) ...
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone? vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
#write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
서버 설치는 끝났고 서버 설정 중에서 2가지만 일단 바꿔주고 서버를 껐다가 켜도록 하겠습니다.
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
KILL(1) User Commands KILL(1)
NAME
kill - send a signal to a process
SYNOPSIS
kill [options] <pid> [...]
DESCRIPTION
The default signal for kill is TERM. Use -l or -L to list available signals. Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternate signals may be specified in three ways: -9, -SIGKILL or -KILL.
Negative PID values may be used to choose whole process groups; see the PGID column in ps command output. A PID of -1 is special; it indicates all processes except the kill process itself and init.
OPTIONS
<pid> [...]
Send signal to every <pid> listed.
-<signal>
-s <signal>
--signal <signal>
Specify the signal to be sent. The signal can be specified by using name or number. The behavior of signals is explained in signal(7) manual page.
-l, --list [signal]
List signal names. This option has optional argument, which will convert signal number to signal name, or other way round.
-L, --table
List signal names in a nice table.
NOTES Your shell (command line interpreter) may have a built-in kill command. You may need to run the command described here as /bin/kill to solve the conflict.
사용법은 위에도 보이지만요.
kill [옵션들] 프로세스아이디 [프로세스아이디...]
위와 같이 사용합니다.
제가 X windows에서 top 명령어를 하나 실행해 놓았습니다. 한번 죽여 보겠습니다.
ps -ef | grep top
talkit 2761 2263 0 06:46 pts/0 00:00:00 top
talkit 2768 2388 0 06:47 pts/1 00:00:00 grep --color=auto top
일단 안가셔도 ifconfig 명령어를 이용하면 리눅스의 ip 주소를 알 수 있습니다. 한번 해보겠습니다.
ifconfig
Command 'ifconfig' not found, but can be installed with:
sudo apt install net-tools
말씀 드린대로, ifconfig를 쳤는데 net-tools 라는 툴이 없다고 나오네요 ^^
저대로 인스톨 하시면 됩니다.
sudo apt install net-tools
실행하시면
sudo apt install net-tools
[sudo] password for talkit:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
net-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 196 kB of archives.
After this operation, 864 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu focal/main amd64 net-tools amd64 1.60+git20180626.aebd88e-1ubuntu1 [196 kB]
Fetched 196 kB in 4s (54.4 kB/s)
Selecting previously unselected package net-tools.
(Reading database ... 157117 files and directories currently installed.)
Preparing to unpack .../net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb ..
.
Unpacking net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
Setting up net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
거의 매일 지겹게 보셨던 위 화면 호스트에 192.168.0.27 을 치시고 Open을 해보겠습니다.
요렇게 나오네요. 22번 서버가 막혀 있던지 켜져 있지 않다는 이야기겠지요 ^^
sudo apt install openssh-server
openssh-server를 설치하십시오
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
Suggested packages:
molly-guard monkeysphere ssh-askpass
The following NEW packages will be installed:
ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 688 kB of archives.
After this operation, 6,010 kB of additional disk space will be used.
Do you want to continue? [Y/n]
TAIL(1) User Commands TAIL(1)
NAME
tail - output the last part of files
SYNOPSIS
tail [OPTION]... [FILE]...
DESCRIPTION
Print the last 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[+]NUM
output the last NUM bytes; or use -c +NUM to output starting with byte NUM of each file
-f, --follow[={name|descriptor}]
output appended data as the file grows;
an absent option argument means 'descriptor'
-F same as --follow=name --retry
-n, --lines=[+]NUM
output the last NUM lines, instead of the last 10; or use -n +NUM to output starting with line NUM
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default 5) iterations to see if it has been unlinked or renamed (this is the usual case of rotated log files); with inotify, this op‐
tion is rarely useful
--pid=PID
with -f, terminate after process ID, PID dies
-q, --quiet, --silent
never output headers giving file names
--retry
keep trying to open a file if it is inaccessible
-s, --sleep-interval=N
with -f, sleep for approximately N seconds (default 1.0) between iterations; with inotify and --pid=P, check process P at least once every N seconds
-v, --verbose
always output headers giving file names
-z, --zero-terminated
line delimiter is NUL, not newline
--help display this help and exit
--version
output version information and exit
tail은 위의 매뉴얼에도 나와 있듯이 파일의 마지막 일부를 보여주는 명령어 입니다.
tail [옵션들] 파일명
위와 같이 사용할 수 있습니다.
많은 옵션이 있지만, 제가 주로 사용하는 옵션은 -n, -f 입니다. -s도 재미 있는 옵션이겠네요 ^^
제가 일부러 프로그램을 하나 설치해보고 설치하기 전과 설치후를 모니터링 하는 것을 보여 드리겠습니다. ^^
cd /var/log
tail -f dpkg.log
리눅스 로그 폴더로 이동해서 dpkg.log를 모니터링 합니다.
tail -f dpkg.log
2022-12-25 14:16:27 configure libcgi-fast-perl:all 1:2.15-1 <none>
2022-12-25 14:16:27 status unpacked libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 status half-configured libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 status installed libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 trigproc man-db:amd64 2.10.2-1 <none>
2022-12-25 14:16:27 status half-configured man-db:amd64 2.10.2-1
2022-12-25 14:16:28 status installed man-db:amd64 2.10.2-1
2022-12-25 14:16:28 trigproc libc-bin:amd64 2.35-0ubuntu3.1 <none>
2022-12-25 14:16:28 status half-configured libc-bin:amd64 2.35-0ubuntu3.1
2022-12-25 14:16:28 status installed libc-bin:amd64 2.35-0ubuntu3.1
현재 결과는 위와 같습니다.
tail이 끝나면 프롬프트로 나오지만 tail은 해보시면 계속 대기 하고 있습니다.
저는 mc라고 mid-night command를 설치해보겠습니다.
sudo apt install mc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
bzip2 libssh2-1 mailcap mc-data mime-support unzip
Suggested packages:
bzip2-doc arj catdvi | texlive-binaries dbview djvulibre-bin epub-utils genisoimage gv imagemagick libaspell-dev links | w3m | lynx odt2txt poppler-utils python python-boto
python-tz unar wimtools xpdf | pdf-viewer zip
The following NEW packages will be installed:
bzip2 libssh2-1 mailcap mc mc-data mime-support unzip
0 upgraded, 7 newly installed, 0 to remove and 20 not upgraded.
Need to get 2321 kB of archives.
After this operation, 8819 kB of additional disk space will be used.
Do you want to continue? [Y/n]
실제로 저는 위 명령어를 내렸습니다.
tail -f dpkg.log
2022-12-25 14:16:27 configure libcgi-fast-perl:all 1:2.15-1 <none>
2022-12-25 14:16:27 status unpacked libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 status half-configured libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 status installed libcgi-fast-perl:all 1:2.15-1
2022-12-25 14:16:27 trigproc man-db:amd64 2.10.2-1 <none>
2022-12-25 14:16:27 status half-configured man-db:amd64 2.10.2-1
2022-12-25 14:16:28 status installed man-db:amd64 2.10.2-1
2022-12-25 14:16:28 trigproc libc-bin:amd64 2.35-0ubuntu3.1 <none>
2022-12-25 14:16:28 status half-configured libc-bin:amd64 2.35-0ubuntu3.1
2022-12-25 14:16:28 status installed libc-bin:amd64 2.35-0ubuntu3.1
2022-12-26 14:18:15 startup archives unpack
2022-12-26 14:18:15 install bzip2:amd64 <none> 1.0.8-5build1
2022-12-26 14:18:15 status half-installed bzip2:amd64 1.0.8-5build1
2022-12-26 14:18:15 status triggers-pending man-db:amd64 2.10.2-1
2022-12-26 14:18:15 status unpacked bzip2:amd64 1.0.8-5build1
2022-12-26 14:18:15 install libssh2-1:amd64 <none> 1.10.0-3
2022-12-26 14:18:15 status triggers-pending libc-bin:amd64 2.35-0ubuntu3.1
2022-12-26 14:18:15 status half-installed libssh2-1:amd64 1.10.0-3
2022-12-26 14:18:15 status unpacked libssh2-1:amd64 1.10.0-3
2022-12-26 14:18:15 install mailcap:all <none> 3.70+nmu1ubuntu1
2022-12-26 14:18:15 status half-installed mailcap:all 3.70+nmu1ubuntu1
2022-12-26 14:18:16 status unpacked mailcap:all 3.70+nmu1ubuntu1
2022-12-26 14:18:16 install mc-data:all <none> 3:4.8.27-1
2022-12-26 14:18:16 status half-installed mc-data:all 3:4.8.27-1
2022-12-26 14:18:16 status unpacked mc-data:all 3:4.8.27-1
2022-12-26 14:18:16 install mc:amd64 <none> 3:4.8.27-1
2022-12-26 14:18:16 status half-installed mc:amd64 3:4.8.27-1
2022-12-26 14:18:16 status unpacked mc:amd64 3:4.8.27-1
2022-12-26 14:18:16 install mime-support:all <none> 3.66
2022-12-26 14:18:16 status half-installed mime-support:all 3.66
2022-12-26 14:18:16 status unpacked mime-support:all 3.66
2022-12-26 14:18:16 install unzip:amd64 <none> 6.0-26ubuntu3.1
2022-12-26 14:18:16 status half-installed unzip:amd64 6.0-26ubuntu3.1
2022-12-26 14:18:16 status unpacked unzip:amd64 6.0-26ubuntu3.1
2022-12-26 14:18:16 startup packages configure
2022-12-26 14:18:16 configure unzip:amd64 6.0-26ubuntu3.1 <none>
2022-12-26 14:18:16 status unpacked unzip:amd64 6.0-26ubuntu3.1
2022-12-26 14:18:16 status half-configured unzip:amd64 6.0-26ubuntu3.1
2022-12-26 14:18:16 status installed unzip:amd64 6.0-26ubuntu3.1
2022-12-26 14:18:16 configure bzip2:amd64 1.0.8-5build1 <none>
2022-12-26 14:18:16 status unpacked bzip2:amd64 1.0.8-5build1
2022-12-26 14:18:16 status half-configured bzip2:amd64 1.0.8-5build1
2022-12-26 14:18:16 status installed bzip2:amd64 1.0.8-5build1
2022-12-26 14:18:16 configure mc-data:all 3:4.8.27-1 <none>
2022-12-26 14:18:16 status unpacked mc-data:all 3:4.8.27-1
2022-12-26 14:18:16 status half-configured mc-data:all 3:4.8.27-1
2022-12-26 14:18:17 status installed mc-data:all 3:4.8.27-1
2022-12-26 14:18:17 configure libssh2-1:amd64 1.10.0-3 <none>
2022-12-26 14:18:17 status unpacked libssh2-1:amd64 1.10.0-3
2022-12-26 14:18:17 status half-configured libssh2-1:amd64 1.10.0-3
2022-12-26 14:18:17 status installed libssh2-1:amd64 1.10.0-3
2022-12-26 14:18:17 configure mailcap:all 3.70+nmu1ubuntu1 <none>
2022-12-26 14:18:17 status unpacked mailcap:all 3.70+nmu1ubuntu1
2022-12-26 14:18:17 status half-configured mailcap:all 3.70+nmu1ubuntu1
2022-12-26 14:18:17 status installed mailcap:all 3.70+nmu1ubuntu1
2022-12-26 14:18:17 configure mime-support:all 3.66 <none>
2022-12-26 14:18:17 status unpacked mime-support:all 3.66
2022-12-26 14:18:17 status half-configured mime-support:all 3.66
2022-12-26 14:18:17 status installed mime-support:all 3.66
2022-12-26 14:18:17 configure mc:amd64 3:4.8.27-1 <none>
2022-12-26 14:18:17 status unpacked mc:amd64 3:4.8.27-1
2022-12-26 14:18:17 status half-configured mc:amd64 3:4.8.27-1
2022-12-26 14:18:17 status installed mc:amd64 3:4.8.27-1
2022-12-26 14:18:17 trigproc man-db:amd64 2.10.2-1 <none>
2022-12-26 14:18:17 status half-configured man-db:amd64 2.10.2-1
2022-12-26 14:18:17 status installed man-db:amd64 2.10.2-1
2022-12-26 14:18:17 trigproc libc-bin:amd64 2.35-0ubuntu3.1 <none>
2022-12-26 14:18:17 status half-configured libc-bin:amd64 2.35-0ubuntu3.1
2022-12-26 14:18:17 status installed libc-bin:amd64 2.35-0ubuntu3.1
mc 하나 까는데 엄청나게 패키지가 설치되네요 ^^
Ctrl 키와 C를 누르시면 빠져 나옵니다.
오늘은 여기 까지 하고 다음에는 이 아이의 반대인데 head라는 명령어를 한번 공부해 보겠습니다.
오늘 제가 앞으로 설치하려는 프로그램 때문에 데이터베이스가 필요해서 우분투 리눅스에 데이터베이스를 설치해보겠습니다.
우선 당연히 우분투 리눅스에 접속 합니다. ^^
잘 접속 하셨다고 생각하고 깔아 보도록 하겠습니다. ^^
sudo apt update
우선 최신 업데이트가 있는지 확인 합니다.
보통은 비밀번호를 한번 넣어 줘야 하지만 ^^
저희는 비밀번호를 넣지 않아도 되네요 ^^
sudo apt install mysql-server
업데이트가 끝나면 위 명령어를 입력하시면 됩니다.
sudo apt install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8
mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server-8.0 mysql-server-core-8.0
Suggested packages:
libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8
mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server mysql-server-8.0 mysql-server-core-8.0
0 upgraded, 28 newly installed, 0 to remove and 20 not upgraded.
Need to get 29.4 MB of archives.
After this operation, 242 MB of additional disk space will be used.
Do you want to continue? [Y/n]
그러면 계속 할꺼냐고 묻는데 ^^ 다연히 Y를 입력 합니다.
정말 간단하네요 ^^
쭉 설치가 이루어지고, 중간에 커널관련된 메시지가 떴는데 캡쳐를 못해서 ^^ OK 두번 눌러 주시면 됩니다.
mysql client 까지 잘 설치 되었습니다.
sudo mysql_secure_installation
보안 설정과 root 비밀번호 설정을 위해서 위 프로그램을 실행해 줍니다.
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
보안 때문에 비밀번호를 넣는게 좋다 넣겠느냐? 당연히 Y를 누르셔야 합니다. ^^
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
정책적으로 쉬운 비밀번호를 쓸꺼냐 어려운 비밀번호를 쓸꺼냐? 물으면 일단 어려운 비밀번호를 선택해야겠지요 ^^ 하지만, 비밀번호 만들기 규칙이 좀 쉬워야 하니까 다른 방법으로 보안을 신경 써줘야 해서 여기서는 MEDIUM 중간정도를 선택 하겠습니다. ^^
그래서 여기는 1을 넣습니다.
Please set the password for root here.
New password:
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :
그랬더니 니가 제공한 비밀번호는 50점 정도 되는데 그래도 쓸래 라고 합니다. 저는 Y를 눌러야지요 ^^
... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
New password:
저 처럼 위와 같이 오류가 나면 해당 쉘을 종료 하십시오 ^^
그리고 다른 방법으로 비밀번호를 변경 합니다. ^^
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '원하는비밀번호';
여기서 원하는 비밀번호는 아까 만든신 비밀번호 규칙을 잘 따르셔야 합니다. ^^
sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
자 이제 제가 원하는 대로 mysql 에 접속이 되네요 간단하게 한번 몇개 명령어만 더 내리고 오늘은 여기까지 글을 마무리 하겠습니다. ^^
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
show databases; 명령어는 mysql에서 사용할 수 있는 데이터베이스 명을 출력해 줍니다.
use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
ECHO(1) User Commands ECHO(1)
NAME
echo - display a line of text
SYNOPSIS
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
DESCRIPTION
Echo the STRING(s) to standard output.
-n do not output the trailing newline
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
--help display this help and exit
--version
output version information and exit
If -e is in effect, the following sequences are recognized:
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\e escape
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\0NNN byte with octal value NNN (1 to 3 digits)
\xHH byte with hexadecimal value HH (1 to 2 digits)
echo 를 man 페이지에서 보면 위와 같이 나옵니다. ^^
man echo
위와 같이 Linux에 접속해서 입력해보시면 됩니다. ^^
한글로 셋팅된 리눅스에서는 한글로 나옵니다.
텍스트를 출력한다고 되어 있습니다.
echo [옵션들] "원하는문장|원하는변수"
또한, 특수 문자를 지원을 하네요 ^^
간단하게 매일 언어 공부하는 책에서 본 Hello World를 찍어 보겠습니다. Hello echo world!! 정도를 찍어 볼까요 ^^
echo "Hello echo world."
위 명령어를 리눅스에 입력해 보십시오 ^^
echo "Hello echo world."
Hello echo world.
위와 같이 나옵니다. ^^ 잘 찍혔네요
그런데 단순히 echo는 리눅스에서 출력만한다.
저건 일반적으로 필요가 없을 것 같습니다.
그렇습니다. echo는 저희가 컴퓨터를 사용하게 되면 알아야 하는 PATH라던지 여러가지 환경 변수들을 알아 볼때 출력해 볼 수 있습니다.
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [OPTION]... [FILE]...
DESCRIPTION
Concatenate FILE(s) to standard output.
With no FILE, or when FILE is -, read standard input.
-A, --show-all
equivalent to -vET
-b, --number-nonblank
number nonempty output lines, overrides -n
-e equivalent to -vE
-E, --show-ends
display $ at end of each line
-n, --number
number all output lines
-s, --squeeze-blank
suppress repeated empty output lines
-t equivalent to -vT
-T, --show-tabs
display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
--help display this help and exit
--version
output version information and exit
EXAMPLES
cat f - g
Output f's contents, then standard input, then g's contents.
cat Copy standard input to standard output.
리눅스 man 페이지 즉 리눅스가 기본 적으로 제공하는 매뉴얼에 위와 같이 나와 있습니다.
저게 영어로 직역하면 파일을 합처 주거나 표준출력으로 파일을 출력해준다라고 되어 있습니다.
제가 알려 드리려고 하는 것은 파일을 출력해준다인데 T.T 파일을 합친다는 한번 다시 알아 봐야겠습니다. 방법과 개념은 알 것 같습니다.
리눅스에서는 파일을 보려면, X-Windows에서는 gedit, Shell 상에서는 vim, pico, emacs 등 다양한 편집기가 있습니다. 하지만, 정말 간단하게 그냥 text 파일의 내용을 보고 싶을 때는 cat을 사용하시면 됩니다.
일반적으로 vim(이하 vi)를 사용하는데 vi를 이용해서 제가 작성해둔 man 페이지를 열어 보겟씁니다.
vi test.txt
위와 같이 하시면 됩니다.
제일 처음에 보여 드린 vi는 빈 내용이엇찌만, 지금은 cat의 man 페이지를 복사해 두었습니다.
저기서 빠져 나오시려면 :q 를 하시면 됩니다. ^^
저는 보여 드리려고 한거여서 따라하신 분은 vi test.txt 후에 :q vi에서 밖으로 나오게 되어 있습니다.
그럼 다시 cat으로 돌아 오겠습니다.
저 텍스트파일을 cat으로 열어 보겠습니다.
cat test.txt
위와 같이 여시면 됩니다.
vi로 보신 내용이 그대로 나옵니다.
이제는 리눅스에서 보시고자하는 파일을 간단하게 보실때 cat을 이용하시면 되겠습니다.
그런데 여기 조금 다른 문제가 생깁니다.
문서가 길면?
1. PuTTY나, 다른 SSH 클라이언트의 Scroll 기능을 이용하시면됩니다. ^^
2. 리눅스의 more 나 less 라는 명령어를 이용하시면 됩니다.
1 번은 그냥 하시면 되니 넘어가서 more하고 less를 살펴 보겠습니다.
앞으로 또 설명할 내용이지만, test2.txt를 한번 만들어 보겠습니다. 조금 긴 문서로요 ^^
man cat > test2.txt
위와 같이 하시면 > 가 가르키는 test2.txt에 man 페이지의 내용을 출력해 줍니다.
그럼 다시 저걸 보도록 하겠습니다. cat으로요.
cat test2.txt
화면을 일부러 제가 줄이기는 했지만, 위 그림과 같이 한페이지에 안나오고 지나갑니다.
이번에는 more라늠 열령어를 이용해서 같이 사용해보겠습니다.
리눅스에서는 | 문자를 가지고 조합을 합니다.
cat test2.txt | more
위 명령어를 내려 보겠습니다.
첫페이지네만 보여주고 More라는 프롬프트를 띄워 줍니다.
저기서 스페이스 또는 엔터를 누르면 다음 페이지로 넘어 갑니다.
cat test2.txt | less
less 를 조합해서 명령어를 내리면, : 프롬프트가 나옵니다. 이때 화살표를 아래위로 움직여 보십시오. more가 페이지단위로 움직이고 한 방향으로 출력해주는 반면에 , less는 한줄씩 움직이고, 앞/뒤 양 방향으로 움직입니다. ^^
오늘은 cat의 간단한 파일 보여주기에 대해서 말씀 드렸습니다. 다음 글에서는 cat 파일 합치기 기능을 한번 저도 알아보겠습니다. ^^