man /<关键字>
n下一个关键字N上一个关键字 q退出
info
–help
用户及文件权限管理
用户
查看用户
whoami who mom lilkes
输出的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty 设备而言的,七个使用 [Ctrl]+[Alt]+[F1]~[F7] 进行切换的 /dev/tty 设备“真终端”,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i ,看第二列是不是就变成 pts/1 了,第三列则表示当前伪终端的启动时间。
who 命令其它常用参数 参数 说明 -a 打印能打印的全部 -d 打印死掉的进程 -m 同am i,mom likes -q 打印当前登录用户数及用户名 -u 打印当前登录用户登录信息 -r 打印运行等级
root权限
sudo 一是你要知道当前登录用户的密码 二是当前用户必须在 sudo 用户组 su 可以切换到用户 user,执行时需要输入目标用户的密码 sudo 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码 su - 命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量
为什么这里没有显示在 sudo 用户组里呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我们在 /etc/sudoers.d 目录下创建了这个文件,从而给 shiyanlou 用户赋予了 sudo 权限
etc/group 文件格式说明
/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User)
改变用户组
usermod命令 $ sudo usermod -G sudo lilei
删除用户
$ sudo deluser lilei –remove-home
文件权限
文件类型
pipe 管道 软链接文件 /dev 目录下有各种设备文件
文件权限
读权限,表示你可以使用 cat 之类的命令来读取某个文件的内容; 写权限,表示你可以编辑和修改某个文件; 执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
读权限,表示你可以使用 cat 之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件;
查看包括隐藏文件的文件属性
$ ls -AsS 小 s 为显示文件大小,大 S 为按文件大小排序
查看一个目录的完整属性
$ ls -dl <目录名>
变更文件所有者
$ sudo chown shiyanlou iphone6
修改文件权限
拥有者,所属用户组,其他用户 方法一:二进制 chmod700iphone6方法二:加减赋值操作 chmod 700 iphone6 g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
更多
adduser 和 useradd 的区别是什么? 答:useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
Linux目录结构及文件基本操作
Linux目录结构
FHS标准
11 12
目录路径
pwd = Print Working Directory cd = Change Directory ls = list
文件基本操作
新建
新建空白文件 touch
新建目录 mkdir = make directories
使用 -p 参数,同时创建父目录
复制
复制文件
cp = copy $ cp test father/son/grandson
复制目录
$ cp -r father family
删除
删除文件
$ rm test (-f强制删除)
删除目录
$ rm -r family
移动文件与文件重命名
移动文件
$ mv 源目录文件 目的目录
重命名文件
$ mv 旧的文件名 新的文件名
批量重命名
$ rename ‘s/.txt/.c/’ *.txt
查看文件
cat正序显示,tac倒序显示 nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。 这里简单列举它的常用的几个参数:
-b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号(“cat -n”就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)
使用more和less命令分页查看文件
Enter滚动一行 Space滚动一屏 h帮助 q退出
使用head和tail命令查看文件
$ tail -n 1 只看最后一行 (-f参数可以实现不停地读取某个文件的内容并显示,这可以用来动态查看日志)
查看文件类型
$file
编辑文件
环境变量与文件查找
环境变量
变量
declare 预声明一个变量 用等号赋值 echo tmp 注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。
环境变量
set,env,export这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。 set 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 huanjing
永久有效
但是问题来了,当你关机后,或者关闭当前的 shell 之后,环境变量就没了啊。怎么才能让环境变量永久生效呢? 按变量的生存周期来划分,Linux 变量可分为两类: 永久的:需要修改配置文件,变量永久生效; 临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。 这里介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。还有要注意区别的是每个用户目录下的一个隐藏文件: .profile 可以用 ls -a 查看 cd /home/shiyanlou ls -a 这个 .profile 只对当前用户永久生效。而写在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。
命令的查找路径与顺序
echo PATH 添加自定义路径到“ PATH ”环境变量 在前面我们应该注意到 PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径: PATH= PATH:/home/shiyanlou/mybin 注意这里一定要使用绝对路径。
添加自定义路径到“ PATH ”环境变量
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是 .zshrc,相应 Bash 的配置文件为 .bashrc 。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。 我们可以简单地使用下面命令直接添加内容到 .zshrc 中:
echo"PATH=
PATH:/home/shiyanlou/mybin” >> .zshrc 上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 > 是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
修改和删除已有变量
变量修改
变量设置方式 说明 {变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据{变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据 {变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据{变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据 变量名/旧的字串/新的字串将符合旧字串的第一个字串替换为新的字串 {变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串
变量删除
$ unset temp
如何让环境变量立即生效
source.zshrc上面与 . ./.zshrc同等效果
搜索文件
$ whereis who 简单快速
$ locate /etc/sh 快而全
如果想只统计数目可以加上 -c 参数,-i 参数可以忽略大小写进行查找,whereis 的 -b、-m、-s 同样可以使用
$which man小而精
$sudo find精而细
这条命令表示去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方: $ sudo find /etc/ -name interfaces 注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action] 参数 说明 -atime 最后访问时间 -ctime 最后修改文件内容的时间 -mtime 最后修改文件属性的时间 -mtime 参数举例: -mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件 -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件 -mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件 -newer file:file 为一个已存在的文件,列出比 file 还要新的文件名
文件打包与解压缩
文件后缀名 说明 .zip zip 程序打包压缩的文件 .rar rar 程序压缩的文件 .7z 7zip 程序压缩的文件 .tar tar 程序打包,未压缩的文件 .gz gzip 程序(GNU zip)压缩的文件 .xz xz 程序压缩的文件 .bz2 bzip2 程序压缩的文件 .tar.gz tar 打包,gzip 程序压缩的文件 .tar.xz tar 打包,xz 程序压缩的文件 tar.bz2 tar 打包,bzip2 程序压缩的文件 *.tar.7z tar 打包,7z 程序压缩的文件
文件打包
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip
-r 参数表示递归打包包含子目录的全部内容
-q 参数表示为安静模式
-o 表示输出文件,需在其后紧跟打包输出文件名
-x 是为了排除一些文件
-e 可以创建加密压缩包
使用 unzip 命令解压缩 zip 文件
unzipshiyanlou.zip使用安静模式,将文件解压到指定目录: unzip -q shiyanlou.zip -d ziptest 如果你不想解压只想查看压缩包的内容你可以使用 -l 参数 使用 -O(英文字母,大写 o)参数指定编码类型: unzip -O GBK 中文压缩文件.zip
rar打包压缩命令
安装 rar 和 unrar 工具 从指定压缩包文件中删除某个文件: rardshiyanlou.rar.zshrc rar a shiyanlou.rar . 上面的命令使用 a 参数添加一个目录 ~ 到一个归档文件中,如果该文件不存在就会自动创建。 全路径解压: unrarxshiyanlou.rar去掉路径解压: mkdir tmp $ unrar e shiyanlou.rar tmp/
tar打包工具
创建一个 tar 包: tar−cfshiyanlou.tar −c表示创建一个tar包文件,−f用于指定创建的文件名,注意文件名必须紧跟在−f参数之后解包一个文件(−x参数)到指定路径的已存在目录(−C参数): tar -xf shiyanlou.tar -C tardir 只查看不解包文件 -t 参数: tar−tfshiyanlou.tar保留文件属性和跟随链接(符号链接或软链接),有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(−p参数)和备份链接指向的源文件而不是链接本身(−h参数): tar -cphf etc.tar /etc
gzip
只需要在创建 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件: tar−czfshiyanlou.tar.gz 解压∗.tar.gz文件: tar -xzf shiyanlou.tar.gz 压缩文件格式 参数 .tar.gz -z .tar.xz -J *tar.bz2 -j
常用命令:
zip: 打包 :zip something.zip something (目录请加 -r 参数) 解包:unzip something 指定路径:-d 参数 tar: 打包:tar -zcvf something.tar something 解包:tar -zxvf something.tar 指定路径:-C 参数
文件系统操作与磁盘管理
基本操作
查看磁盘和目录的容量
查看磁盘容量
$df -h
查看目录容量
du -h
Linux下的帮助命令
内建命令与外部命令
type命令鉴定命令是内建还是外部
帮助命令的使用
1.help命令(只能用于显示内建命令的帮助信息) 2.外部命令用–help参数 3.man命令 在尝试上面这个命令是我们会发现最左上角显示“ LS (1)”,在这里,“ LS ”表示手册名称,而“(1)”表示该手册位于第一章节。这个章节又是什么?在 man 手册中一共有这么几个章节 章节数 说明 1 Standard commands (标准命令) 2 System calls (系统调用) 3 Library functions (库函数) 4 Special devices (设备说明) 5 File formats (文件格式) 6 Games and toys (游戏和娱乐) 7 Miscellaneous (杂项) 8 Administrative Commands (管理员命令) 9 其他(Linux特定的), 用来存放内核例行程序的文档。 4.info命令 info ls
Linux任务计划crontab
crontab命令用于设置周期性被执行的指令 crontab储存的指令被守护进程激活,crond为其守护进程,crond常常在后台运行,每一分钟会检查一次是否有预定的需要需要执行 crontab -e添加计划任务 -l查看添加任务 -r 删除任务 每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。 sudo tail -f /var/log/syslog 每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。 /etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行; /etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行; /etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行; /etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;
挑战
1、首先,由于实验楼比较特殊,我们需要先启动相应服务和启动crontab sudo service rsyslog start //启动rsyslog sudo cron -f & crontab -e //添加计划任务 0 3 * * * rm /home/shiyanlou/tmp/*.log || cp /home/shiyanlou/var/log/alternatives.log /home/shiyanlou/tmp/ (date+%Y−%m−%d).log前一段代码是删除以log为后缀名的文件的命令,后一段代码是从log目录备份alternatives.log到tmp目录下的命令。因为要选用时间命名,因此时间是个变量,就有个 ,其中%一般代表结束符,所以要加\转义。 3、写完后,查看是否添加成功 crontab -l 4、启动任务 ps aux | grep cron pgrep cron
命令执行顺序控制与管道
命令执行顺序的控制
顺序执行多条命令
简单的顺序执行可以用;来完成 $sudo apt-get update;sudo apt-get install some-tool;some-tool
有选择的执行命令
&&就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行,你可以从?环境变量获取上一次命令的返回结果 ||在这里就是与&&相反的控制效果,当上一条命令执行结果为≠0(?≠0)时则执行它后面的命令 $ which cowsay>/dev/null && echo “exist” || echo “not exist”
管道
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。 $ ls -al /etc | less
cut命令,打印每一行的某一字段
打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录
$ cut /etc/passwd -d ‘:’ -f 1,6
前五个(包含第五个)
$ cut /etc/passwd -c -5
前五个之后的(包含第五个)
$ cut /etc/passwd -c 5-
第五个
$ cut /etc/passwd -c 5
2到5之间的(包含第五个)
$ cut /etc/passwd -c 2-5
grep命令,在文本中或stdin中查找匹配字符串
grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找
wc命令,简单小巧的技术工具
wc 命令用于统计并输出一个文件中行、单词和字节的数目
行数
$ wc -l /etc/passwd
单词数
$ wc -w /etc/passwd
字节数
$ wc -c /etc/passwd
字符数
$ wc -m /etc/passwd
最长行字节数
$ wc -L /etc/passwd
sort排序命令
默认为字典排序 反转排序 sort -r 按特定字段排序 sort -t ‘:’ -k 3 -t参数用于指定字段的分隔符,这里是以”:”作为分隔符;-k 字段号用于指定对哪一个字段进行排,如果要按照数字排序就要加上-n参数
uniq 去重命令
uniq命令只能去连续重复的行,不是全文去重 达到预期效果要先用sort排序
简单的文本处理
tr命令
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。 使用方式: tr [option]…SET1 [SET2] 常用的选项有: 选项 说明 -d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配 -s 去除set1指定的在输入文本中连续并重复的字符
删除 “hello shiyanlou” 中所有的’o’,’l’,’h’
$ echo ‘hello shiyanlou’ | tr -d ‘olh’
将”hello” 中的ll,去重为一个l
$ echo ‘hellllo’ | tr -s ‘l’
将输入文本,全部转换为大写或小写输出
$ echo ‘input some text here’ | tr ‘[:lower:]’ ‘[:upper:]’
col命令
col 命令可以将Tab换成对等数量的空格键,或反转这个操作。 使用方式: col [option] -x 将Tab转换为空格 -h 将空格转换为Tab(默认选项)
join命令
用于将两个文件中包含相同内容的那一行合并在一起。 常用的选项有: 选项 说明 -t 指定分隔符,默认为空格 -i 忽略大小写的差异 -1 指明第一个文件要用哪个字段来对比,默认对比第一个字段 -2 指明第二个文件要用哪个字段来对比,默认对比第一个字段户对这个应该不会陌生,这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。 join [option]… file1 file2
创建两个文件
echo‘1hello′>file1
echo ‘1 shiyanlou’ > file2
$ join file1 file2
将/etc/passwd与/etc/shadow两个文件合并,指定以’:’作为分隔符
$ sudo join -t’:’ /etc/passwd /etc/shadow
将/etc/passwd与/etc/group两个文件合并,指定以’:’作为分隔符, 分别比对第4和第3个字段
$ sudo join -t’:’ -1 4 /etc/passwd -2 3 /etc/group
paste命令
paste [option] file… paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。 常用的选项有: 选项 说明 -d 指定合并的分隔符,默认为Tab -s 不合并到一行,每个文件为一行
数据流重定向
将cat的连续输出(heredoc方式)重定向到一个文件
默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出
cat(按Ctrl+C退出)将cat的连续输出(heredoc方式)重定向到一个文件
mkdir Documents
$ cat > Documents/test.c <
include
先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
注意下面的命令>与&之间不应该有空格,如果有空格则会出错
echo “this is test” >&3 cat somefile
$ exit
关闭文件描述符
如上面我们打开的3号文件描述符,可以使用如下操作将它关闭:
exec 3>&- cd /dev/fd;ls -Al;cd -
完全屏蔽命令的输出
在 Linux 中有一个被称为“黑洞”的设备文件,所有导入它的数据都将被“吞噬”。 创建黑洞 $ cat Documents/test.c nefile 1>/dev/null 2>&1
使用 xargs 分割参数列表
这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。 $ cut -d: -f1 < /etc/passwd | sort | xargs echo 上面这个命令用于将/etc/passwd文件按:分割取第一个字段排序后,使用echo命令生成一个列表 cat data1|cut -c 8- |sort|uniq -dc|sort -k1 -nr|head -3>result
grep
输出匹配到字符的一行 grep ‘@’ data2
sed流编辑器
sed [参数]… [执行命令] [输入文件]…
形如:
$ sed -i ‘1s/sad/happy/’ test # 表示将test文件中第一行的”sad”替换为”happy”
参数 说明 -n 安静模式,只打印受影响的行,默认打印输入数据的全部内容 -e 用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数 -f filename 指定执行filename文件中的命令 -r 使用扩展正则表达式,默认为标准正则表达式 -i 将直接修改输入文件内容,而不是打印到标准输出设备
打印2-5行
$ nl passwd | sed -n ‘2,5p’
打印奇数行
$ nl passwd | sed -n ‘1~2p’
awk文本处理语言
$ awk ‘{
if(NR==1){
OFS=”\n”
print 1, 2, 3
} else {
print}
}’ test
说明:你首先应该注意的是,这里我使用了awk语言的分支选择语句if,它的使用和很多高级语言如C/C++语言基本一致,如果你有这些语言的基础,这里将很好理解。另一个你需要注意的是NR与OFS,这两个是awk内建的变量,NR表示当前读入的记录数,你可以简单的理解为当前处理的行数,OFS表示输出时的字段分隔符,默认为” “空格,如上图所见,我们将字段分隔符设置为\n换行符,所以第一行原本以空格为字段分隔的内容就分别输出到单独一行了。然后是其中为相应的字段号,这也是的内建变量,它表示引用相应的字段,因为我们这里第一行只有三个字段,所以只引用到了N其中N为相应的字段号,这也是awk的内建变量,它表示引用相应的字段,因为我们这里第一行只有三个字段,所以只引用到了 3。除此之外另一个这里没有出现的 0,它表示引用当前记录(当前行)的全部内容。
Linux下软件安装
apt 包管理工具介绍
APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包。 从软件源镜像服务器更新本地软件源 从本地软件源获得地址,再从网上下载 apt-get 是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,下面列出一些apt-get包含的常用的一些工具: 工具 说明 install 其后加上软件包名,用于安装一个软件包 update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表 upgrade 升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次update dist-upgrade 解决依赖关系并升级(存在一定危险性) remove 移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件 autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包 purge 与remove相同,但会完全移除软件包,包含其配置文件 clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/ autoclean 移除已安装的软件的旧版本软件包 下面是一些apt-get常用的参数: 参数 说明 -y 自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用 -s 模拟安装 -q 静默安装方式,指定多个q或者-q=#,#表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用 -f 修复损坏的依赖关系 -d 只下载不安装 –reinstall 重新安装已经安装但可能存在问题的软件包 –install-suggests 同时安装APT给出的建议安装的软件包
更新软件源
$ sudo apt-get update
升级没有依赖问题的软件包
$ sudo apt-get upgrade
升级并解决依赖关系
$ sudo apt-get dist-upgra
sudo apt-get remove w3m
卸载软件
不保留配置文件的移除
$ sudo apt-get purge w3m
软件搜索
当自己刚知道了一个软件,想下载使用,需要确认软件仓库里面有没有,就需要用到搜索功能了,命令如下: sudo apt-cache search softname1 softname2 softname3…… apt-cache 命令则是针对本地数据进行相关操作的工具
使用dpkg
使用dpkg从本地磁盘安装deb软件包 dpkg常用参数介绍: 参数 说明 -i 安装指定deb包 -R 后面加上目录名,用于安装该目录下的所有deb安装包 -r remove,移除某个已安装的软件包 -I 显示deb包文件的信息 -s 显示已安装软件的信息 -S 搜索已安装的软件包 -L 显示已安装软件包的目录信息
从二进制包安装
我们需要做的只是将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可
Linux进程之初步了解
可以从两个角度来分进程:
以进程的功能与服务的对象来分;
以应用程序的服务类型来分; 第一个角度来看,我们可以分为用户进程与系统进程: 用户进程:通过执行用户程序、应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。 系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作;而且该进程的运行不受用户的干预,即使是 root 用户也不能干预系统进程的运行。 第二角度来看,我们可以将进程分为交互进程、批处理进程、守护进程 交互进程:由一个 shell 终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。 守护进程:守护进程是一直运行的一种进程,在 Linux 系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如 httpd 进程,一直处于运行状态,等待用户的访问。还有经常用的 cron(在 centOS 系列为 crond)进程,这个进程为 crontab 的守护进程,可以周期性的执行用户设定的某些任务。
PID process identification PCB 进程控制块 fork()产生当前进程的一个子进程,除了父进程的返回值和 PID 以外其他的都一模一样 exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段 当一个进程结束时他的主函数会执行exit(n)或者return n 这里的返回值n是一个信号,系统会把这个信号给其父进程 若不能正常返回这个值,这样的进程叫做僵尸进程Zombie该进程就会一直占用一个PCB虽然几乎没有消耗内存但linux中PID的数量是有限的,所以要及时处理。 另外如果父进程结束(非正常的结束),未能及时收回子进程,子进程仍在运行,这样的子进程称之为孤儿进程。在 Linux 系统中,孤儿进程一般会被 init 进程所“收养”,成为 init 的子进程。由 init 来做善后处理,所以它并不至于像僵尸进程那样无人问津,不管不顾,大量存在会有危害。
进程 0 是系统引导时创建的一个特殊进程,也称之为内核初始化,其最后一个动作就是调用 fork() 创建出一个子进程运行 /sbin/init 可执行文件,而该进程就是 PID=1 的进程 1,而进程 0 就转为交换进程(也被称为空闲进程),进程 1 (init 进程)是第一个用户态的进程,再由它不断调用 fork() 来创建系统里其他的进程,所以它是所有进程的父进程或者祖先进程。同时它是一个守护程序,直到计算机关机才会停止。
进程组与 Sessions
每一个进程都会是一个进程组的成员,而且这个进程组是唯一存在的,他们是依靠 PGID(process group ID)来区别的,而每当一个进程被创建的时候,它便会成为其父进程所在组中的一员。
进程管理
top实时查看进程的状态,每五秒钟查看一次 ps静态查看当前的进程信息 pstree来查看当前活跃进程的树形结构
进程查看
top工具的使用
top 表示当前程序的名称 11:05:18 表示当前的系统的时间 up 8 days,17:12 表示该机器已经启动了多长时间 1 user 表示当前系统中只有一个用户 load average: 0.29,0.20,0.25 分别对应1、5、15分钟内cpu的平均负载 top第二行 Tasks: 26 total 进程总数 1 running 1个正在运行的进程数 25 sleeping 25个睡眠的进程数 0 stopped 没有停止的进程数 0 zombie 没有僵尸进程数 第三行 Cpu(s): 1.0%us 用户空间进程占用CPU百分比 1.0% sy 内核空间运行占用CPU百分比 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比 97.9%id 空闲CPU百分比 0.0%wa 等待输入输出的CPU时间百分比 0.1%hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0%si 软中断(Software IRQ)占用CPU的百分比 0.0%st (Steal time) 是 hypervisor 等虚拟服务中,虚拟 CPU 等待实际 CPU 的时间的百分比 来看 top 的第四行数据,这一行基本上是内存的一个使用情况的统计了: 8176740 total 物理内存总量 8032104 used 使用的物理内存总量 144636 free 空闲内存总量 313088 buffers 用作内核缓存的内存量 来看 top 的第五行数据,这一行基本上是交换区的一个使用情况的统计了 内容 解释 total 交换区总量 used 使用的交换区总量 free 空闲交换区总量 cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖 在下面就是进程的一个情况了
列名 解释 PID 进程id USER 该进程的所属用户 PR 该进程执行的优先级 priority 值 NI 该进程的 nice 值 VIRT 该进程任务所使用的虚拟内存的总数 RES 该进程所使用的物理内存数,也称之为驻留内存数 SHR 该进程共享内存的大小 S 该进程进程的状态: S=sleep R=running Z=zombie %CPU 该进程CPU的利用率 %MEM 该进程内存的利用率 TIME+ 该进程活跃的总时间 COMMAND 该进程运行的名字
ps、kill、pstree
Linux之日志系统
系统日志、应用日志
常见的系统日志
日志名称 记录信息 alternatives.log 系统的一些更新替代信息记录 apport.log 应用程序崩溃信息记录 apt/history.log 使用 apt-get 安装卸载软件的信息记录 apt/term.log 使用 apt-get 时的具体操作,如 package 的下载、打开等 auth.log 登录认证的信息记录 boot.log 系统启动时的程序服务的日志信息 btmp 错误的信息记录 Consolekit/history 控制台的信息记录 dist-upgrade dist-upgrade 这种更新方式的信息记录 dmesg 启动时,显示屏幕上内核缓冲信息,与硬件有关的信息 dpkg.log dpkg 命令管理包的日志。 faillog 用户登录失败详细信息记录 fontconfig.log 与字体配置有关的信息记录 kern.log 内核产生的信息记录,在自己修改内核时有很大帮助 lastlog 用户的最近信息记录 wtmp 登录信息的记录。wtmp可以找出谁正在进入系统,谁使用命令显示这个文件或信息等 syslog 系统信息记录
rsyslog 通过 Facility 的概念来定义日志消息的来源,以便对日志进行分类,Facility 的种类有: 类别 解释 kern 内核消息 user 用户信息 mail 邮件系统消息 daemon 系统服务消息 auth 认证系统 authpriv 权限系统 syslog 日志系统自身消息 cron 计划安排 news 新闻信息 local0~7 由自定义程序使用 而另外一部分 priority 也称之为 serverity level,除了日志的来源以外,对统一源产生日志消息还需要进行优先级的划分,而优先级的类别有一下几种: 类别 解释 emergency 系统已经无法使用了 alert 必须立即处理的问题 critical 很严重了 error 错误 warning 警告信息 notice 系统正常,但是比较重要 informational 正常 debug debug的调试信息 panic 很严重但是已淘汰不常用 none 没有优先级,不记录任何日志消息
与日志相关的还有一个还有常用的命令 logger,logger 是一个 shell 命令接口,可以通过该接口使用 Syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入信息。
首先将syslog启动起来
sudo service rsyslog start
向 syslog 写入数据
ping 127.0.0.1 | logger -it logger_test -p local3.notice &
查看是否有数据写入
tail -f /var/log/syslog
转储的日志
logrotate 程序不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志