部分略过,鸟哥的私房菜中都涵盖了
- apropos -显示适当的命令 = man k command
- alias name='string',删除别名,使用 unalias 命令
- pwd —打印出当前工作目录名
- cd —更改目录
- ls —列出目录内容
- file —确定文件类型
- less —浏览文件内容
- cp —复制文件和目录
- mv —移动/重命名文件和目录
- mkdir —创建目录
- rm —删除文件和目录
- ln —创建硬链接和符号链接
Usage: ln [OPTION]... [-T] TARGET LINK_NAME
关于符号链接,使用相对路径名更令人满意,因为它允许一个包含符号链接的目录重命名或移动,而不会破坏链接; - type –说明怎样解释一个命令名
- which –显示会执行哪个可执行程序
Which只对可执行程序有效,不包括内部命令和命令别名,别名是真正的可执行程序的替代物 - man –显示命令手册页
- apropos –显示一系列适合的命令
- info –显示命令 info
- whatis –显示一个命令的简洁描述
- alias –创建命令别名
- cat -连接文件
- sort -排序文本行
- uniq -报道或省略重复行,-d,只显示重复的行,eg:ls /bin /usr/bin | sort | uniq -d | less
- grep -打印匹配行,grep pattern [file...],两个方便的选项,-v:只打印不匹配的行;-i:在执行搜索时忽略大小写
- wc 打印文件中换行符,字,和字节个数,-l:只显示行数,eg:ls /bin /usr/bin | sort | uniq | wc -l
- head -输出文件第一部分,-n 行数;
- tail – 输出文件最后一部分,-f 实时监测文件
- tee – 从Stdin读取数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个or多个文件,当在某个中间处理阶段捕捉一个管道线的内容时很有用
- echo – 显示一行文本
- clear -清空屏幕
- history -显示历史列表内容
- id –显示用户身份号
- chmod –更改文件模式
- umask –设置默认的文件权限
- su –以另一个用户的身份来运行 shell
- sudo –以另一个用户的身份来执行命令
- chown –更改文件所有者
- chgrp –更改文件组所有权
- passwd –更改用户密码
- ps –报告当前进程快照
- top –显示任务
- jobs –列出活跃的任务
- bg –把一个任务放到后台执行
- fg –把一个任务放到前台执行
- kill –给一个进程发送信号
- killall –杀死指定名字的进程
- shutdown –关机或重启系统
- printenv - 打印部分或所有的环境变量
- set - 设置 shell 选项
- export —导出环境变量,让随后执行的程序知道。
- alias - 创建命令别名
- mount –挂载一个文件系统
- umount –卸载一个文件系统
- fsck –检查和修复一个文件系统
- fdisk –分区表控制器
- mkfs –创建文件系统
- fdformat –格式化一张软盘
- dd —把面向块的数据直接写入设备
- genisoimage (mkisofs) –创建一个 ISO 9660 的映像文件
- wodim (cdrecord) –把数据写入光存储媒介
- md5sum –计算 MD5 检验码
重定向
- 标准输入、标准输出和错误
shell内部他们的文件描述符为0,1,2,eg:重定向标准错误-→ll bin/aaa 2> error.txt
重定向标准输出和错误到同一个文件:ll aaa &> output.txt - 处理不需要的输出:/dev/null,位桶
shell眼中看世界
- 单词分割:ll a b
- 路径名展开:echo D,echo [[:upper:]]等等
- 波浪线展开:echo ~
- 参数展开:echo $USER
- 算数表达式展开:(($((2+2))*3))
- 花括号展开:eg:echo Front-{A,B,C}-Back,echo Number_{1..5},echo {Z..A},mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
- 命令替换:eg:ll (ls /usr/bin/* | grep zip),ls -l
which cp
- 引用
- 引用的第一种类型--双引号,双引号中,shell中的特殊字符,除$,,`之外,将失去他们的特殊含义成为普通字符,这意味着单词分割、路径名展开、波浪线展开、花括号展开将被禁止,而参数展开、算数展开、命令替换依然会被执行
- 引用的第二种类型--单引号,禁止所有的展开
- 转义字符
- echo -e ”Time’s up\a”(加上-e字符会翻译转移序列哦)
键盘高级操作(记几个常用的得了,实际上多了我也TM记不住 )
- 移动光标
- Ctrl-a 移动光标到行首
- Ctrl-e 移动光标到行尾
- Ctrl-l 清空屏幕
- Alt-f 光标前移一个字
- Alt-b 光标后移一个字
- 利用历史命令
bash维护着一个已经执行过得命令的历史列表,~/.bash_history- 搜索命令:eg-->history | grep xxx
- !88会展开成为历史列表中88的内容
- bash可按递增顺序搜索历史列表,Ctrl+r后输入要搜索的内容,enter执行or Ctrl+j复制到当前命令行,Ctrl+c退出
权限
- 一些特殊权限()
- setuid位:当应用到一个可执行文件时,它将有效用户id从实际运行程序的用户设置成程序所有者的id(一个普通用户运行了一个由root所有的程序,且这个程序设置了setuid位,那么这个程序运行时就有了超级用户的特权,比如sudo)[慎用],eg:chmod u+s program
- setgid位:如果设置了一个目录的setgid位,则目录新创建的文件具有这个目录用户组的权限而不是文件创建者所属用户组的权限(比如共享目录,你创建的目录是你自己组的权限还得了么),eg:chmod g+s program
- sticky位,linux中,会忽略文件的sticky位,但若目录设置此位,他能组织除目录所有者、文件所有者或超级用户以外的用户删除or重命名文件,eg:chmod +t program
- su 以其他用户身份和组id运行一个shell
+以另一个用户的身份启动shell,su [-[l]] [user],若包含-l,则会执行用户启动一个需要登录的shll,意味着会加载此用户的shell环境,且工作目录会更改到此用户的家目录,等同于su -,若不指定,就假定为超级用户- su -c “command”可只执行单个命令
- sudo 以另一个用户身份执行命令
- 相似于su,但sudo是可配置的(可控),su和sudo的一个重要区别是sudo
不会重新启动一个shell,也不会加载另一个用户的shell环境(sudo的存在使得用户变得更加规范,人人都因为权限问题而su到root用户,这样当然是不安全的)
- 相似于su,但sudo是可配置的(可控),su和sudo的一个重要区别是sudo
- chown更改文件所有这和用户组
- chown [owner][:[group]] file...
- 几个参数
- neinei 把文件所有者从当前属主改为neinei(neinei是我的小狗)
- neinei:users 把文件所有者改为neinei,文件用户组改为users组
- :admin 把文件用户组改为组admin,文件所有者不变
- neinei: 文件所有者改为neinei,文件用户组改为neinei所属的用户组
进程
- 进程是怎样工作的
- 内核将自己一些程序初始化为进程-->运行init程序-->运行一系列的init脚本(/etc下),启动所有的系统服务(很多系统服务以daemon程序形式实现,没有任何用户接口)
- 一个程序可以发动另一个程序,实际上就是一个父进程创建了一个子进程
- 内核维护每个进程的信息,以保证系统有序,eg,系统分配每个进程pid,pid升序排列,init进程的pid总是1,内核也对分配给每个进程的内存进行跟踪
- 查看进程
- ps:直接运行ps,结果中tty是teletype的缩写,即进程的控制终端,time字段表示进程所消耗的cpu时间数量;加上x选项的话,意味着展示所有进程,不管他们由什么终端控制(显示?的没有控制终端)
- STAT字段:是state的简写,揭示了进程状态
- R:运行,意味着,进程正在运行或准备运行。
- S:正在睡眠。进程没有运行,而是,正在等待一个事件,比如
说,一个按键或者网络数据包。 - D:不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动的I/O
- T:已停止. 已经指示进程停止运行。
- Z:死进程or僵尸进程,是一个已经终止的子进程,但是他的父进程还没有把子进程从进程表删除
- <:高优先级进程,会给他更多资源和更多的cpu时间,也可以叫他less nice,因为他霸占了多的cpu时间
- N:低优先级进程,一个好进程,高优先级进程执行后才能得到cpu时间
- aux选项:显示每个用户的进程信息
- 一些字段的含义
- USER:用户id,进程的所有者
- %CPU:cpu使用率
- %MEM:内存使用率
- VSZ:虚拟内存大小
- RSS:进程占用的物理内存大小
- START:进程运行的起始时间,超过24小时则用天显示
- 用top命令动态查看进程
- ps只提供命令执行时刻的机器状态快照,top程序则连续显示系统进程的信息,显示结果=系统概要+进程
- 把一个进程放到后台执行
- xxxx &
- Signals
- 如kill命令,kill确切的不是‘杀死’了程序,而是给程序发送信号(信号是操作系统与程序通信的几种方式之一),程序能够倾听和响应信号
- kill命令语法,kill [-signal] PID,kill -l可以得到一个完整的信号列表
- kill命令默认情况下发送TERM(终止)信号,而我们使用的kill -9 or 19会发送KILL信号或STOP信号,这两个信号不同于TERM信号,TERM发送给进程,可能会被忽略,而KILL和STOP发送给内核,不能被忽略
- killall命令:给多个进程发送信号
- killall命令语法:killall [-u user] [-signal] name...
- 更多与进程相关的命令
- pstree
shell环境
- 检查环境变量
- 只显示环境变量:printenv,也可列出特定变量的数值,eg:printenv PATH
- set,显示shell和环境变量
- 或者直接echo $HOME
- 如果一个shell环境中的成员既不可用set命令也不可用printenv命令显示,则是别名,alias命令即可查看
- 如何建立shell环境
- 启动bash程序会读取一系列成为启动文件的配置脚本,这些文件定义了默认的可供所有用户共享的shell环境;然后读取更多位于家目录中的启动文件,这些启动文件定义了用户个人的shell环境;精确的启动顺序依赖于要运行的shell回话类型(两种类型:登录shell回话,非登录shell会话)
- 登录shell会话会提示输入用户名和密码,且会读取一个or多个启动文件
- /etc/profile:应用于所有用户的全局配置脚本
- ~/.bash_profile:用户私人的启动文件,可用来扩展or重写全局配置脚本中的设置
- ~/.bash.login:若上面的文件没有找到,bash就尝试读取此脚本
- ~/.profile:上面的两个文件都没有找到,bash尝试读取此文件,这是就debian发行版的默认设置(eg:Ubuntu)
- 非登录shel会话
- /etc/bash.bashrc:应用于所有用户的全局配置文件
- ~/.bashrc:用户私有启动文件,可用来扩展or重写全局配置文件中的脚本
- 一个启动文件的内容
- PATH=HOME/bin
- export PATH(export命令告诉shell这个shell的子进程可使用PATH变量的内容)
- 修改shell环境
- 这需要根据发行版的不同,我是.profile文件,也许是.bash_profile文件,限定只能对自己家目录下的文件进行修改,除非你是系统管理员
- 这里我只增加了alias l.='ls -d .* --color=auto'测试一下
- 激活修改
- source .profile,这样就不必关闭终端回话自启动一个新的回话,而是强迫bash重新读取修改后的.profile文件
vi简介,(略)
自定制shell提示符,非常有意思,但是parrot自带的已经很好看
软件包管理
- 打包系统
- redhat系使用.rpm
- debian系使用.deb
- 包文件
- 包管理系统中软件的基本单元是包文件,包文件是一个构成软件包的文件压缩集合,一个软件包可能由大量程序+支持此程序的数据文件组成,包文件=安装文件+文本说明+预安装和安装后脚本
+ 软件包文件由软件包维护者创建,流程=软件作者源代码==>软件包维护者==>编辑源代码,创建元数据即安装脚本(所以软件包维护者通常是发行商的雇员)
- 包管理系统中软件的基本单元是包文件,包文件是一个构成软件包的文件压缩集合,一个软件包可能由大量程序+支持此程序的数据文件组成,包文件=安装文件+文本说明+预安装和安装后脚本
- 上层和底层软件包工具
- 软件包管理工具通常由两种工具类型组成:底层工具处理比如安装、删除软件包文件;上层工具完成元数据搜索和以来解析
- redhat系:底层工具==>dpkg,上层工具==>apt-get,aptitude
- debian系:底层工具==>rpm,上层工具==>yum
- 查找资源库中的软件包
- debian:apt-get update;apt-cache search search_string
- redhat:yum search search_string
- 从资源库安装一个软件包(上层工具,从一个资源库下载一个软件包,并经过完全以来解析来安装)
- debian:apt-get update;apt-get install package_name
- redhat:yum install package_name
- 通过软件包文件来安装软件(底层工具直接安装而不经过依赖解析)
- debian:dpkg --install package_file(-i)
- rpm -i package_file
- ps:底层工具执行安装任务,没有运行依赖解析,如缺少依赖会报错和退出
- 卸载软件(上层工具或底层工具)
- debian:apt-get remove package_name
- redhat:yum erase package_name
- 经过资源库更新软件包(保持系统中的软件包都是最新的)
- debian:apt-get update;apt-get upgrade
- redhat:yum update
- ps:update和upgrade的区别:update用于更新软件包列表,而upgrade则是实实在在的更新已经安装了的软件,所以,先update,再upgade
- 经过软件包文件来升级软件(比如从一个非资源库网站下载了一个软件的最新版本,注意debian系更新和安装一个软件包选项是相同的,而redhat系不是)
- debian:dpkg -i package_file
- redhat:rpm -U package_file
- 列出所安装的软件包
- debain:dpkg --list
- redhat:rpm -qa
- 确定是否安装了一个软件包
- debian:dpkg --status package_name(-s)
- redhat:rpm -q package_name
- 显示所安装软件包的信息
- debain:apt-cache show package_name
- redhat:yum info package_name
- 查找安装了某个文件的软件包
- debian:dpkg --search file_name
- redhat:rpm -qf file_name
存储媒介
- 查看挂在的文件系统列表
- mount:mount 设备 挂载点;umount 设备
- ps:为什么卸载很重要,因为卸载一个设备时候会将内存中的数据协会这个设备,以便此设备被安全的移除,如果未卸载就移除,可能会导致文件系统的损坏
- 确定设备名称
- 比如我插了一个u盘,怎么知道他是那个设备呢,tail -f /var/log/messages,就是找到答案
- 创建新的文件系统
- fdisk命令分区(这是有提示的)
- 用mkfs命令创建一个新的文件系统:mkfs -t 文件系统类型 设备分区名称(实际上类似mkfs.ext3,这里创建了很多软连接到命令,更加方便)
- 测试和修复文件系统
- fsck命令修复文件系统,如果cat一下/etc/fstab,会看见每行末尾有个数字,系统启动时依据数字的顺序检查文件系统的完整性,如果文件系统受损,eg:fsck /dev/sdb1,可能会有作用
- 直接把数据移入/出设备,dd if=input_file of=output_file,eg:dd if=/dev/sdb of=/dev/sdc
网络系统:比较一般,不要看这里了
查找文件
- locate,查找文件,依赖于locate自己的数据库,updatedb可以手动进行更新
- find,这个命令很有用呀,此处find命令有很多操作符和测试条件,随便感受一下,eg:find ~ -type d | wc -l
,find ~ -type f -name *.pdf -size +1M,find ~ ( -type f -not -perm 0600 ) -or ( -type d -not -perm 0700 )- 用户定义的操作
- -exec command ‘{}’ ';'(因为花括号和分号对shell而言有不同的意义)
- 提高效率:eg:find ~ ( -type f -not -perm 0600 ) -exec ls -l '{}' ';',这样的命令,每找到一个文件都会启动一个新的指定命令的实例,但如果换成,find ~ ( -type f -not -perm 0600 ) -exec ls -l '{}' +,后面的命令就会在拿到结果后执行次,提高效率
- 用户定义的操作
- xargs,从标准输入接受输入,并把输入转换为一个特定命令的参数列表,eg:find ~ -type f -name *.pdf | xargs md5sum
归档和备份
- 同步文件和目录
- rsync options source destination
- source和destination可以是:
- 一个本地文件or目录
- 一个远端文件or目录,以 [user@]host:path 的形式存在
- 一个远端 rsync 服务器,由 rsync://[user@]host[:port]/path 指定
- eg:rsync -av dir1 dir2,[-a:递归和保护文件属性,-v输出]
+网络中同步:sudo rsync -av --rsh=ssh Try/ [email protected]:/home/
结束语
tlcl笔记就到这里,shell后面直接就看shell的书,看这本书的目的本来是为了了解debian系的系统,看看与redhat系有何不同,这本书类似鸟哥的私房菜,但是更适合培养兴趣的人,原理不多涉及,主要是为了让人更快的使用linux,没看过鸟哥的可以看看,400多页的小书,很容易看完