Linux & Shell-쉘은 필수입니까?


8

완전한 초보자 질문.

Linux에서 왜 쉘이 필요한가요? 예를 들어-find를 입력 할 때. -name xy *-쉘이이 입력을 받아서 find 명령을 호출한다고 들었습니다 (와일드 카드가 올바르게 해석되는지 확인하십시오). 쉘의 개념 없이는 이것을 할 수 없습니까? ... 쉘이 다양한 프로세스를 추적한다면 이것 없이는 할 수 없습니까?

또한 왜 ls xy *를 입력하고 \ in find-find로 *를 이스케이프 해야하는 동안 적절한 출력을 얻을 수 있습니까? -name xy \ * 쉘이 다른 실행 파일이 아닌 와일드 카드 확장을 수행합니까?

감사합니다.

linux  bash  shell 

9
쉘없이 리눅스를 사용하는 것은 도시 교통을 통해 페라리를 50km / h로 운전하는 것과 같습니다. 모든 재미는 사라질 것입니다.
vava

답변:


23

쉘 개념이 없으면이 작업을 수행 할 수 없습니까?

음 ... 아니. 의도를 해석하고 적절한 프로그램을 호출하는 무언가가 필요합니다. 그 것을 껍질이라고합니다.

편집 : 혼란을 피하기 위해 "쉘"은 "명령 줄 인터페이스"를 의미하지 않습니다. 에서 ) http://en.wikipedia.org/wiki/Shell_(computing :

"운영 체제 셸은 일반적으로 명령 줄과 그래픽의 두 가지 범주 중 하나에 속합니다. 명령 줄 셸은 운영 체제에 명령 줄 인터페이스 (CLI)를 제공하는 반면 그래픽 셸은 그래픽 사용자 인터페이스 (GUI)를 제공합니다. 쉘의 주요 목적은 다른 프로그램을 호출하거나 "시작"하는 것이지만, 쉘은 종종 디렉토리의 내용을 보는 것과 같은 추가 기능을 가지고 있습니다. "

다른 질문에 관해서는, 셸은 두 명령 모두에 와일드 카드 확장을 수행하지만 셸이 아닌 찾기를 사용하여 파일을 검색 할 때 찾기가 찾고있는 위치에서 수행하기 때문에 확장을 수행하려고합니다. 호출 된 위치가 아닌 따라서 *를 이스케이프하여 쉘 확장을 중지하면 찾기에서 볼 수 있습니다.


Windows에서 시작 버튼을 쉘이라고합니까? :-)

5
일반적인 사용법은 아니지만 GUI는 틀림없이 쉘입니다 (적어도 커널 외부에서 실행되는 경우). 시작 버튼은 GUI의 기능 일뿐입니다.
dmckee --- 전 운영자 고양이

시작 버튼은 "의도를 해석하고 적절한 프로그램을 호출하는 것"입니다. OTOH, Linux 쉘은 TUI (Text User Interface)의 기능이라고 할 수 있습니다.

11
@Paul : Explorer, 시작 버튼을 제공하는 프로그램은 windows shell입니다. 사실, 그것은이다 Windows 셸은; 교체 할 수 있습니다.
moonshadow

1
예, 시작 버튼은 쉘로 볼 수 있습니다. 대화식 쉘이 아니라 쉘입니다. 일반적으로 누군가가 "쉘"이라고 말하면 대화 형 프롬프트를 의미합니다 (예를 들어, Windows의 명령 프롬프트는 일반적인 쉘입니다)

5

물론 GUI를 통해 모든 것을 할 수 있습니다. XP 이전 버전의 Windows 파일 찾기는 입력 한 명령과 다소 유사합니다.

자, 왜 유닉스 (및 리눅스) 사용자들이 쉘을 좋아합니까? 출력을 가져 와서 다른 프로그램에 공급하고 다른 출력을 얻을 수 있습니다. 예를 들면 다음과 같습니다.

find | grep burek

이것들은 두 개의 명령 find이며 grep, 하나는 다른 하나를 공급합니다. find현재 및 모든 하위 폴더의 모든 파일을 한 줄에 하나씩 나열 grep하고을 포함하는 행만 인쇄합니다 burek.

이제 다음과 같은 더 복잡한 다른 것들이 있습니다.

ls -R | sort | uniq

ls -R현재 및 하위 폴더에 파일을 나열 sort하고 출력을 정렬합니다. uniq그런 다음 우리에게 유일한 라인을 제공합니다.

