리눅스에서 정말 피해야 할 8가지 오타

게시 됨: 2023-01-15
"죄송합니다!"라는 레이블이 붙은 키보드 키의 클로즈업
Redpixel.pl/Shutterstock
"Enter"를 누르기 전에 명령을 올바르게 입력했는지 다시 확인하십시오. Linux에서 오타는 파괴적인 영향을 미칠 수 있습니다. 탭 완성을 사용하여 가능한 한 많은 명령줄 항목을 자동으로 채웁니다. 길고 복잡한 명령에 대한 별칭도 좋은 생각입니다.

Linux 명령줄은 강력한 기능을 제공합니다. 문제는 그 힘의 올바른 사용이 타이핑의 정확성에 달려 있다는 것입니다. 절대 만들고 싶지 않은 8가지 오타가 있습니다.

목차

리눅스 커맨드 라인
1. -a를 잊지 마세요
2. dd와 함께 잘못된 드라이브 식별자 사용
3. mkfs에서 잘못된 드라이브 식별자 사용
4. crontab 파일을 삭제하지 마십시오
5. 반복되는 역사
6. 공간의 재난
7. >> 대신 > 사용
8. 잘못된 방향으로 리디렉션
명령줄 오타를 방지하는 방법

리눅스 커맨드 라인

Linux 명령줄은 막강한 힘으로 향하는 포털이지만 한 번의 오타만으로도 그 힘이 당신에게 등을 돌릴 수 있습니다. 절대 실행하면 안 되는 명령에 대해 들어본 적이 있을 것입니다. 여기서 우리가 말하는 것은 실행하기를 원하지만 한 번 실수하면 재앙을 의미할 수 있는 명령입니다.

"Enter"를 누르면 입력한 모든 내용이 쉘에서 처리됩니다. 별칭과 변수가 확장됩니다. 명령, 옵션 및 매개변수가 식별됩니다. 이를 구문 분석이라고 합니다. 다음 단계에서는 구문 분석된 입력을 지침을 수행할 명령으로 전달합니다.

명령을 입력할 때 실수하면 구문 오류로 인식될 수 있습니다. 그러나 실수로 다른 유효한 명령줄이 생성되면 실행됩니다.

단순한 오타는 정말로 파괴적일 수 있습니다. 파괴의 정도는 명령과 실수에 따라 다릅니다. 시간을 잃을 수도 있습니다. 파일이 손실될 수 있습니다. 전체 파일 시스템을 잃을 수 있습니다.

관련: Bash 셸이란 무엇이며 Linux에 중요한 이유는 무엇입니까?

1. -a를 잊지 마세요

예를 들어 특정 소프트웨어를 사용하도록 허용하려면 누군가를 그룹에 추가해야 할 수 있습니다. 예를 들어 VirtualBox를 사용하려면 사용자가 "vboxusers" 그룹에 속해야 합니다. usermod 로 그렇게 할 수 있습니다.

groups 명령은 사용자의 그룹을 나열합니다.

 여러 떼 

groups 명령으로 사용자 그룹 나열

사용자 dave 를 새 그룹에 추가합니다. -a (추가)는 사용자가 속한 기존 그룹 목록에 새 그룹을 추가합니다. -G (그룹) 옵션은 그룹을 식별합니다.

 sudo usermod -a -G vboxusers 데이브 

usermod 명령을 사용하여 새 그룹에 사용자 추가

새 그룹은 사용자가 로그인 및 로그아웃한 후에 표시됩니다.

 여러 떼 

이 사용자가 속한 그룹 목록에 표시되는 vboxusers 그룹

그는 이제 "vboxusers" 그룹에 있습니다. 그러나 -a (추가) 옵션 사용을 잊은 경우 사용자의 기존 그룹이 모두 제거됩니다. 그들이 속하게 될 유일한 그룹은 새 그룹입니다.

이것은 잘못된 명령입니다.

 sudo usermod -G vboxusers 데이브 

-a 추가 옵션을 사용하지 않고 그룹에 사용자 추가

다음에 로그인하면 자신이 한 그룹에만 있음을 알게 됩니다.

 여러 떼 

사용자는 이제 단일 그룹에 있습니다.

단일 구성된 사용자가 있고 이들에게 이 작업을 수행하면 심각한 문제가 발생합니다. 우선 사용자는 더 이상 "sudo" 그룹의 구성원이 아니므로 sudo 를 사용하여 수정을 시작할 수 없습니다.

관련: Linux에서 그룹(또는 두 번째 그룹)에 사용자 추가

2. dd와 함께 잘못된 드라이브 식별자 사용

