기본 콘텐츠로 건너뛰기

8. cp

안녕하세요, MJ 입니다. 리눅스 파일복사 명령어 cp 에 대해 알아보겠습니다. 리눅스 cp 명령어는 윈도우 copy 명령어와 같은 기능을 합니다. 파일이나, 디렉토리를 복사 할 때 사용됩니다. cp 명령어의 도움말을 확인 해 보겠습니다. 펼치기/접기 Usage: cp [OPTION]... [-T] SOURCE DEST   or:  cp [OPTION]... SOURCE... DIRECTORY   or:  cp [OPTION]... -t DIRECTORY SOURCE... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. Mandatory arguments to long options are mandatory for short options too.   -a, --archive                same as -dR --preserve=all       --attributes-only        don't copy the file data, just the attributes       --backup[=CONTROL]...

2. ls

안녕하세요, MJ 입니다.

ls 명령어에 대해 알아보겠습니다.


ls 명령어는 파일의 목록을 확인하는 명령어 입니다.

많이 사용되는 내용에 대해 남기도록 하겠습니다.

[도움말]      

펼치기/접기
ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..

      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                             e.g., '--block-size=M'; see SIZE format below

  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                             change of file status information);
                             with -l: show ctime and sort by name;
                             otherwise: sort by ctime, newest first

  -C                         list entries by columns
      --color[=WHEN]         color the output WHEN; more info below
  -d, --directory            list directories themselves, not their contents
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         list all entries in directory order
  -F, --classify[=WHEN]      append indicator (one of */=>@|) to entries WHEN
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                             single-column -1, verbose -l, vertical -C

      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first
                             group directories before files;
                             can be augmented with a --sort option, but any
                             use of --sort=none (-U) disables grouping

  -G, --no-group             in a long listing, don't print group names
  -h, --human-readable       with -l and -s, print sizes like 1K 234M 2G etc.
      --si                   likewise, but use powers of 1000 not 1024
  -H, --dereference-command-line
                             follow symbolic links listed on the command line
      --dereference-command-line-symlink-to-dir
                             follow each command line symbolic link
                             that points to a directory

      --hide=PATTERN         do not list implied entries matching shell PATTERN
                             (overridden by -a or -A)

      --hyperlink[=WHEN]     hyperlink file names WHEN
      --indicator-style=WORD
                             append indicator with style WORD to entry names:
                             none (default), slash (-p),
                             file-type (--file-type), classify (-F)

  -i, --inode                print the index number of each file
  -I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
  -k, --kibibytes            default to 1024-byte blocks for file system usage;
                             used only with -s and per directory totals

  -l                         use a long listing format (소문자 'L')
  -L, --dereference          when showing file information for a symbolic
                             link, show information for the file the link
                             references rather than for the link itself

  -m                         fill width with a comma separated list of entries
  -n, --numeric-uid-gid      like -l, but list numeric user and group IDs
  -N, --literal              print entry names without quoting
  -o                         like -l, but do not list group information
  -p, --indicator-style=slash
                             append / indicator to directories
  -q, --hide-control-chars   print ? instead of nongraphic characters
      --show-control-chars   show nongraphic characters as-is (the default,
                             unless program is 'ls' and output is a terminal)

  -Q, --quote-name           enclose entry names in double quotes
      --quoting-style=WORD   use quoting style WORD for entry names:
                             literal, locale, shell, shell-always,
                             shell-escape, shell-escape-always, c, escape
                             (overrides QUOTING_STYLE environment variable)

  -r, --reverse              reverse order while sorting
  -R, --recursive            list subdirectories recursively

  -s, --size                 print the allocated size of each file, in blocks
  -S                         sort by file size, largest first
      --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
                             time (-t), version (-v), extension (-X), width

      --time=WORD            select which timestamp used to display or sort;
                               access time (-u): atime, access, use;
                               metadata change time (-c): ctime, status;
                               modified time (default): mtime, modification;
                               birth time: birth, creation;
                             with -l, WORD determines which time to show;
                             with --sort=time, sort by WORD (newest first)

      --time-style=TIME_STYLE
                             time/date format with -l; see TIME_STYLE below
  -t                         sort by time, newest first; see --time
  -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
  -u                         with -lt: sort by, and show, access time;
                             with -l: show access time and sort by name;
                             otherwise: sort by access time, newest first

  -U                         do not sort; list entries in directory order
  -v                         natural sort of (version) numbers within text
  -w, --width=COLS           set output width to COLS.  0 means no limit
  -x                         list entries by lines instead of by columns
  -X                         sort alphabetically by entry extension
  -Z, --context              print any security context of each file
      --zero                 end each output line with NUL, not newline
  -1                         list one file per line
      --help        display this help and exit
      --version     output version information and exit

The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y,R,Q (powers of 1024) or KB,MB,... (powers of 1000).
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

The TIME_STYLE argument can be full-iso, long-iso, iso, locale, or +FORMAT.
FORMAT is interpreted like in date(1).  If FORMAT is FORMAT1<newline>FORMAT2,
then FORMAT1 applies to non-recent files and FORMAT2 to recent files.
TIME_STYLE prefixed with 'posix-' takes effect only outside the POSIX locale.
Also the TIME_STYLE environment variable sets the default style to use.

The WHEN argument defaults to 'always' and can also be 'auto' or 'never'.

Using color to distinguish file types is disabled both by default and
with --color=never.  With --color=auto, ls emits color codes only when
standard output is connected to a terminal.  The LS_COLORS environment
variable can change the settings.  Use the dircolors(1) command to set it.

Exit status:
 0  if OK,
 1  if minor problems (e.g., cannot access subdirectory),
 2  if serious trouble (e.g., cannot access command-line argument).

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation <https://www.gnu.org/software/coreutils/ls>
or available locally via: info '(coreutils) ls invocation'
$

 

각 옵션에 대해 설명이 상세하게 나와있는데

이것을 우리가 모두 외우고 사용할 수는 없습니다.

 

1. 간략하게 파일 목록 보기
: 아무런 옵션을 주지 않고 명령어 ls 만 수행합니다.

[옵션없이 ls 명령어 수행결과]

>> 단순히 파일의 유무를 확인하고자 할 때 자주 사용됩니다.

 

2. 상세목록 보기
: ls -l 옵션을 추가하여 리스트형식으로 조회가 됩니다.

[ls -l]

>> 이렇게 보면, 각 라인마다 하나의 파일의 정보가 출력되고, 출력된 정보에는 파일의 종류와 퍼미션, 소유자와 소유그룹, 사이즈, 파일의 액세스 날짜와 시간, 마지막으로 파일의 이름이 출력됩니다.

3. 파일의 시간별 정렬
: 예제 그림에 파일의 목록이 너무 길어서 위에서 10줄(head), 아래에서 10줄(tail) 을 함께 사용 해 보았습니다.

[시간순 정렬]

이것은 제가 잘 사용하는 옵션인데, 4가지 옵션을 사용하고 있습니다. (-lhrt)

l 옵션은 위에서 설명한 디테일한 리스트 형식으로 출력을 해주고
h 옵션은 휴먼 옵션입니다. 용량의 표기가 우리가 읽기 쉽게 기록 됩니다.
r 은 거꾸로 정렬을 해주고
t 는 시간으로 정렬을 해 줍니다.

옵션의 순서는 상관이 없으며 그냥 이렇게 4개의 알파벳을 모두 기록해서 수행합니다.
가장 최근에 수정된 파일이 가장 아래에 출력이 되어, 최근에 변경이 일어난 파일을 검색할 때,
유용하게 사용하고있는 옵션입니다.

4. 단순 목록 조회인데 1열로 출력
: 파일의 목록을 한줄에 하나씩만 출력하고싶을 때 사용합니다.

[파일의 이름만 1열로 출력]

이것은 큰 의미는 없지만, ls 를 긁어서 1열로 만들어야 할때, 애초에 1열로 출력을 할 수 있습니다.
옵션은 -1 입니다(소문자 L 아니고, 숫자 1)

5. i-node 숫자를 함께 출력
: 파일의 i-node 넘버를 함께 출력합니다.

[i-node 넘버 출력]

이것은 옵션없는 ls 와 같지만, i-node 넘버를 함께 출력 해 줍니다.
용도는 파일명이 타이핑 할 수 없는 파일일때, find 명령어와 함께 inode 로 파일을 지정하여 읽거나,변경하거나,삭제 할 수 있는데, 그때 파일의 inode 넘버 확인이 필요하게 되어 -i 옵션을 사용해서 확인합니다.

5-1. 어떻게 할 수 없는 파일을 inum 을 참조하여 하기


 : 이렇게 생성 되었으나, 읽지도 못하겠고, 지우지도 못하겠는 파일이 생성 된 경우에


: 이렇게 확인 된 inode-number 를 find 명령으로 이렇게 할 수 있습니다.
물론 파일명을 변경한다거나, 이대로 파일을 그냥 수정만 한다거나 하는 등 모든것이 가능합니다만, 이렇게 입력을 할 수 없는 이름이 디렉토리인 경우, 내용을 조회하거나 하는 등은 가능하지만 디렉토리로 들어갈 수는 없습니다.

6. Recursive 출력
: 이정도가 자주 사용하는 옵션이 되고, 그 외에도 자주는 아닌데 종종 사용되는 -R 옵션이 있습니다.(대문자R)

