반응형

안녕하세요 가야태자 @talkit 입니다.

오늘은 리눅스하고 윈도우즈 하고 파일을 교환 하려면 어떤 프로그램이 필요한가?

일단 파일을 전송할 수 있는 프로토콜은 SSH를 통한 SCP라는 프로토콜이 있습니다.

그리고 원래 파일 전송용으로 만들어진 FTP 라는 프로톨이 있습니다.

일반적으로 각가의 포트번호는

ftp : 21
scp : 22

위와 같습니다.

리눅스/Linux SSH를 통해서 VMWARE Linux에 접속해보자. How to connect to Linux on VMWARE via SSH https://talkit.tistory.com/688

이글에 보시면 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) ...

설치가 잘 되었습니다.

ps -ef | grep vsftpd
root        2451       1  0 23:54 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd                                                                                                                                                                                                                                             .conf
talkit      2946    2221  0 23:54 pts/0    00:00:00 grep --color=auto vsftpd

리눅스/Linux ps, grep 실행되는 프로그램/프로세스 찾기 How to find program/processor on Linux by ps, grep https://talkit.tistory.com/690

제가 최근에 알려드린 명령어로 ^^ vsftpd를 찾아 봤습니다.

잘 켜져 있습니다.

조금 다른 명령어로 하나 더 알아보고 넘어 가겠습니다.

netstat -na | grep 21
tcp6       0      0 :::21                   :::*                    LISTEN

다른 많은 아이들이 나오긴 하지만, ^^

일단 21번 포트가 열려 있습니다.

자 그럼 오늘은 설치가 다 끝났습니다.

# 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

write_enable=YES 앞에 주석 풀고

loca_umask=022 앞에 주석도 풀어 주십시오.

이제 방법을 말씀 드리겠습니다.

sudo vi /etc/vsftpd.conf

vi 로 vsftpd.conf 파일을 엽니다.

그리고, 화살표키로 해당 라인으로 이동한 다음에

키를 클릭 합니다.

그리고,

:wq

를 순서대로 입력하고 저장하시면 됩니다.

서버는 설정파일이 재시작을 해줘야 반영 되기 때문에

sudo systemctl stop vsftpd
sudo systemctl start vsftpd

중간 중간에 비밀번호를 물으면 비밀번호를 넣어 주면 됩니다. ^^

이제 진짜로 서버 설정까지해서 설치가 다 되었습니다.

아무 설명없이 그냥 FTP 서버에 잘 접속된 모습을 보여 드리고 마치겠습니다.

제가 주로 사용하는 FTP 서버에 잘 접속이 되었습니다.

지금은 제가 VMWARE에 설치를 진행했고, 클라우드는 또 달라서 다음에 클라우드에 어떻게 셋팅을 하는지 알아보겠습니다.

감사합니다.

관련글

[무료소프트웨어] Windows에 FTP 서버 구축하기(1) FileZillaServer 설치하기 :: 가야태자의 IT이야기 (tistory.com)

