文|Seraph
sudo passwd root
给root添加密码。软件和更新
中变更软件源。Ctrl+Alt+T
打开仿真终端窗口Ctrl+Alt+Fn
切换控制台界面,linux系统允许用户同时打开6个虚拟控制台(tty1~tty6)。符号 | 含义 |
---|---|
* | 表示任何字符串 |
? | 表示任何单个字符 |
[] | 表示一个字符序列 |
! | 在[]中使用!表示排除其中任意字符 |
^ | 只在一行的开头匹配字符串 |
$ | 只在行尾匹配字符串 |
符号 | 含义 |
---|---|
* | 匹配任意多个模式 |
+ | 匹配1个或多个模式 |
? | 匹配模式表中任何一个模式 |
@ | 仅匹配模式表中一个给定模式 |
! | 除了给定模式表中的一个模式之外,它可以匹配其他任何字符串 |
环境变量 | 含义 |
---|---|
PATH | 可执行命令的搜索路径 |
HOME | 用户主目录 |
LOGNAME | 当前用户的登录名 |
HOSTNAME | 主机名 |
PSI | 当前命令提示符 |
SHELL | 用户当前的Shell |
;
隔开;\
表示命令行持续到下一行。su root
切换,但是可以使用sudo su root
命令。/etc/passwd
配置文件中账户名:密码:UID:GID:注释:主目录:Shell
*
。/etc/shadow
中,且密码都是由MD5加密后保存的。账户名:密码:最近一次修改:最短有效期:最长有效期:过期前警告器:过期日期:禁用:保留用于未来扩展
/etc/group
组名:组密码:GID:组成员列表
/etc/gshadow
组名:加密后的组密码:组管理员:组成员列表
sudo apt install gnome-system-tools
awk
awk -F':' '{print $1}' /etc/passwd
useradd
useradd [选项] <用户名>
/etc/default/useradd
配置文件中的定义为新建用户账户提供默认值。-D
选项用于显示默认的useradd
配置。adduser
passwd
passwd [选项] <用户名>
usermod
usermod [选项] <用户名>
chfn
chfn [选项] <用户名>
userdel
userdel [-r] <用户名>
-r
,则在删除该账户的同时,一并删除该账户对应的主目录和邮件目录。deluser
groupadd
groupadd [选项] <组名>
addgroup
groupmod
groupdel
delgroup
groups
gpasswd
adduser deluser
id
who
last
符号 | 含义 |
---|---|
. 或 ./ | 当前目录 |
… 或 …/ | 上一层目录 |
~ | 当前用户的主目录 |
目录 | 存放内容 |
---|---|
/bin | 存放用于系统管理维护的常用实用命令文件 |
/boot | 存放用于系统启动的内核文件和引导装载程序文件 |
/dev | 存放设备文件 |
/etc | 存放系统配置文件 |
/home | 各个用户的主目录 |
/lib | 存放动态连接共享库 |
/media | 为光盘软盘等设备提供的默认挂载点 |
/mnt | 为某设备提供的默认挂载点 |
/root | root用户主目录 |
/proc | 系统自动产生的映射文件 |
/sbin | 存放系统管理员或者root用户使用的命令文件 |
/usr | 存放应用程序和文件 |
/var | 保持经常变化的内容,如系统日志、打印 |
ls -l
执行后文件信息格式如下rwxr-xr-x 2 liushupeng liushupeng 4096 Dec 28 2018 Videos
文件权限 链接 所有者 所属组 容量 修改日期 文件名
常见的软件包格式:
RPM(RedHat Package Manager)
,已成为目前Linux各发行版中应用最广泛的软件包格式,使用rpm工具来管理;
Deb(Debian packager)
,是Debian和Ubuntu系列发行版本使用的软件包格式,使用dpkg命令进行管理。
使用这两种包管理都需要自己考虑软件包依赖性。
高级软件包管理工具:
Yum(Yellow dog Updater, Modified)
是基于RPM包的软件包管理;
APT(Advanced Packaging Tools
是Debian及派生发行版的软件包管理器。
使用这两种高级软件包管理器,可以自动处理依赖性关系。但如果安装过程中由于兼容问题、安装源等问题停止,则需要用户自己来解决软件依赖问题。
PPA(Personal Package Archive)是个人软件包档案,Ubuntu官方仓库收录的软件比较正式,版本也就相对滞后,PPA则可以第一时间体验到最新版本软件。
PPA维护网站地址launchpad.net
添加PPA源命令:add-apt-repository ppa:user/ppa-name
删除PPA源命令: add-apt-repository -r ppa:user/ppa-name
添加PPA源后记得更新软件更新列表,再安装。
Ubuntu的 /var/lib/apt/lists
目录存放的是已经下载的各软件源的元数据;
var/lib/dpkg/states
目录存放的是Ubuntu软件中心和APT安装和卸载软件的信息。
软件更新器通过比较这两个目录信息来判断是否更新。
apt-cache 查询软件包
apt-cache pkgnames
列出当前所有可用的软件包
apt-cache search xxx
搜索包含xxx名字的所有软件
apt-cache show 软件包名
查看指定名称的软件包的详情
apt-cache depends 软件包名
查看软件包所依赖的软件包
atp-cache rdepends 软件包名
查看软件包被哪些软件包所依赖
apt-cache showpkg 软件包名
查看软件包的依赖关系信息
apt-cache policy 软件包名
显示软件包的安装状态和版本信息
apt-get 操作软件包
子命令 | 说明 |
---|---|
apt-get update | 获取最新的软件包列表,同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的源的索引 |
apt-get upgrade | 更新当前系统中所有已安装的软件包,并同时更新这些软件包所依赖的软件包 |
apt-get install | 下载、安装软件包并自动解决依赖关系 |
apt-get remove | 卸载指定的软件包 |
apt-get autoremove | 自动卸载所有未使用的软件包 |
apt-get purge | 卸载指定的软件包及其配置文件 |
apt-get source | 下载软件包的源代码 |
apt-get clean | 清理已下载的软件包,实际上是清理/var/cache/apt/archives 目录中的软件包 |
apt-get autoclean | 删除已卸载的软件的软件包备份 |
/var/cache/apt/archives
下升级的最新版本来源于/etc/apt/sources.list
列表中给出的安装源,另外与该文件功能相同的是/etc/apt/sources.list.d/
目录下的.list文件。
sources.list文件软件源记录信息含义:
eg. deb http://us.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
第1个字段用于指示软件包的类型;
第2个字段定义URL,表示提供软件源的CD-ROM、HTTP或FTP服务器的URL地址;
第3个字段定义软件包的发行版本或分类,用于帮助APT命令遍历软件库。这些字段是用空格隔开的字符串,每个字符串分别对应相应的目录结构。如下:
main
Canonical支持的开源软件,大部分都是从这个分支获取的;
universe
社区维护的开源软件
restricted
由设备生产商专用的设备驱动软件
multiverse
受版权或者法律保护的相关软件
security
重要的安全更新
updates
推荐的一般更新
proposed
预览版的更新
backports
无支持的更新,这种更新一般存在一些bug
这些信息实际上指向的是http:archive.ubuntu.com/ubuntu/
下dists目录。
如要修改sources.list文件,需记得先使用cp命令备份一下文件
新立得界面软件包管理器(Synaptic Package Manager)安装apt-get install synaptic
使用alien
可以将.rpm格式转换为.deb。
.run与.bin下载以后,给文件添加执行软件,安装即可
chmod +x 文件名.run
通常安装目录下回提供反安装脚本uninstall,如没有则会提供维护工具,例如QT的MaintenanceTool。
使用源码安装比较复杂,再说。。。
静态查询进程命令ps
。
常用命令ps -aux
显示的部分列信息含义如下:
VSZ表示占用虚拟内存的数量
RSS表示驻留内存的数量
TTY表示进程的控制终端(?表示与控制终端没有关联)
STAT表示进程运行状态(R准备就绪 S可中断的休眠状态 D不可中断的休眠状态 T暂停执行 Z不存在但暂时无法消除 W无足够内存页面可分配 <高优先级 N低优先级 L内存页面被锁定 s创建会话的进程 1多线程进程 +前台进程组)
动态查询进程命令top
,按空格键立即刷新。
部分列信息含义如下:
PR表示优先级
NI表示nice值(负值表示高优先级,正值表示低优先级)
VIRT表示进程使用的虚拟内存总量(单位kb)
RES表示进程使用的、未被换出的物理内存大小(单位kb)
SHR表示共享内存大小
S表示进程状态
进程管理
系统启动
GRUB配置文件/boot/grub/grub.cfg
,该文件是由grub-mkconfig
命令根据/etc/grub.d
中的模板和/etc/default/grub
中的设置自动生成的。
所以我们编辑/etc/default/grub
后,输入update-grub
命令后修改内容便会自动更新至/boot/grub/grub.cfg
文件中。
Ubuntu运行级别
Linux标准的运行级别从0~6,Debian系列的Linux版本一般讲运行级别2作为默认启动的级别。
Ubuntu与Redhat的运行级别如下:
级别 | Ubuntu | Redhat |
---|---|---|
0 | 关机(halt) | 关机 |
1 | 单用户模式。以root身份开启一个虚拟控制台,主要用于管理员维护系统 | 同Ubuntu |
2 | 带显示器(GUI)的完整多用户模式 | 多用户模式,不支持NFS。除不启动网络功能外,级别与3相同 |
3 | 带显示器(GUI)的完整多用户模式 | 完整多用户模式。允许所有用户登录,拥有完整的功能,但是以文本模式进入系统 |
4 | 带显示器(GUI)的完整多用户模式 | 保留。用户自定义环境 |
5 | 带显示器(GUI)的完整多用户模式 | X11图形模式。与级别3功能一样,拥有完整功能,以图形界面模式进入系统 |
6 | 重启 | 重启 |
Ubuntu现在采用Upstart与System V initialzation启动服务。
Linux使用Internet网络服务文件/etc/services
来定义网络服务名和它们对应使用的端口号及协议。
Linux系统的端口范围为0~65535,分为三个不同意义的范围:
Ubuntu会将服务的启动脚本存放在/etc/init.d
目录下。
Ubuntu将各个运行级别对应的脚本文件存放在/etc/rcn.d
目录中。这些目录下存放的是指向/etc/init.d
目录中脚本程序的符号链接。
命名规则为:S表示启动,K表示停止,后面接的数字表示执行顺序。
从所有运行级别中删除指定服务的启动项
update-rc.d -f 服务名 remove
向所有运行级别中添加指定服务的启动项
update-rc.d -f 服务名 defaults
使用Linux服务启动脚本管理服务语法:
/etc/init.d/服务启动脚本名 {start|stop|status|restart|reload|force-reload}
其中reload指不重新启动服务的前提下加载该服务的配置文件。
也可使用service
命令来替代脚本的全路径。
service 服务启动脚本名 {start|stop|status|restart|reload|force-reload}
配置服务启动状态
其它Linux发行版通常使用chkconfig工具来配置服务启动状态,Ubuntu可以使用sysv-rc-conf工具:
sysv-rc-conf --list
命令将显示所有服务各个运行级别(1-6)的启动状态。sysv-rc-conf 服务名
启动或关闭某项指定服务sysv-rc-conf --level <运行级别列表> 服务名
设置指定运行级别中服务的启动状态update-rc.d
配置服务:update-rc.d [-f] 服务名 disable|enable [S|2|3|4|5]
/etc/crontab
定义系统级周期性任务/etc/cron.d
添加指定时间计划任务crontab [-u 用户名] [-e|-l|-r]
,该命令生成的cron调度文件位于/var/spool/cron/crontabs
目录下at 时间参数
atq
查看为未执行的at任务atrm 序号
删除指定的at作业HH:MM
时刻MMDDYY、MM/DD/YY、MM.DD.YY
日期格式January 15 2018
)midnight
表示12:00 AM、noon
12:00PM、 teatime
4:00 PM)now + n[minutes/hours/days/weeks]
从现在开始多少时间可以执行/etc/syslog.conf
/etc/rsyslog.conf
,并且将所有配置文件放置/etc/rsyslog.d
目录下,默认的是/etc/rsyslog.d/50-default.conf
。信息来源.优先级 处理方式
信息来源 | 说明 | 信息来源 | 说明 |
---|---|---|---|
authpriv | 安全/授权 | 电子邮件系统 | |
cron | at或cron定时执行 | news | 网络新闻系统 |
daemon | 守护进程 | syslog | syslogd内部 |
ftp | ftp守护进程 | user | 一般用户级别 |
kern | 内核 | uucp | UUCP系统 |
lpr | 打印系统 | localN | 保留 |
优先级 | 说明 | 优先级 | 说明 |
---|---|---|---|
debug | 调试排错信息,仅对程序开发人员有用 | err | 一般的错误信息 |
info | 一般信息,可以忽略 | crit | 关键状态信息 |
notice | 正常提示信息 | alert | 需特别注意的警报信息,一般要迅速更正 |
warn | 可能是由问题的警告信息 | emerg | 最严重,紧急状况,一般是系统不可用 |
/var/log
目录心中。#!/bin/bash
echo "Hello World!"
echo -n “当前日期和时间”
date
echo "当前登录用户名:`whoami`"
其中#!/bin/bash
表示使用的Shell解析器是bash
echo
命令用来显示提示信息,参数-n
表示在显示信息时不自动换行
反引号用于命令转换,所以执行whoami
命令
包含外部脚本文件用法
. 脚本文件名
或
source 脚本文件名
执行Shell脚本方式
bash 脚本名称 [参数]
bash < 脚本名
bash [选项] 脚本名
-v
-x
选项都是允许用户查看Shell程序的读入和执行,不同的是-v
打印的是命令行的原始内容,而-x
打印的是替换后的命令行内容。内部变量 | 说明 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n表示第几个参数,当参数超过10时,用{} 界定 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数。被双引号包含时,会将各个参数分开输出 |
$? | 上个命令的退出状态或返回值 |
$$ | 当前Shell进程ID |
可以使用set [参数列表]
为位置参数重新赋值。
printf命令格式
printf 格式字符串 [参数列表...]
echo输出显示
单引号字符串不进行转义。
变量值读取
read 变量
-p
用于定义提示语句-n
用于设置最大读取长度${var}
替换为变量本来的值${var:-word}
如果变量var为空或已被删除,则返回word,但不改变var的值${var:=word}
如果变量var为空或已被删除,则返回word,并将var值设置为word${var:?message}
如果变量var为空或已被删除,则将消息message发送至标准错误输出${var:+word}
如果变量var被定义,则返回word,但不改变var的值myarray=(A B C D)
${myarrsy[下标]}
${myarrsy[*]}
或 ${myarrsy[@]}
${#myarrsy[@]}
${#myarrsy[n]}
expr 表达式
val=${5+3}
或let val=5+3
test 逻辑表达式
或[ 逻辑表达式]
-eq
相等-ne
不相等-gt
大于-lt
小于-ge
大于等于-le
小于等于=
检测两个字符是否相等!=
检测两个字符是否不相等-z
检测字符是否长度是否为0-n
检测字符长度是否不为0文件测试运算符 | 含义 |
---|---|
-b | 检测文件是不是块文件 |
-c | 检测文件是不是字符设备文件 |
-d | 检测文件是不是目录 |
-f | 检测文件是不是普通文件 |
-g | 检测文件是不是设置了SGID位 |
-k | 检测文件是否设置了粘着位 |
-p | 检测文件是不是具体管道 |
-u | 检测文件是否设置了SUID位 |
-r | 检测文件是否可读 |
-w | 检测文件是否可写 |
-x | 检测文件是否可执行 |
-s | 检测文件是否为空 |
-e | 检测文件或目录是否存在 |
-a
与运算-o
或运算!
非运算if [ 条件表达式1 ]
then
语句序列1
elif [ 条件表达式2 ]
then
语句序列2
else
语句序列3
fi
case 值 in
模式1)
语句序列1
;;
模式2)
语句序列2
;;
......
模式n)
语句序列n
;;
*)
其它语句序列
esac
while 测试条件
do
语句序列
done
until 测试条件
do
语句序列
done
for 变量 [in 列表]
do
语句序列
done
break、continue语句
break [n]
表示跳出几层循环。
exit语句
exit [n]
n是设定的退出值。
函数定义和调用
[function] 函数名()
{
命令序列
[return 返回值]
}
直接使用函数名即能调用函数。
后面两章为JAVA、Android开发和LAMP平台与PHP开发环境的搭建,暂时不需要,就不记录了。