[Recursive(재귀)출력]

: 이 대문자 R 옵션을 함께 사용하게 되면, 파일의 목록을 조회하고자 하는 경로 이하로 존재하는 모든 디렉토리의 내용까지 확인이 됩니다.


리눅스에서는 점(.) 문자로 시작되는 파일을 숨김파일로 처리하게 됩니다.
숨김파일은 -a 또는 -A 옵션을 사용해야만 파일목록에 확인이 되는데,
-a 와 -A 옵션의 차이에 대해 설명드리겠습니다.

1) -a 옵션.
: 문자 A 옵션을 사용하게 되면, 파일목록 조회 시, 현재 디렉토리와(.), 상위 디렉토리(..) 을 포함하여 화면에 출력을 해 줍니다.

2) -A 옵션.
: 문자 A 옵션을 사용하게 되면, 파일목록 조회 시, 현재 디렉토리와(.), 상위 디렉토리(..) 을 제외하고 화면에 출력을 해 줍니다.


[주의]
스크립트를 작성하여 많은 파일/디렉토리를 제거하려고 할 때, 이 옵션의 차이에 대한 인지가 없이 잘못 작성된다면, 굉장히 난처한 일이 벌어질 수 있습니다.

예를들어, 미리 준비 해 온 /etc/skel/ 디렉토리로 복사 할 파일을 모두 준비 해 온 경우.
1. 이미 존재하는 /etc/skel/ 디렉토리 이하의 파일들을 모두 제거하고
2. 내가 준비 해 온 파일을 모두 복사/이동 하여 설정을 마침.

이러한 절차로 작업을 하려고 하였을 때,
1. /etc/skel 로 이동하여 숨김파일을 포함한 파일목록을 확인.
2. /etc/skel 경로에 존재하는 기본 설정파일을 모두 제거.
3. 준비 해 온 파일을 복사.

일반적인 절차이지만,

숨김파일을 포함한 모든 파일을 제거하기위해

# cd /etc/skel/
# rm -rf $(ls -a)

이렇게 되면, 실행 되는 명령어가
# rm -rf .   ..    [.으로 시작되는 모든 파일목록]
.으로 시작되는 모든 파일목록은 의도 한 액션으로 문제가 될 것이 없지만, 그 뒤 .과 ..이 문제를 일으키게 됩니다.
1) . 현재디렉토리
이미 cd /etc/skel/ 명령어를 수행하여 내가 위치 한 디렉토리이기때문에 제거에 실패하게 되어 문제가 되지 않습니다.
2) .. 상위디렉토리
/etc/skel/ 의 상위디렉토리는 /etc 입니다. 디렉토리 제거를 위해 /etc/ 이하에 존재하는 모든 파일과 디렉토리로 제거를 시도하게 됩니다.
 

rm 대신 echo 명령어로 출력을 해 보았습니다.
[rm 대신 echo 를 이용한 출력 내용]


 

 

 

 

 

 

 

 

 

 

미리 백업을 하지 않았다면, OS를 다시 설치해야 할 위기에 처하게 됩니다.
만일 신규로 OS 설치를 하는 경우라면 재설치 하면 되겠지만, 이전에 이미 무언가 많은 작업이 수행 된 서버라면,,, 아무리 빠르게 ctrl + C 를 눌렀다고 한들, 모든 파일이 정상으로 잘 있다고 보장 할 수 없게되므로 생각하고싶지 않은 경험이 되실 수 있습니다.

리눅스에서 사용하는 ls 명령어 옵션에 대한 모든 것은 아니지만 저의 경험으로 자주 사용되는 옵션을 알아보았습니다.

문의사항은 댓글을 달아 주시면 성심껏 답변 드리겠습니다.

감사합니다.

댓글

가장 많이 본 글

2. 버추얼박스(2/2): VM생성