dd 명령은 데이터 블록을 파일 시스템에 기록합니다. ISO 이미지를 USB 메모리 스틱에 쓰는 데 자주 사용됩니다.

저장 장치에 대한 Linux 명명 체계는 식별을 위해 단일 문자를 사용합니다. 첫 번째 하드 드라이브의 이름은 "/dev/sda", 두 번째는 "/dev/sdb", 세 번째는 "/dev/sdc" 등입니다. 파티션은 번호로 식별됩니다. 첫 번째 하드 드라이브의 첫 번째 파티션은 "/dev/sda1"이고 두 번째 파티션은 "/dev/sda2"입니다.

이미지를 USB 메모리 스틱에 구우려면 USB 메모리 스틱의 드라이브 식별자를 알아야 합니다. grep 을 통해 lsblk 를 파이핑하여 "sd"가 포함된 항목을 찾습니다.

 lsblk | 그렙 SD 

grep을 사용하여 lsblk 명령의 출력에서 ​​"sd"가 포함된 줄 검색

하드 드라이브 "/dev/sda"는 3개의 파티션이 있는 32GB 드라이브임을 알 수 있습니다. 파티션 중 하나는 "/boot" 파티션이고 "/dev/sda3" 파티션은 파일 시스템의 루트인 "/"에 마운트됩니다.

하드 드라이브 "/dev/sdb"는 7.5GB 드라이브로 보고됩니다. "/media/dave/Pink"에 마운트됩니다. 일반적으로 "/dev/sda" 드라이브는 이 컴퓨터의 기본 하드 드라이브이고 "/dev/sdb"는 USB 메모리 스틱입니다.

"~/Downloads" 디렉토리에 있는 ISO 파일을 USB 메모리 스틱에 쓰는 명령은 다음과 같습니다.

 sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sdb conv=fdatasync 상태=진행률 

dd 명령으로 USB 메모리 스틱에 이미지 쓰기

비밀번호를 입력하라는 메시지가 표시되면 dd 가 실행됩니다. "확실합니까?" 경고 또는 철회 기회. 쓰기가 즉시 시작됩니다.

USB 메모리 스틱에 이미지를 쓸 때 dd 진행률 표시

그러나 드라이브 식별자에 잘못된 문자를 입력하고 기존 하드 드라이브와 일치하는 경우 메모리 스틱 대신 해당 드라이브를 덮어쓰게 됩니다.

이것은 잘못된 명령입니다.

 sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=fdatasync 상태=진행률 

주 하드 드라이브에 실수로 이미지를 쓰면 오류 메시지가 표시됩니다.

우리는 dd 에게 "/dev/sd a "를 사용하라고 말했고 그렇게 했습니다. 쓰기 작업은 훨씬 빠르지만 경고와 함께 끝납니다. 방금 Linux 설치를 폐기했습니다.

"Enter"를 누르기 전에 드라이브 식별자를 확인하고 다시 확인하십시오.

관련: Linux에서 USB 드라이브에 ISO 파일을 굽는 방법

3. mkfs에서 잘못된 드라이브 식별자 사용

mkfs 도구와 같이 명령줄의 일부로 드라이브 식별자를 사용하는 다른 명령이 있습니다. 파티션에 파일 시스템을 생성하여 드라이브를 포맷합니다.

이 컴퓨터에는 25GB 드라이브와 10GB 드라이브가 있습니다.

grep을 통해 파이프된 lsblk의 출력, 컴퓨터의 하드 드라이브 표시

10GB 드라이브의 첫 번째 파티션에 Ext4 파일 시스템을 생성하려면 다음 명령을 사용합니다.

 sudo umount /dev/sdb1
 sudo mkfs.ext4 /dev/sdb1 

USB 메모리 스틱에 ext4 파일 시스템 만들기

그러나 드라이브 식별자에 "b" 대신 "a"를 잘못 사용하면 25GB 드라이브의 파티션 중 하나가 지워지고 컴퓨터를 부팅할 수 없게 됩니다.

이것은 잘못된 명령입니다.

 sudo umount /dev/sda1
 sudo mkfs.ext4 /dev/sda1 

컴퓨터의 메인 드라이브를 실수로 포맷

그 작은 글자 하나가 펀치를 포장하므로 올바른 드라이브를 치고 있는지 확인하십시오.

관련: Linux에서 mkfs 명령을 사용하는 방법

4. crontab 파일을 삭제하지 마십시오

cron 데몬은 미리 정해진 시간에 작업을 실행합니다. crontab 파일에서 구성을 가져옵니다. 루트를 포함한 각 사용자는 crontab 파일을 가질 수 있습니다. crontab 을 편집하려면 다음 명령을 사용하십시오.

 crontab -e 