[[무료소프트웨어] Windows에 FTP 서버 구축하기(1) FileZillaServer 설치하기

오늘 소개해 드릴 프로그램은 파일 질라 서버/FileZilla Server 입니다. [무료소프트웨어] 알FTP 대체 프로그램 파일질라/FileZilla 설치하기/Install :: 가야태자의 IT이야기 (tistory.com) 이전 글에서 소개 해

talkit.tistory.com](https://talkit.tistory.com/612)

[무료소프트웨어] Windows에 FTP 서버 구축하기(2) FileZillaServer 설정하기 :: 가야태자의 IT이야기 (tistory.com)

[[무료소프트웨어] Windows에 FTP 서버 구축하기(2) FileZillaServer 설정하기

안녕하세요 가야태자 @talkit 입니다. 지난 번 글에 이어서 서버의 사용자를 추가해보겠습니다. 우선 서버를 설치 하신 다음에 이 글을 읽으셔야 해서 서버 설치는 [무료소프트웨어] Windows에 FTP 서

talkit.tistory.com](https://talkit.tistory.com/619)

[무료소프트웨어] 알FTP/ALFTP 대체프로그램 WinSCP 설치하기 :: 가야태자의 IT이야기 (tistory.com)

[[무료소프트웨어] 알FTP/ALFTP 대체프로그램 WinSCP 설치하기

안녕하세요 가야태자 @talkit 입니다. 오늘은 파일 전송 프로그램 중에서 무료 프로그램을 소개하고 설치 해보겠습니다. 파일 전송 프로그램을 개발을 진행을 하고 개발이 끝나면 운영서버나, 개

talkit.tistory.com](https://talkit.tistory.com/606)

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

뭘 좀 깔아 보려고 우분투를 VMWARE에 설치 했는데 지금 열심히 리눅스 강좌만 띠다 하고 있습니다. ^^

뭐 좋습니다. 

지난 번 글에서 프로세스를 프로세스 번호로 죽이는 법을 알려 드렸습니다. 

오늘은 프로세스명으로 모두 죽이는 방법을 알려 드리겠습니다. 

명령어는 killall 입니다. 

이번에도 만만한 top 명령어를 한 4번 실행 해두었습니다. 

그럼 저 프로그램들을 지우는 방법을 알아 보겠습니다. 

 ps -ef | grep top
talkit      2814    2263  0 06:58 pts/0    00:00:00 top
talkit      2830    2824  0 06:58 pts/2    00:00:00 top
talkit      2844    2838  0 06:58 pts/3    00:00:00 top
talkit      2861    2855  0 06:58 pts/4    00:00:00 top
talkit      2863    2388  0 06:59 pts/1    00:00:00 grep --color=auto top

우선 kill 명령어를 이용하는 방법입니다. 

kill -9 2814 2830 2844 2861 2863

위와 같이 프로세스를 나열하는 방법입니다. ^^

한번에 지우시려면 killall을 사용하시면 됩니다. 

killall [옵션들] 지우고싶은명령어
killall top

위와 같이 사용합니다. 실제로 해보겠습니다. 

한번의 명령어로 다 잘 죽였습니다. ^^

kill 과 killall 잘 활용하시면 됩니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘의 리눅스에서 kill 명령어에 대해서 알아 보겠습니다. 

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

위와 같이 나오구요 저기서 프로세스 아이디는 2761 입니다. 

X에 켜져 있는 top 명령어가 죽었습니다. ^^

저렇게 해도 죽지 않는 경우가 있습니다. ^^

그럴때는 -9 옵션과 함께 주시면 대부분 죽습니다. 

kill -9 프로세스아이디들

오늘은 여기까지 하고 다음 강좌에서는 killall을 알아보겠습니다. 

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

지난 번에는 top, free에 관해서 이야기를 했습니다. 

리눅스/Linux top, free현재 CPU/Memory 상태를 알아보자. How to get Information for CPU and Memory status on Linux https://talkit.tistory.com/689

위 글을 참조 하시면 됩니다. 

오늘은 ps에 대해서 말씀 드리겠습니다. 리눅서에서 실행되는 프로세스, 프로그램에 대해서 보여 주는 프로그램입니다. 

사용법은 아래와 같습니다. 

ps [옵션들]

그냥 ps 명령어를 한번 내려 보겠습니다. 

 ps
    PID TTY          TIME CMD
   2388 pts/1    00:00:00 bash
   2649 pts/1    00:00:00 ps

위와 같이 나옵니다. 지금 현재 쉘 상에서 실행하는 프로세스만 나옵니다. 

옵션에 관해서 좀 알아 보겠습니다. 

-e 옵션은 리눅스의 모든 프로세스를 보여 준다고 되어 있습니다. 

ps -e
    PID TTY          TIME CMD
      1 ?        00:00:01 systemd
      2 ?        00:00:00 kthreadd
            ...
     52 ?        00:00:00 ksoftirqd/6
     54 ?        00:00:00 kworker/6:0H-events_highpri

아까 보다 훨 많은 프로세스가 보일 겁니다. 

-f 옵션은 명령어의 모든 경로를 보여 준답니다. 지난 번글의 top에서 <c> 키 토글과 비슷합니다. 

자 한번 해보겠습니다. 

ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
talkit      2388    2387  0 06:09 pts/1    00:00:00 -bash
talkit      2691    2388  0 06:34 pts/1    00:00:00 ps -f

예쁘게 나오네요.

자 두가지를 조합해서 명령어를 내려 보겠습니다.  -ef 가 되겠습니다. ^^

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 05:59 ?        00:00:01 /sbin/init auto noprompt
               ...
root         553       1  0 05:59 ?        00:00:00 /lib/systemd/systemd-udevd
root         560       1  0 05:59 ?        00:00:00 vmware-vmblock-fuse /run/vmblock-fuse -o rw,subtype=vmware-vmblock,default_permissions,allow_other,dev,suid
               ...
talkit      2103    1929  0 06:07 ?        00:00:00 /usr/libexec/gsd-disk-utility-notify
talkit      2107    1717  0 06:07 ?        00:00:00 /usr/libexec/gsd-xsettings
talkit      2137    1717  0 06:07 ?        00:00:00 /usr/libexec/gsd-printer
talkit      2143    1717  0 06:07 ?        00:00:01 /usr/bin/vmtoolsd -n vmusr --blockFd 3
talkit      2157    1733  0 06:07 ?        00:00:00 /usr/libexec/gvfsd-trash --spawner :1.3 /org/gtk/gvfs/exec_spaw/0
talkit      2206    1717  0 06:07 ?        00:00:00 /usr/libexec/dconf-service
talkit      2211    1717  0 06:07 ?        00:00:00 /usr/libexec/evolution-addressbook-factory

위에 보시면 실제로 /usr/bin 등의 풀경로와 옆에 옵션 정보까지 다 보여 주고 있습니다. 

그리고, -e 옵션을 넣었기 때문에 모든 프로세스가 나왔습니다. 

ps 에 대한 설명은 여기까지 말씀 드리구요.

grep과 조합 하는 법을 알려 드리겠습니다. 

제가 쓰는 방법 외에도 많겠지만 저는 그냥 제가 사용하는 방법을 알려 드리겠습니다. ^^

ps [옵션들] | grep "검색어"

위와 같이 사용합니다. 옵션들은 저는 거의 -ef 로 고정 되어 있습니다. ^^

그래서 제가 실행한 프로세스만 찾아 보겠습니다. 

ps -ef | grep "talkit"
0 06:07 ?        00:00:00 /lib/systemd/systemd --user
talkit      1718    1717  0 06:07 ?        00:00:00 (sd-pam)
talkit      1724    1717  0 06:07 ?        00:00:00 /usr/bin/pulseaudio --daemonize=no --log-target=journal
talkit      1726    1717  0 06:07 ?        00:00:00 /usr/libexec/tracker-miner-fs
talkit      1729    1717  0 06:07 ?        00:00:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
talkit      1733    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfsd
talkit      1738    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
talkit      1758    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-udisks2-volume-monitor
talkit      1763    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-mtp-volume-monitor
talkit      1767    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-gphoto2-volume-monitor
talkit      1771    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-goa-volume-monitor
talkit      1777    1717  0 06:07 ?        00:00:00 /usr/libexec/goa-daemon
talkit      1780       1  0 06:07 ?        00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
talkit      1791    1717  0 06:07 ?        00:00:00 /usr/libexec/goa-identity-service
talkit      1797    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-afc-volume-monitor
talkit      1815    1704  0 06:07 tty2     00:00:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu
talkit      1817    1815  0 06:07 tty2     00:00:01 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
talkit      1827    1815  0 06:07 tty2     00:00:00 /usr/libexec/gnome-session-binary --systemd --systemd --session=ubuntu
talkit      1894    1827  0 06:07 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu
talkit      1913    1717  0 06:07 ?        00:00:00 /usr/libexec/at-spi-bus-launcher
talkit      1918    1913  0 06:07 ?        00:00:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
talkit      1922    1717  0 06:07 ?        00:00:00 /usr/libexec/gnome-session-ctl --monitor
talkit      1929    1717  0 06:07 ?        00:00:00 /usr/libexec/gnome-session-binary --systemd-service --session=ubuntu
talkit      1942    1717  0 06:07 ?        00:00:05 /usr/bin/gnome-shell

이런식으로 제 계정으로 실행된 내용들이 나옵니다. ^^

그리고 monitor 가 포함되어 있는 프로세스만 찾을 수도 있습니다. 

 ps -ef | grep  "monitor"
talkit      1758    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-udisks2-volume-monitor
talkit      1763    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-mtp-volume-monitor
talkit      1767    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-gphoto2-volume-monitor
talkit      1771    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-goa-volume-monitor
talkit      1797    1717  0 06:07 ?        00:00:00 /usr/libexec/gvfs-afc-volume-monitor
talkit      1922    1717  0 06:07 ?        00:00:00 /usr/libexec/gnome-session-ctl --monitor
talkit      2698    2388  0 06:40 pts/1    00:00:00 grep --color=auto monitor

참고로 한단어 일경우 "" 로 안묶어 주셔도 됩니다. ^^

grep을 이용해서 해킹이 들어 왔는지 내가 아닌 다른계정이 있는지도 찾을 수 있구요.

내 프로그램이 살아 있는지도 알수 있습니다. 

그리고, 찾은 프로그램의 프로세스 번호도 알 수 있습니다. ^^ 

두번째 칸의 숫자가 프로세스 번호 입니다. 

그 프로세스를 죽이려고 할때 프로세스 번호가 필요 합니다. 

해당 내용은 kill 명령어를 설명하면서 다시 알려드리겠습니다. 

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

putty를 켜시고, VMWARE 또는 Oracle 클라우드에 접속 합니다. 

저는 VMWARE에 접속을 하겠습니다. 

잘 접속이 되었습니다. 

오늘 이야기할 내용은 CPU 사용량과 메모리 사용량 관련해서입니다. 

첫번째로 top라는 명령어를 보겠습니다. 

top

그냥 top라고 치시면 됩니다. 

Tasks: 398 total,   1 running, 397 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15967.8 total,  14368.8 free,    882.3 used,    716.7 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  14804.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    868 root      20   0  248084   7292   6276 S   0.3   0.0   0:00.91 vmtoolsd
   2143 talkit    20   0  300684  41660  30476 S   0.3   0.3   0:00.55 vmtoolsd
      1 root      20   0  168204  11212   8112 S   0.0   0.1   0:01.72 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
      7 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:1H-kblockd
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     13 root      20   0       0      0      0 S   0.0   0.0   0:00.00 ksoftirqd/0

대충 위와 같은 화면이 뜰껍니다. 

일단 Cpu는 거의 사용을 하지 않고 있습니다. ^^

메모리도 약16GB 정도 되는데 거의 사용을 안하고 있네요 ^^ 

여기서 여러가지 명령어가 있지만, <1> 키를 눌러 보십시오.

top - 06:13:31 up 13 min,  2 users,  load average: 0.00, 0.07, 0.10
Tasks: 390 total,   1 running, 389 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu8  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu9  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu10 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu11 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu12 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu13 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu14 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu15 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15967.8 total,  14369.7 free,    880.6 used,    717.5 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  14806.4 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   2423 talkit    20   0   20788   4088   3136 R   0.3   0.0   0:00.15 top
      1 root      20   0  168204  11228   8112 S   0.0   0.1   0:01.73 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
      7 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:1H-kblockd
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     13 root      20   0       0      0      0 S   0.0   0.0   0:00.00 ksoftirqd/0
     14 root      20   0       0      0      0 I   0.0   0.0   0:00.08 rcu_sched
     15 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
     16 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
     19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
     20 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/1

개별  CPU정보를 함께 보여 줍니다. 

다시 <1> 키를 누르시면 없어집니다. 

키는 숫자 1입니다. ^^

그리고 <c> 키를 눌러 보십시오.

top - 06:15:03 up 15 min,  2 users,  load average: 0.00, 0.05, 0.08
Tasks: 390 total,   1 running, 389 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15967.8 total,  14368.4 free,    881.9 used,    717.6 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  14805.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     14 root      20   0       0      0      0 I   0.3   0.0   0:00.10 [rcu_sched]
    206 root      20   0       0      0      0 I   0.3   0.0   0:00.27 [kworker/4:1-events]
   2246 root      20   0       0      0      0 I   0.3   0.0   0:00.01 [kworker/15:3-events]
      1 root      20   0  168204  11228   8112 S   0.0   0.1   0:01.74 /sbin/init auto noprompt
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 [kthreadd]
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 [rcu_gp]
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 [rcu_par_gp]
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 [netns]

c 키는 소문자  c 입니다. 해당 키는 실행시켜 포함된 경로를 풀러 알려 줍니다. 

top 에서 다른 명령어도 있지만, 이정도만 아시면 된다고 생각됩니다. 

top 화면에서 빠저 나가려면 <q> 키를 누르시거나 , <Ctrl> + <c> 를 누르시면 됩니다. ^^

이번에 알려 드릴 명령어는 free라는 명령어 입니다. 메모리 관련 명령어 입니다. 

free [옵션들]

위와 같이 하시면 됩니다. 

free
              total        used        free      shared  buff/cache   available
Mem:       16351072      906368    14708876        2180      735828    15156960
Swap:       2097148           0     2097148

아무 옵션을 안주고 실행하면 위와 같이 보입니다. 여튼 15GB 정도 쓸수 있다는 이야기 입니다. 1024로 나누면 좀 더 적겠지만요 ^^

그럼 옵션을 몇가지 주겠습니다. 

free -m

눈치 채셨겠지만, Megabyte 단위로 보여 줍니다.

free -m
              total        used        free      shared  buff/cache   available
Mem:          15967         885       14364           2         718       14801
Swap:          2047           0        2047
free -g
              total        used        free      shared  buff/cache   available
Mem:             15           0          14           0           0          14
Swap:             1           0           1

-g 옵션은 GigaByte 단위로 보여 줍니다. 

free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       885Mi        14Gi       2.0Mi       718Mi        14Gi
Swap:         2.0Gi          0B       2.0Gi

-h 옵션은 사용자가 인식할 수 있는 단위로 보여 줍니다. 기가나 메가 단위네요 사용안하는 B는 바이트 입니다. ^^

혹시 더 많은 옵션이 필요하시면 man 명령어를 사용하십시오.

man top
man free

한번씩 읽어 보시는 것도 도움이 될 것입니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

오늘은 VMWARE에 Ubuntu를 설치 했습니다. VMWARE 켜서 계속 콘솔로만 접속을 할것인가? 이런 의문이 들었습니다. ^^

그래서 SSH를 통해서 어떻게 접속하게 할지 알아보겠습니다.

리눅스 IP 확인하기

VMWARE의 네트워크는 Bridged 로 잡혀 있다고 생각하고 진행 합니다.

VMWARE에서 터미널을 하나 여십시오.

오른쪽 마우스 누르고 Open in terminal 을 클릭하시면 됩니다.

요렇게 잘 나옵니다.

리눅스/Linux 리눅스의 네트워크 정보 확인 ifconfig/Windows ipconfig https://talkit.tistory.com/609

제가 작성한 글중에 위글이 있네요 ^^ 도움이 될껍니다.

일단 안가셔도 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) ...

대충 위와 같은 모습으로 설치가 끝날겁니다. ^^

그러면 다시 ifconfig 를 실행해 보겠습니다.

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.27  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::72d2:42b6:d287:b4aa  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d4:a7:43  txqueuelen 1000  (Ethernet)
        RX packets 6505  bytes 7791757 (7.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2779  bytes 205846 (205.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 168  bytes 14022 (14.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 168  bytes 14022 (14.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

여러분들도 위와 비슷하게 나올껍니다.

리눅스에 접속해보자.

이제 윈도우즈로 돌아와서 Putty를 켜십시오.

거의 매일 지겹게 보셨던 위 화면 호스트에 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]

Y 눌러서 설치를 진행 합니다. 

여러줄이 지나가면서 설치가 잘 되었습니다. ^^

다시 접속을 했더니 위와 같이 잘 접속이 됩니다. 

요렇게 잘 접속이 되네요 ^^

오늘은 여러번 설치한 우분투 서버에 접속을 해보았습니다. 

감사합니다. 

#브이엠웨어 #VM웨어 #VMWARE

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

지난 번에 Hello World를 찍고 ^^ 당황 스럽긴 하겠지만 ㅋㅋㅋ 지금 하고 있는 프로젝트에서 암호화/복호화 관련 업무가 있어서 ^^ 적어 보도록 하겠습니다.

개요

우선, 암호화는 사람들이 모르도록 이상한 문자열 등으로 바꾸는 것을 이야기 합니다. 그런데 이게 보통은 해독할 수 있는 규칙이 있습니다. 그래야 공통으로 약속되어서 풀어 볼 수 있으니까요.

암호화는 또 단방향 암호화와 양 방향 암호화가 있습니다.

단방향 암호화는 그야말로 복호화가 없는 단방향의 암호화 입니다. 단, 암호화 할때마다 동일한 결과가 나옵니다.

양방향 암호화는 암호화와 복호화가 존재하는 암호화 기법입니다.

일반적으로 단방향 암호화는 비밀번호를 만드는데 쓰입니다. 비밀번호도 양방향 암호화를 해야 할 경우도 있지만, 일반적으로는 단방향 암호화를 진행 합니다.

양방향 암호화는 주로 문서교환을 위해서 사용 합니다. 또는 DB에 바로 저장 되면 안되는 개인 정보 등의 저장을 위해서 사용 합니다.

이번에 제가 만들어 본 암호화는 양방향 암호화 입니다. ^^

개인키, 공개키 생성 프로그램

--

양방향 암호화를 하려면, 개인키와 공개키가 필요 합니다. 이번에 암호화 려는 기법은 RSA 기법입니다. RSA는 다음에 알아보도록 하고 오늘은 JAVA 어떻게 코드를 작성하는지만 보겠습니다. ^^

package com.tistory.talkit;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Base64;

public class MakeKeyData {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // RSA로 암호화 하겠다. 
        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();
         // Random 키를 이용해서 키페어 생성 준비
        keyPairGenerator.initialize(2048,secureRandom);

         // 키페어에 암호화된 내용을 담기 
        KeyPair pair = keyPairGenerator.generateKeyPair();

        // 공개키 획득
        PublicKey publicKey = pair.getPublic();

        // 공개키를 문자열로 출력
        String publicKeyString =
        Base64.getEncoder().encodeToString(publicKey.getEncoded());

        System.out.println("public key = "+ publicKeyString);

        // 개인키 획득
        PrivateKey privateKey = pair.getPrivate();
        // 개인키를 문자열로 출력
        String privateKeyString =
        Base64.getEncoder().encodeToString(privateKey.getEncoded());

        System.out.println("private key = "+ privateKeyString);

    }

}

위 코드를 만들어서 수행하면 아래와 같이 나옵니다.

public key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppicAq5Xn8+KZFQyP825E4aDPjFpyxhK5WATI4k3HllMxGo8FBOwoDl+lgVEIPEGgfD+t1cmBOpPkT7Mx54UQ+bSSU2T1wDR7QwyGV2iuxe6DCtQfVLuzYd6uxZO3pWoN93q9DkhzbLLOW1bLOieodnhMRq293uoKRWCP+Sp586SVPxwW/hWZjy57NIta1ew+JnRtHsg7reWOjyiCXORXdQvRoGfAz9ZC0aZBqopy84ZtMCK42y0Wprm0Oi4u3bwk2h2EkvGUOIRBHEly//M0Ma4RGlHWU7jpg0CiXcJAdq1DRMd6hzFVxUV4n23575NOKLwEirvqbgZXoaLJSo/1QIDAQAB
private key = MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmmJwCrlefz4pkVDI/zbkThoM+MWnLGErlYBMjiTceWUzEajwUE7CgOX6WBUQg8QaB8P63VyYE6k+RPszHnhRD5tJJTZPXANHtDDIZXaK7F7oMK1B9Uu7Nh3q7Fk7elag33er0OSHNsss5bVss6J6h2eExGrb3e6gpFYI/5KnnzpJU/HBb+FZmPLns0i1rV7D4mdG0eyDut5Y6PKIJc5Fd1C9GgZ8DP1kLRpkGqinLzhm0wIrjbLRamubQ6Li7dvCTaHYSS8ZQ4hEEcSXL/8zQxrhEaUdZTuOmDQKJdwkB2rUNEx3qHMVXFRXifbfnvk04ovASKu+puBlehoslKj/VAgMBAAECggEAXoMdnvfBhkx7usd5anEPmmApfNMTrcCuXMrQkMx7lKAcySFrzAgPoBZ+FiYOrJGQm49ZMjIiw48abNAv5N9tp8f/bM6yHLu+XLkagwF4HKQtTFIWa8Ls73T4z8KsI+LLeEZR0RPIdaYFXSMJIsUlmbS96Nm7C1P/5q7pIc5cBcFg8uyFA13yHUUd5oJaal7RPVIfRQAUZZNj3crSVdQYCfdB42nokQ0z5kv3Qm3eu04Wqli/GyWIKRbxaffTlYvEjzjN4cxptJOPSn6zQlLXIStmwohQLjmx1UQ1cWJWqwF0910QleIJyR1iBKEtbvUORxEc0hv+a/2trwQP973gAQKBgQD55jq7ofNXSsnhyC9IJEyGDfvSRTtMEDwEk4pXQy6RKFrUN3/5AD40EBb2V0txhIwQxPD2YBCkSVXW/swMMA/QSM1lLLMkSqRkQhBucAO2RimgDNVXbzakFAmDgWSUjNz0HrSXJuGmKnErb42I+0yc+hd+Sl+WqRgWZ7SkUPLN1QKBgQCqqcS1XGKLoVyRnIYGivsA2/83RIJVx8Mjzofgg6Ekd5Q1uKMZFowAy3wbqMCRRW8+qufVmElzCMP79Pijh2nrv7QfEBrTbWdDgiMJz+Sq6JGHDyAiGv7v5j/nbl0JlgNKKmx2fiNpITBNQTQWPs3cqxArKz3j0Apy3HphlWiqAQKBgQC8Qbe/QDrMaPf7Ek6kP0wytPgfKK6KF7TPEcLnCCJdkhQSyRisIYW6vOA/hfW8t8i4nVSVljsTOHflNh/Lkq1nEGFDNdBip6R+LtKoD9SMDQEwpFpXut1j8ABWxDRcQF33veX39H+LKXAF88yhBAdsPm9SYX7vRcVyo3+PRbgUXQKBgACIqWnb0R8YsR5ve+fXVXOqPIEiwLmd91lMUxZ7suxXR2pnmnMApA14lXnMrFWH/xIWHMWJRWmLtHk8Se7RBJ7NKbYTKdJRfEo0xQFJ2jBCq/ndLT+OEBAWC0shCD94bag0u8QfHuM8TFdhhdUv+xremh1YdEgbJX04fVWCzyIBAoGBAM4g8t3KCd+fcwn2tQOENr6G4pztm5qvFw1rsXK46K2P0Bggf54f+nrVBHUh1lSVk1uLyzx8QF7Btl++GD64w7MOWPC40osCNaL7uHqwFx1rrZdsuF0EM9lBtvzxBUbQkOh5T8U1cBCHupdETXsKmgAbdoBXyp22Z3En/zpSz8kJ

저 두개의 키가 암호화와 복호화를 위한 키 입니다.

암호화 함수 만들기


공개키와 개인키를 이제 만들었으면 우선 코드를 개별적으로 설명 드리겠습니다.

우선, encode 함수를 만듭니다.

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }

암호화 함수는 내용은 복잡하지만, 사용은 편하도록 encode(복호화된 텍스트) 형식의 함수를 만들었습니다.

나머지는 루틴이라고 생각하시면 되고 ^^ 앞에서 만든키를 키로 변환해 주는 과정이 필요합니다.

위 코드 중에

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

이 부분입니다. 이부분은 함수로 다시 작성해서 사용했씁니다.

    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

개인키 공개키를 모두다 할 수 있도록 만들었습니다.

복호화 함수 만들기


다음으로 decode함수의 소스 코드 입니다.

     public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

위 코드는 암호화된 텍스트를 넣으면, 복호화된 텍스트를 리턴하도록 만들었습니다.

암호화와 마찬가지로 중간에 아래 코드가 중요하고 그 내용은 복호화에 넣어둔 코드를 확인 하십시오.


         PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

메인 함수에서 불러서 암복호화 해보기



      public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

Hello World. 으로 시작하는 문자열을 암호화 했다가 복후화 하는 코드 입니다.

실행하면

encoded Text : c8AcbCp4bIARJA3EOW9cf41pRIefVhCvCWyxwcgwifWaDK8AX9RJoe8dOgPzuvauCZZG5ibbOMtvEPh06DUwojFzMngCtT3T6VOyzWDA/CBFN52jXZzqw9M1K1v3vZJ+0uft86TomxZvbWdxv5XPo5keh0HyWyexv3U5c5cXypMwBTDECUiQkUPjZN1aUf7dHGQG0uC+KuyNEKK4NDMddPWoo0gzlWxsxIBkm7oLpuKEcXP9ThM16JQD8rhskJbXwbhUL39xfmDSti8Om9DcrU6KCDakKeT7i72yRjAD5B60Da28jT1DlzwS9p7IlfPXdlybjLKUMUcQsF1rJ1Xvww==
decoded Text : Hello World. Welcome to Korea.  *

위와 같이 잘 복호화 되어서 나옵니다.

전체소스코드



package com.tistory.talkit;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAEncode {

    public static String publicKeyString1 = "만들어진 public key";

    public static String privateKeyString1 = "만들어진 private key";

    public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

    public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }


    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

}

개인키와 공개키는  제가 만든 저위에 있는 것을 복사하셔도 되고, MakeKeyData를 이용해서 만드셔도 됩니다. 

그러나, 되도록이면 만들어서 사용하십시오. 공개된 개인키와 공개키를 사용하면 다음에 해킹 당했을 때 위험할 수 있습니다.

그리고, 주의할 점은 저 공개키와 개인키는 무조건 보관해두고 잃어버리시면 안됩니다. ^^

다음에 복호화가 안될꺼니까요.

감사합니다. 

 

반응형
반응형

제가 Java를 처음 시작할때는 eclipse가 아닌 EditPlus라는 편집기를 이용해서 Java개발을 한적도 있습니다. 

그런데, 요즘은 eclipse가 없으면 작업을 못합니다. 

저는 순수 eclipse도 사용하지만, 지난 글에서 이야기한 전자정부 프레임워크 개발 툴을 주로 사용 합니다. 

자바/Java 전자정부 표준프레임워크 개발환경 설치 및 실행하기 https://talkit.tistory.com/685

그래서 저 위에 있는 화면도 전자정부 프레임워크를 실행한 화면입니다.  ^^

오늘은 maven 프로젝트만 만들고 Hello World 만 찍어 보고 끝낼 생각 입니다. ^^

File >> New >> Maven Project 를 실행 하십시오

여기서는 Create a simple project(skip archetype selection)을 선택하고 Next를 누릅니다. 

위와 같이 Gropup 아이디는 가지고 있는 도메인이 있으시면 꺼꾸로 적으시고 ^^ 아니면 임의로 만드시면 됩니다. 

저는 일단 블로그 주소를 꺼꾸로 만들었습니다. ^^

Finish 를 클릭하시면 프로젝트가 생성 됩니다. 

위와 같이 나오면 잘 생성이 된 것입니다. 

JDK가 무쟈게 낮은 버전으로 제가 설정 했네요 ^^ 저건 다시 다음에 설정하고 일단 지금은 간단하게 Hello World만 찍을 꺼여서 실제 Maven 프로젝트의 중요 파일인 pom.xml 만 한번 살펴 보겠습니다. 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tistory.talkit</groupId>
  <artifactId>HelloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

위와 비슷하게 나와 있으면 잘 된 것입니다. ^^

왼쪽에 src/main/java를 클릭하시고 오른쪽 마우스 클릭하셔서 New 선택하시고, Package를 선택하심시오.

그리고 위와 같이 화면이 뜨면 저처럼 저렇게 입력하셔도 되고 본인의 고유 패키지를 입력하십시오.

이렇게 변경 되었을 꺼구요. 저기다가 Java 프로그램을 하나 만들겠습니다. 

여기서는 프로그램이 아니고 Class 입니다. 

패키지를 클릭하고 오른쪽 마우스 누르고, New 누르고, Class를 선택하십시오.

Class 명령은 HelloWorld로 했구요. 나머지는 그대로 두시고, public static void main(String[] args)를 체크하고, Finsih를 누릅니다. 

그러면 위와 같이 나올껍니다. 

저기 중간에 있는 코드 창에다가 우리가 작업하려고 하는 코드를 넣으면 됩니다. 

// TODO Auto-generated method stub

위 코드를 지우시고, 아래 코드로 변경해 보십시오.

		System.out.println("Hello World!!");

위 코드만 넣으시면 됩니다. 

패키지가 다를 수도 있지만, Full Code는 아래와 같습니다. 

package com.tistory.talkit;

public class HelloWorld {

	public static void main(String[] args) {
		
		System.out.println("Hello World!!");

	}

}

저걸 복사하시고 package 부분만 변경해주셔도 됩니다. ^^

그럼 이제 실행해보겠습니다. 

HelloWorld.java를 클릭하시고 오른쪽 마우스를 누른다음에 Run As >> Java Application 순으로 실행하시면 됩니다. 

하단의 콘솔창에 저희가 출력한 Hello World!! 가 출력 되었습니다. ^^

일단 이번에는 여기까지 하고, 다음에는 pom.xml에 필요한 라이버러리를 추가하고 패포를 위한 설정을 하는 등의 과정을 보여 드리겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

개발환경 - 3.x 다운로드 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

www.egovframe.go.kr](https://www.egovframe.go.kr/home/sub.do?menuNo=41)

위 그림 처럼 보이게 하려면 위 링크에 접속하시면 됩니다.

4.대가 나오긴 했지만, 3.대로 설치 하겠습니다.

4.대는 좀 더 안정적이 되면, 진행하고 하겠습니다.

준비물


PC에 Java/JDK가 설치 되어 있다고 전제 합니다.

Java/JDK 설치는 Java 설치 글을 하나 적겠씁니다. ^^

다운로드


다운로드 URL은 개발환경 - 3.x 다운로드 | 표준프레임워크 포털 eGovFrame

위에서 말씀 드린대로 위와 같습니다.

윈도우즈 리눅스 맥OS 용도 있으니까 필요한 개발환경을 다운로드 하시면 됩니다.

저는 일단 오늘은 윈도우즈에 설치하고, 다음에 우분투에 한번 설치 해보겠습니다.

위와 같이 나오면 첨부파일을 클릭 합니다. OS 표시가 아무것도 안된 것이 윈도우즈용 입니다. ^^

오 정말 간편해 졌네요 ^^ .exe로 되어 있는 텍스트를 클릭하시고, 다운로드 버튼 한번 더 눌러 주시면 됩니다.

예전에는 T.T 로그인을 하고 했는데 요즘은 그냥 다운로드가 가능 하네요 ^^

저는 지금 다운로드 하고 있습니다.

설치하기


오 다운로드가 다 되었습니다. ^^

저는 c:\dev 폴더에 다운로드를 했기 때문에 폴더 안에 저 파일이 들어 있습니다.

실행 하시면 됩니다.

저는 V3가 파일에 대해서 주의로 판단을 했습니다. 하지만, 저기 그대로 두기를 선택하고 확인 하시면 됩니다. ^^

저는 보통 C 드라이브의 dev 폴더에 개발 환경을 구성 하기 때문에 저렇게 했고, 원하는 폴더로 서택하시면 됩니다.

저기서 압축 풀기를 선택하십시오.

저는 c:\dev에 설치 했기 때문에 잘 설치 되었습니다.

일단 설치는 여기까지 끝입니다.

전자정부 표준프레임워크 개발환경 실행


실행을 해보겠습니다. 저기 eclipse 폴더에 들어가셔서 eclipse.exe를 더블 클릭 하시면 됩니다. ^^

Java가 설치 되어 있지 않으면 위와 같이 실행이 안될껍니다. ^^

Java가 설치 되어 있고, 패스가 잘 걸려 있으면 그냥 실행 됩니다. 

처음 실행하면 아마 비슷하게 물을 것입니다. 

그런데 저는 c:\dev\ 개발환경 폴더 밑에다가 설치 하겠습니다. 

아까 압축을 푼 폴더를 선택하시고 Launch를 클릭하시면 됩니다. 

이제 실제로 전자정부 개발 환경이 설치 되고 잘 실행 되었습니다. 

저화면은 Welcome 옆에 X 버튼으로 닫아 주시면 됩니다. 

다음 부터 전자정부 프레임워크를 이용해서 제가 해보고 싶은걸 좀 해보겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

리눅스/Linux tail 문서의 끝(꼬리)를 보는 명령어. The command for text tail. https://talkit.tistory.com/681

어제 글에 이어서 반대의 개념을 알아 보겠습니다. 

우선 계속 알아보듯이 man을 실행해 보겠습니다. 

man head
HEAD(1)                                     User Commands                                    HEAD(1)

NAME
       head - output the first part of files

SYNOPSIS
       head [OPTION]... [FILE]...

DESCRIPTION
       Print  the  first 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
              print the first NUM bytes of each file; with the leading '-', print all but  the  last
              NUM bytes of each file

       -n, --lines=[-]NUM
              print the first NUM lines instead of the first 10; with the leading '-', print all but
              the last NUM lines of each file

       -q, --quiet, --silent
              never print headers giving file names

       -v, --verbose
              always print 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

       NUM may have a multiplier suffix: b 512, kB 1000, K  1024,  MB  1000*1000,  M  1024*1024,  GB
       1000*1000*1000,  G 1024*1024*1024, and so on for T, P, E, Z, Y.  Binary prefixes can be used,
       too: KiB=K, MiB=M, and so on.

AUTHOR
       Written by David MacKenzie and Jim Meyering.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright © 2020 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3  or  later
       <https://gnu.org/licenses/gpl.html>.
       This  is free software: you are free to change and redistribute it.  There is NO WARRANTY, to
       the extent permitted by law.

SEE ALSO
       tail(1)

head는 리눅스에서 위에도 나와 있듯이 문서의 시작 부분을 보여주는 명령어 입니다. 

잼있는 것은 맨 마지막에 SEE ALSO에 어제 같이 이야기한 tail이라는 명령어가 있습니다. ^^

head [옵션들] 파일명

위와 같이 사용할 수 있습니다. 

실제로 옵션 없이 temp.txt 를 지난 번 글처럼 출력해 보겠습니다. 

head temp.txt
 
2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5
2022-12-01, 전라북도, 6
2022-12-01, 충청남도, 6
2022-12-01, 충청북도, 7
2022-12-02, 경기도, 2
2022-12-02, 강원도, 3

10줄이 잘 출력 되고 있습니다. 

다른 옵션들은 저는 거의 안쓰고 가끔 -n정도를 사용합니다. 

-n은 tail 명령어와 마찬가지로 줄수를 늘리거나 줄여 줍니다. 

-n으로 오늘은 5줄만 출력해보겠습니다. 

head -n 5 temp.txt

2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5

위와 같이 앞에서 다섯줄만 잘 출력 되고 있습니다. 

head는 정말로 가끔만 쓰는 명령어여서 ^^

여기서 줄이겠습니다.

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 오랫만에 윈도우용 무료 소프트웨어를 이야기 합니다. ^^

음 리눅스 강좌를 쓰다 보니 제가 텍스트로 여러분들께 결과나 명령어를 보여 드리고 있는데 동적인 것들은 비디오로 녹화해서 보여 드릴 필요가 있다고 생각되어서 옛날의 기억을 뒤져서 ^^ 가져온 소프투에어 입니다. 

일단 다운로드하고 깔아 보겠습니다. 저기 초록색 커다란 DOWNLOAD 버튼을 클릭 하시면 됩니다. 중간에 START는 광고 입니다. ^^

다운로드 받으신 프로그램을 실행 하십시오.

그러면, 관리자 권한을 획득하고 설치를 시작 합니다. 

라이센스 동의해주시고, Next

설치 위치 선택해주시고, Next

메뉴명 정해 주시고, Next

바로가기를 만드시려면 선택하시고 Next 

이제 준비는 완료 되었습니다. Install을 눌러 주십시오.

여기서도 Next

설치는 완료 되었습니다. Finish 를 클릭 하십시오.

이렇게 뜨는데 X 눌러서 닫으시면 됩니다. 

매뉴는 매우 직관적입니다. 녹화 일지정지 정지 등으로요 ^^

간단하게 Region 메뉴에서 Region을 선택해 주십시오.

그리고 빨간 동그라미를 누르시면 됩니다. 

그리고 네모를 선택해 주면 녹화를 시작 합니다. 

제가 지금 글을 작성하는 모습을 녹화 해보고 있습니다.

녹화를 끝내시려면 다시 프로그램으로 돌아가서 파란색 네모 버튼을 클릭하시면 됩니다. 

녹화가 끝나면 Play도 해줍니다. 

오 티스토리에 동영상은 처음 올려 봅니다. 

저렇게 녹화해 줍니다. ^^

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘 적으려고 하는 이야기는 리눅스 명령어 tail에 관한 이야기 입니다. 

tail은 사전적의미로 꼬리라는 의미가 있습니다. 

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도 재미 있는 옵션이겠네요 ^^

먼저 -n은 기본적으로 10줄만 출력해주는 tail의 줄수를 늘릴수 있습니다. 

-f 는 계속 변환의 파일의 경우 모니터링 할 수 있습니다. 

그래서 -f 같은 경우는 로그를 추적할때 많이 쓰입니다. 

실제로 한번 해보도록 하겠습니다. 

tail -f temp.txt

지난 번에 만들어 둔 temp.txt의 마지막 10줄을 한번 보겠습니다. 

tail temp.txt
2022-12-09, 충청남도, 15
2022-12-09, 충청북도, 16
2022-12-10, 경기도, 10
2022-12-10, 강원도, 11
2022-12-10, 경상남도, 12
2022-12-10, 경상북도, 13
2022-12-10, 전라남도, 14
2022-12-10, 전라북도, 15
2022-12-10, 충청남도, 16
2022-12-10, 충청북도, 17

위와 같이 나옵니다. 

그리고, 최근 20줄을 봐 보도록 하겠습니다. 

tail -n 20 temp.txt

위와 같이 명령어를 내리면 됩니다. 

tail -n 20 temp.txt
2022-12-08, 전라남도, 12
2022-12-08, 전라북도, 13
2022-12-08, 충청남도, 14
2022-12-08, 충청북도, 15
2022-12-09, 경기도, 9
2022-12-09, 강원도, 10
2022-12-09, 경상남도, 11
2022-12-09, 경상북도, 12
2022-12-09, 전라남도, 13
2022-12-09, 전라북도, 14
2022-12-09, 충청남도, 15
2022-12-09, 충청북도, 16
2022-12-10, 경기도, 10
2022-12-10, 강원도, 11
2022-12-10, 경상남도, 12
2022-12-10, 경상북도, 13
2022-12-10, 전라남도, 14
2022-12-10, 전라북도, 15
2022-12-10, 충청남도, 16

마지막 20줄을 잘 보여 줍니다. 

그러면 이제 조금 다르게 실제로 로그를 한번 보겠습니다. 

제가 일부러 프로그램을 하나 설치해보고 설치하기 전과 설치후를 모니터링 하는 것을 보여 드리겠습니다. ^^

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라는 명령어를 한번 공부해 보겠습니다.

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

제 스팀잇과 블로그에 방문해 주신 모든 분들 새해 복 많이 받으십시오.

이제 호랑이해가 지고 토끼해가 열렸네요.

올해도 새해 복 많이 받으시고, 모두들 건강한 한해 되십시오.

작년에 티스토리는 한달에 약 6000명 정도 방문하신 것 같네요 ^^

그런데 06 07 08 09 사이가 가장 많은 방문자 수가 있구요.

제가 다시 글을 쓰기 시작했습니다.

내년에 좀 더 방문자수가 많았으면 하는 바램입니다. ^^

https://talkit.tistory.com

https://steemit.com/@talkit

위 두 사이트에 많은 방문 부탁 드려요.

하시는 모든일이 잘되시기를 빌면이 이만 뿅

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘 제가 앞으로 설치하려는 프로그램 때문에 데이터베이스가 필요해서 우분투 리눅스에 데이터베이스를 설치해보겠습니다. 

우선 당연히 우분투 리눅스에 접속 합니다. ^^

잘 접속 하셨다고 생각하고 깔아 보도록 하겠습니다. ^^

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:

요렇게 나오면 비밀번호를 대소문자를 넣으시고, 특수문자를 썩어서 8자리 이상의 비밀번호를 만드시면 됩니다. 

저는 매일 사용하는 비밀번호가 있어서 넣었습니다. 

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

use 명령어는 사용하고자 하는 데이터베이스를  선택해 줍니다. 

 show tables;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                            |
| time_zone_leap_second                                |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+
37 rows in set (0.00 sec)

show tables 명령어는 데이터베이스 내에 있는 테이블들을 나열해 줍니다. 

정말 잘 설치 되었습니다. 

Tasks: 116 total,   1 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    964.1 total,     74.0 free,    571.1 used,    319.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    231.9 avail Mem

아직 데이터를 넣지 않아서 그렇지만, ^^

CPU는 훌륭하네요 ^^ 1VPU이긴 하지만, 충분히 MySQL이 저혼자 쓸때는 잘 돌아 갑니다. ^^

그리고 메모리는 흑흑흑 실제로 운영을 해봐야겠지만 조금 모자랄 수도 있을 것 같습니다. ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 리눅스에서 파일 내용에 내가 원하는 내용이 있는지 찾아 보는 방법을 알려 드리겠습니다. 

grep은 또 조합을 해서도 많이 사용 합니다. 

오늘은 grep 명령어 만으로 이야기 하는 것과 조합에 대한 맞배기를 좀 보여 드리겠습니다. 

우선 조합을 해보려면, 파일이 좀 필요 합니다. 

2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5
2022-12-01, 전라북도, 6
2022-12-01, 충청남도, 6
2022-12-01, 충청북도, 7
2022-12-02, 경기도, 2
2022-12-02, 강원도, 3
2022-12-02, 경상남도, 4
2022-12-02, 경상북도, 5
2022-12-02, 전라남도, 6
2022-12-02, 전라북도, 7
2022-12-02, 충청남도, 8
2022-12-02, 충청북도, 9
2022-12-03, 경기도, 3
2022-12-03, 강원도, 4
2022-12-03, 경상남도, 5
2022-12-03, 경상북도, 6
2022-12-03, 전라남도, 7
2022-12-03, 전라북도, 8
2022-12-03, 충청남도, 9
2022-12-03, 충청북도, 10
2022-12-04, 경기도, 4
2022-12-04, 강원도, 5
2022-12-04, 경상남도, 6
2022-12-04, 경상북도, 7
2022-12-04, 전라남도, 8
2022-12-04, 전라북도, 9
2022-12-04, 충청남도, 10
2022-12-04, 충청북도, 11
2022-12-05, 경기도, 5
2022-12-05, 강원도, 6
2022-12-05, 경상남도, 7
2022-12-05, 경상북도, 8
2022-12-05, 전라남도, 9
2022-12-05, 전라북도, 10
2022-12-05, 충청남도, 11
2022-12-05, 충청북도, 12
2022-12-06, 경기도, 6
2022-12-06, 강원도, 7
2022-12-06, 경상남도, 8
2022-12-06, 경상북도, 9
2022-12-06, 전라남도, 10
2022-12-06, 전라북도, 11
2022-12-06, 충청남도, 12
2022-12-06, 충청북도, 13
2022-12-07, 경기도, 7
2022-12-07, 강원도, 8
2022-12-07, 경상남도, 9
2022-12-07, 경상북도, 10
2022-12-07, 전라남도, 11
2022-12-07, 전라북도, 12
2022-12-07, 충청남도, 13
2022-12-07, 충청북도, 14
2022-12-08, 경기도, 8
2022-12-08, 강원도, 9
2022-12-08, 경상남도, 10
2022-12-08, 경상북도, 11
2022-12-08, 전라남도, 12
2022-12-08, 전라북도, 13
2022-12-08, 충청남도, 14
2022-12-08, 충청북도, 15
2022-12-09, 경기도, 9
2022-12-09, 강원도, 10
2022-12-09, 경상남도, 11
2022-12-09, 경상북도, 12
2022-12-09, 전라남도, 13
2022-12-09, 전라북도, 14
2022-12-09, 충청남도, 15
2022-12-09, 충청북도, 16
2022-12-10, 경기도, 10
2022-12-10, 강원도, 11
2022-12-10, 경상남도, 12
2022-12-10, 경상북도, 13
2022-12-10, 전라남도, 14
2022-12-10, 전라북도, 15
2022-12-10, 충청남도, 16
2022-12-10, 충청북도, 17

위와 같은 파일이 있다고 생가갛겠습니다. 

그런데 생각만 하면 자료를 못 만드니 따라하시면 파일이 생깁니다. ^^

vi temp.txt

리눅스에서 위와 같이 치십시오

vi 따로 글을 몇개 적어 보겠습니다. 

오늘은 따라 하시면 됩니다. 

리눅스에서 위 명령어를 입력 합니다. 

그러면 위에서 보이는 것처럼 vi 가 열립니다. 파일이 동일한 파일명으로 존재하면 파일의 내용이 나오겠지만, 우리는 새로운 파일을 만든다고 가정하므로, 저 그림과 비슷해야 합니다. 

그럼 저기서 영어 자판의 소문자 "i"를 타이핑 합니다. 

그러면, 아래에 INSERT 라고 나올 겁니다. 

vi가 입력모드로 변경 된 것입니다. 

앞의 네모에서 복사를 하셨다면, PuTTY를 사용하신다는 전제 하에서 오른쪽 마우스를 클릭 합니다. 

요렇게 나올 겁니다. 

저기서 입력모드를 빠져 나와합니다. 키보드의 "Esc" 키를 타이핑 하십시오.

위와 같이 됩니다. 

여기서 :wq 를 순서대로 입력하고 엔터를 칩니다. 

그림과 같이 타이핑이 쳐질것이고, 저기서 엔터만 누르시면 됩니다. 

ls -al
total 84
drwxr-x--- 4 ubuntu ubuntu 4096 Dec 25 11:41 .
drwxr-xr-x 4 root   root   4096 Dec 19 13:19 ..
-rw------- 1 ubuntu ubuntu 1046 Dec 24 15:28 .bash_history
-rw-r--r-- 1 ubuntu ubuntu  220 Jan  6  2022 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Jan  6  2022 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Dec 19 14:28 .cache
-rw------- 1 ubuntu ubuntu   20 Dec 25 11:34 .lesshst
-rw-r--r-- 1 ubuntu ubuntu  807 Jan  6  2022 .profile
drwx------ 2 ubuntu ubuntu 4096 Dec 19 13:19 .ssh
-rw------- 1 ubuntu ubuntu 2986 Dec 25 11:41 .viminfo
-rw-rw-r-- 1 ubuntu ubuntu   54 Dec 24 11:25 hello.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello1.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello2.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello3.txt
-rw-rw-r-- 1 ubuntu ubuntu 2216 Dec 25 11:41 temp.txt
-rw-rw-r-- 1 ubuntu ubuntu 1099 Dec 24 01:06 test.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 test2.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 text.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow1.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow2.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow3.txt

파일을 찾아보면 저기 temp.txt가 보입니다. ^^

그러면 이제 grep을 이용해서 몇가지 일을 해보겠습니다. 

오늘은 가장 간단하게 할 것이므로 다음과 같이 입력해 보십시오.

grep "경상남도" *

위와 같이 입력 합니다. 

grep "경상남도" *
temp.txt:2022-12-01, 경상남도, 3
temp.txt:2022-12-02, 경상남도, 4
temp.txt:2022-12-03, 경상남도, 5
temp.txt:2022-12-04, 경상남도, 6
temp.txt:2022-12-05, 경상남도, 7
temp.txt:2022-12-06, 경상남도, 8
temp.txt:2022-12-07, 경상남도, 9
temp.txt:2022-12-08, 경상남도, 10
temp.txt:2022-12-09, 경상남도, 11

위와 같이 나옵니다. ^^

어느파일에 temp.txt에 우리 원하는 경상남도가 들어 있다네요.^^

리눅스에 표출 입출력에 대해서 좀 더 설명을 해야겠지만 

위 명령어로 경상남도.txt를 만들어 보겠습니다. 

grep "경상남도" * > 경상남도.txt

실제로 실행을 하고 저희가 cat에서 배워던 내용까지 한번 해서 다시 출력을 해보겠습니다. 

grep "경상남도" * > 경상남도.txt
ubuntu@instance:~$ cat 경상남도.txt
temp.txt:2022-12-01, 경상남도, 3
temp.txt:2022-12-02, 경상남도, 4
temp.txt:2022-12-03, 경상남도, 5
temp.txt:2022-12-04, 경상남도, 6
temp.txt:2022-12-05, 경상남도, 7
temp.txt:2022-12-06, 경상남도, 8
temp.txt:2022-12-07, 경상남도, 9
temp.txt:2022-12-08, 경상남도, 10
temp.txt:2022-12-09, 경상남도, 11
temp.txt:2022-12-10, 경상남도, 12

파일에 위와 같이 나옵니다. 

조금 마음에 안드는 것이 ^^ 저 앞에 파일 이름을 출력한게 마음에 안듭니다. 

그래서 grep의 옵션을 사용해서 파일 이름을 지워 버리겠습니다. ^^

grep -h "경상남도" temp.txt > 경상남도.txt

-h가 no-file-name 이라고 되어 있습니다. ^^

지금 현재 경상남도 파일이 생겨서 * 파일로 하면 파일명이 있는게 나오므로, temp.txt 만 찍어서 했습니다. 

 grep -h "경상남도" temp.txt > 경상남도.txt
ubuntu@instance-:~$ cat 경상남도.txt
2022-12-01, 경상남도, 3
2022-12-02, 경상남도, 4
2022-12-03, 경상남도, 5
2022-12-04, 경상남도, 6
2022-12-05, 경상남도, 7
2022-12-06, 경상남도, 8
2022-12-07, 경상남도, 9
2022-12-08, 경상남도, 10
2022-12-09, 경상남도, 11

결과는 위와 같습니다.

여러분들은 경상남도 뿐 아니라 다른 곳으로 한번 해보십시오.^^

자 그런데, 아까 반대로 파일이름은 봤습니다. 그런데 이게 몇 Line에 있는지를 알고 싶으면 어떻게 해야 할까요?

 grep -n "경상남도" temp.txt
 grep -n "경상남도" temp.txt
3:2022-12-01, 경상남도, 3
11:2022-12-02, 경상남도, 4
19:2022-12-03, 경상남도, 5
27:2022-12-04, 경상남도, 6
35:2022-12-05, 경상남도, 7
43:2022-12-06, 경상남도, 8
51:2022-12-07, 경상남도, 9
59:2022-12-08, 경상남도, 10
67:2022-12-09, 경상남도, 11
75:2022-12-10, 경상남도, 12

요렇게 하시면 젤 앞에 : 앞에 있는 수자가 라인 넘버 입니다. ^^

자 이제 다시 vi 도 연습 해볼 겸 해서 실제로 3라인에 경상남도가 있는지 한번 알아보겠습니다.

vi temp.txt

위와 같이 그냥 치십시오.

"백문이 불여 일타" 라고 ^^ 열심히 치시다 보면, 손가락이 기억을 할겁니다 .^^

이렇게 봤을때 그냥 눈으로 보셔도 ^^ 3라인데 있네요 ㅎㅎㅎ

하지만 확실하게 하기 위해서 vi 에서 :3 을 입력하고, 엔터를 쳐 보십시오.

: 하고 숫자를 치시면 해당라인으로 커서를 옮겨 줍니다. 그러니까 저희는 3라인으로 이동 시켰으니 정확하게 3라인에 경상남도가 있습니다. ^^

그리고 또한가지 더 있습니다. 

:set nu 라고 vi 화면에서 입력하고 엔터를 치십시오.

제일 압줄에 줄 번호를 달아 줍니다. ^^

3라인에 확실하게 있네요 ㅎㅎㅎ

:set nonu를 입력하십시오.

다시 줄번호를 꺼줍니다. 

이번에는 vi에서 빠져 나가겠습니다. 

앞에서 :wq 를 하셔도 되겠지만, 

저희는 :q! 를 입력합니다. 

vi에서 문서를 보기만 하셨으면 상관이 없는데 실수로 뭔가를 하셨다면 초기화 해줍니다. 그래서 !는 강제로 입니다. 

강제로 나가겠다는 뜻입니다. ^^

:q! 를 입력하시고, 엔터를 치시면 빠져 나갑니다. 

오늘은 grep에 대해서 알아 보았습니다. 

다음 시간에 tail 이라는 명령어를 알아 볼 것인데, 이때 grep을 어떻게 조합해서 사용하는지 한번 알아 보겠습니다. ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 지난 번에 글에서 사용하다가 나온 echo에 대해서 말씀 드리겠습니다. 

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라던지 여러가지 환경 변수들을 알아 볼때 출력해 볼 수 있습니다. 

음 글을 적다 보니 많은 글쓸 꺼리가 튀어 나오네요 ^^

리눅스의 환경 변수 설정도 한번 적어 보겠습니다. 

env
HOME=/home/ubuntu
USER=ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

여러분들은 더 나올껀데 공개해도 되는 것만 일단 공개해 봅니다. 

Oracle 클라우드를 사용하시면 동일하게 보일 수 있습니다. 

저기 젤앞에 대문자로 적혀 있는 아이들이 환경 변수 입니다. 이 환경 변수 앞에 echo를 하면서 $를 붙여 주면 개별적으로 출력해 줍니다. 

그럼 저 세가지하고 저기는 안나오지만, SHELL이라는 환경변수를 한번 찍어 보겠습니다. 

echo $HOME
echo $PATH
echo $USER
echo $SHELL

위와 같이 리눅스에 치시면 됩니다. ^^

echo $HOME
echo $PATH
echo $USER
echo $SHELL
/home/ubuntu
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ubuntu
/bin/bash

저는 실행 했더니 위와 같이 나왔씁니다. ^^

여러분들은 다르게 나오시나요?

저 아이들은 기본적으로 환경 변수이구요.

쉘 스크립트를 작성할때 변수를 정의 할 수 있습니다. 

저희는 말씀은 안드렸지만, 저기 있는 bash 쉘입니다. ^^

그래서 

변수를 만들어 보겠씁니다. 

VAR1="111"

위와 같이 리눅스에 치십시오 ^^

이제 아시겠죠 저 = 앞에 있는 아이 앞에다가 $를 붙이면 출력 된다는 것을 ^^

echo $VAR1
 echo $VAR1
111

실행하면 위와 같이 나오네요 ^^

변수 설정이 잘되고 출력도 잘 됩니다.

오늘은 변수와 출력으로서 만들었지만, 다음에는 조금 다른 방법으로 변수를 활용해 보겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

최근에 Linux에 뭔가를 많이 깔아보고 실험해보고 블로그 글도 써보고 있습니다. 

리눅스/Linux VMWARE에 우분투/Ubuntu 18.04 설치하기/Install https://talkit.tistory.com/637
리눅스/Linux VMWARE Workstation에 우분투/Ubuntu 16.04 설치하기 https://talkit.tistory.com/593

앞에서 18.04 하고 16.04는 VMWARE에 설치하는 모습을 보여 드렸습니다. 

이번에는 20.04를 설치해보겠습니다. 

거의 동일 합니다. ^^

Ubuntu 20.04.5 LTS (Focal Fossa) (kakao.com)

 

Ubuntu 20.04.5 LTS (Focal Fossa)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

mirror.kakao.com

한국에서 우분투/Ubuntu 공식 미러는 느려서 T.T 저는 kakao 미러를 사용하고 있습니다. 

위 주소로 접속하시면, 

이런화면이 나옵니다. 우선 저기 64-bit PC(AMD64) desktop image를 다운로드 합니다. 

대충 이번에는 약 8분 정도 걸린다네요 ^^

다운을 다 받으셨으면 설치를 진행해 보겠습니다. 

Create a New Virtual Machine를 클릭해서 가상 머신을 만들기 시작 합니다. 

다운로드 받은 20.04 iso 파일을 선택 합니다. 

이름과 아이디 패스워드를 잘 입력 합니다. Confirm에는 비밀번호를 한번 더 동일하게 입력 하십시오.

Virtual Machine 이름과 설치 위치를 적당하게 설정하십시오.

Next 

Disk Size를 고르십시오.

저는 저기를 1000GB로 변경해주었습니다. 

여기서 저는 Customize Hardware를 클릭해서 하드웨어 스펙을 변경 했습니다. 

메로리를 16GB로 했구요. 4GB 이상 정도를 권장 합니다. 

CPU는 16개로 변경 했습니다. 

네트워크는 Bridged 로 변경 했습니다. 

Close 눌러 주시고 다시 설치화면으로 돌아가서

Finish를 클릭 합니다. 

일단 Ubuntu가 뜨고 있습니다. ^^

자동으로 설치를 지원해 줍니다. 

열심히 설치를 해주고 있습니다. 

잠깐 어디를 갔다오니 ^^

잘 설치가 되어 있습니다. 

아까 입력한 비밀번호를 넣어 보니 잘 접속이 됩니다. 

뭐 클라우드 계정에 접속 하라고 설정하게 되어 있는데 우리는 그냥 Skip 합니다. ^^

설정은 귀찮으니 Next

리포트 보낼꺼냐고 물어서 안보낸다에 체크 하고 Next

Location 서비스가 필요하신 분은 체크 하시고 저는 필요 없어서 Next

프로그램 설치할꺼냐고 묻는데 저는 일단 조금씩 쉘로 설치 할꺼라서 Done을 눌렀습니다. 

위 두가지의 순서느 어떻게 될지 모르겠습니다. 

우선 22.04로 업그레이드 할꺼냐? Don't Upgrade를 선택 합니다. 또는 Ask Me Later 저는 20.04를 사용할꺼라서요 ^^

나중에 업그레이드 하고 싶으면, Upgrade를 클릭하라고 나오네요 ^^ OK를 클릭 합니다. 

앞쪽에 있는 아이는 Install Now를 선택합니다. 저희가 설치한 20.04 버전에서 마이너 업그레이드 한 것들이니까요 ^^

저기서 비밀번호를 넣고 엔터치시면 업그레이드를 시작 합니다. 

업그레이드 될때까지 기다리시면 됩니다. ^^

업데이트가 끝나고 나니 껏다가 켜라네요 Restart Now를 클릭 하시면 껏다가 켜집니다. ^^

두가지만 알아보고 여기서 끝내겠습니다. 

CPU와 RAM  크기 입니다. 

왼쪽 하단에 보시면 저런 아이콘이 보입니다. 

클릭하십시오.

저기서 나온 프로그램들 중에 System Monitor를 클릭합니다. 

그러면 위와 같이 나올껍니다. 저기서 Resource를 눌러 주십시오.

저기 보시면 CPU 16개, 메모리 약 16GB가 보이네요 ^^

그리고, 그 옆에 File Systems를 클릭하시면 1.1TB 정도 할당되어 있는것이 보일 껍니다. 

제가 원하는대로 장비는 잘 만들어 졌습니다. 

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

다른 클라우드에서 가상 서버를 만들어 보셨나요?

그렇다면, 아마 좀 저렴한 서비스는 웹에서 아이디/패스워드를 설정 하셨을 겁니다. 

하지만, 지난 번 글

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(2) VM 인스턴스 만들기 Let's make free VPS on Oracle Cloud.(2) Create VM Instance :: 가야태자의 IT이야기 (tistory.com)

에서 비밀번호를 설정한 기억이 없습니다. ^^

제가 SSH 키를 잘 보관해 두시라는 이야기 했지만, 어디다가 비밀번호를 넣어라는 말씀은 드린적이 없네요

그래도 접속이 되는지만 일단 확인 해보겠습니다. 

혹시나 접속이 안된다는 메시지가 나온다면 putty를 최신 버전으로 업그레이드 하십시오.

[무료소프트웨어] 무료 보안쉘 클라이언트 PuTTY 최신 버전 다운로드 및 설치하기. How to Install the latest version PuTTY that is free Secure Shell Client. :: 가야태자의 IT이야기 (tistory.com)

접속이 되시면, Accept를 클릭하십시오. 머 매번 저걸 누르실 필요는 없으니까요 ^^

그려면 화면에 login as : 이렇게 나올텐데 여기에 아까 기억해두신 아이디를 입력하십시오.

기본적으로 ubuntu 입니다. ^^

키가 없기 때문에 ^^ 위와 같이 접속이 끊겨 버릴 겁니다. ^^

이제 키를 만들어 보겠습니다. 

최신 버전으로 설치하신 PuTTY에서 PuTTYgen이라는 프로그램을 실행 합니다. 

요렇게 생겼습니다. 

Conversions >> Import key를 클릭하십시오.

그리고 인스턴스만들면서 받은 Oracle에서 받은 key 파일을 선택하십시오.

Save public key와 Save private key를 클릭해서 다시 잘 저장해둡니다. 

저는 파일명은 public key는 oraclevm2.pub로 private key는 oraclevm2.ppk 로 저장 하였습니다. 

이제 다시 putty로 돌아가겠습니다. 

새로 설치한 putty를 여시는 것이 좋습니다. ^^

왼쪽에 있는 메뉴 중에서 Connection SSH Auth Credntials 를 클릭하십시오.

Privte key file for authentication: 에 앞에서 저장한 ppk 파일을 선택 합니다. 

그리고 다시 Session으로 돌아가서 Save버튼을 클릭하시고 Open버튼을 클릭 합니다. 

Open을 클릭하시면 

위와 같이 잘 접속이 됩니다. 

이제 제가 가르쳐 드리고 있는 여러가지 Linux 명령어들을 실험해 보시면 됩니다. ^^

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

요즘 리눅스에서 파일을 다루는 작업에 관한 글들을 적고 있습니다. 

[리눅스/Linux] 파일 이동시키기(Move File)/이름 바꾸기(Change Name) mv 명령어(Command)  https://talkit.tistory.com/667

[리눅스/Linux] 파일 복사(Copy File) cp 명령어(Command) https://talkit.tistory.com/668

위와 같은 글들을 적고 있습니다. 

오늘을 파일을 어떻게 압축할 것인가에 대해서 적어 보겠습니다.

리눅스 압축 프로그램의 대표는 gzip이라는 프로그램과 tar라는 프로그램 또는 두 가지 프로그램을 통합해서 사용합니다. 

그 중에서 오늘은 tar에 대해서 설명을 드리겠습니다. 

tar는 솔직히 압축 프로그램이 아닙니다. 파일 여러개를 하나마의 테이프에다가 묶는 것입니다. 

tar 명령어를 사용하는 방법은 아래와 같습니다. 

tar [옵션들] 압축파일명.tar[.gz|bz2] 압축하고자하는파일/디렉토리들

위와 같이 사용합니다. 

여기서는 옵션들이 중요한데요. 몇 가지 옵션을 살펴 보겠습니다. 

제가 공부하고 사용하고 있는 옵션들은

c,j,z,v,f,p,x,t

위의 옵션들만 설명 하겠습니다. 

c 는 create 즉 압축파일을 만듭니다. 

j는 bz2  파일의 압축을 풀 수 있습니다. *.tar.bz2 같은 파일들입니다. 

z는 gz 또는 tgz로 끝나는 파일들을 풀때 사용합니다. 

v는 압축을 하거나 풀 때 행위를 보여 주라는 의미 입니다. 

f 는 파일에 저장한다는 의미이구요. 

p 는 권한을 유지한다는 의미이구요.

x 는 extract 즉 압축 해제릉ㄹ 의미 합니다. 

t 는 압축해제는 하지 않고 안에 있는 파일 목록을 보여 줍니다.

기본적으로 tar 명령어로 압축을 해보겠습니다. 

tar cvfp test.tar test*.txt
tar cvfp test.tar test.txt test_target.txt

.tar 뒤에다가 파일들을 나열해줘도 되지만 저렇게 test로 시작하는 txt 파일만 압축하려고 할때는 저렇게 하시면 됩니다.

그리고, 두번째 줄 처럼 압축하고자 하는 파일을 나열해주셔도 됩니다. 편하신 방법으로 하시면 됩니다. 

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 5 talkit talkit  88 12월 17 02:26 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar cvfp test.tar test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:40 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

 처음에 파일목록에는 압축 파일이 없습니다. 

tar 명령어로 실제로 압축을 했을때 test.tar 파일이 생겼습니다. 

그런데 압축을 하면 파일 사이즈가 비슷하거나, 줄어 들어야 하는데 보시는 바와 같이 크기가 늘어 났습니다. 

28 + 28 = 56 인데

압축파일의 사이즈는 10240 이네요

이걸 잘 기억해 두시고, 다음 명령어를 한번 실행해보겠습니다. 

gzip을 연동해서 할때는 z 를 옵션에 넣어 주시면 됩니다. 

tar czvfp test1.tar.gz test*.txt
tar czvfp test2.tar.gz test*.txt target

위에서 알려 드렸으니 파일을 나열 하는 것은 하지 않겠습니다. 

파일 사이즈 비교를 위해서 원래 파일을  test1.tar.gz 로압축하고, 

이번에는 target 디렉토리도 넣어서 test2.tar.gz 로 압축 해보겠습니다. 

[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:47 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar czvfp test1.tar.gz test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ tar czvfp test2.tar.gz test*.txt target
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 test]$ ls -al
합계 28
drwxrwxr-x 5 talkit talkit   144 12월 18 16:48 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit   167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit   233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

결과는 위와 같습니다.  test.tar와 test1.tar.gz의 사이즈는 차이가 납니다. 원본이 워낙 작아서 그래도 원본보다는 크네요 ^^ 디렉토리를 넣었을때도 압축이 된거 보이시죠 ^^

이제 압축을 했으니 압축을 풀어 보겠습니다.

참 압축을 풀기 전에 압축 파일에 들어 있는 파일을 한번 보겠습니다. 

위의 옵션 중에 t 입니다. 

tar tvfp test.tar
tar tvfp test1.tar.gz
tar tvfp test2.tar.gz

실행 결과는 아래와 같습니다.

[talkit@server02 test]$ tar tvfp test.tar
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:16 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test1.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test2.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
drwxrwxr-x talkit/talkit     0 2022-12-17 02:25 target/
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test_target.txt

잘 보이시죠 압축을 안풀어도 tvfp 명려어를 사용하면 우리가 압축하기전 형태대로 보입니다. 

mkdir extract
mv test.tar extract
mkdir extract1
mv test1.tar.gz extract1
mkdir extract2
mv test2.tar.gz extract2

extract라는 디렉토리를 만들고, 압축 파일을 이동 시킨 다음에 실제로 압축을 풀어 보겠습니다. 

동일한 파일들을 모두 압축해서 일부를 폴더를 만들었습니다. 

실제로는 A 서버에서 압축해서 B서버로 간다던지 아니면, A서버에 있는 내용을 개발 컴퓨터로 가져와서 압축을 푼다던지 할꺼라서 저렇게 만들지는 않겠지만, 그래도 실제 폴더를 만들고 그 속에 풀어야겠지요 ^^

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit  22 12월 18 16:57 extract
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract1
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract2
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ cd extract
[talkit@server02 extract]$ ls
test.tar
[talkit@server02 extract]$ tar xvfp test.tar
test.txt
test_target.txt
[talkit@server02 extract]$ ls -al
합계 20
drwxrwxr-x 2 talkit talkit    61 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit   135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 extract]$ cd ../extract1
[talkit@server02 extract1]$ ls
test1.tar.gz
[talkit@server02 extract1]$ tar xzvfp test1.tar.gz
test.txt
test_target.txt
[talkit@server02 extract1]$ ls -al
합계 12
drwxrwxr-x 2 talkit talkit  65 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract1]$ cd ../extract2
[talkit@server02 extract2]$ ls -al
합계 4
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
[talkit@server02 extract2]$ tar xzvfp test2.tar.gz
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 extract2]$ ls -al
합계 12
drwxrwxr-x 3 talkit talkit  79 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract2]$

