이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

20강 압축(gzip/xz/tar)

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

1. dir 내 파일 목록 조회

[j@hj0216 ~/down]$ ls -lh
합계 10M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j 655K  2월  3 23:28 y

 

2. 압축(gzip dir_name)

[j@hj0216 ~/down]$ gzip y
[j@hj0216 ~/down]$ ls -lh
합계 9.5M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j 133K  2월  3 23:28 y.gz

* dir y: 655K -> 133K

 

3. 압축풀기(gunzip file_name.gz)

[j@hj0216 ~/down]$ gunzip y.gz
[j@hj0216 ~/down]$ ls -lh
합계 10M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j 655K  2월  3 23:28 y

 

3. 압축(xy dir_name)

[j@hj0216 ~/down]$ xz y
[j@hj0216 ~/down]$ ll -h
합계 9.5M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j  98K  2월  3 23:28 y.xz

* dir y: 655K -> 98K

// gzip보다 압축률이 높으나 압축률이 높을수록 압축시간이 오래 소요됨

 

4. 압축풀기(gunzip file_name.gz)

[j@hj0216 ~/down]$ unxz y.xz
[j@hj0216 ~/down]$ ll -h
합계 10M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j 655K  2월  3 23:28 y

 

 

* FTP server에서 다운받은 httpd-2.3.55.tar.gz 압축 및 압축풀기

1. 압축 풀기

[j@hj0216 ~/down]$ ll -h
합계 10M
-rw-rw-r--. 1 j j 9.4M  2월  3 23:02 httpd-2.4.55.tar.gz
-rw-r--r--. 1 j j 655K  2월  3 23:28 y
[j@hj0216 ~/down]$ gunzip httpd-2.4.55.tar.gz
[j@hj0216 ~/down]$ ls -lh
합계 43M
-rw-rw-r--. 1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--. 1 j j 655K  2월  3 23:28 y

* tab: 자동완성

 

2. tar 묶음 풀기(tar xf tar_file_name.tar)

[j@hj0216 ~/down]$ tar xf httpd-2.4.55.tar
[j@hj0216 ~/down]$ ls -lh
합계 43M
drwxr-xr-x. 12 j j 4.0K  1월 10 22:38 httpd-2.4.55
-rw-rw-r--.  1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--.  1 j j 655K  2월  3 23:28 y

tar xf command를 통해 묶음 파일 해제(-> httpd-2.4.55 dir 생성)

tar: Tape ARchiver, tar은 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령

-x: extract, tar ARchive에서 파일 추출(묶음 풀 때 사용)

-f: 대상 tar ARchive 파일 지정(Default Option)

* 압축 과정: 파일을 하나로 묶기 -> 압축하기

 

cf. 현재 디스크 용량을 특정 dir, file 단위로 확인

[j@hj0216 ~/down]$ du -sh httpd-2.4.55
49M     httpd-2.4.55

du: disk use

-s: summerize, 하위 dir은 합쳐서 전체 용량만 출력

-h: human readable, 파일 용량을 사람이 보기 쉬운 상태로 출력

 

3. tar 묶음 파일 만들기(tar cf tar_file_name.tar)

[j@hj0216 ~/down]$ tar cf h.tar httpd-2.4.55
[j@hj0216 ~/down]$ ls -lh
합계 86M
-rw-rw-r--.  1 j j  43M  2월  3 23:37 h.tar
drwxr-xr-x. 12 j j 4.0K  1월 10 22:38 httpd-2.4.55
-rw-rw-r--.  1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--.  1 j j 655K  2월  3 23:28 y

-c: create, tar ARchive 생성, 기존 ARchive에 덮어쓰기(파일 묶을 때 사용)

 

4. tar 파일 압축

[j@hj0216 ~/down]$ gzip h.tar
[j@hj0216 ~/down]$ ls -lh
합계 53M
-rw-rw-r--.  1 j j 9.4M  2월  3 23:37 h.tar.gz
drwxr-xr-x. 12 j j 4.0K  1월 10 22:38 httpd-2.4.55
-rw-rw-r--.  1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--.  1 j j 655K  2월  3 23:28 y

 

