일반적인 텍스트 배치 명령 파일을 어떻게 작성하고 이후에 사용할 수 있습니까?
나는 다음 명령이 포함된 파일에 대해 이야기하고 있습니다.
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
Leafpad로 쓸 수 있을 것 같지만...
어디에 저장해야 하나요?
어떤 형식인가요? 이름과 확장자는 무엇입니까?
그 후에 LXTerminal 세션에서 단 한 번의 주문으로 어떻게 사용할 수 있습니까? (이상적으로는 시스템이 시작될 때마다 자동으로 사용할 수 있는 방법이 있다면)?
시간을 내주셔서 정말 감사합니다!
답변1
유닉스 계열 세계에는 "배치" 파일이 없습니다. 우리는 "she-bangs"를 포함하는 스크립트를 사용합니다. 이와 같은 스크립트를 만들려면 Leafpad와 같은 텍스트 편집기를 열고 다음과 같은 줄로 시작하세요.
#!/path/to/interpreter
/path/to/interpreter
스크립트를 해석하는 데 사용될 바이너리의 위치는 어디에 있습니까? Linux에서는 일반적으로 Bourne Shell의 "진화"인 "bash"(Bourne Again SHell)를 사용합니다. Bash가 하는 일은 기본적으로 PATH 환경 변수에 포함된 경로(보통 /bin, /sbin, /usr/bin, /usr/sbin 등 포함)에서 스크립트에 지정된 인수를 사용하여 바이너리를 실행하는 것입니다.
그러나 수많은 옵션 외에도 Python, Perl, Ruby, sh, csh, zsh, dash, ksh와 같은 다른 인터프리터를 사용할 수도 있습니다.
she-bang 아래에는 스크립트가 있습니다. 특정한 경우 지정된 명령을 실행하려면 다음과 같은 스크립트에서 bash를 사용할 수 있습니다.
#!/bin/bash
# the line above sets bash as the interpreter
# note that "sudo" is not required here because we will run the script as super user later.
apt-get update
# updates APT repositories
apt-get upgrade
# check for software upgrades and upgrade them
apt-get autoremove
# remove obsolete packages
apt-get autoclean
# remove stored .deb files
apt-get check
# update package cache and check for broken dependencies
이제 파일을 저장하세요. 확장자는 필요하지 않지만 상징적인 이유로 .sh 확장자로 이름을 지정합니다. 슈퍼 유저로 스크립트를 실행하므로 파일 권한을 변경할 필요가 없습니다.
터미널을 열고 스크립트를 저장한 경로로 이동합니다. script.sh로 저장했다고 가정해 보겠습니다. 다음 명령을 실행하십시오.
chmod +x script.sh
chmod
"모드 변경"을 의미하며 스크립트로 누가 무엇을 할 수 있는지 변경하는 데 사용됩니다. +x
모든 사용자에게 실행 권한을 추가하여 누구나 다른 프로그램인 것처럼 스크립트를 실행할 수 있습니다. 다양한 권한이 무엇을 의미하는지 전체 목록으로 다루지는 않겠지만이 질문그것들을 상당히 잘 요약합니다. 그런 다음 다음을 입력할 수 있습니다.
sudo ./script.sh
./ 부분을 잊지 말고 ., / 및 s 사이에 공백을 두지 마십시오. 명령 은 루트 권한으로 sudo
실행되므로 ./script.sh
비밀번호가 필요합니다(물론 시스템 관리자여야 합니다).
답변2
Windows 세계에서는 "배치" 파일이라고 부르는 것이 *NIX 세계에서는 "스크립트"라고 불립니다. 대부분의 경우 스크립트는 여러 명령 또는 특정 방식으로 배열된 명령이 포함된 파일입니다. 알아야 할 몇 가지 사항은 다음과 같습니다.
기본 구조
일반적으로 다음과 같은 내용이 표시됩니다.
#!/bin/sh
# Comments
printf "Hello world"
첫 번째 줄은 인터프리터(일반적으로 shebang
line 이라고 함)를 지정하고, 두 번째 줄은 주석(이후의 모든 내용 #
은 해석되지 않고 일반 텍스트임), 세 번째 줄은 실제 명령입니다.
터미널에서는 shebang 줄 없이 파일을 호출할 수 있습니다. 그러면 현재 쉘(명령 인터프리터라고도 함)에서 스크립트를 읽고 해석하게 됩니다. 예를 들어, 저는 mksh
쉘을 실행하고 있습니다. #!/bin/sh
Ubuntu의 기본 쉘인 에 의해 실행되도록 지정합니다 dash
. 모든 쉘에는 명령 구문에 대한 몇 가지 세부 사항이 있으므로 그에 따라 스크립트를 조정해야 합니다.
스크립트 작성
이 작업은 텍스트 편집기에서 수행해야 하지만 LibreOffice Writer에서 작성한 다음 일반 텍스트로 저장할 수도 있습니다. 개인적으로 저는 명령줄 텍스트 편집기( nano
대부분 또는 vim
)를 사용합니다. 여기서의 비유는 edit
Windows 7 이전 버전의 Windows에 해당됩니다 .
*NIX 시스템에서는 파일 이름과 확장자가 중요하지 않습니다. 시스템이 파일 유형을 결정하기 위해 파일의 처음 몇 바이트를 읽기 때문입니다. 확장 기능을 추가하는 습관을 들였지만 .sh
실제로는 불필요합니다.
스크립트를 실행 가능하게 만들기
이는 chmod 755 scriptName.sh
명령을 사용하여 수행됩니다. 이는 소유자 그룹(예: 파일 소유자가 될 수 있으므로 그룹 에 속하면 파일을 읽고 실행할 수 있음)에 있는 사용자와 다른 모든 사용자에 read-write-execute
대한 소유자(귀하)의 권한을 의미합니다 . 절대로 다른 사람에게 쓰기 권한을 주지 마십시오! 나쁜 결과를 초래할 수 있는 슈퍼 사용자 권한이 있는 경우(일명 해킹당할 수 있으며 악의적인 사용자는 개인 정보를 유지하도록 스크립트를 변경합니다).read-execute
admin
admin
read-execute
스크립트 실행
터미널에서 스크립트 위치로 이동하고 를 입력하여 언제든지 스크립트를 실행할 수 있습니다 ./scriptName
.
스크립트를 포함하여 명령을 어디에서나 실행하려면 변수에 포함된 시스템 어딘가에 해당 명령을 저장해야 합니다 $PATH
. 내가 의미하는 바는 다음과 같습니다.
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
/usr/local/sbin
변수는 스크립트나 실행 가능한 바이너리 파일이 해당 디렉터리 또는 /usr/local/bin
기타 디렉터리에 있는 경우 터미널에 입력하기만 하면 해당 명령을 실행할 수 있음을 알려줍니다 .
이제 자신만의 스크립트를 위해 bin
폴더를 만들고 거기에 스크립트를 저장해야 합니다. bash
구성 파일을 사용하는 경우 .profile
다음 줄이 포함됩니다.
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
마지막 3줄( ~ ) #
앞의 주석을 해제(제거)하면 개인 폴더도 변수에 포함됩니다 .if
fi
bin
$PATH