日期: 2015年9月15日javascript
1、实验的目的与要求css
熟练地使用 Linux,本实验介绍 Linux 基本操做,shell 环境下的经常使用命令。java
2、主要内容linux
认真看过这篇linux系统简介文章,对于这样一个免费、高效的操做系统有了一个初步的认识。但愿能在本学期对于linux操做系统有很好的认识和操做,使用。 同时,对于新认识的一些历史中开发和修复各个操做系统的前辈表示深深地敬佩。nginx
2.sql
基本概念及操做主要过程:shell
按键 | 做用 |
---|---|
Ctrl+d |
键盘输入结束或退出终端 |
Ctrl+s |
暂定当前程序,暂停后按下任意键恢复运行 |
Ctrl+z |
将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a |
将光标移至输入行头,至关于Home 键 |
Ctrl+e |
将光标移至输入行末,至关于End 键 |
Ctrl+k |
删除从光标所在位置到行末 |
Alt+Backspace |
向前删除一个单词 |
Shift+PgUp |
将终端显示向上滚动 |
Shift+PgDn |
将终端显示向下滚动 |
Shell 经常使用通配符:数据库
字符 | 含义 |
---|---|
* |
匹配 0 或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配 list 中的任意单一字符 |
[!list] |
匹配 除list 中的任意单一字符之外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c2..c2} |
匹配 c1-c2 中所有字符 如{1..10} |
man 手册区段 | 说明 |
---|---|
1 | 通常命令 |
2 | 系统调用 |
3 | 库函数,涵盖了C标准函数库 |
4 | 特殊文件(一般是/dev中的设备)和驱动程序 |
5 | 文件格式和约定 |
6 | 游戏和屏保 |
7 | 杂项 |
8 | 系统管理命令和守护进程 |
$ sudo apt-get update;sudo apt-get install sysvbanner toilet figlet
$ banner feels good
$ toilet feels good
$ figlet feels good



(1)查看用户apache
who [options] [files]vim
参数 | 说明 |
---|---|
-a |
打印能打印的所有 |
-d |
打印死掉的进程 |
-m |
同am i ,mom likes |
-q |
打印当前登陆用户数及用户名 |
-u |
打印当前登陆用户登陆信息 |
-r |
打印运行等级 |
(2)建立用户
sudo adduser 【name】
指令:adduser = add user
add :添加
user:用户
(3)用户组
方法一:使用groups命令
例子:groups shiyanlou
方法二:查看/etc/group文件
例子:cat /etc/group | sort
注:如须要命令过滤则 cat /etc/group | grep -E "shiyanlou|sudo"
etc/group 文件格式说明
(4)将其它用户加入 sudo 用户组
例子:sudo usermod -G sudo lilei
指令: usermod = user mod
user : 用户
mod : 模型
(5)删除用户
例子:sudo deluser lilei --remove-home
指令: deluser = del user、 remove
del user :删除用户
remove:删除
(6)查看文件权限
$ ls -AsSh
查看某一个目录的完整属性,而不是显示目录里面的文件属性:$ ls -dl <目录名>
(7)修改文件权限:
做业:
Linux 是以树形目录结构的形式来构建整个系统的,能够理解为一个用户可操做系统的骨架。虽然本质上不管是目录结构仍是操做系统内核都是存储在磁盘上的,但从逻辑上来讲 Linux 的磁盘是“挂在”(挂载在)目录上的,每个目录不只能使用本地磁盘分区的文件系统,也可使用网络上的文件系统。
1.FHS 标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)
FHS 定义了系统中每一个区域的用途、所须要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登陆文件、/usr/share 放置共享数据等等。


