<jupyter_start><jupyter_text>Practice Followings실습 예  Opening a `bash` window on Linux GUI 1. Start a linux machine리눅스 시작1. Log in using your id필요시 id로 log in1. Press Ctrl+Alt+t key to open a `bash` terminalCtrl+Alt+t 키를 눌러 `bash` 창을 엶  Opening a `git-bash` window on Windows 1. Open a window of the folder of interest작업 대상 폴더 창을 엶1. Open right mouse click menu on a space instead of selecting a file파일을 선택하지 말고 여백 위에 오른쪽 마우스 메뉴를 엶1. Select **Git Bash Here** command**Git Bash Here** 명령 선택  Opening a `bash` pane in a `repl` 1. Click on the edit pane편집 칸 선택1. Press F1F1 키를 누름1. Select `Open Shell``Open Shell` 선택  After opening a `bash` window`bash` 창을 연 후 1. Enter `pwd` to check the current working directory`pwd`로 현재 작업 폴더 확인<jupyter_code># To test pwd command, select this cell and press Shift + Enter
# pwd 명령을 시험하려면 이 셀을 선택하고 Shift + Enter 키 입력
!pwd<jupyter_output><empty_output><jupyter_text>2. Try `ls` to check the content of the current folder`ls`로 현재 폴더 내용 확인<jupyter_code>!ls<jupyter_output><empty_output><jupyter_text>3. `mkdir temp` would create a folder whose name is `temp``mkdir temp`로 하위 폴더 생성 (이름은 `temp`)1. To move into the new folder, enter `cd temp``cd temp`로 하위 폴더 `temp`로 이동1. Now let's try `which python` to see the location of the `python` command`which python`으로 `python` 명령의 전체 경로 확인<jupyter_code>!which python<jupyter_output><empty_output><jupyter_text>Shell scripts셸 스크립트 * If you create a text file containing shell commands, we can call it a shell script file and run on a shell such as bash.셸 명령을 모은 파일을 셸 스크립트라고 부르고 실행시켜볼 수 있다.  `vi` editor * About `vi` editor commants, see below`vi` 편집기 명령에 대해서는 아래 참조* `cd ``cd `* `vi name.sh`* i* Enter following code [[ref](https://www.macs.hw.ac.uk/~hwloidl/Courses/LinuxIntro/x984.html)]아래 코드를 입력 [[ref](https://www.macs.hw.ac.uk/~hwloidl/Courses/LinuxIntro/x984.html)] ``` bash!/bin/bash example of using arguments to a script 스크립트에 명령행 매개변수를 사용하는 예echo "My first name is $1"echo "My surname is $2"echo "Total number of arguments is $" ``` * Esc`:wq`Enter * The cell below can write the file instead of an editor.아래 cell은 편집기 대신 파일을 작성할 수 있음.<jupyter_code>%%writefile name.sh
#!/bin/bash

# example of using arguments to a script
# 스크립트에 명령행 매개변수를 사용하는 예
echo "My first name is $1"
echo "My surname is $2"
echo "Total number of arguments is $#"<jupyter_output><empty_output><jupyter_text>* `source name.sh firstname surname`Or / 또는`. name.sh firstname surname`<jupyter_code># source name.sh abc xyz
# The following code would give the same result as the command above in bash shell
# 다음 코드의 결과는 bash 셸 안에서 위 명령을 실행한 경우와 같음

# Import a module to expand features of python
# python 기능 확장을 위해 모듈을 불러들임
import subprocess
import os

# see if the file exists
# 파일이 있는지 확인
assert os.path.exists('name.sh')