이제이 모든 것을 GUI로 코딩 할 수는 있지만, 직접 작성하지 않으면 GUI로 수행 할 수없는 명령 줄을 사용하여 이러한 까다로운 작업을 빠르게 수행 할 수 있습니다. 어떤 경우에는 명령 줄에 입력하는 것이 더 빠르지 않습니까?

결론 : 당신이 이것을 요구한다면, 당신은 그것을 요구하지 않습니다. 일반 사용자는 명령 줄을 사용할 수 없습니다. 그러나 명령 줄은 시스템 관리자, 개발자 및 컴퓨터를 빠르고 빠르게 엉망으로 만들고 싶은 사람들에게 좋습니다.


1

예, 쉘없이 find 명령을 실행할 수 있습니다.이를 시작하려면 일부 프로그램이 필요하며 출력을 표시하려면 일부 프로그램이 필요합니다. 많은 경우, 쉘의 기능을 사용하고 있으며,이 명령은 의도를 해석하기 위해 쉘이 필요합니다.

예를 들어 배관, 방향 전환 및 글 로빙은 쉘의 기능이며 해석하려면 쉘이 필요합니다. "find. -name myfile"은 쉘의 기능을 사용하지 않으며 쉘없이 실행될 수 있습니다. "find. -name myfile | sort> output"은 파이핑과 리디렉션을 모두 사용하므로이를 해석하려면 셸이 필요합니다.

xy * 이스케이프와 관련하여 찾은 입력 또는 재귀 출력의 경우 차이가 거의 없습니다. 쉘은 어느 쪽이든 확장합니다.

현재 디렉토리에 xyz라는 파일이있는 경우

찾기 . -name xy *는 실제로 find로 실행됩니다. -name xyz, 이것은 아마도 당신이 원하는 것이 아닙니다.

당신이 찾을 경우. -name xy *이고 현재 디렉토리에 xy *와 일치하는 파일이 없으면 find로 실행됩니다. -이름 xy *.

마찬가지로 현재 디렉토리 ls> xy *에 xy *와 일치하는 파일이 없으면 xy *라는 파일을 만듭니다. xyz와 일치하는 파일이 하나 있으면 ls> xyz를 의미합니다. xy *와 일치하는 여러 파일이 있으면 ls> xy *가 실패합니다.

더 읽기 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html


읽기 모드 어디?
Thomi

1

사소한 OS 커널에서 명령 줄 인터프리터를 실행 하지 않습니다 .

그것들을 프로그램으로 실행하고 그 프로그램을 쉘 이라고 합니다 . GUI의 상황은 혼합 된 것처럼 보이지만 적어도 일부 OS는 커널 외부에서도 작동합니다.

이제는 쉘이 유닉스 쉘처럼 작동 필요는 없지만 인터페이스 필요합니다.


1

두 번째 질문에 대답하기 위해 ... 쉘은 당신이 그것을 막지 않는 한 가능할 때마다 가능한 모든 것을 확장하려고 시도합니다. *를 이스케이프하면 확장을 방지 할 수 있으며 일반적으로 find 명령에 필요합니다.

질문으로 질문에 대답하지 않으려면 명령 줄 확장으로 인해 ls 명령이 파일을 나열했는지 또는 ls 명령이 파일 시스템에서 디렉토리 목록을 합법적으로 조회했기 때문에 어떻게 알 수 있습니까? 예를 들어, 다음과 같이 루프 for 루프를 작성할 수 있습니다.

for i in $(ls /home/mydir);

또는 좋아