순서대로 폴더 내에 들어가서 압축을 해제하고 해제된 실제파일들이 보이는 것을 보았습니다. ^^

압축을 어떻게 하고 압축을 어떻게 푸시는지 이제 아시겠지요.

저는 또 다른 리눅스 이야기로 찾아오겠습니다. ^^

감사합니다. 

반응형
반응형

요즘은 ORACLE 관련 글을 계속 적고 있네요.

요즘 사이트에서 사용하고 있는 DB가 ORACLE 이어서 그렇습니다. ^^

1. 오류 발생

오류가 아래와 같이 발생 하더라구요. 

SQL> drop index hr.JHIST_EMP_ID_ST_DATE_PK;
drop index hr.JHIST_EMP_ID_ST_DATE_PK
              *
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key

2. 오류와 관련 된 테이블 확인 하기 

SQL> column constraint_name format a30;
SQL> select constraint_name from all_constraints where index_owner = 'HR' and index_name = 'JHIST_EMP_ID_ST_DATE_PK';

CONSTRAINT_NAME
------------------------------
JHIST_EMP_ID_ST_DATE_PK

3. Drop Constraint

인덱스를 지우기 전에 Constraint를 먼저 수정 해야 합니다. 

SQL> alter table hr.job_history drop constraint JHIST_EMP_ID_ST_DATE_PK;

