第一节 Linux系统
1:Linux系统
登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选
项
(options)或参数
(arguments)。
即Linux中命令格式为:command[options][arguments]。但有些命令也不需要跟着选项或参数。
选项
是调整命令执行行为的开关,选项
不同决定了命令的显示结果不同。
参数
是指命令的作用对象。
2 :man命令
1是普通的Linux命令(用户命令帮助)
2是系统调用,操作系统的提供的服务接口(系统调用帮助)
3是库函数, C语言中的函数(库函数调用帮助)
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义(配置文件帮助)
6是给游戏留的,由各个游戏自己定义(Games)
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明(Miscellaneous)
8是系统管理用的命令,这些命令只能由root使用,如ifconfig。(usually only for root)
3:cheat 命令
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。
4:其他核心命令
和查找相关的核心命令还有find
,locate
,grep
,whereis
,which。
5:课程其他命令
二:实验
本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识。
(1):Linux 为何物
Linux 就是一个操作系统.
我们的 Linux 也就是系统调用和内核那两层,当然直观的来看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器,浏览器,电子邮件。
(2):Linux 历史简介
操作系统始于二十世纪 50 年代,当时的操作系统能运行批处理程序。批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个文件 或者打印机。
(3):Linux 与 Windows 到底有哪些不同
a:免费与收费: Linux 免费或少许费用。
b:软件与支持
Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务;
Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和
自由软件社区提供支持。
c.安全性
d.使用习惯
e.可定制性
(4).应用范畴
世界上大部分软件和服务都是运行在 Linux 之上的。
(5).Windows 没有的
(6).Linux 没有的
(7):如何学习 Linux
明确目的:你是要用 Linux 来干什么,搭建服务器,做程序开发,还是日常办公,还是娱乐游戏;
面对现实:Linux 大都在命令行下操作,能否接受不用或少用图形界面;
大致的学习路径如下:
1、初级:Linux系统安装、图形界面使用、常用命令。
2、中级:Linux用户和文件系统管理、软件安装配置、网络管理、系统维护、Shell编程初步。
3、高级:(1)Linux服务器领域:数据库、防火墙、DNS服务器、VPN服务器、Web服务器、MALL服务器、FTP服务器、Samba服务器、
NFS服务器、集群服务器......
(2)Linux程序开发:Shell高级编程、Linux C/C++程序开发、Linux内核基础、嵌入式开发、Linux驱动开发.....
4、Linux内核研究和操作系统开发......、
文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看、修改文件。
1.查看用户
请打开终端,输入命令 $ who am i 或者
$ who mom likes。
输入的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami
即可)。
第二列的 pts/0
中 pts
表示伪终端,所谓伪是相对于 /dev/tty
设备而言的,还记得上一节讲终端时的那七个使用 [Ctrl]
+[Alt]
+[F1]~[F7]
进行切换的 /dev/tty
设备么,这是“真终端”,伪终端就是当你在图形用户界面使用 /dev/tty7
时每打开一个终端就会产生一个伪终端, pts/0
后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i
,看第二列是不是就变成 pts/1
了,第三列则表示当前伪终端的启动时间。
2.创建用户
root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,用 Windows 的方法理解也就是将自己的非法帐户添加到 Administrators 用户组。更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。
退出当前用户跟退出终端一样可以使用exit
命令或者使用快捷键Ctrl+d
。
在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。当然一个用户是可以属于多个用户组的,正如你既属于家庭,又属于学校或公司。
方法一:使用groups命令
$ groups shiyanlou
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户同时属于 shiyanlou 和 sudo 用户组,每次新建用户如果不指定用户组的话, 默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思,或者说是老总)。默认情况下在sudo用户组里的可以使用sudo命令获得root权限。
方法二:查看/etc/group
文件
$ cat /etc/group | sort
这里 cat
命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort
表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信
没找到,没关系,你可以使用命令过滤掉一些你不想看到的结果:
$ cat /etc/group | grep -E "shiyanlou|sudo"
4.删除用户
删除用户是很简单的事:
$ sudo deluser lilei --remove-home
二、Linux 文件权限
1.查看文件权限 $ls -l
文件类型
软链接文件,链接文件是分为两种的,另一种当然是“硬链接”(软链接等同于 Windows 上的快捷方式)
文件权限
读权限,表示你可以使用 cat <file name>
之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件;
执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 ‘exe‘ 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表
等信息所有者权限。至于所属用户组权限,是指你所在的用户组中的所有其它用户对于该文件的权限。
链接数
文件大小
以 inode 结点大小为单位来表示的文件大小,你可以给 ls 加上 -lh
参数来更直观的查看文件的大小。
可以同时使用 ‘-A‘ 和 ‘-l‘ 参数:$ ls -Al
查看某一个目录的完整属性,而不是显示目录里面的文件属性:
$ ls -dl <目录名>
显示所有文件大小,并以普通人类能看懂的方式呈现:
$ ls -AsSh
其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,请使用“man”命令查询。
2.变更文件所有者
假设目前是 lilei 用户登录,新建一个文件,命名为 “iphone6”:
$ touch iphone6
可见文件所有者是 lilei :
现在,使用以下命令变更文件所有者为 shiyanlou :
$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6
$ cp iphone6 /home/shiyanlou
3.修改文件权限
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,这里有两种方式:
$ echo "echo \"hello shiyanlou\"" > iphone6
然后修改权限: $ chmod 700 iphone6
方式二:加减赋值操作
$ chmod go-rw iphone
‘g‘‘o‘还有‘u‘,分别表示group,others,user,‘+‘,‘-‘ 就分别表示增加和去掉相应的权限。
1、Linux 的文件组织目录结构。 2、相对路径和绝对路径。 3、对文件的移动、复制、重命名、编辑等操作。
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域
的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
2.目录路径
使用 cd
命令可以切换目录,在 Linux 里面使用 .
表示当前目录,..
表示上一级目录,-
表示上一次所在目录,~
通常表示当前用户的"home"目录。使用 pwd
命 令可以获取当前所在路径(绝对路径)。
进入上一级目录: $ cd ..
进入你的“home”目录: $ cd ~
# 或者 cd /home/<你的用户名>
使用 pwd
获取当前路径: $ pwd
绝对路径
表现形式如: /usr/local/bin
,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 .
为起点,以你所要到的目录为终点,表现形式如: usr/local/bin
)。
下面我们以你的"home"目录为起点,分别以绝对路径和相对路径的方式进入/usr/local/bin
目录:
# 绝对路径
$ cd /usr/local/bin
# 相对路径
$ cd ../../usr/local/bin
二、Linux 文件的基本操作
使用 touch
命令创建空白文件,关于 touch
命令,其主要是来更改已有文件的时间戳的(比如,最近访问时间,最近修改时间),但其在不加任何参数的情况 下,只指定一个文件名,则可以创建一个为指定文件名的空白文件(不会覆盖已有同名文件),当然你也可以同时指定该文件的时间戳,更多关于 touch
命令的
用法,会在下一讲文件搜索中涉及。
创建名为 test 的空白文件,因为在其他目录没有权限,所以需要先 cd ~
切换回用户的 /home/shiyanlou
目录: $ cd ~ $ touch test。
使用 mkdir
(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性
创建名为"mydir"的空目录: $ mkdir mydir 。
使用 -p
参数,同时创建父目录(如果不存在该父目录)。 $ mkdir -p father/son/grandson
后面的目录路径,以绝对路径的方式表示也是可以的
使用cp
(copy)命令复制一个文件或目录到指定目录。将之前创建的"test"文件复制到"/home/shiyanlou/father/son/grandson"目录中:
$ cp test father/son/grandson
如果直接使用cp
命令,复制一个目录的话,会出现如下错误:要成功复制目录需要加上-r
或者-R
参数,表示递归复制。$ cp -r father family
使用rm
(remove files or directories)命令,删除一个文件或目录: $ rm test
跟复制目录一样,要删除一个目录,也需要加上-r
或-R
参数:$ rm -r family
使用mv
(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录mv 源目录文件 目的目录
:$ mv file1 Documents
将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名
:
$ mv file1 myfile
# 使用通配符批量创建 5 个文件
$ touch file{1..5}.txt
# 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件
$ rename ‘s/\.txt/\.c/‘ *.txt
# 批量将这 5 个文件,文件名改为大写
$ rename ‘y/a-z/A-Z/‘ *.c
5.查看文件
cat
,tac
和nl
命令查看文件我们要查看之前从"/etc"目录下拷贝来的passwd
文件:
$ cat passwd
可以加上-n
参数显示行号:
$ cat -n passwd
nl
命令,添加行号并打印,这是个比cat -n
更专业的行号打印命令。
这里简单列举它的常用的几个参数:
-b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)
more
和less
命令分页查看文件如果说上面的 cat 是用来快速查看一个文件内容的,那么这个more
和less
就是天生用来"阅读"一个文件的内容的,比如说"man"手册内部就是使用的 less 来显示内容。其中more
命令比较简单,只能向一个方向滚动,而"less"为基于"more"和"vi"(一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less 的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。
使用more
工具打开passwd
文件:
$ more passwd
使用head
和tail
命令查看文件
这里想到系统新增加一个用户,应该会将用户的信息添加到passwd文件的最后,那么这时候我们就可以使用tail
命令了:$ tail /etc/passwd
甚至更直接的只看一行, 加上-n
参数,后面紧跟行数:$ tail -n 1 /etc/passwd
关于tail
命令,不得不提的还有它一个很牛的参数-f
,这个参数可以实现不停地读取某个文件的内容并显示。
我们通常使用file
命令可以查看文件的类型: $ file /bin/ls。
7.编辑文件
在 Linux 下面编辑文件通常我们会直接使用专门的命令行编辑器比如(emacs,vim,nano),由于涉及 Linux 上的编辑器的内容比较多,且非常重要,故我们有一门单独的基础课专门介绍这其中一个编辑器(vim)。如果你想更加快速的入门,你可以直接使用 Linux 内部的 vim 学习教程,输入如下命令即可开始:$ vimtutor
实验介绍:本节实验介绍环境变量的作用与用法,及几种搜索文件的方法。学会这些技巧高效地使用 Linux。
要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。
变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。
在 Shell 中如何创建一个变量,如何给变量赋值和如何读取变量的值呢?这部分内容会在bash 脚本编程这门课中详细介绍,这里我简单举例说明一下:
使用declare
命令创建一个变量名为 tmp 的变量: $ declare tmp
其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。
使用=
号赋值运算符为变量 tmp 赋值为 shiyanlou: $ tmp=shiyanlou
读取变量的值,使用echo
命令和$
符号:$ echo $tm
2.环境变量
在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。
通常我们会涉及到的环境变量有三种:
你可以更直观的使用vimdiff
工具比较一下它们之间的差别:
$ temp=shiyanlou
$ export temp_env=shiyanlou
$ env|sort>env.txt
$ export|sort>export.txt
$ set|sort>set.txt
上述操作将命令输出通过管道|
使用sort
命令排序,再重定向到对象文本文件中。
$ vimdiff env.txt export.txt set.txt
使用vimdiff
工具比较导出的几个文件的内容。
关于环境变量,可以简单的理解成在当前进程的子进程是否有效,有效则为环境变量,否则不是(有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分,我们只要理解它们的实质区别即可)。我们这里用export
命令来体会一下,先在 Shell 中设置一个变量temp=shiyanlou
,然后再新创建一个子 Shell 查看temp
变量的值:
3.命令的查找路径与顺序
你可能很早之前就有疑问,我们在 Shell 中输入一个命令,Shell 是怎么知道在哪去找到这个命令然后执行的呢?这是通过环境变量PATH
来进行搜索的,熟悉 Windows 的用户可能知道 Windows 中的也是有这么一个 PATH 环境变量。这个PATH
里面就保存了Shell中执行的命令的搜索路径。
查看PATH
环境变量的内容:
$ echo $PATH
默认情况下你会看到如下输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
为文件添加可执行权限:
$ chmod 755 hello_shell.sh
执行脚本
$ ./hello_shell.sh
创建一个 C 语言"hello world"程序:
$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
使用 gcc 生成可执行文件:
$ gcc -o hello_world hello_world.c
在 shiyanlou 家目录创建一个mybin
目录,并将上述 hello_shell.sh 和 hello_world 文件移动到其中:
$ mkdir mybin
$ mv hello_shell.sh hello_world mybin/
回到上一级目录,也就是shiyanlou
家目录,当再想运行那两个程序时,会发现提示命令找不到,除非加上命令的完整路径,但那样很不方便,如何做到想使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到PATH
环境变量了。
在前面我们应该注意到PATH
里面的路径是以:
作为分割符,所以我们可以这样添加自定义路径:
$ PATH=$PATH:/home/shiyanlou/mybin
变量的修改有以下几种方式:
$ path=$PATH比如要修改我们前面添加到 PATH 的环境变量。为了避免操作失误导致命令找不到,我们先将 PATH 赋值给一个新的自定义变量 path:
$ echo $path
$ path=${path%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
$ path=${path%*/mybin}
可以使用unset
命令删除一个环境变量:
$ unset temp
每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source
命令来让其立即生效,如:
$ source .zshrc
source
命令还有一个别名就是.
,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.
的方式就该是
$ . ./.zshrc
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
与搜索相关的命令常用的有如下几个whereis
,which
,find
,locate
。
whereis
简单快速 $whereis who
你会看到它找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate
命令。
locate
快而全通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb
命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次updatedb
命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件。、
第五节 环境变量与文件查找
一、环境变量
1.变量
declare命令:创建变量;$符号用于表示引用一个变量的值
2.环境变量
命令 |
说明 |
set |
显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 |
3.命令的查找路径与顺序
PATH里面就保存了Shell中执行的命令的搜索路径。
5.修改和删除已有变量
变量修改
变量的修改有以下几种方式:
变量设置方式 |
说明 |
${变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} |
将符合旧字串的全部字串替换为新的字串 |
6.如何让环境变量立即生效
source命令别名就是.,注意与表示当前路径的那个点区分开;
一、文件打包和解压缩
文件后缀名 |
说明 |
*.zip |
zip程序打包压缩的文件 |
*.rar |
rar程序压缩的文件 |
*.7z |
7zip程序压缩的文件 |
*.tar |
tar程序打包,未压缩的文件 |
*.gz |
gzip程序(GNU zip)压缩的文件 |
*.xz |
xz程序压缩的文件 |
*.bz2 |
bzip2程序压缩的文件 |
*.tar.gz |
tar打包,gzip程序压缩的文件 |
*.tar.xz |
tar打包,xz程序压缩的文件 |
*tar.bz2 |
tar打包,bzip2程序压缩的文件 |
*.tar.7z |
tar打包,7z程序压缩的文件 |
1.zip压缩打包程序
du命令查看打包后文件的大小
第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。
使用-e参数。
2.使用unzip命令解压缩zip文件
使用-O(英文字母,大写o)参数指定编码类型;
不想解压只想查看压缩包的内容你可以使用-l参数;
3.rar打包压缩命令
使用rar和unrar工具分别创建和解压 rar 压缩包。
使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。
全路径解压:
4.tar打包工具(tar命令一些基本的使用方式)
压缩文件格式 |
参数 |
*.tar.gz |
-z |
*.tar.xz |
-J |
*tar.bz2 |
-j |
-c表示创建一个tar 包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后。
二、作业
原文:http://www.cnblogs.com/ShadowStealer/p/4827626.html