5. 파일 묶기 및 압축

[j@hj0216 ~/down]$ tar cfz hh.tar.gz httpd-2.4.55
[j@hj0216 ~/down]$ ls -lh
합계 62M
-rw-rw-r--.  1 j j 9.4M  2월  3 23:37 h.tar.gz
-rw-rw-r--.  1 j j 9.4M  2월  3 23:42 hh.tar.gz
drwxr-xr-x. 12 j j 4.0K  1월 10 22:38 httpd-2.4.55
-rw-rw-r--.  1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--.  1 j j 655K  2월  3 23:28 y

-z: gzip 압축

httpd-2.4.55 dir을 hh.tar.gz로 압축

 

(압축 해제 후, dir 중복 방지를 위해 기존 dir 삭제: $ rm -rf httpd-2.4.55)

 

6. 파일 압축해제 및 묶음 풀기

[j@hj0216 ~/down]$ tar xfz hh.tar.gz
[j@hj0216 ~/down]$ ls -lh
합계 62M
-rw-rw-r--.  1 j j 9.4M  2월  3 23:37 h.tar.gz
-rw-rw-r--.  1 j j 9.4M  2월  3 23:42 hh.tar.gz
drwxr-xr-x. 12 j j 4.0K  1월 10 22:38 httpd-2.4.55
-rw-rw-r--.  1 j j  43M  2월  3 23:02 httpd-2.4.55.tar
-rw-r--r--.  1 j j 655K  2월  3 23:28 y

 

 

 

참고 자료

📑 Linux 명령어 | 파일 관리 | du 명령어 디스크 용량을 특정 디렉토리/파일

📑 Linux(리눅스) : tar 명령어 옵션 정리 및 사용법

 

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

19강 ftp client 사용법

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

FTP: File Transfer Protocol

: TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜

 

FTP 사용을 위한 FTP 설치 확인

[j@hj0216 ~]$ rpm -qa | grep ftp
ftp-0.17-67.el7.x86_64

 

FTP 용어 확인

1. FTP 실행 및 명령어 리스트 반환

[j@hj0216 ~/down]$ ftp
ftp> ?
Commands may be abbreviated.  Commands are:

!               debug           mdir            sendport        site
$               dir             mget            put             size
account         disconnect      mkdir           pwd             status
append          exit            mls             quit            struct
ascii           form            mode            quote           system
bell            get             modtime         recv            sunique
binary          glob            mput            reget           tenex
bye             hash            newer           rstatus         tick
case            help            nmap            rhelp           trace
cd              idle            nlist           rename          type
cdup            image           ntrans          reset           user
chmod           lcd             open            restart         umask
close           ls              prompt          rmdir           verbose
cr              macdef          passive         runique         ?
delete          mdelete         proxy           send

 

2. 명령어 조회

ftp> ? mget
mget            get multiple files
ftp> ? put
put             send one file
ftp> ? mput
mput            send multiple files
ftp> ? ls
ls              list contents of remote directory
ftp> ? open
open            connect to remote ftp

 

Web Browser: ftp.kaist.ac.kr/apache/httpd

 

Linux를 통한 ftp - file download

1. 파일 위치에 따른 dir 경로 이동(기존 경로이동과 유사)

ftp> cd apache
250-Please try to use a mirror if at all possible.  There is a complete list
250-of mirrors available at <http://www.apache.org/mirrors/>, and a script
250-which will attempt to find those close to you at
250-<http://www.apache.org/dyn/closer.cgi>.
250 Directory successfully changed.
ftp> cd httpd
250 Directory successfully changed.
ftp> pwd
257 "/apache/httpd" is the current directory

 

2. 해당 dir 내 list 확인