Table altered.

4. Drop index

이제 인데스를 지웁니다. 

SQL> drop index hr.JHIST_EMP_ID_ST_DATE_PK;

Index dropped.

오류 없이 잘 지워 집니다. 

잊어 버리지 않으려고 한글로 번역해서 ^^

감사합니다.

원본 출처 : How to Resolve ORA-02429: cannot drop index used for enforcement of unique/primary key - Ed Chen Logic

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 리눅스에서 파일을 합치는 방법을 좀 알아 보도록 하겠습니다 

[리눅스/Linux] 파일 복사(Copy File) cp 명령어(Command) https://talkit.tistory.com/668

리눅스/Linux cat 간단한 텍스트 파일 보기 Simple Text File Viewer https://talkit.tistory.com/675

우선 파일을 합치기 위해서 몇개의 파일을 만들도록 하겠습니다. 

echo "안녕하세요 1" > hello1.txt
echo "안녕하세요 2" > hello2.txt
echo "안녕하세요 3" > hello3.txt
echo "노랑색 1" > yellow1.txt
echo "노랑색 2" > yellow2.txt
echo "노랑색 3" > yellow3.txt

리눅스에 접속하셔서 위 명령어를 입력해 주십시오.

한줄 한줄 해도 됩니다만 ^^

전체를 복사해서 붙여 넣으시면 됩니다. ^^

Putty를 사용하신다면, 복사하시고 <Shift> + <Insert> 를 누르시면 붙여 넣어 집니다. 

마우스로 오른쪽 클릭을 한번 하셔도 붙여 넣어 집니다. ^^

ubuntu@instance:~$ echo "안녕하세요 1" > hello1.txt
echo "안녕하세요 2" > hello2.txt
echo "안녕하세요 3" > hello3.txt
echo "노랑색 1" > yellow1.txt
echo "노랑색 2" > yellow2.txt
echo "노랑색 3" > yellow3.txt
ubuntu@instance:~$ ls -al
total 72
drwxr-x--- 4 ubuntu ubuntu 4096 Dec 24 11:16 .
drwxr-xr-x 4 root   root   4096 Dec 19 13:19 ..
-rw-r--r-- 1 ubuntu ubuntu  220 Jan  6  2022 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Jan  6  2022 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Dec 19 14:28 .cache
-rw------- 1 ubuntu ubuntu   20 Dec 24 11:13 .lesshst
-rw-r--r-- 1 ubuntu ubuntu  807 Jan  6  2022 .profile
drwx------ 2 ubuntu ubuntu 4096 Dec 19 13:19 .ssh
-rw------- 1 ubuntu ubuntu 1955 Dec 24 01:13 .viminfo
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello1.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello2.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello3.txt
-rw-rw-r-- 1 ubuntu ubuntu 1099 Dec 24 01:06 test.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 test2.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 text.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow1.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow2.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow3.txt