안녕하세요, MJ입니다.   VM 생성 후 , OS 설치를 해야 VM 을 사용 해 볼 수 있을텐데 ,   현재 서버용 OS 로 가장 많이 사용되는 Red Hat 리눅스로 하고싶지만 , 라이선스 문제로 커뮤니티 버전의 OS 중에 Red Hat 계열의 Rocky Linux 로 제가 마음대로 결정 해 보았습니다 . ( 버전은 현재 기준으로 최신 9.4 버전 )   현재는 OS 를 설치 하기위한 미디어가 없는줄로 압니다 . 설치 미디어를 다운로드 하는데에 시간이 걸리기때문에 , 설치미디어 다운로드를 먼저 걸어놓고 , VM 생성을 하겠습니다 .   1. Rocky Linux – 9.4 iso 이미지 다운로드 URL: https://rockylinux.org/download   ( " DVD ISO " 버튼을 클릭하면 다운로드가 시작됩니다 . )   2 . VM 생성 2-1) 기본정보입력 버추얼 박스 프로그램 실행 . 새로만들기 버튼 클릭 생성 할 VM 의 이름을 작성 iso 이미지를 다운로드 중이므로 아직 선택하지 않고 넘어갑니다 . OS 종류로 "Linux" 를 선택 OS 배포판으로 "RedHat 9.x (64bit)" 을 선택 ( Rocky Linux 가 래드햇계열인데 , 목록에 Rocky Linux 가 없어서 ) 다음 버튼 클릭   iso 이미지를 넣고 시작하게 되면 , 무인 설치 건너뛰기 옆 체크박스에 체그가 안 된 상태가 확인되는데 , 무인설치를 하지 않도록 체크를 해 주세요 . ( 설치 과정을 봐야하기때문에 무인설치가 안되면 좋겠습니다 .)   2-2) 스펙 : 메모리 용량 , CPU 개수 , BootMode("Legacy"/E...

1. 버추얼박스(1/2): 설치

안녕하세요, MJ입니다. 나의 환경에서 리눅스 머신을 별도로 구동시키고 , 테스트 해 보기위해 가상환경이 필요하게 됩니다 . 가상환경이라고 해서 거창한것처럼 보일 수 있지만 , 가상환경은 가상의 머신을 구동 시킬 수 있는 환경으로 버추얼 박스 , VMWare, Hyper-V, QEMU 정도가 알려진 가상환경 에뮬레이터 라고 볼 수 있겠습니다 .   이 중에서 완전 무료로 사용할 수 있는 것은 Hyper-V 와 QEMU 이지만 , VirtualBox 역시 ExtensionPack 을 설치하지 않는다면 상업용으로도 무료로 사용할 수 있습니다. (비 상업적인 용도로는 ExtensionPack을 설치해도 무료입니다) 조작 및 사용방법이 간단한 VirtualBox 를 이용해 가상 환경 구성을 위한 방법에 대해 소개 하겠습니다 .     1) 버추얼박스 다운로드 - 사이트 : https://virtualbox.org 사이트 접속 후 왼쪽 Downloads 클릭 Windows hosts 클릭 다운로드 된 프로그램을 실행 .   2) 버추얼박스 설치 실패 , 추가 프로그램 확인   버추얼박스 설치 시도 시 "microsoft visual c++ 2019 redistributable package being installed first" 이런 메시지가 확인되었고 , 버추얼박스 설치는 되지 않았습니다 . 구글에서 "microsoft visual c++ 2019 redistributable package being installed first" 이 메시지를 검색해서 첫번째로 확인되는 마이크로소프트 사이트 방문 . 버추얼박스 설치 실패 시 확인된 Redistributable 프로그램을 찾아가 내 OS 의 아키텍처와 일치...

6. OS 설치 후 확인(Rocky Linux - 9.4 )

안녕하세요 MJ 입니다 .   지난번 설치 했던 OS (Rocky Linux - 9.4) 의 부팅 된 화면 입니다 .   번 시간에는 OS 설치 시 설정 했던 내용들에 대해서 하나씩 잘 설정이 적용 되었는지 확인을 해 보도록 하겠습니다 .   [ 설치 시 설정 한 메뉴 ] root 계정 설정 일반유저 생성 타임존 패키지 꾸러미 선택 파티셔닝 네트워크     설정확인 (1/6): root 계정 설정 지정한 패스워드로 로그인을 시도 해 봅니다 . 로그인이 잘 됩니다 . ( 패스워드 설정 확인 )   설정확인 (2/6): 일반유저 생성 로그인 확인 일반유저도 로그인이 잘 됩니다 . ( 패스워드 설정 확인 )   관리자 권한 추가그룹으로 wheel 이 확인됩니다 . ( 관리자 권한 확인 ) : gid 에 표시된 그룹과 , groups 에 표시 된 그룹은 다른 것 입니다 . 계정은 소유자 아이디와 그룹 아이디를 필수로 가져야하고 , 다른 그룹을 가지는 것은 추가그룹 이라고 합니다 . uid 는 여러 개 가질 수 없지만 , 그룹은 여러 개를 가질 수 있습니다 .   Red Hat 계열의 리눅스 기준으로 , ~6 버전까지는 500 번이 일반 유저가 가지는   UID/GID 의 시작이고 , 7~ 버전부터는 1000 번이 시작되며,   기본 관리자 그룹으로 wheel 이 생성 및 설정 됩니다.     설정확인 (3/6): 타임존   설정 한 대로 , 한국시 (Asia/Seoul) 확인이 확인됩니다 .   설정확인 (4/6): 패키지 꾸러미 선택 선택 했던 ...