ftp> ls
227 Entering Passive Mode (103,22,220,133,111,213)
150 Here comes the directory listing.
-rw-rw-r--    1 1000     1000         3883 Jan 17 13:32 Announcement2.4.html
-rw-rw-r--    1 1000     1000         2518 Jan 17 13:32 Announcement2.4.txt
-rw-rw-r--    1 1000     1000       341911 Jan 17 16:15 CHANGES_2.4
-rw-rw-r--    1 1000     1000         7386 Jun 08  2022 CHANGES_2.4.54
-rw-rw-r--    1 1000     1000         7060 Jan 17 16:15 CHANGES_2.4.55
-rw-rw-r--    1 1000     1000            0 Jan 17 16:15 CURRENT-IS-2.4.55
-rw-rw-r--    1 1000     1000          682 Oct 03  2009 HEADER.html
-rw-rw-r--    1 1000     1000         3031 Oct 03  2009 README.html
drwxr-xr-x    4 1000     1000           69 Jun 17  2022 binaries
drwxr-xr-x    2 1000     1000           65 Jun 17  2022 docs
-rw-rw-r--    1 1000     1000      7434530 Jun 08  2022 httpd-2.4.54.tar.bz2
-rw-rw-r--    1 1000     1000      9743277 Jun 08  2022 httpd-2.4.54.tar.gz
-rw-rw-r--    1 1000     1000      7456187 Jan 17 13:32 httpd-2.4.55.tar.bz2
-rw-rw-r--    1 1000     1000      9758888 Jan 17 13:32 httpd-2.4.55.tar.gz
-rw-rw-r--    1 1000     1000        19006 Dec 21  2016 httpd_logo_wide_new.pn
drwxr-xr-x    2 1000     1000          108 Aug 25 13:10 libapreq
drwxr-xr-x    3 1000     1000          193 Jun 17  2022 mod_fcgid
drwxr-xr-x    2 1000     1000          124 Jun 17  2022 mod_ftp
drwxr-xr-x    3 1000     1000           83 Jun 17  2022 patches
226 Directory send OK.

 

3. FTP를 통한 file download

ftp> get httpd-2.4.55.tar.gz
local: httpd-2.4.55.tar.gz remote: httpd-2.4.55.tar.gz
227 Entering Passive Mode (103,22,220,133,231,218)
150 Opening BINARY mode data connection for httpd-2.4.55.tar.gz (9758888 bytes.
226 Transfer complete.
9758888 bytes received in 1.31 secs (7460.72 Kbytes/sec)

 

4. FTP 종료

ftp> by
221 Goodbye.

 

5. Download받은 파일 List 확인

[j@hj0216 ~/down]$ ls
httpd-2.4.55.tar.gz

 

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

18강 C언어코딩(gcc)

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

gcc C언어 complier 설치

[j@hj0216 ~]$ su -
암호:
마지막 로그인: 목  1월 26 01:38:48 KST 2023일시 pts/0
[root@hj0216 ~]# yum -y install gcc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.navercorp.com
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-44.el7 willbe installed
--> Processing Dependency: libgomp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: cpp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libgcc >= 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package cpp.x86_64 0:4.8.5-44.el7 willbe installed
---> Package glibc-devel.x86_64 0:2.17-326.el7_9 will be installed
--> Processing Dependency: glibc-headers = 2.17-326.el7_9 for package: glibc-devel-2.17-                                  326.el7_9.x86_64
--> Processing Dependency: glibc = 2.17-326.el7_9 for package: glibc-devel-2.17-326.el7_                                  9.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-326.el7_9.x86_64
---> Package libgcc.x86_64 0:4.8.5-36.el7 will be updated
---> Package libgcc.x86_64 0:4.8.5-44.el7 will be an update
---> Package libgomp.x86_64 0:4.8.5-36.el7 will be updated
---> Package libgomp.x86_64 0:4.8.5-44.el7 will be an update
---> Package libmpc.x86_64 0:1.0.1-3.el7 will be installed
---> Package mpfr.x86_64 0:3.1.1-4.el7 will be installed
--> Running transaction check
---> Package glibc.x86_64 0:2.17-260.el7 will be updated
--> Processing Dependency: glibc = 2.17-260.el7 for package: glibc-common-2.17-260.el7.x                                  86_64
---> Package glibc.x86_64 0:2.17-326.el7_9 will be an update
---> Package glibc-headers.x86_64 0:2.17-326.el7_9 will be installed
--> Processing Dependency: kernel-headers >=2.2.1 for package: glibc-headers-2.17-326.e                                  l7_9.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.17-326.el7_9.x86_                                  64
--> Running transaction check
---> Package glibc-common.x86_64 0:2.17-260.el7 will be updated
---> Package glibc-common.x86_64 0:2.17-326.el7_9 will be an update
---> Package kernel-headers.x86_64 0:3.10.0-1160.81.1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================
 Package
        Arch   Version        Repository
                                       Size
============================================
Installing:
 gcc    x86_64 4.8.5-44.el7   base     16 M
Installing for dependencies:
 cpp    x86_64 4.8.5-44.el7   base    5.9 M
 glibc-devel
        x86_64 2.17-326.el7_9 updates 1.1 M
 glibc-headers
        x86_64 2.17-326.el7_9 updates 691 k
 kernel-headers
        x86_64 3.10.0-1160.81.1.el7
                              updates 9.1 M
 libmpc x86_64 1.0.1-3.el7    base     51 k
 mpfr   x86_64 3.1.1-4.el7    base    203 k
Updating for dependencies:
 glibc  x86_64 2.17-326.el7_9 updates 3.6 M
 glibc-common
        x86_64 2.17-326.el7_9 updates  12 M
 libgcc x86_64 4.8.5-44.el7   base    103 k
 libgomp
        x86_64 4.8.5-44.el7   base    159 k

Transaction Summary
============================================
Install  1 Package  (+6 Dependent packages)
Upgrade             ( 4 Dependent packages)

Total download size: 49 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/11): glibc-devel-2. | 1.1 MB   00:01
(2/11): glibc-2.17-326 | 3.6 MB   00:02
(3/11): glibc-headers- | 691 kB   00:01
(4/11): libgcc-4.8.5-4 | 103 kB   00:00
(5/11): libgomp-4.8.5- | 159 kB   00:00
(6/11): libmpc-1.0.1-3 |  51 kB   00:00
(7/11): mpfr-3.1.1-4.e | 203 kB   00:00
(8/11): cpp-4.8.5-44.e | 5.9 MB   00:04
(9/11): glibc-common-2 |  12 MB   00:04
(10/11): gcc-4.8.5-44. |  16 MB   00:06
(11/11): kernel-header | 9.1 MB   00:04
--------------------------------------------
Total          6.3 MB/s |  49 MB  00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : libgcc-4.8.5-44.el7.    1/15
  Updating   : glibc-common-2.17-32    2/15
  Updating   : glibc-2.17-326.el7_9    3/15
warning: /etc/nsswitch.conf created as /etc/nsswitch.conf.rpmnew
  Installing : mpfr-3.1.1-4.el7.x86    4/15
  Installing : libmpc-1.0.1-3.el7.x    5/15
  Installing : cpp-4.8.5-44.el7.x86    6/15
  Updating   : libgomp-4.8.5-44.el7    7/15
  Installing : kernel-headers-3.10.    8/15
  Installing : glibc-headers-2.17-3    9/15
  Installing : glibc-devel-2.17-326   10/15
  Installing : gcc-4.8.5-44.el7.x86   11/15
  Cleanup    : libgomp-4.8.5-36.el7   12/15
  Cleanup    : glibc-common-2.17-26   13/15
  Cleanup    : glibc-2.17-260.el7.x   14/15
  Cleanup    : libgcc-4.8.5-36.el7.   15/15
  Verifying  : kernel-headers-3.10.    1/15
  Verifying  : glibc-headers-2.17-3    2/15
  Verifying  : glibc-2.17-326.el7_9    3/15
  Verifying  : mpfr-3.1.1-4.el7.x86    4/15
  Verifying  : glibc-devel-2.17-326    5/15
  Verifying  : cpp-4.8.5-44.el7.x86    6/15
  Verifying  : gcc-4.8.5-44.el7.x86    7/15
  Verifying  : libmpc-1.0.1-3.el7.x    8/15
  Verifying  : glibc-common-2.17-32    9/15
  Verifying  : libgcc-4.8.5-44.el7.   10/15
  Verifying  : libgomp-4.8.5-44.el7   11/15
  Verifying  : glibc-2.17-260.el7.x   12/15
  Verifying  : libgomp-4.8.5-36.el7   13/15
  Verifying  : libgcc-4.8.5-36.el7.   14/15
  Verifying  : glibc-common-2.17-26   15/15

Installed:
  gcc.x86_64 0:4.8.5-44.el7

Dependency Installed:
  cpp.x86_64 0:4.8.5-44.el7
  glibc-devel.x86_64 0:2.17-326.el7_9
  glibc-headers.x86_64 0:2.17-326.el7_9
  kernel-headers.x86_64 0:3.10.0-1160.81.1.el7
  libmpc.x86_64 0:1.0.1-3.el7
  mpfr.x86_64 0:3.1.1-4.el7

Dependency Updated:
  glibc.x86_64 0:2.17-326.el7_9
  glibc-common.x86_64 0:2.17-326.el7_9
  libgcc.x86_64 0:4.8.5-44.el7
  libgomp.x86_64 0:4.8.5-44.el7

Complete!
[root@hj0216 ~]# rpm -qa | grep gcc
libgcc-4.8.5-44.el7.x86_64
gcc-4.8.5-44.el7.x86_64

1. root 계정 로그인

2. gcc install

3. gcc pkg 설치 조회

 

 

c언어 파일 만들기 및 실행하기

[j@hj0216 ~]$ vi t.c

On vim editor
	  1 #include <stdio.h>
      2 int main(void)
      3 {
      4         puts("Linux\n");
      5         return 0;
      6 }

[j@hj0216 ~]$ gcc t.c
[j@hj0216 ~]$ ls
a.out  bbb  dd  ddd  t.c
[j@hj0216 ~]$ ./a.out
Linux

gcc 컴파일러로 t.c 파일을 컴파일 → a.out 실행 파일 생성 → 생성된 a.out 파일을 이용하여 파일 실행 
컴파일 과정에서 실행파일의 이름을 지정해 주지 않으면 기본적으로 a.out 이라는 이름으로 실행파일이 생성

 

파일 실행 관련 PATH 지정

[j@hj0216 ~]$ a.out
-bash: a.out: command not found
[j@hj0216 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/j/.local/bin:/home/j/bin
[j@hj0216 ~]$ PATH=$PATH:. # PATH에 현재 dir 추가
[j@hj0216 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/j/.local/bin:/home/j/bin:.
[j@hj0216 ~]$ a.out
Linux

파일 경로를 찾을 때, 현재 dir이 PATH에 지정되어있지 않으므로 a.out 파일 실행 시 경로지정이 필요

일반 사용자 계정에서 설정한 PATH는 로그아웃 시 사라짐

 

gcc를 통한 c언어 파일 이름 지정

[j@hj0216 ~]$ gcc t.c -o aa
[j@hj0216 ~]$ ls
a.out  aa  bbb  dd  ddd  t.c
[j@hj0216 ~]$ a.out
Linux

[j@hj0216 ~]$ aa
Linux

-o 실행파일명: a.out이 아닌 새로운 실행파일명 지정

 

 

 

➕ C언어 컴파일 과정

1. C언어 파일 작성(vi hello.c)

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Hello World!\n");

    return 0;
}

 

2. PreProcessing, PreComplie

 - #으로 시작하는 부분은 C complier가 쉽게 인식할 수 있도록 C언어 소스로 재정리

 - /* ~ */과 같은 주석 제거

 - #include: header file의 내용을 읽고 필요한 내용을 복사

 - #define: 치환 작업 진행

-> gcc compiler: hello.i 파일 내부 생성

# 1 "hello.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hello.c"

# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4

... 중략 ...

# 211 "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/stddef.h" 3 4
typedef long unsigned int size_t;

... 중략 ...

extern int printf (__const char *__restrict __format, ...);

... 중략 ...

int main(int argc, char **argv)
{
    printf("Hello World!\n");

    return 0;
}

 

3. Compile(Assembler 코드 생성)

 - 전처리가 끝난 소스코드(hello.i)를 기반으로 assembler 소스코드 생성

-> hello.s 파일 생성

        .file   "hello.c"
        .section        .rodata
.LC0:
        .string "Hello World!"
        .text
.globl main
        .type   main, @function
main:
.LFB0:
        .cfii_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        
... 이하 생략 ...

 

4. Assemble(Object 파일 생성)

Assembler source(hello.s)를 바탕으로 목적(Object) 파일 생성(기계어 코드)

^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^@^@^A^@>^ ..... 생략 .....

 

5. Link(실행 파일 생성)

obj 파일은 직접 실행할 수 없으므로 실행 파일로 만들기 위해 Link 작업 실시

C언어는 분할 컴파일이 가능하여, A라는 기능을 하는 파일과 B라는 기능을 하는 파일을 따로 만들어서 컴파일을 해서 링크 작업을 통해 여러 파일의 기능을 합쳐서 실행 파일을 만들 수 있음

실행파일도 분할 컴파일을 이용하여 hello.o와 표준 라이브러리인 a 또는 .so 파일을 합쳐서 만들어짐

^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^@^@^A^@>^ ..... 생략 .....

 

# C언어 Compile 과정
    1). 소스 코딩 →  hello.c 
    2). hello.c → preprocess (전처리)  →  hello.i 
    3). hello.i →  컴파일 →  hello.s
    4). hello.s →  Assemble → hello.o
    5). hello.o + library →  Link → hello

 

참고 자료

📑 [ 리눅스 ] gcc 동작과정

📑 3. C언어의 컴파일 과정

📑 [ Linux ] linux 환경 C 컴파일 과정 & make 의 이해

 

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

17강 vim 편집기

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

vim editor 시작

[j@hj0216 ~/dd]$ vi
# 이름없는 파일에서 작업, 저장 시 이름 부여 필요
[j@hj0216 ~/dd]$ vi a1
# a1 파일 내용 수정
[j@hj0216 ~/dd]$ vi a2
# a2 파일 생성

esc: 작업 종료

i 끼워넣기

:w 저장

:w 파일이름 '파일이름'으로 저장

:q 종료

:q! 강제 종료

:wq 저장 후 종료

:se nu 행번호 부여

:se nonu 행번호 삭제

dd 1줄씩 지우기

 

vimtutor

[j@hj0216 ~/dd]$ vimtutor
                             LESSON 1 요약

  1. 커서를 움직일 때에는 화살표 키나 hjkl 키를 이용합니다.
         h (왼쪽)       j (아래)       k (위)       l (오른쪽)
  2. 쉘 프롬프트에서 빔을 시작하려면 vim FILENAME <ENTER>
  3. 수정한 내용을 무시한 채로 빔에서 빠져나가려면   <ESC>   :q!   <ENTER>
                     저장한 후 빔에서 빠져나가려면   <ESC>   :wq   <ENTER>
  4. 명령 모드에서 커서가 위치한 곳의 글자를 지우려면   x  를 입력합니다.
  5. 명령 모드에서 커서가 위치한 곳에 텍스트를 삽입하려면
         i   를 누른 후 텍스트를 입력하고  <ESC> 를 누릅니다.
