Linux 系统简介(实验一)
Linux 本身只是操作系统的内核。内核是使其它程序能够运行的基础。它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本。
Linux 免费且开源,比 Windows 平台要更加安全,兼具图形界面操作和命令行操作。
UNIX 进化史
Linux学习路径
基本概念及操作(实验二)
终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登录就是通过不同的 /dev/tty 设备完成的。
Shell 是指“提供给使用者使用界面”的软件(命令解析器),普通意义上就是可以接受用户输入命令的程序,它隐藏了操作系统底层的细节。UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。
Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME)。
快捷键
- [Tab]:使用Tab键来进行命令补全
- [Ctrl+c]:强行终止当前程序
- [Ctrl+d]: 键盘输入结束或退出终端
- [Ctrl+s]: 暂停当前程序,暂停后按下任意键恢复运行
- [Ctrl+z]: 将当前程序放到后台运行,恢复到前台为命令fg
- [Ctrl+a]: 将光标移至输入行头,相当于Home键
- [Ctrl+e]: 将光标移至输入行末,相当于End键
- [Ctrl+k]: 删除从光标所在位置到行末
- [Alt+Backspace]: 向前删除一个单词
- [Shift+PgUp]: 将终端显示向上滚动
- [Shift+PgDn]: 将终端显示向下滚动
用户及文件权限管理(实验三)
Linux用户管理
查看用户
who命令其它常用参数
参数 | 说明 |
---|---|
-a | 打印能打印的全部 |
-d | 打印死掉的进程 |
-m | 同am i,mom likes |
-q | 打印当前登录用户数及用户名 |
-u | 打印当前登录用户登录信息 |
-r | 打印运行等级 |
创建用户
root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力。一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里要用到 sudo 命令。
不过使用sudo有两个前提,一是知道当前登录用户的密码,二是当前用户在 sudo 用户组。
用户组
- 使用 groups 命令
groups zhaoshu
- 查看 /etc/group 文件
cat /etc/group | sort
cat 命令用于读取指定文件的内容并打印到终端输出;
sort 表示将读取的文本进行一个字典排序再输出。
/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。
- 将其它用户加入 sudo 用户组
adduser 和 useradd 的区别是什么?
答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
- 删除用户和用户组
sudo deluser zs --remove-home
groupdel zs
Linux文件权限
在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
文件权限格式
修改文件权限
- 二进制数字表示
chmod 600 huawei
ls -alh huawei
- 加减赋值操作
chmod go-rw huawei //-代表去掉相应的权限
chmod go+rw huawei //+代表增加相应的权限
//g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户)
Linux 目录结构及文件基本操作(实验四)
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:
cd .. :进入上一级目录
cd ~ :进入home目录
pwd :获取当前路径
文件基本操作
新建
-
touch 命令创建空白文件
-
mkdir 命令创建空目录
复制
- cp 命令(copy)复制一个文件到指定目录
cp test father/son/grandson
- cp 命令复制目录需要加上 -r 或 -R 参数,表示递归复制
删除
- rm 命令删除文件,使用 -f 参数强制删除
- rm命令删除目录需要加上 -r 或 -R 参数
移动和重命名
- mv 命令移动文件:mv 源目录文件 目的目录
- mv 命令文件重命名:mv 旧的文件名 新的文件名
- rename命令批量重命名
查看
- cat,tac 和 nl 命令查看文件
- more 和 less 命令分页查看文件
- head 和 tail 命令查看文件:只查看文件的头几行和尾几行
- file 命令查看文件的类型
编辑
使用vim编辑器
i 进入插入模式
:wq 保存并退出
:q 退出
:q! 强制退出
作业
环境变量与文件查找(实验五)
环境变量
命令 | 说明 |
---|---|
set | 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 |
Linux 变量可分为两类: |
1.永久的:需要修改配置文件,变量永久生效;
2.临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。
/etc/bashrc和/etc/profile分别存放shell 变量和环境变量
练习创建一个最简单的可执行 Shell 脚本和一个使用 C 语言创建的“ hello world ”程序
unset 命令删除环境变量 unset mypath
source 命令来让环境变量立即生效
文件查找
cmatrix数字雨
作业
文件打包与解压缩(实验六)
zip
- 打包 :zip something.zip something (目录请加 -r 参数)
- 解包:unzip something.zip
- 指定路径:-d 参数
tar
- 打包:tar -cf something.tar something
- 解包:tar -xf something.tar
- 指定路径:-C 参数
作业
文件系统操作与磁盘管理(实验七)
- df 命令查看磁盘的容量:df -h
- du 命令查看目录的容量: du -h
- dd 命令转换和复制文件: dd if=/dev/stdin of=/dev/stdout bs=10 count=1
- dd 命令创建虚拟镜像文件: dd if=/dev/zero of=virtual.img bs=1M count=256
- mkfs 命令格式化磁盘: sudo mkfs.ext4 virtual.img
- mount 命令挂载磁盘到目录树: mount -o loop -t ext4 virtual.img /mnt
- umount 命令卸载已挂载磁盘: sudo umount /mnt
- fdisk 为磁盘分区: sudo fdisk virtual.img
- losetup 命令建立镜像与回环设备的关联: sudo losetup /dev/loop0 virtual.img
作业
Linux下的帮助命令(实验八)
- help:用于显示 shell 内建命令的简要帮助信息
- man:没有内建与外部命令的区分,显示系统手册页中的内容,这些内容大多数都是对命令的解释信息,还有一些相关的描述
- info:来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息
Linux任务计划crontab(实验九)
crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。
#添加计划任务
crontab -e
#查看已添加任务
crontab -l
#删除任务
crontab -r
#确定cron是否成功的在后台启动
ps aux | grep cron
或
pgrep cron
#查看执行任务命令后再日志中的信息反馈
sudo tail -f /var/log/syslog
命令执行顺序控制与管道(实验十)
顺序执行可以使用 ; 隔开多条命令
有选择的执行命令
-
&& 当上一条命令执行结果返回 0 则执行后面的,否则不执行
-
|| 当上一条命令执行结果为 ≠0时则执行它后面的命令
#结合 && 和 || 实现一些操作
which cowsay>/dev/null && echo "exist" || echo "not exist"
cut命令
打印字段
# 前五个(包含第五个)
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 [命令选项]... 用于匹配的表达式 [文件]...
-r 参数表示递归搜索子目录中的文件
-n 表示打印匹配项行号
-I 表示忽略二进制文件
wc计数命令
# 行数
wc -l /etc/passwd
# 单词数
wc -w /etc/passwd
# 字节数
wc -c /etc/passwd
# 字符数
wc -m /etc/passwd
# 最长行字节数
wc -L /etc/passwd
#统计 /etc 下面所有目录数
ls -dl /etc/*/ | wc -l
sort排序命令
#默认为字典排序
cat /etc/passwd | sort
#反转排序
cat /etc/passwd | sort -r
#特定字段排序,-t参数用于指定字段的分隔符;-k 字段号用于指定对哪一个字段进行排序
cat /etc/passwd | sort -t':' -k 3
简单的文本处理(实验十一)
- tr 命令可以用来删除一段文本信息中的某些文字。
- col 命令可以将Tab换成对等数量的空格键,或反转这个操作
- join 命令将两个文件中包含相同内容的那一行合并在一起
- paste命令在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开
数据流重定向(实验十二)
管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接
tee 命令可以同时重定向到多个文件,并将信息打印在终端
echo 'hello shiyanlou' | tee hello
exec 命令实现永久重定向
exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到退出当前子shell,或取消exec的重定向
ls
exit
cat somefile
正则表达式基础(实验十三)
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。
- + 表示前面的字符必须出现至少一次(1 次或多次),例如 goo+gle 可以匹配 gooogle,goooogle 等;
- ? 表示前面的字符最多出现一次(0 次或 1 次),例如,colou?r,可以匹配 color 或者 colour;
- * 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),例如,0*42 可以匹配 42、042、0042、00042 等。
Linux下软件安装(实验十四)
# 更新软件源
sudo apt-get update
# 升级没有依赖问题的软件包
sudo apt-get upgrade
# 升级并解决依赖关系
sudo apt-get dist-upgrade
# 不保留配置文件的移除
sudo apt-get purge w3m
# 或者
sudo apt-get --purge remove w3m
# 移除不再需要的被依赖的软件包
sudo apt-get autoremove
#搜索仓库中的软件
sudo apt-cache search softname1 softname2 softname3……
作业
Linux日志系统(实验十七)
常见的日志
- 系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等
- 应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等
遇到的问题和解决方案
1、vim如何同时编辑多个文件?
在底行模式下输入
:ls查看文件列表
:bp切换上一个文件
:bn切换下一个文件
2、学习数据流重定向部分时发现样例代码有些使用">"有些使用">>",但并未说明之间的区别
浏览其它博客,查看重定向符号说明
- >或1> 左边的数据覆盖到右边的文件。
- >>或1>> 左边的数据追加到右边的文件。
- <或0< 右边的数据覆盖到左边的文件。
- <<或0<< 右边的数据追加到左边的文件。
- 2> 将错误信息覆盖到右边的文件。
- 2>> 将错误信息追加到右边的文件。
- << EOF是在文件中追加信息
学习参考: