第一次实验内容: 初识Linux系统环境与命令
1
1.1 时间相关
#man date
#info date //请比较 man 和 info 两个命令的区别
# date //显示当前时间
# date 032210152013 //设置系统时间为 2013年03月22日10:15 格式如[MMDDhhmm[YYYY]] 即 月月日日时时分分年年年年
#man cal
#info cal
# cal //当月日历
# cal 09 2019 //指定月的日历
# cal 2013 //2013年的日历
1.2 bc 程序的三种退出方式 //通过该项掌握交互型命令的退出方式
# bc //计算器
1.2.1 退出
输入 quit 自然退出, 其他命令可能的自然退出 为 q (如top 命令) exit 等
1.2.2 # bc
在终端界面下,点击文件-》打开标签 新建一个标签, 在这个标签下输入
#ps aux | grep bc //查看第二列获得bc 的PID, 比如为 2608
#kill -9 2608
回到第一个标签下,可以看到 bc 这个进程已被杀死
1.2.3 # bc
输入 Ctrl+Z 或者 Ctrl+C 强制退出
1.2.4
分别采用 Ctrl+Z 与 Ctrl+C 终止 bc 进程, 然后 ps aux | grep bc 比较一下两者的区别
1.3 echo命令 类似 printf
#man echo //通过帮助文件确定 不换行的 参数
# echo $SHELL
# echo $LANG
# echo $PATH
#echo “2.0 * 4” | bc // 管道的再学习
1.4 帮助命令
# clear 清屏
# man wc
# wc -h
# wc --help
# man cat
# info cat
2 命令行方式获取系统相关的信息, 点击终端
2.1 cpu
# cat /proc/cpuinfo
2.2 mem
# free
# cat /proc/meminfo
2.3 disk #
fdisk -l
2.4 filesystem
# df -h
2.5 网络
# ifconfig
# ethtool eth0
#ping www.baidu.com
2.6 显卡
# lspci | grep VGA
2.7 Shell版本
# echo $SHELL
2.8 内核版本
# uname -a
# uname -r
2.9 进程
# ps -aux
2.10 负载
# top d 1
3 fc30 的关机
#poweroff 关机
#reboot 重启
或者通过 图形界面 选择相关的操作
Linux文件与目录的简单命令
1 进入系统,打开终端,
$useradd ludong
2 命令行修改目录与文件的权限 (chmod)
2 命令行修改目录与文件的属主 (chown *.* 文件)
3 查看系统的根目录的结构
$ su test //切换到 test用户
4 mkdir -p 参数的使用
$ cd
$ mkdir quhp // 创建已经存在目录 报错 -p, --parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
$ mkdir -p quhp // 无错返回, 且修改时间未变
$ mkdir -p quhp/quph2/quhp3 //三级子目录成功创建
5 ls查看隐藏文件
$ ls -a
$ ls -al // 注意这三个显示的区别
$ ls -l test // 显示修改时间
$ ls -lc test // 显示写入时间
我们注意到因为在test 创建后我们对其内容一直没有写入,所以 修改时间时间就是当初的创建时间,但是在此过程中修改了文件属主与权限,所以 写入时间会变化。
6 cp -a 加属性 -r 递归复制
$ cp -r quhp our //把整个quhp目录内容复制到our
$ ll quhp
$ cp -a quhp our2 //在递归复制的同时进行属性复制
7 mv 的文件改名+移动
$ touch 1.txt 2.txt 3.txt 4.txt //同时创建4个空文件
$ mv 1.txt 2.txt 4.txt quhp2 //三个文件移动到quhp2子目录
$ mv 3.txt quhp2/quhp3/5.txt //移动+改名
$ mv *.txt quhp3 //通配符移动
8 rm 的默认与递归删除
$ cd /root/quhp/quhp2/quhp3
$ rm 1.txt // 需要确认后删除
$ rm -f 2.txt // 直接删除
$ rm -rf quhp3 //直接删除目录+文件
9 文件查看
$ cd /root/quhp/
$ cat /proc/cpuinfo // 顺序一下显示
$ tac /proc/cpuinfo // 倒序一下显示
$ cat -b /proc/cpuinfo // 空格不显示行号
$ cat -n /proc/cpuinfo // 空格也显示行号
$ cat /proc/cpuinfo /proc/meminfo /proc/meminfo /proc/cpuinfo > test // 把两个文件内容拼接重定向到 test文件中
$ cat test // 查看test 内容
$ cat test test >> test // 报错 没法重定向到同名文件中
$ more test //一屏显示
Space: 向下翻一页
Enter: 向下滚动一行
/字符串: 向下查询关键字 如/Huge 可以看到有Huge 的那行显示在屏幕的第一行
q: 退出
$ less test // 在more 基础上可以向上
PageDown 向下翻一页
PageUp 向上翻一页
?字符串 向上查询关键字
10 文件头部跟尾部的获取
$ cd /root/quhp
$ wc -l test //获取文件行数 如 136
$ head -n 10 test
$ head -n -100 test //显示头 36 行
$ head -n -100 test | wc -l //确认就是36
$ tail -n 23 test
$ tail -n +100 test //显示 后37行,因为包含第100行
$ tail -n +100 test | wc -l
$ head -n 20 test | tail -n 10 //显示 10-20 行
Linux文件与目录的复杂命令
1 touch命令 :创建不存在文件 or 修改文件时间(文件已经存在)
#touch 1.txt
#ll // 查看文件的最近修改时间
#sleep 30 //休眠30秒
#touch 1.txt
#ll // 可以看到文件的修改时间变化了
2 创建or生成文件的N种方式
2.1 #touch 2.txt //创建空文件
2.2 #cp /proc/cpuinfo 3.txt //复制改名
2.3 #cat /proc/cpuinfo /proc/meminfo > 4.txt // 拼接
2.4 # echo "hello world in $SHELL" > 5.txt // echo重定向
# echo 'hello world in $SHELL' > 5.txt // echo重定向, 请注意“” ‘ ‘ 的区别
# echo “hello world 2” >> 5.txt // 请注意 > 与 >> 的区别
2.5 # vim hello.c // 写一个hello world的C程序 保存退出 可改为gedit or gvim
# gcc -g -o hello hello.c
#./hello //本地运行,确认运行结果
3 相对目录与绝对目录
# cd
# mkdir -p quhp
# cd /root/quhp
# cp /proc/cpuinfo .
# cp /proc/cpuinfo cpuinfo2
# cp /proc/cpuinfo /root/quhp/cpuinfo3
# cp /proc/cpuinfo ../quhp/cpuinfo4
# mkdir quhp2
# cp /proc/cpuinfo quhp2/
# cd quhp2
# pwd //确认你在哪个目录
# cd - //再次确认你在哪个目录
# cd /root/quhp/quhp2
# pwd
# cd ..
# pwd
# cd ..
# pwd
4 umask 003 进行权限的修改,003表示在当前基础上减去该值
默认 文件 -rw-rw-rw-
默认 目录 drwxrwxrwx
#mkdir -p /root/test
#cd /root/test
#umask –S //显示默认权限 u=rwx,g=rx, o=rx
#umask //数字显示 022
#touch 1.txt
#ll 1.txt //可以看到它的权限是 -rw-r--r--, 因为g与o的两个w已经被去掉了
#cd ..
#ll // 可以看到 test 的权限为 drwxr-xr-x
#umask 002
#mkdir -p test2
#ll //test2 的权限为 drwxrwxr-x 比test 多了个w
#cd test2
#touch 2.txt
#ll // 2.txt 的权限为 -rw-rw-r-- 也比 2.txt 多了个w
请再恢复成 022
5
#echo $PATH //注意有/root/bin ,实际上这个目录当前还不存在
#cd //回到/root目录
#mkdir bin
#whereis ls
#cp /bin/ls bin/lsquhp
#lsquhp // 效果同 ls
#mv bin/lsquhp /home/
#lsquhp //找不到命令
#rm -f /home/lsquhp
6 文件名查找
#locate top // 显示所有文件的绝对路径中有top 字符串的文件
#locate top | less
#touch soft34.txt
#locate soft34 // 应该找不到,因为数据库中没有更新
#updatedb //更新数据库
#locate soft34 // 确认可以找到
find
-mtime n :n天之前的一天之内被更改的文件
-mtime +n: n天之前(不含n天本身)被更改的文件
-mtime –n: n天之内(含n天本身)被更改的文件
-newer file: 列出比file 还要新的文件
#find /root -mtime 0 // root 目录下当天修改过的文件
#find /etc -newer /etc/passwd // etc 目录下比 passwd 还要新的文件
7 排序 #sort //排序 #uniq //去冗
一条语句实现以上的功能
#cat /proc/meminfo /proc/cpuinfo /proc/cpuinfo /proc/meminfo | sort | uniq > test2.txt
#less test2.txt
8 比较
#cd /root
#mkdir old
#mkdir new
#cp -a quhp/* old/
#cp -a quhp/* new/
#diff old new // 比较两目录
#gvim new/cpuinfo //分别删除某行、增加某新行、修改某行
#diff old/cpuinfo new/cpuinfo //分别确认 上述三个修改操作的 比较结果
#mv new/cpuinfo new/cpuinfo.bak
#diff old new
9 通过ps 与grep 查看现在的活跃进程
#ps aux
#ps aux | less
#ps aux | grep usr // 过滤并显示带有 usr 字符串的行
#ps aux | grep usr | grep 21 // 再次过滤
#cd
#grep include *
#grep -r include * // 在root目录下查找内容含有include 字符串的所有文件,注意 -r 的使用
linux磁盘与文件系统
1 通过vmware 对linux 增加一个SCSI磁盘 sdb 10G
2 启动linux, root用户 进入系统
查看系统支持的文件系统类型
# cd /lib/modules/***/kernel/fs (请使用 /lib/modules/ 目录下的当前系统版本 注意 ... 使用tab键补齐)
# ls
再查看proc 文件系统
# cd /proc
# ls 其中数字目录是进程号PID, 里面是每个进程的具体信息, 下面我们具体看一下
打开一个新标签, 输入命令 # top d 1
在另一个标签下
# ps aux | grep top 获得该进程的PID 如 2875
# cd /proc/2875 // 进入该PID目录
# ls
# cat cmdline // 可以看到该PID的命令是什么
同理可以看到该进程的其他的信息,比如 内存,cpu io 等,大家可以查看一下这些相关的文件
3 查看已经挂载起来的文件系统的使用情况 /dev/sda1 /dev/sda2 的详细情况
# df -hT
# mount 比较这两个命令的区别
4 显示 sda sdb 两块磁盘的详细信息
# fdisk -l
5 在sdb上创建一个3G的分区 sdb1
# fdisk /dev/sdb
m for help p for print n for add w for save
输入n 回车; 输入p 回车 选择primary ; 输入1 回车 确认 分区号 ; 输入 起始位置,直接回车; 输入分区大小 +3068M 回车;
输入p 回车确认创建成功; 输入w 回车 将磁盘信息写回
6 给sdb1 加上标签,并确认 (不用做)
#e2label /dev/sdb1 “ludong”
#dumpe2fs /dev/sdb1 | less
7 采用dd 命令测试并记录 sdb1 分区的读写性能 分别读写2G (为了节省时间,可以只读写 300M)
# time dd if=/dev/sdb1 of=/dev/null bs=1M count=2048
记录分区读测试所得时间为 time_read_dd = ?
if = input file
of = output file
bs = block size
count 数量
# time dd if=/dev/zero of=/dev/sdb1 bs=1M count=2048
记录分区写测试所得时间为 time_write_dd = ?
8 把分区sdb1 格式化成ext3 文件系统
# mkfs -t ext3 /dev/sdb1
9 把分区挂载到指定目录下
# mkdir –p /mnt/name
# mount /dev/sdb1 /mnt/name
10 查看新挂载的分区 ,注意其大小变化, 因为其格式化文件系统占用了一些磁盘空间
# df –h
# df -aT 比较这两个参数的区别
# mount
11 采用dd命令在指定目录下创建一个大小为2G的文件,并记录时间
# time dd if=/dev/zero of=/mnt/name/test.img bs=1M count=2048
记录文件写测试所得时间 time_write_file = ?
12 采用相关命令查看文件test.img 的大小
# cd /mnt/name
# ll –h
# du –h
13 采用cp命令测试对该文件的读性能,并记录时间
# time cp /mnt/name/test.img /home/
记录文件读测试所得时间 time_read_file = ?
14 测试环境清理
# rm -rf /home/test.img
# umount /mnt/name
# df -h 确认umount成功
# fdisk /dev/sdb
输入d回车, 删除sdb1 输入w回车,写入磁盘
# fdisk -l 确认分区删除成功
# poweroff 关机
实验结果:
记录并输入 dd + cp 的两个项目的读写数据, 共四个值
实验内容2 mount挂载点的内容变更
0. 虚拟机配置,添加两个SCSI磁盘 sdb sdc 大小分别为 10G 20G
开机进入系统
# fdisk -l 确认有三个磁盘的存在,其中 sdb sdc 上没有分区, 若有请删除
1. 在sdb上创建两个分区
#fdisk /dev/sdb
n p 1 +3096M
n p 2 +1024M
w
2. 在sdc上创建两个分区
#fdisk /dev/sdc
n p 1 +2048M
n p 2 +5G
w
3.
# fdisk -l 再次查看所有磁盘与所有分区,确认之前新建的4个分区是否都创建成功
4. 对其中两个分区格式化
#mkfs -t ext3 /dev/sdb2
#mkfs -t ext4 /dev/sdc1
5. 在 / 目录 也就是 sda 上进行 下面操作
# df -aTh 确认 / 目录在 挂载在 sda 磁盘上
# mkdir -p /mnt/name
# mkdir -p /mnt/name/test_sda
# cp /pro/cpuinfo /mnt/name/cpu_sda
# dd if=/dev/zero of=/mnt/name/test_sda/256M bs=1M count=256
# ll /mnt/name 查看这个目录的文件与子目录
# df -h /mnt/name 显示的是 sda磁盘的可用容量
# du -ah /mnt/name 显示的是 这个目录及子目录的大小 256M左右
6. 在 sdb2 分区 上进行 下面操作
# df -aTh 确认 / 目录在 挂载在 sda 磁盘上
# mount /dev/sdb2 /mnt/name
# df -aTh 挂载点跳转了
# ll /mnt/name 可以看到之前的子目录 与文件 都看不到了
# mkdir -p /mnt/name/test_sdb
# cp /pro/cpuinfo /mnt/name/cpu_sdb
# dd if=/dev/zero of=/mnt/name/test_sdb/512M bs=1M count=512
# ll /mnt/name 查看这个目录的文件与子目录
# df -h /mnt/name 显示的是 sdb 磁盘的可用容量
# du -ah /mnt/name 显示的是 这个目录及子目录的大小 512M 左右
7. 在 sdc1 分区 上进行 下面操作
# df -aTh 确认 /mnt/name 目录在 挂载在 sdb2 磁盘上
# mount /dev/sdc1 /mnt/name
# df -aTh 挂载点跳转了
# ll /mnt/name 可以看到之前的子目录 与文件 都看不到了
# mkdir -p /mnt/name/test_sdc
# cp /pro/cpuinfo /mnt/name/cpu_sdc
# dd if=/dev/zero of=/mnt/name/test_sdc/700M bs=1M count=700
# ll /mnt/name 查看这个目录的文件与子目录
# df -h /mnt/name 显示的是 sdc 磁盘的可用容量
# du -ah /mnt/name 显示的是 这个目录及子目录的大小 700M 左右
8. 依次卸载
#umount /mnt/name
# df -aTh 挂载点跳转到 sdb了
# ll /mnt/name 显示sdb 了
#umount /mnt/name
# ll /mnt/name 显示sda 了
# df -aTh /mnt/name 挂载点没有了,意味着回到 sda 上了
9. 在有挂载点的情况下重启,看看什么情况
# mount /dev/sdc1 /mnt/name
# df -h
# reboot
重启之后进入系统
# df -h 看看挂载点还在不在?????
实验内容3 特殊设备loop与swap
实验步骤:
0 虚拟机配置,添加一个SCSI磁盘 sdb 大小10G
1 创建大文件
#dd if=/dev/zero of=/home/loopdev bs=1M count=512
if = input file
of = output file
bs = block size
count 数量
#ll –h /home/loopdev
2 格式化
#mkfs –t ext4 /home/loopdev
挂载
# mount –o loop /home/loopdev /mnt
#df -h
3 在loop设备上再创建loop设备
#dd if=/dev/zero of=/mnt/loopdev2 bs=1M count=256
#mkfs –t ext4 /mnt/loopdev2
#mkdir -p /mnt2
# mount –o loop /mnt/loopdev2 /mnt2
#df -h
4 在mnt2 的目录下新建一个大文件,查看并确认两个loop设备的空间变化
#dd if=/dev/zero of=/mnt2/bigfile bs=1M count=100
#df -h
5 创建swap设备
#fdisk /dev/sdb
n p 1 +3068M //创建sdb1
t 修改系统ID
1
82 改成swap的ID //从linux分区切换成swap设备
w
#partprobe //让内核更新分区表
#mkswap /dev/sdb1 构建swap格式
6 挂载上
# free
#swapon /dev/sdb1
#free
7
#swapon –s 列出目前使用的swap设备有哪些?
8 同样可以使用文件构建swap
# dd if=/dev/zero bs=/tmp/swap bs=1M count=128M
#mkswap /tmp/swap
#swapon /tmp/swap
9 卸载swap设备
# swapoff /tmp/swap
# swapoff /dev/sdb1 //关掉swap
# free
实验内容4 了解与掌握磁盘分区的自动挂载 (最后做,以免出现问题,开机不成功)
实验步骤:
0. 虚拟机配置,添加一个SCSI磁盘 sdb 大小10G
1. 在sdb上创建两个分区
#fdisk /dev/sdb
n p 1 +2048M
n p 2 +3068M
w
2. 对两个分区格式化
#mkfs -t ext3 /dev/sdb1
#mkfs -t ext4 /dev/sdb2
3. 创建两个挂载目录
#mkdir -p /test1
#mkdir -p /test2
4. 对/etc/fstab 进行备份
#cp /etc/fstab /etc/fstab.bak
5. 编辑/etc/fstab, 在后面加入两行,使得这两个分区能够在随着开机而自动挂载
#gvim /etc/fstab
/dev/sdb1 /test1 ext3 defaults 1 2
/dev/sdb2 /test2 ext4 defaults 1 2
保存退出
这里注意:
注意: 前三列分别是 设备名、挂载点、文件系统格式, 每行除了最后一列以空格间隔以外,其余都是以Tab分开
7 重启机器
#reboot
8 开机后
#df -h //可以看到开机后,sdb的两个分区都实现了自动挂载
Bash 与Bash的环境变量
一、编辑器vim
1 进入工作目录
#cd
#mkdir -p testvi; cd testvi
2 编辑一个C程序
#vim hello.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
printf("This is only hello world in linux!\n");
return 0;
}
保存退出 :wq
#gcc -g -o hello hello.c
#./hello //执行该命令
3 熟悉末行模式
#cat /proc/cpuinfo /proc/meminfo /etc/passwd > test.txt
#vim +3 test.txt
:set nu //显示行号
:/cpu //搜素关键字 cpu
:$ //光标移动到最后一行
:0 //光标移动到第一行
:set nonu //取消行号
:w test2.txt // 另存为
4 vim 的环境变量设置
vim hello.c
:set all // 显示目前所有环境参数
:set //显示与系统默认不同的设置参数
:set autoindent //自动缩排
:syntax on //显示语法检查
:set bg=dark // 注释颜色不同
:wq
5 在命令行模式整行编辑
#vim test.txt
光标移动到第五行
dd // 删除当前行
d3d // 删除当前3行
y3y // 复制当前3行
光标移动到某行
p // 把刚才的复制内容粘贴
. // 重复刚才的命令
u // undo 取消刚才操作
6
滚屏
(1)[Ctrl+U]组合键
(2)[Ctrl+D]组合键
分页
(1)[Ctrl+F]组合键
(2)[Ctrl+B]组合键
状态命令
[Ctrl+G]
7 退出vim
接着刚才的操作, test.txt 仍然处于打开状态
ZZ 保存退出
#vim test.txt
:w test2.ccc // 另存为 test2.ccc
:wq // 保存退出
:q! // 不保存强制退出
二、Bash 与Bash的环境变量
1 shell 的相关配置文件
#cat /etc/shells //查看系统支持的shell种类 我们只有三行
#more /etc/passwd //查看每个用户登录时所使用的shell
#ll /bin/*sh //显示相关shell,可以看到 sh 已经是bash 的一个链接文件, 因为bash 是sh的兼容扩展
2
#cd
#mkdir -p testbash ; cd testbash
#pwd
#cat /proc/cpuinfo > test.txt ; cat /proc/meminfo >> test.txt
#more test.txt
#mkdir -p shell ; cp test.txt shell/test.bak ; \ (这里输入个回车)
ls -al shell
3 查看bash的内置命令
#type -t ll
#type -t cd
#type -t mkdir //注意 file alias builtin 的区别
4 学习通配符
#touch 1.txt a1.txt aa.txt abb.txt bbb.date abz.dd abc abc.123
// 理解并验证以下各操作所想达到的目的
#ls -l [0-9]*
#ls -l [a-z]*.txt
#ls -al *.??
#ls *[a][b]*
#ls ab[!z]*
#ll abc*
#rm -f a*.txt
#rm -f *.*
#rm -f *
5 别名
#alias //显示所有当前的别名, 会发现 rm 其实也是别名 是rm -i
//别名既可以生造一个单词,也可以覆盖一个已有命令
#alias lm='ls -al'
#ls -al
#lm //这两个命令应该显示结果一样
#touch aaa ; rm aaa //会显示提示,询问是否删除?
#alias rm='rm -f' // 将rm 从 rm -i 改为 rm -f
#touch aaa
#lm
#rm aaa //不再提示,直接删除
#lm
#unalias lm
#alias
#lm //已经被unalias 取消, 报错
8 历史记录
#history
#history 30
#上下键
#!!: 执行最近一次使用的命令;
#!n: 其中 n 为一个具体的数字,表示执行在命令历史记录中的第 n 个命令;
#!s: 其中 s 为一个字符串,表示执行命令历史记录中以该字符串开头的最近的一个命令。
9 问题: 需要获取当前机器的eth8(不一定是eth8 根据自己机器情况变动) 的 IP(192.168.23.189) 并进一步获取Ip的网段前缀(192.168.23.)
#ifconfig
#ifconfig eth8
#ifconfig eth8 | grep "inet addr"
#ifconfig eth8 | grep "inet addr" | gawk '{print $2}'
#ifconfig eth8 | grep "inet addr" | gawk '{print $2}' | cut -c6-20
#ifconfig eth8 | grep "inet addr" | gawk '{print $2}' | cut -c6-16
10 #env 查看常见环境变量说明
#set 查看所有变量
11 环境变量的显示: echo
# echo $PATH 或者
# echo ${PATH}
12 变量的设置: 注意空格报错
# var1=“lang is $LANG”
# var2=‘lang is $LANG’ //注意区分
# echo $var1
# echo $var2
# set | grep var //应该有var1 2,因为包含了所有变量
# env | grep var //没有该变量的显示, 因为只包含环境变量
13 变量的取消
#unset var2
#echo $var2
#echo $var1
#var1="dir is $HOME"
#var2='dir is $HOME'
#export var1
#env | grep var1
#su quhp //之前需要新建一个用户 #useradd quhp
#echo $var1 //因为export 所以有值
#echo $var2 //为空
#su
#关闭当前终端, 再打开一个终端
#echo $var1
#echo $var2 //应该均为空
14 环境变量的配置文件
#uname -a
#uname -r
#version='uname -r' //注意是倒引号
#version="$version"" in ludong "
#echo $version
15
#关闭当前终端,再打开一个终端
#
#echo $version //应该为空
#cd
#cp .bash_profile .bash_profile.bak
#gvim .bash_profile //gedit or vim 都可以
version=`uname -r` //在最后面加入该行
:wq
#source .bash_profile //让其立刻生效,有可能不成功, 就需要注销后重新登录让其生效
再打开一个终端
#echo $version
16
同样的道理,需要把 rm -i 改成 rm -f
#cd
##touch aaa ; rm aaa //会要求确认
#cp .bashrc .bashrc.bak
#gvim .bashrc
光标移动到rm 那行
alias rm='rm -f'
:wq
#source .bashrc
#alias
#touch aaa ; rm aaa // 不再有提示
闭当前终端,否则 history 历史命令就找不到了!
0.创建一个目录并进入,之后就在该目录下进行操作
# cd ; mkdir -p mytest; cd mytest
1.合并cpuinfo 和meminfo为一个文件 学号.txt , 将读写权限设置为 所有人都只有读的权限。
# cat /proc/cpuinfo /proc/meminfo > 1234.txt
# chmod 444 1234.txt
# ll 1234.txt
2. 建立三级目录test1/test2/test3,将目录test1的内容全部拷贝到 目录 简拼。
# mkdir -p test1/test2/test3
# mkdir -p ludong
# cp -r test1/* quhp/
# ll quhp
3.建立三级目录test1/test2/test3,将目录test1 拷贝到 目录简拼2下,并保证其元数据信息的一致。
# mkdir -p test1/test2/test3
# mkdir -p quhp2
# cp -a test1 quhp2/
# ll quhp2
4. 依次将cpuinfo (2遍) 和meminfo(3遍)合并为一个文件 全拼.txt,然后显示其第15行到30行的内容。
# cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo /proc/meminfo > quhaiping.txt
# head -n 30 quhaiping.txt | tail -n 16
5. 依次将cpuinfo (2遍) 和meminfo(3遍)合并为一个文件 全拼.txt,然后将其第15行到30行的内容命名为 全拼.txt。
# cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo /proc/meminfo > quhaiping.txt
# head -n 30 quhaiping.txt | tail -n 16 > quhaiping.txt // 错误的做法 该文件为空
# cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo /proc/meminfo > quhp.txt
# cat quhp.txt > quhp.txt //报错 cat: quhp.txt:输入文件是输出文件
# cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo /proc/meminfo > quhp.txt
# head -n 20 quhp.txt > quhp.txt // 不报错,但是为空,原因同上
正确做法
#cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo /proc/meminfo > quhaiping.txt
# head -n 30 quhaiping.txt | tail -n 16 > quhp.txt
# mv quhp.txt quhaiping.txt
6.分屏显示命令ls 的帮助文件。
# man ls | less
7.建立三级目录test1/test2/test3,并将test1目录内容打包成文件 全拼.tgz。
# mkdir -p test1/test2/test3
# tar -zcvf quhaiping.tgz test1 //知道这个命令即可
8.新建用户名字为 “简拼”,建立三级目录 linux1/linux2/linux3, 将整个目录属主改为 “简拼”。
# useradd quhp //创建用户
# mkdir -p test1/test2/test3
# chown -R quhp.quhp test1
9.依次将cpuinfo (2遍) 和meminfo(2遍)合并为一个文件 简拼.txt, 然后对该文件进行排序去冗,并分屏显示。
# cat /proc/cpuinfo /proc/cpuinf /proc/meminfo /proc/meminfo > quhp.txt
# sort quhp.txt | uniq | less
10.复制cpuinfo 到当前目录下,然后对其进行排序去冗。(文件名保持不变)
# cp /proc/cpuinfo .
# sort cpuinfo | uniq > temp.txt
# mv temp.txt cpuinfo
11.合并 简拼.txt与cpuinfo 两个文件内容,并重新命名为简拼.txt。
# cat cpuinfo >> quhp.txt
12 将当前同时含有“bin”和“var”两个字符串的进程重定向到文件 varbin.txt 。
# ps aux | grep bin | grep var > varbin.txt
13 一条命令对硬件网卡(如ens33)的信息进行过滤截取,最后得到其MTU值(如1500)
# ifconfig ens33
# ifconfig ens33 | grep MTU //mtu根据具体情况 大小写
#ifconfig ens33 | grep MTU | gawk '{print $4}'
14 设置一个变量mtu ,其值为 过滤得到的 MTU 值 (1500)
# mtu = ` ifconfig ens33 | grep MTU | gawk '{print $4}' ` //注意最外层是倒引号
# ehco $mtu
15 设置一个全局变量mtu ,其值为 过滤得到的 MTU 值 (1500)
# mtu = ` ifconfig ens33 | grep MTU | gawk '{print $4}' ` //注意最外层是倒引号
# ehco $mtu
需要编辑配置文件 gvim .bash_profile 把上面的赋值命令添加进去
Linux 用户与组群的管理
1 命令行用户的创建、密码 与删除
#useradd linux
#passwd linux
交互式连续两次输入密码 123456
#less /etc/passwd
#less /etc/shadow 应该在最后一行能看到已经成功创建
#userdel -r linux 删除,请注意参数的作用
#less /etc/passwd 确认删除
2 熟悉 passwd 命令的 stdin 参数
#useradd ludong
#useradd ludong2
#passwd ludong 输入123456
#passwd ludong2 输入123456
#echo 654321 | passwd --stdin ludong2 修改ludong2 的密码
#su 再回到root
3 熟悉 cut与xargs
#finger root
#finger ludong ludong2
#cut -d':' -f1 /etc/passwd 回车符分隔显示所有用户
#cut -d':' -f1 /etc/passwd | xargs -n 1 finger 显示所有用户信息
4 熟悉 pwunconv and pwconv
#less /etc/passwd
#less /etc/shadow 这两个文件都存在,且 passwd 的第二列密码显示为 x
#pwunconv 两个文件合二为一
#cat /etc/shadow 文件已经不存在
#cat /etc/passwd 第二列直接就是密码的密文
#pwconv 再把这两个文件分开
#cat /etc/passwd
#cat /etc/shadow 这两个文件又恢复原状
5 采用 newusers 批量创建用户
// 这是批量用户添加的第一种方式,以命令行的方式完成后,将下列命令集成到一个脚本中,运行一个sh文件即可实现该功能(思考题1)。
// 变种, 只有一个配置文件passwd.txt 实现添加与删除
5.1 #groupadd -g 800 linux2012
5.2 #gvim student.txt
t001001:x:801:800::/home/t001001:/bin/bash
t001002:x:802:800::/home/t001002:/bin/bash
t001003:x:803:800::/home/t001003:/bin/bash
t001004:x:804:800::/home/t001004:/bin/bash
5.3 #gvim passwd.txt
t001001:t001001
t001002:123456
t001003:123456
t001004:123456
5.4 #newusers < student.txt
5.5 #pwunconv
#chpasswd < passwd.txt
#pwconv
5.6 #cat /etc/passwd
#cat /etc/shadow 确认四个用户已成功创建
6 利用 xargs 与userdel 组织 删除 刚才创建的用户
#cut -d':' -f1 student.txt
#cut -d':' -f1 student.txt | xargs -n 1 userdel -r
#cat /etc/passwd 确认四个用户已成功删除
7 利用 useradd 与 passwd --stdin 批量创建用户脚本
// 这是批量用户添加的第二种方式,考虑如何将添加与删除集成到一个脚本中,以一个flag变量控制是添加还是删除(思考题2)。
7.1 #gvim account1.sh
#!/bin/bash
if [ ! -f "$1" ]; then
echo "$1 no exist!"
exit 1
fi
usernames=`cat $1`
for username in $usernames
do
useradd $username
echo $username | passwd --stdin $username
done
exit 0
7.2 #gvim std.txt
std001
std002
std003
std004
7.3 #chmod +x *.sh
#./account1.sh std.txt 成功创建std001-004, 可去 /etc/passwd 确认
#./account1.sh std.txt2 报告 该文件不存在
#./account1.sh
7.4 #gvim delaccount1.sh
#!/bin/bash
if [ ! -f "$1" ]; then
echo "$1 no exist!"
exit 1
fi
usernames=`cat $1`
for username in $usernames
do
echo "$username will be deleted!"
userdel -r $username
done
exit 0
7.5 #chmod +x *.sh
#./delaccount1.sh std.txt 将这四个用户删除
8 再次利用 xargs 与userdel 组织 删除 刚才创建的用户
#./account1.sh std.txt 再次成功创建std001-004
#cat std.txt | xargs -n 1 userdel -r 成功删除
9 获取数字长度的小脚本
#gvim test1.sh
#!/bin/bash
num=$1
count=${#num}
echo "$num have $count "
exit 0
#chmod +x *.sh
#./test1.sh 23
#./test1.sh 999
#./test1.sh 12345678
10 获取某字符串指定子串的小脚本
#gvim test2.sh
#!/bin/bash
nu=0123456789
nu2=$nu
nu=${nu:$1:$2}
echo "$nu2 : from $1 and $2 count is $nu"
exit 0
#chmod +x *.sh
#./test2.sh 1 2
#./test2.sh 0 4
#./test2.sh 2 3
11 最后一个集大成的脚本, 只需要输入 四个产生 前缀、位数、首位、数量 就可以批量创建
// 这是批量用户添加的第三种方式 的 第一个变种, 需要生成一个配置文件
与思考题2类似,也是考虑在这种情况下如何将添加与删除集成到一个脚本中,以一个flag变量控制是添加还是删除(思考题3)。
#gvim account2.sh
#!/bin/bash
accountfile="user_passwd"
if [ -f "$accountfile" ]; then
mv $accountfile "$accountfile"`date +%Y%m%d`
fi
touch "$accountfile"
read -p "qianzhui: " username_start
read -p "weishu: " nu_nu
read -p "star num: " nu_start
read -p "shuliang: " nu_amount
nu_end=$(($nu_start+$nu_amount-1))
for (( i=$nu_start; $i<=$nu_end; i++ ))
do
nu_len=${#i}
nu_diff=$(($nu_nu-$nu_len))
if [ "$nu_diff" != "0" ]; then
nu_nn=00000000000
nu_nn=${nu_nn:1:$nu_diff}
fi
account="$username_start""$nu_nn""$i"
echo "$account":"$account" >> $accountfile
done
cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd
pwunconv
chpasswd < "$accountfile"
pwconv
echo "OK"
exit 0
#chmod +x *.sh
#./account2.sh 要输入4个值, 示例如下, 可以自行确定,注意不要太多,否则比较耗时
ludonglinux
3
1
10
#cat /etc/passwd 确认
12 利用 xargs 与userdel 组织 删除 刚才创建的用户
#cut -d':' -f1 user:passwd | xargs -n 1 userdel -r
#cat /etc/passwd 确认四个用户已成功删除
批量用户添加的第三种方式 的 第二个变种, 不需要生成任何配置文件, 使用flag 控制 add or del
在for循环中 如果是add 就 useradd + passwd 如果 del 就 userdel -r
软件包的安装与管理
rpm 部分实验步骤:
1 查看并确认rpm 命令的使用
#man rpm
2 我们对gvim 对应的rpm 包进行相关的查询操作
#whersis ls // 报告说明在/bin/ls , 可以任选之前使用过的命令
#rpm -qf /bin/ls
首先找到gvim 对应哪个rpm包
#whereis gvim
#rpm -qf /usr/bin/gvim 查找该文件属于哪个rpm 输出是 vim-X11*
#rpm -q vim-X11
#rpm -qi vim-X11
#rpm -ql vim-X11
#rpm -qR vim-X11
#rpm -qa 列出所有已经安装的rpm包
#rpm -qa | grep vim
#rpm -qa | grep bash
#rpm -qa | grep gcc
3 rpm 包的验证
#rpm -V vim-X11
#mv /usr/bin/gvim /usr/bin/gvim.bak
#rpm -V vim-X11
#rpm -Vf /usr/bin/gvim
4 rpm 包的删除
#rpm -e vim-X11
#rpm -e sysstat
确认删除成功了没?
#gvim 应该报告找不到
#rpm -qa | grep vim-X11
5 确认我们系统装了对应的rpm没有?
#rpm -qa | grep sysstat
#rpm -qa | grep vim
#gvim // 报错说没有该命令
#sar // 也没有
13 安装 sysstat 与 vim-X11
#rpm -ivh sysstat-*.rpm
#rpm -ivh vim-X11*.rpm
再次确认我们系统安装成功了没?
#rpm -qa | grep sysstat
#rpm -qa | grep vim
查看对应的命令的具体位置
#whereis gvim
#whereis sar
--force 的使用
目录
1.2 bc 程序的三种退出方式 //通过该项掌握交互型命令的退出方式
2 命令行修改目录与文件的属主 (chown *.* 文件)
1 touch命令 :创建不存在文件 or 修改文件时间(文件已经存在)
4 umask 003 进行权限的修改,003表示在当前基础上减去该值
实验内容4 了解与掌握磁盘分区的自动挂载 (最后做,以免出现问题,开机不成功)