참고: <ESC>는 명령 모드로 돌아가는 데 쓰며, 원치 않는 명령이나 완전히 입력되지
      않은 명령을 취소하는 데에도 씁니다.
                               LESSON 2 요약
                               
  1. 커서가 위치한 곳부터 단어의 끝까지 지우려면:    dw
  2. 커서가 위치한 곳부터 줄 끝까지 지우려면:    d$
  3. 줄 전체를 지우려면:    dd
  4. 명령 모드에서 내리는 명령의 형식은 다음과 같습니다:
       [횟수]   명령   대상    또는    명령   [횟수]   대상
     여기서:
       횟수 - 그 명령을 몇 번 반복할 것인가
       명령 - 어떤 명령을 내릴 것인가 ( 예를 들어, 삭제인 경우는 d )
       대상 - 명령이 동작할 대상, 예를 들어 w (단어), $ (줄의 끝) 등.
  5. 이전 행동을 취소하려면:                 u   (소문자 u)
     한 줄에서 수정한 것을 모두 취소하려면:  U   (대문자 U)
     취소한 것을 다시 실행하려면:            CTRL-R
                               LESSON 3 요약

  1. 이미 지운 내용을 되돌리려면,  p  를 누르십시오. 이 명령은 커서 *다음에*
     지워진 내용을 붙입니다(PUT). (한 줄을 지운 경우에는 커서 다음 줄에
     지워진 내용이 붙습니다.)
  2. 커서 아래의 글자를 치환하려면(REPLACE),  r  을 누른 후 원래 글자 대신
     바꾸어 넣을 글자를 입력합니다.
  3. 변환 명령(CHANGE)은 커서에서 부터 지정한 대상의 끝까지 바꿀 수 있는
     명령입니다. 예를 들어, 커서 위치에서 단어의 끝까지 바꾸려면,  cw  를
     입력하면 되며,  c$  는 줄 끝까지 바꾸는 데 쓰입니다.
  4. 변환 명령의 형식은 다음과 같습니다:
         [횟수]   c   대상       또는       c   [횟수]   대상
                               LESSON 4 요약

  1. CTRL-g  는 파일의 상태와 파일 내에서의 현재 위치를 표시합니다.
     SHIFT-G  는 파일의 끝으로 이동합니다. 줄번호를 입력한 후 SHIFT-G를
     입력하면, 그 줄로 이동합니다.
  2.  / 를 입력한 후 문구를 입력하면 그 문구를 아랫방향으로 찾습니다.
      ? 를 입력한 후 문구를 입력하면 윗방향으로 찾습니다.
     검색 후, n 을 입력하면 같은 방향으로 다음 문구를 찾으며,
     Shift-N 을 입력하면 반대 방향으로 찾습니다.
  3. 커서가 (,),[,],{,} 위에 있을 때에  % 를 입력하면 상응하는 짝을
     찾아갑니다.

  4. 어떤 줄에 처음 등장하는 old를 new로 바꾸려면          :s/old/new
     한 줄에 등장하는 모든 old를 new로 바꾸려면            :s/old/new/g
     두 줄 #,# 사이에서 치환을 하려면                      :#,#s/old/new/g
     바꿀 때마다 확인을 거치려면 'c'를 붙여서              :%s/old/new/gc
                               LESSON 5 요약

  1.  :!command  를 이용하여 외부 명령을 실행합니다.
      유용한 예:
         (MS-DOS)         (Unix)
          :!dir            :!ls            -  디렉토리의 목록을 보여준다.
          :!del FILENAME   :!rm FILENAME   -  FILENAME이라는 파일을 지운다.
  2.  :w FILENAME  하면 현재 빔에서 사용하는 파일을 FILENAME이라는 이름으로
      디스크에 저장합니다.
  3.  :#,#w FILENAME  하면 #부터 #까지의 줄을 FILENAME이라는 파일로 저장합니다