crontab 파일 편집 명령: crontab -e

crontab 파일이 편집기에서 열립니다. 변경하고 새 명령을 추가할 수 있습니다.

편집기에서 열린 crontab 파일

그러나 명령을 잘못 입력하고 "e" 대신 "r"을 누르면 삭제 에서와 같이 crontab 파일이 제거됩니다.

이것은 잘못된 명령입니다.

 crontab -r 

crontab 파일을 삭제하는 명령: crontab -r

다음에 crontab -e 명령을 사용하면 기본 빈 파일이 표시됩니다.

대부분의 키보드에서 "e"와 "r"이 서로 옆에 있기 때문에 이것은 실수하기 쉽습니다. 복잡한 crontab 파일을 다시 빌드하는 것은 재미가 없습니다.

관련: Cron 작업이란 무엇이며 어떻게 사용합니까?

5. 반복되는 역사

키 입력을 줄이고 시간을 절약하려는 경우 history 명령을 사용하는 것이 좋습니다. 장황한 명령을 역사에서 끌어낼 수 있다면 속도와 정확성을 얻을 수 있습니다. 기록에서 올바른 명령을 선택하는 한.

history 명령은 터미널 창에 이전 명령을 나열합니다. 번호가 매겨져 있습니다. 명령을 재사용하려면 해당 번호 앞에 느낌표 “ ! "라고 입력하고 "Enter" 키를 누릅니다.

 역사 

Git 리포지토리를 복제하고 엉망이 되어 삭제했다고 가정합니다. 한 번 더 복제해야 합니다. 터미널 창을 스크롤하면 곧 git clone 명령을 찾을 수 있습니다. 다음을 입력하여 다시 실행할 수 있습니다.

 !60

그러나 화면만 보고 번호를 잘못 읽은 경우 다음 번호를 잘못 선택할 수 있습니다.

 !61

그러면 목록의 다음 명령인 rm * 가 실행됩니다. 그러면 현재 디렉토리의 모든 파일이 삭제됩니다.

" ! ” 텍스트 문자열이 포함된 느낌표. 일치하는 첫 번째 명령이 실행됩니다. 당신이 생각한 것인지 확인할 수 있도록 표시되지 않고 바로 실행됩니다.

"restart.sh"라는 스크립트가 있는 시나리오를 상상해 보십시오. 이 스크립트는 작성 중인 일부 소프트웨어에 대한 구성 파일 세트를 기본 설정합니다. 주기적으로 개발하고 테스트하면서 슬레이트를 깨끗이 닦아야 하므로 스크립트를 호출합니다.

이 명령은 기록에서 명령을 찾아 일치시키고 실행하기에 충분해야 합니다.

 !답장

그러나 스크립트를 마지막으로 사용한 이후에 reboot 명령을 사용한 경우 발견되어 즉시 실행되는 것은 reboot 명령입니다.

rm * 명령이 실수로 실행됨

단일 사용자 가정용 컴퓨터에서는 성가심일 수 있습니다. 공유 서버에서는 다른 많은 사람들에게도 성가신 일입니다.

관련: Linux에서 history 명령을 사용하는 방법

6. 공간의 재난

파일 이름과 디렉터리 경로에 공백이 있으면 문제가 발생할 수 있습니다. 그렇기 때문에 항상 이스케이프하거나 인용해야 합니다.

Linux에서 파일 이름의 공백을 처리하는 방법
관련 Linux에서 파일 이름의 공백을 처리하는 방법

탭 완성을 사용하면 공백 문제를 피할 수 있습니다. 파일 이름이나 디렉토리 경로를 입력할 때 "Tab" 키를 누르면 셸이 가능한 한 많은 경로나 파일 이름을 자동 완성합니다. 원하는 파일과 같은 이름의 일부를 공유하는 다른 파일을 구별하기 위해 문자를 입력해야 할 수도 있지만 "Tab" 키를 다시 누르면 나머지 파일 이름이 완성됩니다.

이렇게 하면 키 입력이 절약되고, 오타로 인해 공백이 스며드는 것을 방지하고, 문제가 발생하지 않도록 적법한 공백을 올바르게 이스케이프 처리합니다.

"geocoder"와 "bin"이라는 두 개의 다른 디렉토리를 포함하는 "Development" 디렉토리가 있다고 가정해 보겠습니다. "geocoder" 디렉토리 안에는 "bin" 디렉토리도 있습니다.

"geocoder/bin" 디렉토리에서 파일을 삭제하고 디렉토리를 제거하려면 이 명령을 사용합니다.

 rm -r 지오코더/bin 

geocoder/bin 디렉토리 삭제

이제 이와 같이 "geocoder/" 뒤에 실수로 공백을 추가했다고 상상해 보십시오.

이것은 잘못된 명령입니다.

 rm -r 지오코더/빈 

실수로 geocoder 및 bin 디렉토리 삭제

팔. 이제 "Development" 디렉토리가 비어 있습니다. "Development/geocoder", "Development/geocoder/bin" 및 "Development/bin" 디렉토리가 모두 완전히 삭제되었습니다.

기억하세요, 탭 완성은 당신의 친구입니다.

관련: 탭 완성 기능을 사용하여 모든 운영 체제에서 명령을 더 빠르게 입력

7. >> 대신 > 사용

리디렉션은 프로세스의 출력을 파일로 보냅니다. 보다 큼 기호 " > "를 사용하여 프로세스의 출력을 캡처합니다. 파일이 있으면 먼저 비웁니다.

메모리 누수를 조사하고 있다고 가정해 보겠습니다. "memlog.sh"라는 스크립트가 있습니다. 초당 한 번씩 메모리 통계를 표시합니다. 나중에 분석할 수 있도록 "memory.txt"라는 파일로 리디렉션할 것입니다.

 memlog.sh > memory.txt
 헤드 메모리.txt 

memlog.sh 스크립트의 출력 캡처 및 표시

다음날 조사를 계속하고 스크립트를 다시 시작합니다. 이번에는 새 데이터가 파일에 추가 되도록 두 개의 보다 큼 기호 " >> "를 사용해야 합니다.

 memlog.sh >> 메모리.txt 

기존 파일 끝에 새 데이터 추가

보다 큼 기호 ">"를 하나만 사용하면 파일이 먼저 비워지기 때문에 어제의 데이터가 손실됩니다.

관련: Linux에서 stdin, stdout 및 stderr은 무엇입니까?

8. 잘못된 방향으로 리디렉션

리디렉션은 파일의 내용을 프로그램에 대한 입력으로 사용할 수 있습니다.

sqlite3 로 가져오려는 "placenames.sql"이라는 파일이 있습니다. 스키마 파일은 데이터베이스 테이블을 다시 만드는 방법을 설명합니다. 또한 데이터베이스에 저장하려는 데이터도 보유하고 있습니다. 1.3GB에 1,100만 줄이 넘는 대용량 파일입니다.

 ls -hl 장소 이름.sql
 화장실 지명.sql 

ls 및 wc로 파일 크기 확인

이 명령으로 "places.sqlite3"라는 새 데이터베이스를 만들 수 있습니다.

 sqlite3 장소.sqlite3 < 장소 이름.sql 

파일에서 sqlite3로 스키마 가져오기

대부분 리디렉션할 때 ">" 문자를 사용합니다. 습관적으로 ">"를 입력하지 않도록 집중해야 합니다. 그렇게 하면 sqlite3 가 생성하는 모든 출력이 스키마 파일에 기록되어 지워집니다.

이것은 잘못된 명령입니다.

 sqlite3 장소.sqlite3 > 장소 이름.sql 

sqlite3에서 스키마 파일로 실수로 리디렉션

sqlite3 셸의 환영 메시지로 스키마 파일이 파괴되어 덮어쓰였습니다.

 고양이 지명.sql 

sqlite3 환영 메시지를 포함하는 덮어쓴 스키마 파일

안녕, 1.3GB의 데이터.

명령줄 오타를 방지하는 방법

이러한 유형의 실수를 방지하기 위해 채택할 수 있는 좋은 습관이 있습니다.

가능하면 탭 완성을 사용하십시오. 디렉토리 경로 및 파일 이름의 공백 문제를 피할 수 있습니다.

때때로 사용해야 하는 길고 복잡한 명령에 대한 짧고 기억하기 쉬운 별명을 만드십시오. 이렇게 하면 잘못된 옵션과 매개변수를 사용하여 엉망이 되지 않습니다.

Linux 터미널에서 더 적게 입력하고 더 빠르게 작업하는 방법
관련 Linux 터미널에서 더 적게 입력하고 더 빠르게 작업하는 방법

자신의 글을 교정하는 것은 악명이 높지만 명령줄에서 수행해야 하는 작업입니다. 실제로 무엇이 있는지 읽어보십시오. 흘끗 보고 입력하려는 내용이 표시된다고 생각하지 마십시오. 그것은 정말로 무엇을 말합니까? 그것이 실제로 할 일이기 때문입니다.

관련: Linux에서 절대 실행하면 안 되는 8가지 치명적인 명령