Learning Objectives
- How to grant or restrict access to files on a multi-user UNIX system
- What is an “Environment Variable” in a shell.
- What is $PATH, and why I should care.
更多permission 标志 https://en.wikipedia.org/wiki/File_system_permissions#Notation_of_traditional_Unix_permissions
#permission
首先Let’s see what groups we all belong to:
$ groups
The -l
flag tells ls
to give us a long-form listing. It’s a lot of information, so let’s go through the columns in turn.
$ ls -l /n/groups/group名字
看一个例子:
最右列是文件名,靠左一列是最近修改时间,然后是文件大小,文件所属的组名,
The first character tells us whether the listing is a regular file -
or a directory d
, or there may be some other character meaning more esoteric things. In this case, it is -
which means it is a regular file.
The next 9 characters are usually some combination of the following in the order listed below:
r= read permission
w= write/modify permission
x= execute permission (run a script/program or traverse a directory).
拥有者的权力The next three characters tell us what permissions the file’s owner has. Here, the owner can read and write the file: rw-
.
The middle triplet shows us the group’s permissions. If the permission is turned off, we see a dash, so rw-
means “read and write, but not execute”. (In this case the group and the owner are the same so it makes sense that this is the same for both.)
The final triplet shows us what everyone who isn’t the file’s owner, or in the file’s group, can do. In this case, it’s r--
again, so everyone else on the system can read the file’s contents.
第一个字符的意思是说明这是否是一个文件
接下来的三个是说拥有者的权力,
中间三个是说组里其他人的权力
最后三个是没在组里的外人的权利
#changing permission
To change permissions, we use the chmod
command (whose name stands for “change mode”).
来个例子: Let’s make our README.txt file inaccessible to all users other than you and the group the file belong to (you, in this case), currently they are able to read it:
The o
signals that we’re changing the privileges of “others”.
Let’s change it back to allow it to be readable by others:
If we wanted to make this an executable file for ourselves (the file’s owners) we would say chmod u+rwx
, where the u
signals that we are changing permission for the file’s owner. To change permissions for the “group”, you’d use the letter g
, e.g. chmod g-w
.
#Environment Variables
Environment variables are, in short, variables that describe the environment in which programs run, and they are predefined for a given computer or cluster that you are on. You can reset them to customize the environment. Two commonly encountered environment variables are $HOME
and $PATH
.
$HOME
defines the full path for the home directory of a given user.$PATH
defines a list of directories to search in when looking for a command/program to execute.
In the context of the shell the environment variables are usually all in upper case.
First, let’s see our list of environmental variables:
$ env
Let’s see what is stored in these variables:
$ echo $HOME
Variables, in most systems, are called or denoted with a “$” before the variable name, just like a regular variable.
$ echo $PATH
/opt/lsf/7.0/linux2.6-glibc2.3-x86_64/bin:/groups/bcbio/bcbio/anaconda/bin:/opt/bcbio/local/bin:/opt/lsf/7.0/linux2.6-glibc2.3 x86_64/etc:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
For any command you execute on the command prompt, you can find out where they are located using the which
command.
#Modifying Environment Variables
If you are interested in adding a new entry to the path variable, the command to use is export
. This command is usually executed as follows:
export PATH=$PATH:~/opt/bin
#Closer look at the inner workings of the shell, in the context of $PATH
Check what hidden files exist in our home directory using the -a
flag:
$ ls -al ~/
Suppose we want to add /n/app/bcbio/tools/bin
to the beginning of the list in $PATH
. This directory contains executables for many tools useful for NGS analysis. We can add this location by including an export
command to do this at the end of the .bashrc
file, this will make it so that when you start a new shell session the location will always be in your path.
Open the .bashrc
file using vim
and at the end of the file add the export command that adds a specific location to the list in $PATH
.
$ vim ~/.bashrc # at the end of the file type in the following - export PATH=/n/app/bcbio/tools/bin:$PATH # Don't forget the ":" between the full path and the "$PATH"!
In closing, permissions and environment variables, especially $PATH
, are very useful and important concepts to understand in the context of UNIX and HPC.