.
  4.  :r FILENAME  은 디스크에서 FILENAME이라는 파일을 불러들여서 커서 위치
      뒤에 현재 파일을 집어넣습니다.
                               LESSON 6 요약

  1.  o 를 입력하면 커서 *아래에* 한 줄이 열리며, 커서는 편집 모드로
     열린 줄 위에 위치하게 됩니다.
     대문자  O  를 입력하면 커서가 있는 줄의 *위로* 새 줄을 열게 됩니다.
  2.  a 를 입력하면 커서 *다음에* 글을 입력할 수 있습니다.
     대문자  A  를 입력하면 자동으로 그 줄의 끝에 글자를 추가하게 됩니다.
  3. 대문자  R  을 입력하면 <ESC> 를 눌러서 나가기 전까지 바꾸기 모드가 됩니다
.
  4. ":set xxx" 를 하면 "xxx" 옵션이 설정됩니다.

 

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

16강 패키지 관리(rpm/yum)

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

관리자로 로그인

login as: j
j@127.0.0.1's password:
Last login: Tue Jan 24 21:43:10 2023 from gateway
[j@hj0216 ~]$ su -
암호:
마지막 로그인: 일  1월 15 22:50:18 KST 2023 일시 tty1
[root@hj0216 ~]# exit
[j@hj0216 ~]$

➕ ctrl d: logout

 

Linux package = Window program

설치된 pkg 목록 조회

[root@hj0216 ~]# rpm -qa | nl
[root@hj0216 ~]# rpm -qa > rpmList

rpm: redhat package manager

→ 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구

-qa:query all

nl: number line

rpm -qa > rpmList: 최초 설치 pkg 목록 rpmList라는 파일을 생성해서 저장

 

설치된 pkg 목록 검색

[root@hj0216 ~]# rpm -qa | grep ftp

grep ftp: ftp 문자열이 들어간 설치 pkg 목록 조회

 

pkg 설치 전 네트워크 연결 확인 test

[root@hj0216 ~]# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=33.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=36.4 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=35.2 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 33.710/35.135/36.493/1.147 ms

 

pkg 설치

[root@hj0216 ~]# yum -y install ftp
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.navercorp.com
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
base                 | 3.6 kB     00:00
extras               | 2.9 kB     00:00
updates              | 2.9 kB     00:00
(1/4): base/7/x86_64/g | 153 kB   00:00
(2/4): extras/7/x86_64 | 249 kB   00:00
(3/4): base/7/x86_64/p | 6.1 MB   00:03
(4/4): updates/7/x86_6 |  19 MB   00:08
Resolving Dependencies
--> Running transaction check
---> Package ftp.x86_64 0:0.17-67.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================
 Package
       Arch     Version        Repository
                                       Size
============================================
Installing:
 ftp   x86_64   0.17-67.el7    base    61 k

Transaction Summary
============================================
Install  1 Package

Total download size: 61 k
Installed size: 96 k
Downloading packages:
경고: /var/cache/yum/x86_64/7/base/packages/ftp-0.17-67.el7.x86_64.rpm: Header V3 RSA/SH                                  A256 Signature, key ID f4a80eb5: NOKEY
Public key for ftp-0.17-67.el7.x86_64.rpm is not installed
ftp-0.17-67.el7.x86_64 |  61 kB   00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb124c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-6.1810.2.el7.centos.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : ftp-0.17-67.el7.x86_64   1/1
  Verifying  : ftp-0.17-67.el7.x86_64   1/1

Installed:
  ftp.x86_64 0:0.17-67.el7

Complete!
[root@hj0216 ~]# rpm -qa | grep ftp
ftp-0.17-67.el7.x86_64

yum -y install ftp: ftp 관련 pkg 설치

-y: 설치 확인 질문에 대해 미리 y 응답

 

pkg 삭제

[root@hj0216 ~]# rpm -e ftp
[root@hj0216 ~]# rpm -qa | grep ftp

-e: erase