# run the command
# 명령 실행
print(subprocess.check_output(['sh', 'name.sh', 'abc', 'xyz'], encoding='utf-8'))<jupyter_output><empty_output><jupyter_text>Permission권한 * Unix or Linux files have **permission** attributes about who can do what about them.유닉스 또는 리눅스 파일에는 **권한**에 따라 누가 어떤 조치를 취할 수 있는지 결정됨. * Each file's permission status we can check using `ls -l`.각 파일의 권한 상태는 `ls -l`로 확인할 수 있음<jupyter_code>!ls -l<jupyter_output><empty_output><jupyter_text>* For now, let's take a look at the following example output from `ls -l`.이하는 아래의 `ls -l` 출력 예를 참고. ```-rw-r--r-- 1 author beachgoer 10815 Oct 31 06:17 00.ipynb-rw-r--r-- 1 author beachgoer  7137 Sep 30 06:27 01.ipynb-rw-r--r-- 1 author beachgoer 15170 Sep 30 06:27 02.ipynb-rw-r--r-- 1 author beachgoer  1511 Oct  9 16:10 LICENSEdrwxr-xr-x 3 author beachgoer  4096 Oct 29 10:09 tests``` * Here, `beachegoer` and `author` are the owner and the owner's user group.여기서 `beachegoer` 와 `author`는 소유자와 소유자의 소속 그룹임. * Let's look at the left 10 characters.왼쪽 첫 10글자를 살펴보기 바람. * First character is `d` if it is a director. `-` means it is a file.첫 글자가 `d` 이면 폴더이고 `-`이면 파일임. * Follorwing three characters are file owner's permissions.그 다음 세 자는 파일 소유자의 권한임.* `r` for read, `w` for write, and `x` for execution.`r`은 읽기, `w`는 쓰기, `x`는 실행을 뜻함.* If these characters are `rw-`, the owner can read or modify but cannot execute the file.`rw-` 라면, 소유자는 읽고 고칠 수 있으나 실행할 수는 없음. * The next three characters are permissions for the members of file owner's group.그 다음 세 자는 소유자의 그룹의 일원의 권한임.* `r`, `w`, and `x` mean the same as before.`r`, `w`, `x`의 의미는 위와 같음.* If these characters are `r--`, the group members can read but cannot modify or execute the file.`r--`라면 읽기만 가능함. * The last three characters are for others.다음 세 자는 다른 사용자들의 권한임. * For directories, permissions mean what users can do with the files in the folder.폴더의 권한은, 어떤 사용자가 폴더 안 파일에 무엇을 할 수 있는가에 관한 것임.  How to change permissions권한을 변경하는 방법 * Following exercises may not run as expected in Windows.다음 예제는 Windows 에서는 다소 예상과 다르게 작동할 수 있음. * We can use `chmod` to change permissions.`chmod`로 권한을 변경할 수 있음. * The following command would allow the owner to execute the `name.sh` file.아래 명령으로 소유자가 `name.sh` 파일을 실행시킬 수 있게 됨.```shchmod u+x name.sh```<jupyter_code>!ls -l name.sh


!chmod u+x name.sh


!ls -l name.sh<jupyter_output><empty_output><jupyter_text>* The following line would allow the group members to modify the `name.sh` file.아래 명령으로 그룹 멤버가 파일을 수정할 수 있게 됨.```shchmod g+w name.sh```<jupyter_code>!chmod g+w name.sh


!ls -l name.sh<jupyter_output><empty_output><jupyter_text>* The following command would others unable to read the `name.sh` file.다른 사용자들은 파일을 읽을 수 없게 됨.```shchmod o-r name.sh```<jupyter_code>!chmod o-r name.sh


!ls -l name.sh<jupyter_output><empty_output><jupyter_text>Clean up정리<jupyter_code># Remove practice files
# 실습 파일 제거
os.remove('name.sh')

# see if the file does not exist
# 파일이 없는지 확인
assert not os.path.exists('name.sh')<jupyter_output><empty_output><jupyter_text>Final Bell<jupyter_code>import os
os.system('printf \a');<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1049308991639652, 'fraction_numerical': 0.015867599385770346, 'mean_word_length': 4.32425068119891, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 45, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '63033', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 2727, 'n_tokens_neox': 3026, 'n_words': 877, 'path': '01.bash-practice.ipynb', 'repo_name': 'kangwonlee/18pycpp-00', 'size': '5861'}