Linux安装及学习
安装Ubuntu
1)安装版本
在安装VirtualBox时选择了VirtualBox 5.2.6 platform package
安装Ubuntu时选择了Ubuntu 16.04 LTS
安装结果及配置如图
- 遇到问题及解决方法
我在安装过程中比较顺利,但是我在安装VirtualBox虚拟机增强功能时,遇到了如下图的问题
当时是在安装增强功能之前,然后我重新安装了一次Ubuntu以后就可以正常安装增强功能了。
2)Linux基础入门
实验1 Linux简介
这一节首先就介绍了linux是一个操作系统(也就是说它包括系统调用和内核),首先直观看到的它与windows系统不同的一点是它图形界面的东西很少,这也是linux系统的特点之一,兼具图形界面操作和完全的命令行操作,这也就要求我们要接受不用或少用图形界面,改用命令行下操作。
除了这个直观上就能感受到的,这一节还讲述了在免费与收费,软件与支持,安全性等角度对比了Linux与Windows的不同,方便了我们的理解。
在学习中我也能感受到这种命令行操作的便利:
比如我想新建并打开一个文件:
$ gedit hello.sh
这就比Windows里更简便。
实验2 基本概念和操作
- 终端
终端(终端模拟器)是为了更好地完成用户输入和显示输出,也是服务于Shell的一个工具。
-
Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
快捷键
快捷键 | 功能 |
---|---|
Tab | 补全 |
Ctrl+c | 强行终止当前程序 |
Ctrl+d | 键盘输入结束或退出终端 |
Ctrl+s | 暂定当前程序,暂停后按任意键恢复运行 |
Ctrl+z | 将当前程序放在后台运行,恢复到前台为命令fg |
Ctrl+a | 将光标移至输入行头,相当与Home键 |
Ctrl+e | 将光标移至输入末行,相当于End键 |
Ctrl+k | 删除从光标所在位置到末行 |
Alt+Backspace | 向前删除一个单词 |
Shift+PgUp | 将终端显示向上滚动 |
Shift+PgDn | 将终端显示向下滚动 |
通配符 | 功能 |
---|---|
。 | 匹配0或多个字符 |
? | 匹配任意一个字符 |
[list] | 匹配list中的任意单一字符 |
[!list] | 匹配除list以外的字符 |
[c1-c2] | 匹配c1-c2中的任意单一字符 |
{string1,string2,...} | 匹配string1或string2(或更多)其一字符串 |
{c1..c2} | 匹配c1-c2中全部字符 |
-
常用命令
- man[数字]命令
- 命令-help
- ls
- find 关键词
实验3 用户及文件权限管理
一、Linux用户管理
1.查看用户
who[options][files]
示例:who am i
-a 打印能打印的全部
-d 打印死掉的进程
-m 同am i,mom like
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级
2.创建用户
sudo adduser [name]
示例:sudo adduser lilei
3.用户组
方法一:使用group命令
例子:group shiyanlou
方法二:查看/etc/group文件
例子:cat /etc/group|sort
4.把其他用户加入sudo用户组
例子:sudo usermod -G sudo lilei
5.删除用户
例子:sudo deluser lilei--remove-home
二、Linux文件权限
1.查看文件权限
图解1:
图解2:
注意:
1.文件类型:Linux里面一切皆文件;
2.文件权限:一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息;
2.变更文件所有者
若有一文件iphone6,文件所有者是lilei
现在以shiyanlou身份输入命令
$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6
可以将文件所有者修改。
3.修改文件权限
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx",也就是一个 '7';
例子:chmod 700 iphone6
例子:chmod go-rw iphone6
在做测试题时出现了0666,我当时不懂首位的0代表什么,之后去查了一下:
指定文件的默认权限掩码-----umask
权限掩码有4个八进制的数字组成,讲现有的权限减掉权限掩码后,即可产生此文件建立时的默认权限。
一般来说,新建文件的默认值是0666,新建目录的默认值是0777,如果将全线掩码设置为0002,则每个新建文件的默认权限为0666-0002=0664,而目录的默认权限则为775。可以直接输入umask命令来检查目前的默认权限掩码,或输入"umask 权限掩码"来指定默认权限掩码。
用umask的方式指定默认权限掩码,可以避免添加访问权限过大的文件或目录。
4.比较adduser和useradd的区别
- useradd,userdel这类操作更像是一种命令,执行完就返回
- adduser更像是一种程序,需要输入、确定等一系列操作
5.命令补充
ls [选项][目录名]|列出相关目录下所有目录和文件
-a 列出包括.a开头的隐藏文件的所有文件
-A 通-a,但不列出“.”和“..”
-l 列出文件的详细信息
-c 根据ctime排序显示
-t 根据文件修改时间排序
白色:表示普通文件
蓝色:表示目录
绿色:表示可执行文件
红色:表示压缩文件
浅蓝色:链接文件
红色闪烁:表示链接文件有问题
黄色:表示设备文件
灰色:表示其他文件
实验4 Linux目录结构及文件基本操作
一、LInux目录结构
Linux 是以树形目录结构的形式来构建整个系统的,可以理解为一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。
1.FHS标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)
FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
2.目录路径
cd可切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录, - 表示上一次所在目录,~ 通常表示当前用户的"home"目录。
使用 pwd 命令可以获取当前所在路径(绝对路径)。
二、Linux文件的基本操作
1.新建
1)新建文件
touch[选项]文件名|创建空文件或更新文件时间
-a 只修改存取时间
-m 只修改变动时间
-r eg:touch -r a b ,使b的时间和a相同
-t 指定特定时间 eg:touch -t 201802241019.20 -t time{YYYYMMDDhhmm.ss}
eg:touch text
2)新建目录
mkdir[选项]目录|创建新目录
-p 递归创建目录,若父目录不存在则依次创建
-m 自定义创建目录的权限
-v 显示创建目录的详细信息
eg: mkdir -p father/son/grandson
2.复制
cp[选项] 源文件或目录 目录或多个源文件
-r -R 递归复制该目录及其子目录内容
-p 连同档案属性一起复制过去
-f 不询问而强制复制
-s 生成快捷方式
-a 将档案的所有特性都一起复制
注:要成功复制目录需要加上-r或者-R参数
3.删除
rm [选项]文件|删除文件(夹)
-r 删除文件夹
-f 删除不提示
-i 删除提示
-v 详细显示进行步骤
4.移动文件或重命名
mv[选项]源文件或目录 目录或多个源文件|移动或重命名文件
-b 覆盖前做备份
-f 如存在不询问而直接覆盖
-i 如存在则询问是否覆盖
-u 较新才覆盖
-t 将多个源文件移动到统一目录下,目录参数在前,文件参数在后
rename |批量重命名
5.查看文件
cat[选项][文件]
-n 编号文件内容再输出
-E 在结束时提示$
tac|反向显示
nl [选项] 文件|将输出内容自动加上行号
-b:指定添加行号的方式
-b a:不论是否为空格,同样列出行号(类似cat-n)
-b t:只列出非空行的编号并列出
-n:设置行号的样式,主要有三种
-n ln:在行号字段最左端显示
-n rn:在行号字段最右端显示,且不加0
-n rz:在行号字段最右端显示,且加0
more|按页查看文件内容,从前向后读取文件,因此在启动时就加载整个文件
+n 从第n行开始显示
-n 每次查看n行数据
+/String 搜索String字符串位置,从其前两行开始查看
-c 清屏再显示
-p 换页再显示
less|可前后移动地逐屏查看文章内容,在查看前不会加载整个文件
-m 显示类似于more命令的百分百
-N 显示行号
/ 字符串:行下搜索字符串的功能
? 字符串:向上搜索字符串的功能
n 重复前一个搜索
N 反向重复前一个搜索
b 向后翻一页
d 向后翻半页
head [参数] 文件|显示文件开头,默认开头10行
-v 显示文件名
-c number 显示前number个字符,若number为负数,则显示除最后number个字符的所有内容
-number/n (+)number 显示前number行内容
-n number 若number为负数,则显示除最后number行数据所有内容
tail [必要参数][选择参数] 文件|显示文件结尾内容
-v 显示详细的处理信息
-q 不显示处理信息
-num/-n (-)num 显示最后num行内容
-n + num 从第num行开始显示后面的数据
-c 显示最后c个字符
-f 循环读取
6.查看文件类型
file|判断文件类型
实验5 环境变量与文件查找
一、变量
1.变量定义
#定义变量
declare $变量名
#或者直接赋值也自动定义变量,注意变量之前不带"$"
变量名=值
#打印变量的值,"$"代表引用变量的值
echo $变量名
通常我们会涉及到的环境变量有三种:
- 当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
2.相关命令
set|显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
env| 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
expor|显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
3.输出环境变量
#将普通变量输出为环境变量,能被子进程继承
export 变量名
#比较文件的命令
vimdiff 1.txt 2.txt 3.txt ....
4.变量修改
5.变量删除
unset 变量名
二、搜索文件
whereis [-bmsu][目录名 -f] 文件名|定位可执行文件、源代码文件、帮助文件在文件系统中的位置
-b 定位可执行文件
-m 定位帮助文件
-s 定位源文件代码
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其他文件
-B 指定搜索可执行文件的路径
-M 指定搜索帮助文件的路径
-S 指定搜索源代码文件的路径
locate
eg:$ locate /etc/sh
$ locate /home/shiyanlou/Code/\*.txt
经测试好像locate 后面要跟绝对路径,另外""必须用\来转义
-c 是仅统计数目 -i 是不区分大小写
which
它只从PATH环境变量指定的路径中去搜索命令
$ which man
find |功能最强大
http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html
链接已经贴出
实验6 文件打包与解压缩
1.zip压缩文件
zip [参数][文件]
-r 递归压缩, 用于压缩文件夹.
-o 指定产生的压缩文件名
-[0-9] 制定压缩级别
-q 静默模式,即不在终端输出提示
-e 加密压缩包
-l 将LF转换为CR+LF
我的例子:
$ touch text
$ echo '##this is a test!' > text.md
$ zip -o text.zip text.md
$ mkdir text
$ cp text.md text/
$ zip -r -o text1.zip text.md text/
$ zip -r -o -e text2.zip text.md text1.zip text/
$ Enter password:
$ Verify password:
$ ls
2.unzip解压文件
unzip [参数][文件]
-q 静默模式.没有屏幕提示
-l 只查看压缩包内容,不解压缩
-O 大写字母O, 指定编码类型
我的例子:
rm -r text/ text.md
unzip text1.zip
unzip -l text2.zip
rm -r text/ text.md text1.zip
unzip text2.zip
password:
3.rar打包压缩文件
rar命令的参数不用加短横线-
a 添加文件到一个rar文件中
l 只查看rar文件内容不解压文件
d 从rar文件中删除文件
我的例子:
# 添加一个目录的所有文件(不包括目录)
rar a text.rar .
# 往rar文件中添加另一个目录
rar a text.rar text
# 好奇怪..终端给出的提示竟然是先添加text文件夹下面的文件再添加的文件夹本身
# 查看rar文件内容
rar l text.rar
# 从rar文件中删除内容
rar d text.rar text.md
# 解压rar文件
mkdir text-rar
unrar x text.rar text-rar
# 查看解压后的目录结构
sudo apt-get install tree
tree text-rar
4.tar打包工具
tar是一个不压缩只打包的工具,但是打包是为了更好的压缩
-c 创建一个tar包文件
-f 指定创建的tar包文件的名字
-x 解包到指定路径的已存在目录
实验7 文件系统操作与磁盘管理
df |查看文件系统和磁盘容量
-a 显示全部文件系统
-h 文件大小友好显示
-l 只显示本地文件系统
-i 显示inode信息
-T 显示文件系统类型
du |显示每个文件和目录的磁盘使用空间
-h 方便阅读的方式
-s 只显示总和的大小
mount|挂载
-ro 采用只读方式挂接设备
-rw 采用读写方式挂接设备
umount 取消挂载
实验8 Linux 下的帮助命令
一、内建命令与外部命令
我的理解:
- 内建命令:
内建命令就是由Shell本身所执行的命令。
有些命令是由于其必要性才内建的,例如cd用来改变目录,read会将来自用户(和文件)的输入数据传给Shell外亮。
另一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常会用到它。另外还有I/O命令,例如echo于printf. -
外部命令:外部命令就是由Shell副本(新的进程)所执行的命令。外部命令这部分我没有理解,但是在别的博客看到了他的基本过程:
- a. 建立一个新的进程。此进程即为Shell的一个副本。
- b. 在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。
当命令名称包含有斜杠(/)符号时,将略过路径查找步骤。 - c. 在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
- d. 程序完成后,最初的Shell会接着从终端读取下一条命令,和执行脚本里的下一条命令。
使用type命令可以查看是否是内建命令
二、帮助命令的使用
- help
help 命令是用于显示 shell 内建命令的简要帮助信息。但是,使用ls --help
可以得到外部命令的帮助
- man命令
man 没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。
- info命令
info 来自*软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。得到的信息最多。
写在最后
以上八个实验基本我都是在实验楼的环境中去做的,第七个实验由于实验楼环境不够,学习中建议在自己的虚拟上做,但是我现在还没有完成,下周我会完成(备忘录以写好)。
所有命令的
参数都是结合了实验楼里的课程内容和在百度中查到的内容,我本来想把命令总结在最后,但是我觉得按照课程来思路比较清晰,这个总结可以放在另一篇随笔里,但是我在完善文中的命令时有看到别人总结的许多命令,我想可以参照他们写的,然后按照学习的顺序慢慢总结一下,边学边做,当成复习了。