这是我看了《linux命令行与shell脚本编程大全》这本书的学习记录,加强一下自己的印象,也方便以后查找。
第一章:初始Linux shell
linux的四个组成部分:
linux内核:
系统内存管理:虚拟内存(不存在的)、物理内存、交换空间。内核不断的在交换空间和物理内存之间反复交虚拟存的内容,这使得系统认为它用于比物理内存更多的可用内存。
软件程序管理:内核创建第一个进程(init进程)来启动系统,一般系统开机自启动的进程在/etc/inittab或者/etc/init.d目录下,这些脚本通过/etc/rcX.d目录下的entry启动。X代表运行级(run level),运行级:有5个,1:单用户模式。3:大多数应用软件,比如网络支持,都会启动,5:用户可以通过图形化桌面登陆系统。
硬件设备管理:设备文件,字符型设备文件、块设备文件、网络设备文件。系统为每个设备都创建了成为节点的特殊文件。
文件系统管理
GNU工具:处理文件的工具、操作文本的工具、管理进程的工具,shell:linux系统默认的发行版本是bash shell,shell的版本常见的有:ash、korn、tcsh、zsh(高级shell)
图形化桌面环境
应用软件
第二章:走进 shell
这章主要讲了,shell的常见三种终端,以及终端页面菜单栏的介绍。
第三章:基本的bash shell 命令(最基础部分)
/etc/passwd 文件包含了所有系统用户账户列表即每个用户的基本信息。
man xterm (man 命令) 查询帮助文档
Linux手册的内容区域有9的,默认的提供的是最低编号内容。
man 7 hostname (man section topic)
hostname -help | hostname --help |hostname help
cd /user/bin 绝对目录
pwd 显示当前的路径
cd 跳回主目录
单点符(.):表示当前目录
双点符(..):表示父目录
文件列表: ls -F(显示出是不是目录) -a(显示出隐藏文件(以点开头的)) -l(显示权限的列表,长列表)
过滤输出表: ls -l my_scr?pt (?:代表一个字符,*:代表0或者多个字符,【ai】选择一个)
常见文件:touch newfile
复制文件: cp 源文件 目标文件 cp test test1 (复制文件名为test1) cp test test3/ (复制文件到test3的目录下) cp -R scripts/ mod_scripts (把文件scripts下的文件都复制到mod_scripts下)
tab键自动补全
链接文件:(比如需要多个备份) 分为硬链接、符号链接
符号链接:它是一个实实在在的文件,通过这个->连接在一起,内容不同 ln -s data_file sl_data_file (原始文件data_file 必须存在)
硬链接:是虚拟文件,从根本而言是同一个文件, ln code_file h1_code_file(但必须是是同一存储媒体)
重命名(moving)文件: mv fall fzll | mv fzll picture/ 重命名文件的时间戳和inode编号,并不会改变。
删除文件(remove): rm -i fall (-i 询问是否删除这个文件,这是个好习惯,要保存)
创建目录: mkdir new_dir | ls -ld new_dir (d:表示目录) | mkdir -p new_dir/sub_dir/under_dir (-p:表示创建多个文件夹)
删除目录:rm -ri my_dir (不能保证目录是不是为空的,所以这样最好,以次询问) | rm -rf my_dir (不询问了)
目录结构: tree my_dir
查看文件类型: file my_file| file new_dir
查看整个文件: cat test1 (cat 命令一点运行我们无法终止) | more test1(先显示一页的内容)| less test1(先显示一页,支持上下翻页,less is more 即是more的高级)
查看部分文件: tail log_file(尾部开始) | head log_file (头部开始)
第四章:更多的bash shell 命令
监测进程
process(进程) ps命令
ps -ef (显示所有的进程)
结束进程: kill -9 PID
实时监测进程:top(不熟悉)
监测磁盘空间
挂载(mounting):
mount -t vfat /dev/sdb1 /media/disk ( mount -t type device directory)
卸载设备:umount [directory | device] umount /home/rich/mnt
查询设备磁盘空间: df -h
查询文件目录空间使用情况: du -h
对于上述输出大量文件,要排序,可以利用管道重定向:du -sh * | sort -nr (按数字降序)
sort -t ':' -k 3 -n /etc/passwd (以冒号为分割的第三个关键字,按数字排序)
搜索数据: grep t file1 (在file1的文件里面搜索以t开头的文本)
压缩文件: gzip myprog (gzcat、gunzip)
归档数据(不太熟悉):最广泛用的归档工具: tar
第5章:理解shell
在已有的shell终端:bash 命令创建子shell,通过exit 可以推出子shell, ps -f 可以显示出关系。 ps -- forest
进程列表就是通过一个子shell来运行的,是花括号括起来,;为分割的: {pwd;cd ..;pwd} (进程列表、协程、管道都会用到子shell)
sleep 100& (&进入后台模式:)
显示后台作业信息: jobs
协程:coproc slleep 10 (在后台生成一个子shell,并且执行sleep 10) 相当于 sleep 10&
外部命令:通常位于 /bin 、 /user/bin 、 /sbin 、 /user/sbin中 可以使用 which(只显示外部命令)和type(显示每种命令的两种实现)命令找到它
which ps | type -a ps 当执行外部命令的时候会创建一个子shell,所以说外部命令多少还是有代价的。
内建命令:type cd ,不需要使用子进程的。
查看最近使用的命令: history
命令别名:alias -p (显示当前的别名) alias li='ls -li'
第六章:使用Linux的环境变量(全局变量,局部变量,用户自定义变量)
显示全局变量:printenv |printenv HOME | echo $HOME
set命令会显示出某个特定进程设置的所有环境变量。
自定义变量:my_variable="I am a student"
导出成全局变量:export my_variable
在子shell中改变全局变量并不会影响父shell中变量值,即便是export。
删除环境变量:unset my_variable,同样的道理并不影响父进程的。
如果要用环境变量使用$,如果要操作环境变量则不需要使用$.printenv除外。
PATH环境变量:echo $PATH
增加环境变量:PATH=$PATH:/home/scripts
启动shell的三种方式:
登录时作为默认登录shell:启动shell从这几个文件里读取命令:/etc/profile 、 $HOME/.bash_profile 、 $HOME/.bashrc 、$HOME/.bash_login 、$HOME/.profile
作为非登录shell的交互式shell:启动shell只会检查 $HOME/.bashrc
作为运行脚本的非交互shell:调用变量 BASH_ENV,如果没有,则继承父shell的
通过以上这几个文件,想着把改动的PATH持久化
第7章:理解linux文件权限
关于用户登录的文件:/etc/passwd
关于用户密码放在另一个文件里 /etc/shadow(只有特定的程序才能访问)
添加用户:useradd -m test
删除用户:userdel -r test
更改用户:usermod
更改密码: passwd | chpasswd
组:/etc/group
添加组:groupadd
更改组:gropmod
改变权限: chmod 760 newfile
改变所属关系: chown owner[.group] file
linux上共享文件就是创建组,大量共享文件:要利用以下字段(SUID,SGID,黏着位)
第8章文件管理系统:
linux文件系统:ext、ext2、日志文件系统(数据模式>有序模式>回写模式)、写时复制文件系统(COW copy on write 利用快照)
第7章和第八章,整体而言,不太熟悉,也不太明白,只是大概的记录一下,方便查找。