前言
根据自己的记忆和理解方式,总结了最近学习和接触到的Linux理论和指令。
涉及Linux目录,文件管理,系统,设备管理,进程管理,网络管理,用户管理等。
(此外,Vi使用 以及 Shell脚本编写在别篇)
Linux概述
linux内核版本号
x.y.zz(y次版本号,偶数稳定版,奇数发展版)
Linux目录
目录 | 功能 | 助记/备注 |
---|---|---|
/bin | 常用系统程序目录 | binary |
/boot | 开技设定目录 | boot |
/dev | 系统设备装置文件目录 | device /dev/null 垃圾箱 |
/etc | 系统配置文件,尤其是passwd,shadow文件 | Edit Text Configuration |
/home | 系统使用者的目录 | |
/lib | Linux执行或编译程序函数库的目录 | Libary |
/mnt | 软驱和光驱接入挂载的地方 | |
/proc | 系统核心与程序的一些信息 | |
/tmp | 临时文件目录 | Temporary 临时的 |
/sbin | 系统管理员常用指令集和程序 | |
/usr | /usr/sbin 系统管理员的管理程序和指令 /usr/bin 一般执行文件摆放的地方 |
|
/var | 摆放系统日志文件 | /var/log |
系统启动或关闭
init
暂时更改系统运行级别
权限:root
语法:
1 | init [0123456] |
重要参数
0:关机级别
1:单用户运行级别
2:多用户
3:多用户,字符模式
4:用户自定义
5:图形界面
6:重启
shutdown
关闭或重启系统
权限:root
语法:
1 | shutdown [选项] [时间] [警告信息] |
选项:
1 | -r: shutdown之后重启 |
时间:now 或者 +时间值
poweroff
关闭系统和关闭电源
权限:所有用户
语法:
1 | poweroff [选项] |
选项:
1 | -p: 关闭计算机后再关闭电源 |
用户和组管理
用户管理
超级用户:UID 0 (默认为root)
系统用户:UID 100以下
普通用户:UID 500+
/etc/passwd:账号文件
1 | aaron:x:1002:1002:aaron:/home/aaron:/bin/bash |
/etc/shadow:口令文件
/etc/group:用户组信息文件
1 | aaron:x:500:a1,a2 |
useradd
添加用户
语法:
1 | useradd [选项] [参数] <newUsername> |
选项/参数:
1 | -d: 指定主目录 (directory) |
示例:
1 | # useradd aaron |
默认条件下:系统自动分配一个500以上的UID和GID,默认创建一个与UID同名的GID组,默认在home目录下创建同名文件夹为主目录。
passwd
修改密码(root可以修改所有的密码,普通用户只能修改自己的密码)
语法:
1 | passwd [选项] <Username> |
usermod
修改用户属性
语法:
1 | usermod [选项] [参数] <Username> |
选项/参数:(同useradd)
1 | -d: 指定主目录 (directory) |
userdel
删除用户
语法:
1 | userdel [选项] <Username> |
选项:
1 | -r: 删除用户的同时删除主目录 |
组管理
groupadd
添加用户组
语法:
1 | groupadd [选项] <GroupName> |
选项:
1 | -g: 设定组ID |
示例:
1 | groupadd -g 501 worker |
groupmod
修改组属性
语法:
1 | groupmod [选项] <GroupName> |
选项:
1 | -g GID:设定组ID |
账号查看
who
显示系统中有哪些用户正在使用
语法:
1 | who [选项] |
选项:
1 | -u: 显示详细的用户状态 |
示例:
1 | $ who -uH |
w
显示系统中用户使用情况,是who的增强版
语法:
1 | w [选项] [user] |
选项:
1 | -s: 简短模式 |
whoami
显示当前用户名
语法:
1 | whoami |
id
显示用户信息
语法:
1 | id [选项] |
选项:
1 | -g: 只显示GID |
su
切换用户身份
语法:
1 | su [选项] [username] |
选项:
1 | -l: 同时切换用户主目录 |
sudo
以root身份执行指令
权限:在 /etc/sudoers 中有出现的使用者
语法:
1 | sudo command |
Shell
/etc/shells: 查看系统支持的shell
一般shell都在/bin/xxx目录下(xx为shell名,例如/bin/bash )
root 提示符# 其他用户提示符$
输入/输出重定向
文件描述符(0, 1, 2)
0:标准输入
1:标准输出
2:标准错误输出
重定向控制符
< 文件 :输入重定向控制符,输入内容从文件获取
> 文件:输出重定向控制符(覆盖)
>> 文件:输出重定向控制符(追加)
重定向高级用法
- 文件描述符[0,1,2] 重定向控制符[>,<,<<] 文件
例:重定向标准输出到文件中
1 | command xxx 1>文件 |
管道
符号:"|"
用于连接进程,通过管道连接的进程可以同时运行,并且随着数据流在她们之间传递可以自动地进行协调。
文件与目录
文件权限属性
文件类型:
1 | -:普通文件 |
权限码(rwx):
1 | r = 4 # 读 |
文件/目录/属性操作
ls
显示指定目录下的目录和文件
语法:
1 | ls [选项] 目录名 |
选项:
1 | -a:显示隐藏文件("."开头) |
示例:
1 | $ ls -l |
cd
切换工作目录
语法:
1 | cd 目录名 |
参数:
1 | ~ : 用户主目录 |
pwd
查看当前工作目录
语法:
1 | pwd |
mkdir
创建目录
语法:
1 | mkdir [选项] 目录 |
选项:
1 | -p:确保目录名称存在,不存在则创建一个 |
rmdir
删除空目录
语法:
1 | rmdir [-p] 目录名 |
选项:
1 | -p:当子目录被删除后也成为空目录时,也一并删除 |
touch
用于修改文件的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
语法:
1 | touch [选项] 文件1 [文件2...] |
不加选项的话修改时间记录为当前系统时间
rm
删除文件或目录(删除目录要 -r)
语法:
1 | rm [选项] 文件名或目录名 |
选项:
1 | -r:递归删除目录一下文件 |
cp
复制文件或目录(目录用 -a)
语法:
1 | cp [选项] 源文件或目录 目标文件或目录 |
选项:
1 | -a:复制目录时使用,保留链接、文件属性,且递归复制目录下所有内容,相当于-pdr |
mv
移动或更名指定的文件或目录
语法:
1 | mv [选项] 源文件或目录 目标文件或目录 |
mv参数设置与运行结果:
命令格式 | 运行结果 |
---|---|
mv 文件名 文件名 | 将源文件名改为目标文件名 |
mv 文件名 目录名 | 移动文件到目录 |
mv 目录名 目录名 | 目标目录存在,将源目录移动到目标目录 目标目录不存在,则改名 |
mv 目录名 文件名 | 错误 |
选项:
1 | -i:交互模式,覆盖询问 |
find
从指定目录开始递归查找文件,并可以对其进行操作
语法:
1 | find 起始目录 <选项查找条件> |
选项:
1 | -name <name>:正则匹配字符串(-iname 忽略大小写) |
示例:
1 | # find ~ -name "test*" -ls -exec rm {} \; |
ln
为源文件创建一个链接,但不复制源文件
语法:
1 | ln [选项] 源对象 目的对象 |
选项:
1 | -s:进行软链接 |
硬链接:文件的副本(别名),同时两者存在连接关系,修改其中一个另一个也会一同被修改,删除一个,另一个不受影响。两者在硬盘上只有一份数据,只存在于同一个文件系统中。
软链接:一个快捷方式,是一个内容指向另一个文件位置的特殊文件。删了源文件就没用了。可以跨越文件系统。
个人理解:
chmod
改变目录或文件的权限
语法:
1 | chmod [选项] <mode> <文件名或目录> |
选项:
1 | -R:递归对目录下的所有子文件与子目录进行相同的权限变更 |
权限修改:
- 用数字修改
1 | 4:r |
- 用指令修改权限
1 | u:所有者user |
chown
改变指定目录或文件(用-R)的所属用户、所属组
权限:root
语法:
1 | chown [选项] 用户名[:组名] 文件或目录名 |
选项:
1 | -R:递归对子文件或目录操作 |
chgrp
改变文件/目录的所属组
权限:所有使用者
语法:
1 | chgrp [选项] 组名 文件或目录名 |
选项:
1 | -R:递归对子文件或目录操作 |
文字显示/文件操作
cat
显示文件内容
语法:
1 | cat [选项] 文件名 |
选项:
1 | -n:显示行号 |
more
分页显示文件内容
b上一页,空格下一页,回车下一行,
语法:
1 | more [选项参数] 文件名 |
选项参数:
1 | -<数字>:指定每屏显示的行数 |
less
分页显示文件内容,与more十分相似,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。more读的时候会全部加载,而less部分加载,所以less有时候会更快。
PageUp键上翻页,PageDown向下翻。Q键退出。
语法:
1 | less [选项] 文件 |
选项:
1 | -n:显示行号 |
head
显示文件前N行内容或前N个字节,默认为前10行
语法:
1 | head [选项] 文件 |
选项:
1 | -n<数字> :显示前N行 |
tail
显示文件后N行内容或前N个字节,默认为前10行
语法:
1 | tail [选项] 文件 |
选项:
1 | -n<数字> :显示后N行 |
cut
从文件中过滤或提取特定内容并显示
语法:
1 | cut [选项] 文件名 |
选项:
1 | -d<分隔符>:指定分隔符号(可用引号包起来) |
示例:
1 | [root@localhost text]# cut -f2,4 -d";" test.txt |
wc
(wordcount)统计一个文件多少字/字节/行
语法:
1 | wc [选项] 文件名 |
选项:
1 | -c:只显示字节Bytes数;(char(字节)) |
sort
对输出的内容进行排序(不改变文件)
语法:
1 | sort [选项] 文件名 |
选项:
1 | -r:反向排序(reverse) |
echo
显示文字
语法:
1 | echo [选项] 字符串 |
选项:
1 | -n:最后不换行 |
cal
日历显示
语法:
1 | cal [选项] [[月] 年] |
选项:
1 | 无参数则本月日历 |
date
显示系统时间 或 设定系统时间
语法:
1 | date [选项] [+format] |
选项:
1 | -d <dateStr>:显示 字符串所指的日期与时间。字符串须加双引号; |
日期格式字符串列表
1 | %H 小时,24小时制(00~23) |
示例:
格式化输出
1 | date +"%Y-%m-%d" |
设置时间:
1 | date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00 |
grep
行搜索工具
选项:
1 | -v # 不包含 |
tr
对标准输入的字符进行替换、压缩和删除
语法:
1 | tr [选项] 字符串1 字符串2 |
选项:
1 | -d # 删除字符1中出现的输入字符 |
示例:
1 | $ tr 'a-z' 'A-Z' < works.txt |
压缩指令
tar
语法:
1 | tar [选项] 目录或文件 |
选项:
1 | -zcvf # 压缩 |
gzip
语法:
1 | gzip [选项] 文件名 |
压缩:
1 | gzip File |
解压:
1 | gzip -d file.gz |
unzip
解压zip文件
解压:
1 | unzip -x File.zip |
联机、帮助指令
获取命令的帮助
man
语法:
1 | man [选项] 命令或配置文件 |
示例:
1 | man ls |
info
语法:
1 | info <命令名> |
help
语法:
1 | help [命令名] |
—help参数
语法:
1 | <命令> --help |
文本格式转换
unix2dos, dos2unix
系统 | 换行符 |
---|---|
windows | ^M^J (回车换行) |
Linux | ^J (换行) |
设备管理
磁盘设备描述
前两个字母:设备类型
1 | hd # IDE硬盘 |
第三个字母:设备编号
数字:分区
1 | sda2:第1块SCSI硬盘的第1个分区 |
文件系统
FAT
早期Windows的文件系统
NTFS
目前Windows普遍的文件系统
Ext
Linux引入的可扩展文件系统
VFS
Linux的虚拟文件系统,(接口层),屏蔽不同的文件系统,实现对各种文件系统的支持。
fdisk -l
查看本机硬盘及分区情况
1 | $ fdisk -l |
mount
挂载设备
语法:
1 | mount [选项] 设备名 挂载点 |
选项:
1 | -t <文件系统类型> |
挂载过程
- 获取设备名
1 | fdisk -l |
- 建立挂载点目录
1 | mkdir /mnt/目录名 |
- mount 命令挂载
1 | mount 设备名 挂载点 |
umount 卸载设备命令
卸载挂载的设备
语法:
1 | umount 挂载点/设备名 |
磁盘管理
mkfs
格式化硬盘分区(创建文件系统)(mkFileSystem)
语法:
1 | mkfs -t 文件系统 设备名 |
df
查看磁盘使用情况
1 | df [选项] |
du
统计目录或文件所占磁盘空间大小
1 | du [选项] 目录名 |
进程管理
进程概念
交互进程:由Shell启动的进程
守护进程:在后台运行的进程
批处理进程:管理进程的序列
进程的属性:PID, PPID(父进程ID), UID, GID, 状态, 优先级, 资源占用
杀终止父进程会连带终止子进程
系统的第一个进程init(PID=1)(所有进程的父进程)
线程操作
手工启动线程
1 | xxxx & # 后台运行程序加"&" |
at
指定时间执行命令序列
1 | at [选项] TIME |
选项:
1 | -l # 列出所有作业(可以使用atq) |
ps
显示瞬间进程动态(另外,top指令可以动态监控进程)
1 | ps [选项] |
选项:
1 | -e # 显示所有进程 |
pstree
以树状结构显示系统中的所有进程
1 | pstree [选项] [PID|User] |
可以指定显示指定PID的信息 或 指定User的进程信息
kill
结束进程
1 | kill [-s signal] PID |
选项:
1 | -s signal # 指定信号。重启(1),强制杀死(9),结束(10) |
jobs
查看后台进程
ctrl+Z
挂起当前线程
fg
前台执行进程
fg PID
bg
后台执行进程
crontab 周期性执行程序
周期性执行程序
语法:
1 | crontab [-u user] {-l | -r | -e} |
选项:
1 | -e # 编辑时程表 |
crontab文件编写
格式:
1 | f1 f2 f3 f4 f5 program |
特殊格式:
1 | * # 每个时间点都要执行 |
示例:
1 | 每个月每天的12点都要执行wall hello |
系统监视
系统监视指令
top
动态监视进程和信息指令(进化版的ps)
操作:
1 | space # 刷新 |
free
内存查看命令
1 | free [选项] |
选项:
1 | -b # B字节单位显示 |
日志监视
日志存放于/var/log目录下
系统初始化
1. BIOS初始化
加载和引导设备,启动操作系统
2. 内核初始化
- 硬件设备检测
- 设备驱动初始化
- 只读挂载文件系统
- 启动第一个进程init(PID=1,所有进程的父进程,失去父进程的子进程都以init作为父进程)
3. 确定系统运行级别
init读取配置文件/etc/inittab
修改系统默认运行级别:修改其中数字
id:5:initdefault
4. 运行初始化脚本
5. 运行用户自定义脚本
修改/etc/rc.d/rc.local
6. 激活控制台
7. 启动界面
网络管理
网络设置文件
文件 | 作用 |
---|---|
/etc/hosts | 域名或主机名与IP的映射文件。本机查询DNS |
/etc/sysconfig/network-scripts/ifcfg-ethN | ethN网卡的配置信息 |
/etc/sysconfig/network | 最基本的网络配置信息,系统启动时读取 |
/etc/resolv.conf | 域名服务器配置文件 |
/etc/host.conf | 域名解析的配置文件,指定如何解析 |
/etc/services | 网络服务和端口的映射文件,设定主机不同端口号的网络服务 |
/etc/protocols | 描述网络协议及其对应协议号 |
网络管理命令
ifconfig
查看或配置网卡状态
查看状态:ifconfig
查看单独显卡状态:ifconfig eth0
停止显卡:down
1 | ifconfig eth0 down |
激活显卡: up
1 | ifconfig eth0 dp |
设置设备IP地址和子网掩码
1 | ifconfig <设备名> <IP> netmask <掩码> |
示例:ifconfig eth0 192.168.0.17 netmask 255.255.255.0
以上修改都是临时性的(永久的修改需要修改/etc/sysconfig/network-scripts/ifcfg-ethN
文件修改)
ping
测试网络是否联通。
语法:
1 | ping [选项] 地址 |
traceroute
显示数据包到主机之间的路径
语法:
1 | traceroute [选项] 地址 |
route
显示路由表 / 添加删除路由记录
显示路由表
1 | route |
添加|删除网关
1 | route <add|del> default gw 网关IP |
添加 | 删除路由记录
1 | route <add|del-net> 网络号 netmask 掩码 dev 设备名 |
netstat
显示网络状态(端口开放情况)
语法:
1 | netstat [选项] |
选项:
1 | -i # 列出每个显卡 |
网络服务管理
chkconfig
检查和设置系统的各种服务
添加/删除指定的服务
1 | chkconfig --add|del 服务名 |
显示所有或指定的服务
1 | chkconfig --list [服务名] |
检查指定服务的状态
1 | chkconfig 服务名 |
改变服务运行级别
1 | chkconfig [--level 运行级别(3/4/5)] 服务名 状态(on/off/reset) |
service
对系统服务管理(启动、停止、重启、查看状态)
1 | service 服务名 [start|stop|restart|status] |
chkconfig和service的区别:前者重启后仍然生效,后者不然
网络服务模型
- 独立守护进程工作模式:一个守护进程响应一个特定的端口的服务或连接(每个服务都对应一个守护进程,会导致资源浪费。)(也叫stand-alone模式)
- 基于xinetd的工作模式:xinetd进程同时监听多个端口,在接收请求时根据端口号来启动不同的服务进程处理请求。(流量小开销小,流量大时由于频繁启动服务进程导致性能下降)
Telnet服务
远程登陆应用。基于xinetd的服务。
使用:
- 安装krb5-telnet
- 编辑/etc/xinetd.d/krb5-telnet配置文件(在此之前可能要改xinetd配置文件/etc/xinetd.conf文件),编辑/etc/securetty文件
- 重启服务
service xinetd restart
需要用非root普通用户登陆
停止:
关闭xinetd服务(telnet受xinetd管理,所以关闭xinetd即可)
1 | service xinetd stop |
FTP服务
FTP文件传输协议,支持standalone模式和xinetd模式。
配置文件:
- /etc/vsftpd/vsftpd.conf:主配置文件
- /etc/vsftpd.ftpusers:禁用用户列表
- /etc/vsftpd.user_list:
启动vsFTPd
service vsftpd [start | stop | restart]
需要关闭防火墙
使用操作:
1 | lcd # 切换本机目录 |
SElinux 访问控制
在SELinux的访问控制限制下,进程只能访问那些在其任务中所需要的文件。
www
web服务,用的是httpd服务
启动httpd
service httpd [start | stop | restart]
httpd的配置文件:
/etc/httpd/conf/http.conf