2.目录路径
路径
使用 cd 命令能够切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录, - 表示上一次所在目录,~ 一般表示当前用户的"home"目录。使用 pwd 命令能够获取当前所在路径(绝对路径)。
(注意,以 . 开头的文件都是隐藏文件,因此这两个目录必然也是隐藏的,你可使用 ls -a 命令查看隐藏文件)
绝对路径:以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin
相对路径:相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。
提示:在进行目录切换的过程当中请多使用 Tab 键自动补全,可避免输入错误,连续按两次Tab能够显示所有候选结果
1.新建空白文件
使用 touch 命令建立空白文件,关于 touch 命令,其主要是来更改已有文件的时间戳的,但其在不加任何参数的状况下,只指定一个文件名,则能够建立一个为指定文件名的空白文件。
例子:touch test
新建目录
使用 mkdir(make directories)命令能够建立一个空目录,也可同时指定建立目录的权限属性。
使用 -p 参数,同时建立父目录(若是不存在该父目录),以下咱们同时建立一个多级目录(这在有时候安装软件,配置安装路径时很是有用):mkdir -p father/son/grandson
2.复制文件
使用cp(copy)命令复制一个文件或目录到指定目录。
如:cp test father/son/grandson
复制目录
若是直接使用cp命令,复制一个目录的话,会出现以下错误:
要成功复制目录须要加上-r或者-R参数
如:cp -r father family
3.删除文件
使用rm(remove files or directories)命令,删除一个文件或目录;
如:rm test
有时候你会遇到想要删除一些为只读权限的文件,直接使用rm删除会显示一个提示,就须要用上参数 -f ;
如:rm -f test
删除目录
跟复制目录同样,要删除一个目录,也须要加上-r或-R参
如:rm -r family
4.移动文件与文件重命名
使用mv(move or rename files)命令,移动文件(剪切)。
格式:mv 源目录文件 目的目录
如:mv file1 Documents
重命名文件
格式:mv 旧的文件名 新的文件名
如:mv file1 myfile
5.查看文件
标准输入输出:当咱们执行一个 shell 命令行时一般会自动打开三个标准文件,即标准输入文件(stdin),默认对应终端的键盘; 标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应被重定向到终端的屏幕,以便咱们能直接看到输出内容。进程将从标准输入文件中获得输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
6.查看文件类型
如:file /bin/ls
7.编辑文件
Linux和Windows都用vim+gcc
#定义变量 declare $变量名 #或者直接赋值也自动定义变量,注意变量以前不带"$" 变量名=值 #打印变量的值,"$"表明引用变量的值 echo $变量名
在全部的 UNIX 和类 UNIX 系统中,每一个进程都有其各自的环境变量设置,且默认状况下,当一个进程被建立时,处理建立过程当中明确指定的话,它将继承其父进程的绝大部分环境设置。
一般咱们会涉及到的环境变量有三种:
输出环境变量set
| 显示当前 Shell 全部环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量env
| 显示与当前用户相关的环境变量,还可让命令在指定环境中运行export
| 显示从 Shell 中导出成环境变量的变量,也能经过它将自定义变量导出为环境变量#将普通变量输出为环境变量,能被子进程继承 export 变量名
#比较文件的命令 vimdiff 1.txt 2.txt 3.txt ....
PATH环境变量设置命令搜索路径
#输出当前命令搜索路径的设置 echo $PATH #./程序名 表示执行当前目录下的指定程序
PATH=$PATH:/home/shiyanlou/Code
若是永久添加须要修改配置文件 zsh是.zshrc bash是.bashrc 本次修改用户目录下的文件
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
变量的修改有如下几种方式:
变量设置方式 | 说明 |
---|---|
{变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
{变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
{变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
{变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
{变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
{变量名//旧的字串/新的字串} |
将符合旧字串的所有字串替换为新的字串 |
可使用unset
命令删除一个环境变量:
unset temp
source .zshrc
或者
. ./.zshrc
注意第二种方式必须指定完整的绝对或相对路径
与搜索相关的命令经常使用的有以下几个whereis
,which
,find
,locate
。
whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。locate,
经过"/var/lib/mlocate/mlocate.db"数据库查找,系统会使用定时任务天天自动执行updatedb
命令更新一次该数据库,有时须要手动执行一次updatedb
命令将新的文件数据添加进数据库,它能够用来查找指定目录下的不一样文件类型,能够递归子目录进行查找,如查找 /etc 下全部以 sh 开头的文件:$ locate /etc/sh $ locate /home/shiyanlou/Code/\*.txt
经测试好像locate 后面要跟绝对路径,另外""必须用\来转义
-c 是仅统计数目 -i 是不区分大小写
which
它只从PATH
环境变量指定的路径中去搜索命令
which man
#查找系统中全部文件名中含D且在第三位的.txt文件 find / -name \?\?D\*.txt #显示结果含有权限不够的信息,能够以下屏蔽 find / -name \?\?D\*.txt 2>/dev/null #还能够加sudo执行 #另外,文件名加引号,能够直接用?或*,不用转义
#查找大小在10k-20k之间的*.txt find / -name '*.txt' -size +10k -size -20k
#查找空目录和空文件
find . -empty #查找实验楼组的文件 find . -group shiyanlou #在/tmp目录中查找大于100000000字节而且在48小时内修改的某个文件 find /tmp -size +10000000c -and -mtime +2 #在/tmp目录中查找全部不属于panda的文件 find /tmp ! -user panda #查找属于shiyanlou用户的文件并显示文件信息 find . -user shiyanlou -ls #删除找到的*.txt find . -name '*.txt' -exec rm {} \; #以上 \; 是为了转义;字符
*.bz2 bzip2程序压缩的文件
-c:建立一个tar包文件
-f:指定建立的文件名
-v:非安静模式
tar -cf shiyanlou.tar ~
-x:解压一个tar
-C:解压到指定路径的已存在目录
tar -xf xx.tar -C 目录
-t:只查看不解包
tar -tf xx.rar
-p:保存文件属性
-h保存设备链接指向的源文件
tar -cphf xx.tar 要压缩目录
-z:.tar.gz
-J:tar.xz
-j:tar.bz2
install libaa-bin
install aafire
aafire
$ cd .. #进入上一级目录 $ cd ~ #进入home目录 $ pwd #查看当前目录 $ cd /usr/local/bin #绝对目录 $ cd ../../usr/local/bin #相对目录
$ touch test #新建一个test空白文件 $ mkdir mydir #新建一个mydir空目录 $ mkdir -p father/son/grandson #使用-p同时建立一个多级目录
$ cp test father/son/grandson #将test文件复制到/home/shiyanlou/father/son/grandson目录中 $ mkdir family $ cp -r father family #将father目录里的全部包含子目录,复制到family
$ rm test #删除test文件 $ rm -f test #强制删除test文件 $ rm -r family #删除family目录
mv 源目录文件 目的目录文件
$ mkdir Documents $ touch file1 $ mv file1 Documents #将file1移动到Documents目录
重命名 mv 旧的文件名 新文件名
$ mv file1 myfile #将file1重命名为myfile
$ touch file{1..5}.txt #使用通配符建立五个文件 $ rename 's/\.txt/\.c/' *.txt #将五个后缀 .txt 重命名 .c 为后缀 $ rename 'y/a-z/A-Z/' *.c #批量将五个文件的文件名大写
使用cat(正序) 、tac(倒序) 、nl命令查看文件,
$ cp /etc/passwd . #从etc目录下拷贝passwd文件 $ cat -n passwd #打印passwd内容,-n显示行号 $ head /etc/passwd #head显示头十行 $ tail /etc/passwd #tail 显示尾十行 $ head -n 1 /etc/passwd #只显示第一行 $ tail -n 1 etc/passwd #只显示最后一行
$ file /bin/ls

-例如$ touch test;echo "hehe" >> test;cat test
$ echo $?
$ [order1] && [oder2] #当[order1]的返回值==0,执行[order2]
$ [order1] || [orser2] #当[order1]的返回值!=0,执行[order2]
$ cut /etc/passwd -d ':' -f 1,6
# 前五个(包含第五个) $ cut /etc/passwd -c -5
# 前五个以后的(包含第五个) $ cut /etc/passwd -c 5-
# 第五个 $ cut /etc/passwd -c 5
# 2到5之间的(包含第五个) $ cut /etc/passwd -c 2-5
grep命令的通常形式为:
grep [命令选项]... 用于匹配的表达式 [文件]...
$ grep -rnI "shiyanlou" ~
-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。$ export | grep ".*yanlou$"
其中$就表示一行的末尾。wc 命令用于统计并输出一个文件中行、单词和字节的数目,好比输出/etc/passwd文件的统计信息:
$ wc /etc/passwd
# 行数 $ wc -l /etc/passwd
# 单词数 $ wc -w /etc/passwd
# 字节数 $ wc -c /etc/passwd
# 字符数 $ wc -m /etc/passwd
# 最长行字节数 $ wc -L /etc/passwd
$ cat /etc/passswd | sort
$ cat /etc/passwd | sort -r
$ cat /etc/passwd | sort -t':' -k 3
上面的-t参数用于指定字段的分隔符,这里是以":"做为分隔符;-k 字段号用于指定对哪个字段进行排序$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq #由于uniq命令只能去连续重复的行,不是全文去重因此加上sort效果更佳
$ tr [option]...SET1 [SET2]
$ echo 'hello shiyanlou' | tr -d 'olh'
$ echo 'hello' | tr -s 'l'
'[:lower:]' '[:upper:]'你也能够简单的写做'[a-z]' '[A-Z]',固然反过来将大写变小写也是能够的`
$ col [option]
$ cat -A /etc/protocols
$ cat /etc/protocols | col -x | cat -A
$ join [option]... file1 file2
paste这个命令与join 命令相似,它是在不对比数据的状况下,简单地将多个文件合并一块儿,以Tab隔开。
使用方式:
$ paste [option] file...
$ echo hello > file1
$ echo shiyanlou > file2
$ echo www.shiyanlou.com > file3
$ paste -d ':' file1 file2 file3
$ paste -s file1 file2 file3
一、#从dos 到unix文本格式转换
$ cat -A [dos] | tr -d '^M' | cat -A [dos]
-
二、sudo apt-get install ninvaders
Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为
stdin(标准输入,对应于你在终端的输入)
stdout(标准输出,对应于终端的输出)
stderr(标准错误输出,对应于终端的输出)
PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接
-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。
隐藏某些错误或者警告
# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面
$ cat Documents/test.c\~ hello.c >somefile 2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
$ cat Documents/test.c\~ hello.c &>somefilehell
-除了将须要将输出重定向到文件以外也须要将信息打印在终端$ echo 'hello shiyanlou' | tee hello
-使用exec命令实现“永久”重定向# 先开启一个子 Shell
$ zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$ exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)
$ ls
$ exit
$ cat somefile
-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符
使用exec命令能够建立新的文件描述符:
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,不然你可能不能获得正确的结果,而后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不该该有空格,若是有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit
-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:$ exec 3>&-
$ cd /dev/fd;ls -Al;cd -
-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。
咱们能够利用设个/dev/null屏蔽命令的输出:
$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1
-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo
$ sudo apt-get install caca-utils
$ cacaview <pic_file>
$ cacademo
$ cacafire
Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为
stdin(标准输入,对应于你在终端的输入)
stdout(标准输出,对应于终端的输出)
stderr(标准错误输出,对应于终端的输出)
PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接
-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。
# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面
$ cat Documents/test.c\~ hello.c >somefile 2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
$ cat Documents/test.c\~ hello.c &>somefilehell
-除了将须要将输出重定向到文件以外也须要将信息打印在终端$ echo 'hello shiyanlou' | tee hello
-使用exec命令实现“永久”重定向(效果见附图)# 先开启一个子 Shell
$ zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$ exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)
$ ls
$ exit
$ cat somefile
-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,不然你可能不能获得正确的结果,而后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不该该有空格,若是有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit
-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:$ exec 3>&-
$ cd /dev/fd;ls -Al;cd -
-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。
$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1
-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo
$ sudo apt-get install caca-utils
$ cacaview <pic_file>
$ cacademo
$ cacafire
stdin(标准输入,对应于你在终端的输入)
stdout(标准输出,对应于终端的输出)
stderr(标准错误输出,对应于终端的输出)
PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接
-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。
隐藏某些错误或者警告
# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面
$ cat Documents/test.c\~ hello.c >somefile 2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
$ cat Documents/test.c\~ hello.c &>somefilehell
-除了将须要将输出重定向到文件以外也须要将信息打印在终端$ echo 'hello shiyanlou' | tee hello
-使用exec命令实现“永久”重定向(效果见附图)# 先开启一个子 Shell
$ zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$ exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)
$ ls
$ exit
$ cat somefile
-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符
使用exec命令能够建立新的文件描述符:
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,不然你可能不能获得正确的结果,而后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不该该有空格,若是有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit
-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:$ exec 3>&-
$ cd /dev/fd;ls -Al;cd -
-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。
咱们能够利用设个/dev/null屏蔽命令的输出:
$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1
-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo
$ sudo apt-get install caca-utils
$ cacaview <pic_file>
$ cacademo
$ cacafire
3、调试
把Linux 下软件安装放在这一部分,做为操做实践的部分。
4、心得体会
虽然是最后时间作的很仓促的实验,但仍是感受收获了不少。学会了shell的一些操做指令,了解了linux系统的文件以及一些不一样于的windows的特性。更多的学习内容还要继续,加油努力吧!!!
5、附件