위와 같은 결과가 나올껍니다. 

실제로 hello1 파일과 yellow1 파일들이 생겼습니다.

그러면 저 친구들은 표준 출력을 해보십시오. ^^

더보기

cat hello1.txt
cat hello2.txt
cat hello3.txt
cat yellow1.txt
cat yellow2.txt
cat yellow3.txt

실제로 해보시면 아래와 같이 나옵니다. ^^

한줄 한줄 하셨으면 한줄씩 출력 될껍니다. 

더보기

cat hello2.txt
cat hello3.txt
cat yellow1.txt
cat yellow2.txt
cat yellow3.txt
안녕하세요 1
안녕하세요 2
안녕하세요 3
노랑색 1
노랑색 2
노랑색 3

자 그런데 다음 명령어도 가능 합니다. 

더보기

cat hello*.txt yellow*.txt

위와 같이도 가능 합니다. 

더보기

cat hello*.txt yellow*.txt
안녕하세요 1
안녕하세요 2
안녕하세요 3
노랑색 1
노랑색 2
노랑색 3

그러면 이제 이글의 제목인 파일 합치기에 대해서 알아 보겠습니다. 

먼저 방법은 cat을 이용하면 아래와 같습니다. 

시나리오는 hello로 시작하는 텍스트 파일을 hello.txt 파일로 만드는 것입니다. 

cat hello*.txt > hello.txt
cat hello1.txt hello2.txt hello3.txt > hello.txt

위 두가지 명령어로 가능 합니다. 

저는 위의 명령어를 주로 사용하기 때문에 한번 해보겠습니다. 맨 마지막에 cat로 한번 hello.txt를 출력도 해보겠습니다. 

더보기

ubuntu@instance-:~$ cat hello*.txt > hello.txt
ubuntu@instance-:~$ cat hello.txt
안녕하세요 1
안녕하세요 2
안녕하세요 3

제가 실행한것을 보면 세개의 hello 파일들이 합쳐져서 하나의 파일로 만들어 졌습니다. 

자 이제 여러분들도 해보십시오. 동일하게 yellow 로 시작하는 파일들을 합쳐 보십시오.

더보기

cat yellow*.txt > yellow.txt

cat yellow.txt

위와 같이 실행하면 합쳐 집니다. 

