这本书从大三开始看,引导我入门linux,当时买不起原版,只能花了40块大洋打印了400多页,分为上下两本,上本讲述了shell命令,其中夹杂着一些linux原理,下本讲述了shell高级脚本编程,从sed,gawk批处理到简单图形界面,脚本实战,在使用linux时和Redhat面试工作时也有很大的作用,对linux入门来说是一本非常不错的书。到现在,这本书已经翻来覆去看了三遍,有40页的纸质总结,书也在大学毕业后传承给学弟了,同时送出的也有一本APUE,一本UNP(我有两套,一套是传承来的,另一套原版花了300大洋)。如果能把
学习linux的时候希望多试试linux系统,ubuntu,centos,Fedora,rhel,自己找内核源码编译一下,在那些连inode,孤儿进程,会话,域套接字都不知道的“大神”面前(面试时也敢写熟悉linux系统),我只能笑笑,不敢在说什么,可能他们装linux系统快的一笔。
话不多说,趁放星期一天内搞定吧。这shell只是个工具,学习的时候别忘了与linux内核的关系。
第三章:
启动shell 脚本:/etc/bash.bashrc /etc/profile
用户shell 脚本:~/.profile ~/.bashrc 可增加自己的shell函数,PATH增加路径,别命名命令
shell提示符:PSI="[\t][\u]\s" PSI变量可在脚本里自行更改。
ls -sail s->size a 隐藏文件 i->文件inode节点信息 (可以思考:linux文件树的构成,系统如何根据一个文件名找到磁盘中的文件地址,两个进程打开相同的文件,进程表项中的文件描述符指向的结构体包含什么信息-->打开文件权限,文件偏移等)
cp -l 硬链接 cp -s 软链接 ln -S 软链接。 -R 递归
(思考:对比源文件和链接文件的inode节点是否一致,链接个数,文件大小区别,尤其是软链接文件的大小和源文件地址的字节大小对比,源文件和链接文件是否可以在不同的文件系统-->关键inode节点和文件系统的关系,当源文件删除,软链接的导致的指向丢失)
touch rm -rf 强制删除 mkdir rmdir
linux 与 windows 换行的不同 LF->linux CRLF->windows
思考:windows与linux的文件系统的不同(linux 万物皆文件)
第四章:
ps -ef ps aux 查看进程 aux更详细,展示了进程状态
挂载媒体mount : mount -t type /dev/sda /mnt 修复模式下: mount -o rw,remount / 根目录可读写挂载 (思考:内核文件initrd.img在构建文件树之前为什么要先构建虚拟文件系统,关键在于SCSI硬盘与IDE硬盘模块区别)
root下blkid命令查看UUID号,写入/etc/fstab 开机默认挂载
df -h 查看已挂载磁盘的使用情况
du -chs 查看一个目录文件的大小, du -ch 详细查看子目录。
sudo apt-get install htop 安装htop
htop或者top命令实时检测电脑信息。
随机生成UUID sudo apt-get install uuid 执行uuid随机生成
sort 默认字符排序 sort -n 数字排序 sort -M 识别三字符的月,按月排序
sort -t ':' -k 3 -n /etc/passwd -t 分割符, -k 位置 按照UID排序
grep -v 输出不匹配 -n 行号 -c总匹配行数 -e A -e B 匹配A或B
grep -rn “xxx“ . 匹配字符串
各种grep的用法:https://blog.csdn.net/zengxx1989/article/details/52837517
bzip2 格式压缩:bzip2 file bunzip file解压 bzip2 -d file 也可以解压
gzip2 : gzip file gunzip file
zip: zip file unzip file
tar归档文件
tar -cvf test.tar test1 test2 归档test1与test2到test.tar
tar -tf test.tar 展示其中的归档文件
tar -xvf test.tar 提取归档文件
.tar.gz 与tgz格式是一样的,解压提档 tar -zxvf test.tgz
第五章:
printenv 显示全局环境变量
set 显示该shell进程下的变量
test=test echo $test test=a b c 错误 test='a b c' export tt将变量设为全局 局部变量不继承,子进程不可见 unset test 删除变量 若删除全局变量,则只作用当前进程 PATH=$PATH:/home/user 登录shell /etc/profile -> /etc/profile.d ^ 启动式shell | ~/.bashrc -> /etc/bashrc 数组 shell中类型为弱变量 mytest=(AB CD EF) echo $mytest ==>AB echo ${mytest[1]} ==> CD echo ${mytest[*]} ==> AB CD EF unset mytest[1] eccho ${mytest[*]} ==> AB EF echo ${mytest[1]} ==> 空 别名 alias -p 别名列表 alias vi='vim' 若想成为全局变量使用 在 $HOME/.bashrc下别命名
第6章
增删改用户
/usr/sbin/useradd -D 查看设置用户帐号默认参数
home目录模板文件/etc/skel
当创建新用户HOME目录时,将/etc/skel下的文件复制放到HOME中
useradd -m test 强制创建HOME目录 创建用户时制定参数,细节可浏览/etc/passwd useradd -b HOME | -s shell type | -g GID userdel -r 删除HOME目录,mail 目录 passwd username passwd -e username 强制下一次修改 usermod -L 锁住用户 -U 解锁 -p 修改密码 -l 修改名 chpasswd < /file 批量修改 chsh -s /bin/bash username 修改shell 创建组: /usr/sbin/groupadd shared usermod -G shared username 1 -g会修改用户的默认组 修改组名 groupmod -n new_groupname old_groupname 文件权限 umask ==》 0002 root下0022 new file 666&(-mask) ==》 644 new dir 777&(-umask) ==》 755 umask 026 指定新值 umask在/etc/profile中设置 chmod a+x u 用户 g 组 o 其他 a 所有 + 增 -移 =设置 X 若为目录,赋予执行权限 s 运行时重新设置UID和GID,赋予root权限 t 保留文件或目录 u 设置权限和属主一样 改变所属关系 chown dan newfile 属主 chown dan.shared new file 主+组 chown .rich newfile 组 -R 递归改 chown test. newfile 主+组相同 -h 改变该文件的all符号链接文件的所属关系 chgrp shared newfile 修改默认属组 共享文件 SUID 程序以属主权限调用 SGID 以默认属组权限调用 需了解当进程使用文件时,对权限检测的步骤
第10章 shell 入门
#date;who Sun Oct 14 14:23:33 CST 2018 sholck tty7 2018-10-12 13:52 sholck pts/0 2018-10-14 10:41 (:0.0) #!/bin/bash date who chmod u+x newfile echo A BC D ==> A BC D echo "A BC' D" ==> A BC' D echo 'A "BC" D' ==> A "BC" D 若字符串中有引号,用另一种引号圈起来 脚本中 echo -n "The time and date are: " date 输出:The time and date are: Sun Oct 14 14:27:31 CST 2018 变量: echo "User is $USER" echo UID: $UID 要显示美元符号,需要反斜线转义 val1=10 var2=testing var3="still more testing" 脚本自动决定变量的数据类型 字符串赋值 var2=testing var4=$var2 对 var4=var2 错 反引号 testing=` date ` today=` date +%y%m%d ` ==> 181014 touch log.$testing 错误,因为变量中有空格 touch log.$today 对 重定向 echo > test6 追加 echo >> test6 input 重定向 wc < test6 ==> 行 词 字节数 管道 将上条命令的输出作为输入 rpm -qa > rpm.list rpm -qa | sort | more > rpm.list 执行数学运算 # expr 1 + 2 3 #expr 5 \* 2 10 shell script var1=10 var2=20 var3=` expr $var2 / $var1 ` echo The result is $var3 ==> The result is 2 使用方括号 在方括号的符号认定不为通配符 #var1=$[1+5] #echo $var1 ==> 6 # var2=$[$var1*2] # echo $var2 ==> 12 bash shell只支持整数运算 var1=100 var2=45 var3=$[$var1/$var2] echo $var3 ==> 2 浮点问题 bc计算器 bc -q 3.44/5 0 scale=4 3.44/5 .6880 12*5.4 64.8 var1=10 var1*4 40 var2=var1/5 var2*1 2.0000 print var2 2.0000 quit 脚本内使用bc计算器 var=` echo "options: expression" | bc ` 模板 var1=` echo "scale=4; 3.44/5" | bc ` echo $var1 ==> .6880 脚本中使用内联 内联中需要$来标识变量,无法使用外部变量 var=` bc << EOF scale=4 a1=($var1 * $var2) b1=($var3 * #var4) a1+b1 EOF ` expr 数学运算 加空格 bc 内 不需要加空格 不需要 $ bc 内联中 需要$来标识变量 退出脚本 $? 退出状态 脚本中以最后一个命令的退出状态码退出 也可以通过exit x 指定退出码 退出码最大 255 若 exit 300 echo $? 44