for i in /home/mydir/*;

그들은 같은 세트를 초래합니다.


0
> ls xy *를 입력하고 적절한 출력을 얻는 이유는 무엇입니까?
find-find에서 \로 *를 이스케이프해야합니다. -이름 xy \ *는
쉘 하나에 대한 와일드 카드 확장을하고 있지만
다른 실행 파일?

찾기 호출에서 '*'를 벗어나는 지점은 쉘이 확장을 수행하지 못하게하는 것입니다. 이를 빠져 나가면 find가 ".", "-name", "xy *"인수를 보게됩니다. '*'를 이스케이프하지 않으면 ".", "-name", "xya", "xyz"가 표시됩니다 (쉘이 "xy *"를 "xya xyz"로 확장한다고 가정하면 xy로 시작하는 파일은 xya 및 xyz입니다. 따라서 귀하의 질문에 대한 대답은 아니오입니다. 쉘은 찾기 호출로 '*'를 확장하지 않습니다.


0

Linux의 셸은 Linux의 파일 시스템과 상호 작용하고 인수 및 환경 변수와 관련하여 명령을 실행하는 편리하고 일반적인 방법입니다. 예를 들어 한 프로세스의 출력을 다른 프로세스의 입력으로 연결, 입력 / 출력 스트림을 파일, FIFO 등으로 리디렉션하는 등 유용한 기능을 많이 제공합니다. 셸은 여러 개의 작은 프로그램을 쉽게 결합 할 수있는 좋은 방법입니다. 유용한 작업을 제공하기 위해 비교적 작은 작업을 수행합니다. 이러한 프로그램 중 일부 (예 : find 및 ls)는 쉘에서 이들과 함께 작동하도록 설계되었습니다.

확장을 이해하기 위해서는, 단순히 단어 (aplhanumeric 문자의 공간 경계 순서 기억 -, 그리고 몇몇 다른 기호)에 포함 주어진 *또는 ?패턴 문자는 이스케이프 또는 따옴표 (내부에 넣어되지 않은 ") 또는 아포스트로피 '일련의 치환, 패턴과 일치하는 파일 이름을 가진 공백으로 구분 된 단어 따라서 별표가있는 단어가 하나 있었습니까? 확장 후 bash에서 여러 인수로 처리되는 0 개 또는 여러 단어가 있습니다. 다음은 특정 ls명령 디자인입니다 . ls foo*"foo"로 시작하는 모든 파일을 표시 할 때이 구성표에 완벽하게 맞습니다 ! 그것은 같은 것으로 확장됩니다

ls foobar boobaz

ls는 인수에서 파일을 인쇄하여 존재 여부를 확인하고 폴더 등을 탐색합니다.

그러나 그것은 대부분 철학의 문제입니다. 다른 시스템에서는 모든 것이 "시작"버튼과 작업 표시 줄에서 나타납니다. 일부 사용자는 그것에 능숙합니다. 일부는 리눅스와 같은 쉘을 그러한 시스템에 설치하려고합니다. 그것은 맛의 문제이지만 파일을 다루는 간단한 스크립트를 프로그래밍 할 때 쉘은 매우 편리합니다.


0

대화식 명령의 경우 쉘이 GUI로 대체 될 수 있습니다.

그러나 쉘의 핵심은 스크립트 언어라는 것입니다. 특정 상황 (부팅, 세션 열기, 매일 ...)에서 실행되는 전체 프로그램을 만들 수 있습니다. 이 기능은 다른 도구로 대체 할 수 없습니다.


물론 다음과 같이 쉘 스크립트를 예약 할 수 있습니다.cron
Wuffers

0

물론 Linux를 실행할 수 있으며 쉘을 절대로 사용하지 마십시오. 많은 표준 Linux 배포판은 기본 사용자가 페이스 북을 확인하고 사진을보고 이메일을 보내려는 경우 필요한 것을 정확하게 제공합니다.

리눅스에는 많은 장점이 있지만 쉘은 아마도 가장 좋은 것입니다. 셸은 I / O 리디렉션을 허용합니다. 이것은 파이프 ( "|")를 언급 할 때 사람들이 말하는 것입니다. 예를 들면 다음과 같습니다.

컴퓨터 목록에 연결하고 사용자 계정이 존재하는 위치를 조사하고 싶습니다.

for host in `cat hostnames.txt1`; do
echo "Connecting to $host"
ssh $host "cat /etc/passwd | grep -i username"
done

hostnames.txt에 0 개의 호스트가 있거나 수천이있을 수 있습니다. 이 스크립트는 압축하여 설문을 작성하여 정보를 stdout에 뱉습니다.

스크립팅은 매우 창의적 일 수 있습니다. "/ >>"문자를 사용하여 입력 및 출력을 파일로 리디렉션 할 수 있습니다. 위의 스크립트에서 해당 시스템을 모두 조사하고 사용자가있는 서버 이름을 파일로 출력 한 다음 사용자 계정에서 일부 작업을 연결하고 수행하는 다른 스크립트를 추적 할 수 있습니다 (잠금 / 잠금 해제 / 재설정 pw / 그룹 삭제 / 추가 등).

배우다. 에. 스크립트. =)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.