오늘은 cat을 이용해서 파일을 합치는 방법에 대해서 알아 보았습니다. 다음에는 cat과 grep을 이용해서 필터링 하는 방법을 한버 써 보도록 하겠습니다. 

리눅스에서 cat의 활용도가 높네요 ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

오늘은 리눅스 명령어 중에 cat에 대해서 알아 보도록 하겠습니다. 

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 파일 합치기 기능을 한번 저도 알아보겠습니다. ^^

감사합니다. 

반응형
반응형

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

글을 적고 있는 현재는 0.78 버전이 최신 버전입니다. 위 링크로 가면 최신 버전을 다운로드 하실 수 있습니다. 

최신 버전을 다운로드 하셔야 하는 이유는 SSH의 인증 버전 때문입니다. 

Putty로 서버에 접속했는데 접속이 안되는 경우는 여러가지가 있겠지만, 가장 빈번한 경우는 보안 때문이거나, 보안키의 버전이 틀린 경우 입니다.

Putty 이전 버전들이 최신 버전의 Fedora Linux 또는 Ubuntu에 접속이 안되는 경우가 있습니다. 

이때는 최신 버전을 받아서 설치하십시오.

저는 가끔 putty-gen 등의 툴이 필요하기 때문에 msi 버전을 다운로드해서 그냥 설치 합니다. 64비트 x86으로 합니다. 

운영체제의 속성에 따라서 필요한 버전을 받으시면 됩니다. 

링크를 클릭해서 다운로드 합니다. 

다운로드 받은 링크를 실행 하십시오.

저렇게 뜨면, Next를 클릭하십시오.

설치위치 변경하실 분들은 변경하시고, Next 클릭하십시오.

바탕화면에 바로가기를 만들고 싶으면, 저기 X를 클릭해서 수정 하시고, 아니면 Install을 클릭 합니다. 

Next Next를 눌러서 잘 실행되시면 설치하시면 됩니다. 

저는 당황스럽게도 설치가 안됩니다. T.T

그래서 다음과 같이 설치 했습니다. 

시작줄에서 cmd를 클릭하시면 , 명령프롬프트가 나옵니다. 저기서, 관리자 권한으로 실행을 누르십시오.

위와 같이 프롬프트상에 explorer를 입력하고 엔터를 치십시오.

그러면, 탐색기가 뜰껍니다. 

실행된 탐색기에서 아까 다운 받아 둔 폴더로 가셔서 설치 파일을 설치 하십시오.

그러면 위의 프로그램들 사이에 관리자 권한으로 실행이 나오고 설치가 진행 됩니다.

View README file은 체크를 없애고 Finish 를 클릭하십시오.

그러면 설치는 끝났습니다. 

시작 버튼 누르시고, P 근처에 가보시면 설치 되어 있는 것이 보일 껍니다. ^

Putty와 Puttygen이 둘다 잘 설치 되었네요 ^^

그리고, Putty를 실행해서 확인하니 기존에 설정해두었던 사이트들은 잘 저장되어 있습니다.

역시 Putty가 짱입니다. ^^

Linux에 접속이 안되시면 Putty를 업그레이드 하십시오.

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

어제 로그인 까지는 잘 따라 오셨습니까?

이제 VM 인스턴스를 생성해보겠습니다. 오라클 클라우드에서 주의 하실 점은, 돈을 지불하시겠다는 마음을 먹고 계다면 상관 없겠지만, 돈을 안내시려고 제글을 읽고 계실 것이므로 저기 보시면 항상 무료 적격 이라고 붙어 있는 것들만 생성하셔야 합니다. ^^

제 대시보드를 살짝 보여 드리면 위와 같이 전부 무료 인 것만 저는 사용하고 있습니다. ^^

그럼 VM 인스턴스를 생성해보겠습니다.

이전 화면에서 VM 인스턴스 생성을 클릭 하십시오.

이름은 자동으로 정해 줍니다. 저는 그냥 그대로 씁니다. ^^

계정명도 그대로 둡니다.

배치도 그대로 뒀습니다.

이미지 구성은 좀 바꾸겠습니다. 요즘 저는 ubuntu가 좋아지고 있습니다. 그래서 ubuntu로 변경하려고 합니다. ^^

편집을 클릭 하십시오.

위와 같이 나올 껍니다. 오른쪽에 이미지 변경 버튼을 클릭 합니다.

위와 같이 오른쪽에 뜰 껍니다. 저중에서 윈도우즈는 유료 입니다. ^^ Canonical Ubuntu를 선택하십시오.

Oracle Linux를 사용하셔도 됩니다. ^^

제가 기존에 사용하는 이미지는 18.04 버전이네요 캐노니컬을 선택하시면 버전을 선택할 수 있습니다.

저기 콤보박스에서 버전을 선택하시면 됩니다.

하지마는 저는 그냥 선택된 대로 22.04 버전을 사용하겠습니다.

선택화면 왼쪽 하단의 이미지 선택을 클릭해 주십시오.

이미지가 우분투로 변경 되었습니다. ^^

이부분은 중요 합니다. SSH 키 추가에서 전용키 저장, 공용 키 저장을 클릭해서 다운로드 하십시오.

인스턴스를 생성하고, SSH로 접속하실때 필요 합니다.

기억하기 쉬운 곳에 보관 하시고 오늘은 인스턴스 생성이 목적이어서 저장만 하고 넘어 갑니다.

부트 볼륨은 설정하지 않으면, 50GB로 되어 있습니다.

살짝 살펴 보고 넘어 가면

200GB를 사용할 수 있는데 제가 이미지 147GB를 사용했으니 50GB를 사용해도 무료 범위에서 벋어나지 않습니다.

여러분은 최초로 생성하신다면 200GB까지 디스크를 생성하실 수 있습니다. ^^

마지막으로 고급 옵션 표시는 그대로 두시고, 맨 하단의 생성 버튼을 클릭 하십시오.

위와 같이 나오면 정상적으로 인스턴스가 생성 된 것입니다.

하단에 보시면 완료 15가 보이는데 여러분은 다르게 보일 수 있습니다. 완료가 진행율입니다. 100%가 되면 가상서버가 생성된 것입니다.

공용IP주소, 사용자 이름, VNIC의 서버 네트워크느 정보 는 다음에 접속하실때 필요한 내용입니다. ^^

인스턴스 대시보드를 보면 저렇게 2대의 가상 머신이 있습니다. ^^

저는 이제 Oracle 클라우드의 무료 서버 2대를 다 만들었네요 ^^

다음 문서에서 서버에 어떻게 접속하는지를 알아 보겠습니다.

오늘은 이만 줄이겠습니다.

감사합니다.

관련글

리눅스/Linux Oracle Cloud Free Tier 오라클 클라우드 무료 계층 가입하기 :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux Oracle Cloud Free Tier 오라클 클라우드 무료 계층 가입하기

안녕하세요 가야태자 @talkit 입니다. 오늘 설명드리려고 하는 내용은 제가 요즘 리눅스 관련 내용을 계속 적고 있습니다. 이 부분에서 공부를 해보시려면 리눅스/Linux VMWARE Workstation에 우분투/Ubunt

talkit.tistory.com

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(1) 로그인 Let's make free VPS on Oracle Cloud.(1) Login :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(1) 로그인 Let's make free VPS on Oracle C

안녕하세요 가야태자 @talkit 입니다. 요즘 계속 리눅스에 관련된 글을 적고 있습니다. 해당글을 실행하실 수 있도록 VPS에 가입하는 과정을 제글은 아니지만 소개 해드렸습니다. 오라클은 작은 서

talkit.tistory.com

 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

요즘 계속 리눅스에 관련된 글을 적고 있습니다. 

해당글을 실행하실 수 있도록 VPS에 가입하는 과정을 제글은 아니지만 소개 해드렸습니다. 

오라클은 작은 서버 2대가 평생 무료 입니다. 

단, 몇달에 한번씩 로그인은 해주셔야 합니다. ^^

오라클 클라우드 사이트에 접속 하십시오. https://www.oracle.com/kr/cloud/

 

차세대 클라우드 플랫폼을 만나다

Oracle Cloud Infrastructure로 조직의 클라우드 성능 및 거버넌스 관리 능력을 개선해 보세요.

www.oracle.com

사이트에 접속하시고 로그인 하십시오.

Oracle 클라우드에 로그인을 클릭하십시오.

 위와 같이 나올껍니다. 계정을 선택하시고 다음을 누르십시오.

리눅스/Linux Oracle Cloud Free Tier 오라클 클라우드 무료 계층 가입하기 :: 가야태자의 IT이야기 (tistory.com)

계정이 없으면 위 링크를 참조해서 가입 하십시오.

위와 같이 나오면 Continue 또는 다음을 누르십시오.

실제로 아이디/비밀번호를 넣으시고, Sgin In 을 클릭하시면 로그인 됩니다. 

로그인 성공하시면 위와 같은 화면이 나올껍니다. 

서버 만드는 작업까지 적으면 오래 걸릴 것 같아서 일단 로그인 까지 적고 내일은 다음 과정을 적겠습니다 

저희가 하려고 하는 다음 작업은 우선, VM 인스턴스 생성 입니다. 

감사합니다. 

관련글

리눅스/Linux Oracle Cloud Free Tier 오라클 클라우드 무료 계층 가입하기 :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux Oracle Cloud Free Tier 오라클 클라우드 무료 계층 가입하기

안녕하세요 가야태자 @talkit 입니다. 오늘 설명드리려고 하는 내용은 제가 요즘 리눅스 관련 내용을 계속 적고 있습니다. 이 부분에서 공부를 해보시려면 리눅스/Linux VMWARE Workstation에 우분투/Ubunt

talkit.tistory.com

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(2) VM 인스턴스 만들기 Let's make free VPS on Oracle Cloud.(2) Create VM Instance :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(2) VM 인스턴스 만들기 Let's make free

안녕하세요 가야태자 @talkit 입니다. 어제 로그인 까지는 잘 따라 오셨습니까? 이제 VM 인스턴스를 생성해보겠습니다. 오라클 클라우드에서 주의 하실 점은, 돈을 지불하시겠다는 마음을 먹고 계

talkit.tistory.com

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

오늘 설명드리려고 하는 내용은 제가 요즘 리눅스 관련 내용을 계속 적고 있습니다.

이 부분에서 공부를 해보시려면

리눅스/Linux VMWARE Workstation에 우분투/Ubuntu 16.04 설치하기 https://talkit.tistory.com/593

리눅스/Linux VMWARE에 우분투/Ubuntu 18.04 설치하기/Install https://talkit.tistory.com/637

위 글들과 같이 VMWARE에 리눅스를 설치하시는 방법도 하나의 방법입니다.

리눅스/Linux 스타벅스 커피 한잔 값으로 VPS 서버 구독하기 https://talkit.tistory.com/589

그리고 위 글처럼 VPS 즉 가상 서버를 하나 구독 하시는 것도 방법입니다.

그런데 Oracle은 VPS를 무료로 주네요.

가입을 안하실 이유가 없겠지요 ^^

오라클 클라우드 상시 무료 서버 가입 방법 https://seogilang.tistory.com/2150

제가 가입은 해버려 가지고 캡처하고 여러가지 작업들을 할 수 없어서 제글 말고 다른글을 소개 합니다.

10월 22일에 작성된 글이어서 최신 글 입니다.

제가 가입 할때는 300USD 짜리 30일 체험은 없었는데 생겼네요 ^^

하지만 저기는 처다보지 않습니다.

한달만 쓰고, 지워주고 하는 귀찮음이 있으니까요 ^^

그래서 상시 무료 클라우드 서비스만 사용합니다.

ARM 기반은 아무리 찾아도 유료 서비스인 것 같습니다.

저희가 쓸 수 있는 것은 일단 AMD 컴퓨팅 VM 2개가 무료 입니다

그리고, VCN 가상 클라우드 네트워크도 2개가 무료 입니다.

이걸 필요로 합니다.

그리고, 필요하면 Oracle 데이터 베이스도 사용해볼 수 있습니다.

또한가지는 S3에 해당하는 Object 스토리지도 사용해볼 수 있겠네요 ^^

다음 글에서는 본격적으로 무료 티어 인스턴스를 개설해 보겠습니다.

감사합니다.

관련글

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(1) 로그인 Let's make free VPS on Oracle Cloud.(1) Login :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(1) 로그인 Let's make free VPS on Oracle C

안녕하세요 가야태자 @talkit 입니다. 요즘 계속 리눅스에 관련된 글을 적고 있습니다. 해당글을 실행하실 수 있도록 VPS에 가입하는 과정을 제글은 아니지만 소개 해드렸습니다. 오라클은 작은 서

talkit.tistory.com

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(2) VM 인스턴스 만들기 Let's make free VPS on Oracle Cloud.(2) Create VM Instance :: 가야태자의 IT이야기 (tistory.com)

 

리눅스/Linux 오라클 클라우드에 무료 가상 서버를 만들어 보자.(2) VM 인스턴스 만들기 Let's make free

안녕하세요 가야태자 @talkit 입니다. 어제 로그인 까지는 잘 따라 오셨습니까? 이제 VM 인스턴스를 생성해보겠습니다. 오라클 클라우드에서 주의 하실 점은, 돈을 지불하시겠다는 마음을 먹고 계

talkit.tistory.com

 

반응형
반응형

이 쿼리는 가끔 쓸일이 있는데 매번 잊어 버리는 것 같습니다. T.T

GRANT SELECT, DELETE, INSERT, UPDATE ON TARGET_TABLE TO TARGET_USER;

 

권한 주기 명령어는 일단 GRANT 입니다. 

그리고 권한의 내용으로 더 많이 있지만, 기본적으로 데이터 베이스 사용자가 가져야할 권한을 SELECT DELETE INSERT UPDATE가 되겠지요 ^^

TARGET_TABLE은 어느 테이블에 줄 것인가?

TARGET_USER 는 어느 사용자에게 줄 것인가?

입니다. 

문장을 잘 변경해서 사용함시면 되겠습니다. 

감사합니다. 

 

반응형
반응형

image.png

안녕하세요 가야태자 @talkit 입니다.

오늘도 어제에 이어서 제 본업쪽 관련 된 글 입니다.

이글은 https://talkit.tistory.com/category/%EB%A6%AC%EB%88%85%EC%8A%A4%28LINUX%29 에서도 같이 연재 되고 있습니다.

파일 이동 시키기 mv 명령어 - https://talkit.tistory.com/667

위 글과 같이 오늘도 파일에 관련된 글입니다.

어제 글에서 살짝 힌트를 보여 드렸습니다. ^^

하지만 오늘 본격적으로 적어 보도록 하겠습니다.

우선 복사하다를 영어로 하면 copy 가 됩니다.

리눅스에서 cp는 copy의 약자 입니다. ^^


cp [옵션들] 원본파일 대상파일

음 CP의 옵션은 -r 하고 -f -v 정도 아시면 됩니다. ^^

먼저 -r 은 하위 디렉토리까지 복사를 한다는 이야기 입니다. 그래서 디렉토리를 복사할때는 무건 -r을 넣어 주셔야 합니다.

그리고, -f 는 어제 mv와 동일하게 강제로 파일을 덮어 씁니다. -f를 안주면 덮어 쓸껀지 물어 봅니다. ^^

-v 같은 경우는 복사하는 내용을 보여 줍니다.

cp와 mv의 가장 큰 차이점은 cp는 복사라서 원본이 그대로 남구요. mv는 원본이 사라진다는 겁니다. ^^


[talkit@localhost test]$ ls -al
합계 4
drwxrwxr-x 2 talkit talkit  22 12월 17 02:16 .
drwx------ 6 talkit talkit 147 12월 17 02:16 ..
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
[talkit@localhost test]$

mv 와 마찬가지로 저기 보이는 test.txt 파일을 복사해 보겠습니다.


cp test.txt test_target.txt

명령어를 수행 하면


[talkit@localhost test]$ cp test.txt test_target.txt
[talkit@localhost test]$ ls
test.txt  test_target.txt
[talkit@localhost test]$

결과는 위와 같습니다.

test.txt와 test_target.txt 가 그대로 있습니다.


[talkit@localhost test]$ mkdir source
[talkit@localhost test]$ ls -al
합계 8
drwxrwxr-x 3 talkit talkit  59 12월 17 02:19 .
drwx------ 6 talkit talkit 147 12월 17 02:16 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@localhost test]$

source 라는 디렉토리가 생겼습니다

저 아이를 target 디렉토리로 변경해 보겠습니다.

틀린 명령어는 아래와 같습니다.


cp source target

정확한 명령어는 아래와 같습니다.


 cp -r source target

두가지 명령어를 모두 수행 해보겠습니다.


[talkit@server02 test]$ cp source target
cp: omitting directory `source'
[talkit@server02 test]$ cp -r source target
[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 4 talkit talkit  73 12월 17 02:22 .
drwx------ 6 talkit talkit 147 12월 17 02:16 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit   6 12월 17 02:22 target
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$

복사할 내용 중에 디렉토리가 포함되어 있으면 오류가 납니다.

반드시 -r 옵션을 넣어 주셔야 합니다.

첫번째에서는 오류가 나고 두번째에서는 잘 복사가 되었습니다.

이번에는 target 디렉토리 안에 test.txt와 test_target.txt 를 한꺼번에 복사해보겠습니다.

*를 이용하시면 됩니다.


cp *.txt target/

여러분은 / 없이 target까지만 치시면 됩니다. 저는 저게 디렉토리라는 것을 나타내려고 /를 붙인 것 뿐입니다.

한번 해보겠습니다.


[talkit@server02 test]$ cp *.txt target
[talkit@server02 test]$ ls -alR
.:
합계 8
drwxrwxr-x 4 talkit talkit  73 12월 17 02:22 .
drwx------ 6 talkit talkit 147 12월 17 02:16 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt

./source:
합계 0
drwxrwxr-x 2 talkit talkit  6 12월 17 02:19 .
drwxrwxr-x 4 talkit talkit 73 12월 17 02:22 ..

./target:
합계 8
drwxrwxr-x 2 talkit talkit 45 12월 17 02:25 .
drwxrwxr-x 4 talkit talkit 73 12월 17 02:22 ..
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:25 test.txt
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:25 test_target.txt
[talkit@server02 test]$

복사는 오류 없이 잘 넘어 갔구요.

일부러 오랫만에 ls -alR 명령어를 이용해서 하위 디렉토리에 있는 파일을 리스팅 해보았습니다.

그랬더니 ^^ 잘 갔네요

이번에는 -v 옵션을 더 넣으서 target 폴더를 target2 폴더로 복사해보겠습니다.


[talkit@server02 test]$ cp -rv target target2
`target' -> `target2'
`target/test.txt' -> `target2/test.txt'
`target/test_target.txt' -> `target2/test_target.txt'
[talkit@server02 test]$ ls -alR
.:
합계 8
drwxrwxr-x 5 talkit talkit  88 12월 17 02:26 .
drwx------ 6 talkit talkit 147 12월 17 02:16 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt

./source:
합계 0
drwxrwxr-x 2 talkit talkit  6 12월 17 02:19 .
drwxrwxr-x 5 talkit talkit 88 12월 17 02:26 ..

./target:
합계 8
drwxrwxr-x 2 talkit talkit 45 12월 17 02:25 .
drwxrwxr-x 5 talkit talkit 88 12월 17 02:26 ..
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:25 test.txt
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:25 test_target.txt

./target2:
합계 8
drwxrwxr-x 2 talkit talkit 45 12월 17 02:26 .
drwxrwxr-x 5 talkit talkit 88 12월 17 02:26 ..
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:26 test.txt
-rw-rw-r-- 1 talkit talkit 28 12월 17 02:26 test_target.txt
[talkit@server02 test]$

복사하는 모습이 보이지요.

오늘은 일단 여기 까지 적고 수정할일이 있으면 수정 해놓겠습니다.

감사합니다.

반응형
반응형

image.png

안녕하세요 가야태자 김종하 입니다.

오늘은 제 본업을 가지고 이야기 하고자 합니다.

제가 블로그에 리눅스에 대한 글들을 작성하고 있습니다. ^^

https://talkit.tistory.com/category/%EB%A6%AC%EB%88%85%EC%8A%A4%28LINUX%29

위 URL로 가시면 제가 쓴 리눅스 글들이 있습니다.

명령어의 사용법은


mv [옵션들]  "source file name or directory name" "target file name or directory name"

위와 같이 사용 합니다.

즉 이동 시키고자하는 원본 파일에서 보내고 자하는 목적 파일을 띄워서 써서 적어 주시면 됩니다.

뒤쪽에 보내고자하는 장소(디렉토리, 폴더)를 적으면 이동이고, 파일명을 적으면, 이름변경하기가 됩니다.

그리고 중간에 옵션들은 많은 옵션들이 있지만, -v -f 옵션 두가지가 유용하다고 생각 됩니다.

-v는 이동하는 모습을 보여 주는 것이고, -f는 묻지 않고 파일을 덮어 씁니다.

실제로 한번 해보겠습니다.


drwxr-xr-x   2 talkit talkit 22 12월 16 00:00 .
dr-xr-x---. 24 talkit talkit 4096 12월 16 00:00 ..
-rw-r--r--   1 talkit talkit 19 12월 16 00:00 test.txt

우선 저기 있는 test.txt 라는 파일을 test_target.txt로 변경해 보겠습니다.

간단 합니다.


mv test.txt  test_target.txt

위와 같이 하면 됩니다.


drwxr-xr-x   2 talkit talkit   29 12월 16 00:02 .
dr-xr-x---. 24 talkit talkit 4096 12월 16 00:00 ..
-rw-r--r--   1 talkit talkit   19 12월 16 00:00 test_target.txt

실제로 ls 명령어로 조회 해 보시면 위와 같이 변경 된 것을 보실 수 있습니다.

이번에는 target 이라는 폴더로 이동 시켜 보겠습니다.


[talkit@localhost test]# cp test_target.txt test.txt
[talkit@localhost test]# mkdir target
[talkit@localhost test]# ls -al
합계 12
drwxr-xr-x   3 talkit talkit 59 12월 16 00:03 .
dr-xr-x---. 24 talkit talkit 4096 12월 16 00:00 ..
drwxr-xr-x   2 talkit talkit 6 12월 16 00:03 target
-rw-r--r--   1 talkit talkit 19 12월 16 00:03 test.txt
-rw-r--r--   1 talkit talkit 19 12월 16 00:00 test_target.txt

여기까지는 준비 과정 입니다.

다음에 쓰려고 한 cp라는 명령어를 이용해서 test.txt를 다시 복사를 진행하구요.

mkdir을 이용해서 target이라는 폴더를 만들었습니다.

이제 실제로 target이라는 폴더로 이동을 시켜 보겠습니다.

역시 간단 합니다.


mv test.txt target/

일부러 target이 디렉토리라는걸 알려 드리기 위해서 /를 붙였고 원래는 안붙이셔도 됩니다.


drwxr-xr-x   3 talkit talkit   43 12월 16 00:09 .
dr-xr-x---. 24 talkit talkit 4096 12월 16 00:00 ..
drwxr-xr-x   2 talkit talkit   22 12월 16 00:09 target
-rw-r--r--   1 talkit talkit   19 12월 16 00:00 test_target.txt

위와 같이 test.txt 파일이 사라졌습니다.


[talkit@localhost test]# ls -al target
합계 4
drwxr-xr-x 2 talkit talkit 22 12월 16 00:09 .
drwxr-xr-x 3 talkit talkit 43 12월 16 00:09 ..
-rw-r--r-- 1 talkit talkit 19 12월 16 00:03 test.txt

target 이라는 폴더 안을 ls로 보시면 위와 같이 test.txt 이동 된 것을 보실 수 있습니다.

감사합니다.

반응형
반응형

image.png

안녕하세요 가야태자 @talkit 입니다.

이건 알려야 된다고 생각해서 작성 합니다 ^^

카카오 뱅크 계좌는 하나씩 있으시죠 ^^

저만 있나요 ㅎㅎㅎ

카카오 뱅크에서 유명한 26주 적금

제가 생각했을 때 솔직히 재태크에 도움이 안됩니다.

저축을 기르는 습관을 기르는데는 도움이 됩니다.

왜냐면, 26주동안 꾸준히 넣야 하기 때문인데요.

그런데 , 재태크에 도움이 안되는 이유는 카카오가 생각하는 적금과 반대로 하면 재태크에 도움이 많이 될껍니다. ^^

카카오 뱅크는 꺼꾸로 설계를 해놨습니다.

적은 돈부터 많은 돈까지

첫주에 1,000 26주되면 26,000이 불입 되도록 해놨는데 이려면 이자가 작게 나오는 효과가 있습니다.

1,000원 부터 10,000원까지인데 제가 오늘 만원 짜리의 26주 적금의 마지막주를 불입 했습니다.

3,510,000원이네요 ^^

꽤 많은 돈이 모입니다.

하지만, 넣다보면 힘들기도 하더라구요.

이자는 적지만 적금을 할 수 있는 습관을 들일수 있어서 좋은 26주 적금.

그런데 그냥 26주 적금은 재미가 없습니다. ^^ 그냥 이자를 조금만 주니까요.

적금은 이자 많이 주는 곳에 하시구요 ^^

하지만, 카카오가 제휴 이벤트를 하면 이야기가 달라집니다.

지금은 GS리테일과 제휴 이벤트를 하고 있습니다.

카카오 26주 적금만 가입 하시면 됩니다.

금액이 상관이 없습니다.

1000원 짜리 적금도 상관 없다는 이야기 입니다. ^^

26주를 꾸준히 넣기 만 하면 위에 있는 그림대로 2500포인트씩 4주에 한번씩 줍니다.

17,500포인트를 주네요 ^^

정말 좋은 것 같습니다.

지난 번에는 교촌 치킨 하고 했는데 ^^

GS 편의점이나 GS 리프레시 등에서 사용할 수 있기 때문에 더욱 좋은 것은 통신사 할인을 한다음에 사용할 수 있습니다.

하나 가입 하심이 어떨런지요 ^^

모두들 부자 되시자구요.

이벤트 기간은 2022년 12월 26일 까지 입니다.

기본 금리는 3.5%이고, 26주 모두 성공하면 7%금리를 제공하고 있네요 ^^

카카오 뱅크의 정책에 따라서 달라질 수 있습니다. ^^

반응형

+ Recent posts