Linux操作系统基础
Xu An 2018-7-4
第一讲 Linux简介
1、Linux是一个开源的操作系统,发布于GPL协议,全称为GNU/Linux
2、Linux和Unix是相近的
3、FreeBSD是从BSD发展过来的,MacOS是基于FreeBSD开发的 类似还有OpenBSD
第二讲 文件系统
1、Linux使用Ext3,Ext4(16.04默认使用)格式,会越使用效率越高
2、没有盘符概念,使用整体目录树组织文件
3、使用/表示根目录,也是整个目录树的顶层,其他目录均位于/之下
Linux启动时会把磁盘文件信息映射为内存中的树形结构,启动时的目录结构在内存中
4、所有的目录至少包含两个子目录,.表示当前目录,..表示上一层目录
/也有上层目录(..),其上层目录是自己
5、目录的作用
/ 根目录
/usr 用户的程序,配置信息 使用pwd查看用户目录
/bin 存放最常用的命令目录,最核心的命令(和sbin一起是最核心的命令)
/sbin root用户使用的命令所在的目录
/boot 系统启动文件所在目录,内核等
/etc 配置文件等,包默认的安装目录
/dev 外设设备映射此目录下的文件(U盘映射、打印机映射)
/media 把系统自动识别U盘,光盘挂载到此目录下
/proc 虚拟目录,内存的映射,可以得到系统进程信息
/sys 吧硬件设备映射成文件,通过文件控制硬件
/var 存放变化增长的东西
/usr/bin 用户程序目录
/usr/sbin 超级用户权限目录
/tmp 临时文件目录
6、创建文件夹——mkdir
mkdir 文件夹名称
查参数 man 命令
7、显示目录内容——ls(list)
ls -a 显示所有文件(包括隐藏文件)
ls -t 按修改时间顺序排序,最新的排在最前面
ls -R 显示文件全部内容
ls -S 文件大小顺序排序
ls -l 查看详细信息
8、切换工作目录(cd,change directory)
cd.. 进入上一层目录(在根目录下cd..还是根目录)
cd~ 在任何目录下进入用户主目录
cd- 进入上一次使用目录
9、设备文件和磁盘管理
/dev是外接设备的映射文件,/dev/sd[a-z]表示硬盘设备(hd表示IDE
硬盘)
在MBR中,一个硬盘最多4个主分区,需要更多分区则需要扩展分区(最多数量为1)
扩展分区可以有多个,sda5始终表示第一个逻辑分区
/dev下的cdrom、dvd表示光盘等
10、df(disk files) 查看磁盘占用
df -h 易于读取的形式查看系统占用情况
11、fdisk 磁盘管理
fdisk -l 列出指定磁盘的分区
12、mkfs (make filesystem)
创建文件系统(格式化)
sudo mkfs -f <文件系统类型> <设备分区>
e.g. sudo mkfs -f ext4 /dev/sdb1
13、挂载 mount 卸载umount
e.g.
mount -r /dev/sdb2 /media/c 只读模式挂载
umount /media/c 卸载挂载点
想要读取U盘中的文件,必须进行挂载
第三讲 终端
1、终端是一个设备,计算机最外围的设备,主要功能是输入和输出
早期终端是物理组件,不具备计算能力
现在的终端,为一个模拟器代替,是虚拟化的终端
终端的切换:使用ctrl+option+fn键切换不同虚拟控制台
(virtual console),默认是f7
2、终端是一个设备 shell是一个程序
shell的功能是获取用户输入的命令运行,返回输出,程序通过shell显示在终端上
shell有多种实现形式,默认为bash,还有sh、zsh、fish等,均为命令解释程序
virtual console与terminal完成相同的工作,都是虚拟终端
3、内部命令:属于shell解释器的一部分,是shell程序自带的命令(在系统中找不到文件,可以直接执行)
外部命令:安装的命令,独立于shell解释器之外,需要安装设定好的路径查找,找到后才可以执行
使用type 命令查看命令类型 e.g. type for (keywords)
hash会缓存检索过的命令,直接通过hash进行定位 刚开机时hash为空,每次运行命令
使用whereis查看命令的位置 查找 目录+帮助文档路径(.gz结尾)
4、命令格式
命令 选项 参数 (多数情况下参数和命令没有顺序要求,个别会有)
选项的含义:
-引导 单字符(可以叠加)e.g. ls -a
--引导多字符 ls --color (误)
多个字符可以叠加在一起如 -al ,前提是程序支持
5、获得命令的帮助
内部命令 help + 命令名称
外部命令 man + 命令名称
--help
6、命令搜索路径(环境变量)
bash中的命令在 ~/.profile中
其默认的搜索路径:
~/bin ~/.local/bin
/usr/local/sbin; /usr/local/bin; /usr/bin
/sbin; /bin; /usr/games; /usr/local/games
7、添加环境变量
在path后面添加:/home/username/文件名
8、shell配置
tab 补全
history 查看所有缓存在.bash_history 中的命令
history -c 清空历史记录
ctrl+a 跳转首行
ctrl+e 跳转行尾
ctrl+c 终止程序
ctrl+w 按单词删除,空格隔开为一个独立的词
9、终端常用命令
ls 列出文件目录信息
ls /usr 显示/usr的目录内容
ls -R /usr 递归显示/usr目录内容
cd 切换工作目录
mkdir 创建目录
rm 删除给定的文件或目录,如果目录不为空,需要使用rm -rf
cp 拷贝
cp tmp/a.sh sh/ --复制a.sh到本目录下的sh/ 中
cp tmp/a.sh /tmp --复制a.sh 到绝对路径 /tmp下
cp tmp/a.sh sh/b.sh --复制a.sh到sh/ 并重命名为b.sh
mv 移动
mv tmp/a.sh sh/ --移动文件
mv tmp/a.sh sh/b.sh --移动文件且重命名
mv tmp/a.sh tmp/c.sh --重命名文件
cat 显示文件内容
cat /etc/passwd
less 以全屏幕方式显示文件内容
find 在指定目录下查找文件
find /usr/ -iname gcc* --在/usr中寻找以gcc开头的文件,大小写不敏感
find /usr -name gcc --在/usr中查找 gcc的文件,大小写敏感
touch 创建空文件
touch tmp/test.sh 在tmp下创建test.sh的空文件
env 显示环境变量
第四讲 IO重定向和管道
一、标准输入输出
(1)每个进程至少有3个信道:
标准输入-stdin 文件描述符0,默认指向终端(键盘)
标准输出-stdout 文件描述符1,默认指向终端(屏幕)
标准错误-stuerr 文件描述符2,默认指向终端(屏幕)
(2)在linux中一切皆文件,一个进程从文件描述符为0的文件读取输入信息,将结果输出到文件描述符为1 的文件中,并把出错信息输出到文件描述符为2的文件中
(3)文件描述符:一个进程有一个结构保存一组打开的文件,每个打开的文件用一个数字标识,这个数字就是文件描述符
e.g.
echo abc --在屏幕上显示abc
echo abc >~/tmp.txt --将abc不但输出在屏幕上,还在/home/xuan/tmp.txt中保存输出信息
echo bcd >>~/tmp.txt --将bcd追加在abc后面而改变原来的
二、控制重定向
shell中使用> < >>等符号进行重定向shell而不是程序
shell把重定向符号解释成指令,将标准输入、输出等
三、重定向符号
< 重定向标准输入(将输入从键盘改为指定某文件)
> 重定向标准输出 (输出到指定文件,不输入到屏幕上)
>> 重定向标准输出 (追加内容到指定文件)
2> 重定向错误输出(将错误信息内容到指定文件)
2>> 重定向错误输出 (将错误信息追加到指定的文件)
&>(>&) 将错误、标准输出到指定文件
四、重定向实例
e.g. 1
wc -l file --wc -l为统计行数,本条为将文件名作为输入
wc -l <file --本行为将文件内容输入 >
e.g. 2
find / -iname gcc* >find_tmp --将输出写入到文件find_tmp,但错误信息会显示
find / -iname gcc* &>find_tmp --将错误和输出到指定文件
五、管道
shell在解释命令时会创建管道,并创建两个进程,把标准输入输出重定向到管道,前一个进程向管道写入数据,后一个进程从管道中读取数据
标准错误输入不会写入管道,直接输出到终端
六、管道和重定向实例
e.g.
find /iname *gcc* 2>/dev/null |wc -l 将含有*gcc*的错误信息输出到(/dev/null/实质为丢弃),并统计行数
ps -ef |grep ssh --查找含有ssh的进程
ls | sort -r --查看当前目录并排序
help test | less --分页查看文件
第五讲 用户和组管理
一、linux用户分类
超级用户:root用户
普通用户:系统安装时创建的用户及后期使用中由用户创建的用户
系统用户:系统及服务运行必须存在的用户,默认情况下不能登录系统
二、用户相关文件
1、用户信息文件 passwd
用户信息保存在/etc/passwd中,每一行对应一个账号记录
格式为:
登录名:口令(已加密,x代替):用户标识号:组标识号:注释性描述:主目录:登录后的shell
需要root权限
e.g.
xuan:x:1000:1000:Xu An,,,:/home/xuan:/bin/bash
2、用户密码信息文件shadow
/etc/shadow保存用户加密后的密码,只有root权限可以读取
文件不要手动修改,要让程序修改
格式为:
登录名:加密的密码(sha256加密,!表示没有密码,*是系统账号,不能登录):最近一次修改密码的时间(距离1970-1-1的天数):密码最短有效天数(默认为0,表示无限制):密码最长有效天数:提前多少天告知用户口令将过期
e.g.
xuan:$1$.AlctH6N$xLP5KavvA/.yQPn44nVAK0:17661:0:99999:7:::
三、用户组分类
1、超级用户组(root)、系统组(system group)、用户组(user group)
2、基本组:用户所属于的第一个用户组,/etc/passwd中指定
其他组为附加组, /etc/group中指定
一个用户可以属于多个附加组,但只能属于一个基本组
3、私有组:建立账户时,若没有指定账户所述的组,则系统建立一个和用户名相同的组,该组只容纳一户
公有组:容纳了多个用户的组,属于多个组的用户所拥有的权限是所在组的权限之和
四、组信息文件 group
/etc/group中保存了系统中所有的组信息
格式为:
组名:组密码(已加密,用x代替,真正的密码在/etc/gshadow中):组标识号:以本组为附加组的用户列表
e.g.
xuan:x:1000: --私有组
adm:x:4:syslog,xuan --共有组,syslog、xuan以其为附加组
查看组的常用命令:
1、groups 查看用户所属的组
2、groups user 查看user用户所在的组
3、id user 同时查看用户信息和组信息
五、root用户
root用户具有最高的权限,其UID为0,在bash上提示符为#,普通用户为$
使自己用户具有root权限:在/etc/passwd中将自己的uid改为0
六、su(switch user)命令
可以让普通用户切换为root或其他用户,当前工作目录不变
用法:
su 选项 用户名 (若不加用户名,默认切换到root)
七、sudo命令
允许程序以临时root身份运行,其是受限的su,授权用户可以有5分钟的root权限(root用户不需要sudo)
/etc/sudoers 记录了那些用户具有sudo权限
八、设置密码
命令: sudo passwd username
Ubuntu中root密码在每次登陆时自动更新,如果需要进入root模式,设置如下:
1、使用 sudo passwd root命令对root用户密码重新设置
2、su root命令进入root用户
3、如需退出使用exit命令
九、修改用户名和密码
1、修改用户名
sudo vim /etc/passwd 把原来的改成新的
sudo vim /etc/shadow 把原来的改成新的
reboot 重启
mv 用户目录 自己用户目录 移动用户文件夹
2、修改密码
sudo passwd username
十、adduser 添加用户
此命令默认创建带主目录的普通用户,也可以创建系统用户
e.g.
sudo adduser --shell /bin/bash user1 //创建user1,使用shell为bash
sudo adduser --shell /bin/bash user2 --gid 1001 //创建user2,使用bash,并添加到附加组1001
sudo adduser --shell /usr/sbin/nologin --no-create-home --system --disbled-password --disabled-login mysql //创建系统用户mysql
十一、deluser 删除用户
sudo deluser username //只删除用户名,其他信息均保留
sudo deluser --remove-home username //删除用户并删除主目录
sudo deluser --remove-all-files username //删除用户以及一切数据本用户的文件
十二、创建删除组
sudo addgroup --gid ID group1 //创建group1的组并手动指定组ID
sudo adduser --group --gid ID group //另一种创建组的方法
sudo delgroup group1 //删除组
十三、添加组
sudo usermod -G group1 -a user1 //将user1加入group1中
sudo gpasswd -d user1 group1 //将user1从group1中移除
第六讲 文件编辑
一、nano
1、文件创建 nano 文件名 如果有则打开,没有则新建
2、基本操作:ctrl+O写入,ctrl+X退出
3、配置文件:/etc/nanorc
二、vim与vi
vim是vi的增强版,支持配色主题
1、三种模式
命令模式:输入命令对文档操作
输入模式:编辑文本,显示--insert--
底行模式:输入:输入命令,完成后返回命令模式
2、vim启动
默认启动为命令模式,输入i,a,o可以切换到插入模式,按esc返回到命令模式
3、vim基本操作
(1)光标操作
h 光标左移
j 下一行
k 上一行
l 光标右移
(2)删除、插入
x 删除后面的字符
X 删除前面的字符
i 当前位置插入 (a,i, o均进入插入模式)
a 后一个位置插入
o 下一行插入
(3)按esc返回指令模式,输入
w 写入文件
q 退出文件
wq 写入并退出
q!不保存退出
(4)指令模式操作
d 删除、剪切
dd 删除整行
d$ 删除到
dd 删除当前行 数字+dd 删除以下几行
u 撤销
control+r 恢复
p 复制
第七讲 文件管理
一、Linux文件系统概述
Linux中,一切皆文件 外设也会被映射成文件 在/dev目录下
大小写敏感
文件目录也是文件,记录了其他的文件信息
二、Linux文件系统
Linux文件扇区一般512bit
扇区分为以下几个区域:
boot block:用于启动分区,如系统安装在本分区,则存储启动信息
super block:存储文件系统类型、i-node table文件大小信息
i-node:文件在DateBlock中的存储位置(实际通过本区域找到文件并对文件操作)
Data block:实际存储数据
目录文件名:记录其他文件名与i-node
二、常用命令
ls 列出文件
stat a 查看a的文件信息
rmdir 删除空目录
cp tmp/a tmp/b 复制tmp/a文件到tmp目录,命名为b
mv tmp/a tmp/b 将tmp/a重命名为tmp/b
rm -rf 强制删除目录
ln 创建硬链接或符号链接
chmod 更改文件权限和所有者
chown 更改文件所有者
三、文件权限和标志位
列出文件权限信息:ls -l
670453 drwxrwxr-x 2 xuan xuan 4096 May 20 20:05 bin
权限信息依次为:
1、文件对应iNode号
2、文件类型:d(dictionary)目录,l(link)链接文件,- 普通文件
3、文件权限:r(readable)可读取
w(writable)可写入
x(executive)可执行
连续的三组分别为用户权限、用户组权限、其他用户权限
4、文件硬链接数
5、文件所属的用户
6、文件所属的组
7、文件大小(字节为单位)
8、文件创建时间
9、文件名称
r:可读
w:可写
x:可执行
用户 用户组 其他用户
rwx rwx rwx (八进制表示)
111 111 111
查看在建立文件时预设的权限掩码:umask 现有权限减掉权限掩码后,可以得到建立文件时预设的权限
目录一定有可执行权限 否则cd命令不能切换
文件默认权限:
系统不允许在创建一个文件时就赋予其执行权限,必须用chmod命令增加权限,但目录允许设置其权限
默认权限计算:用777按位减去掩码中的相应位置,并且文件要减去可执行位置
四、更改文件权限
使用chmod命令
chmod 数字权限 文件路径 e.g chmod 755 bin/pse
或者
chmod u=rwx,g=rx,o=r
五、更改文件所属的用户组、用户
chown 用户名:用户组 hd1 更改hd1文件为所属的用户、用户组
chown :用户组 hd1 更改文件所属的用户组
chown 用户名: hd1 更改hd1所属的用户
六、硬链接(hard link)
ln target link-name 如:ln a b 会在当前目录下创建文件的硬链接b
在执行连接之前,存放连接的目录不能有与连接名同名的文件,如果创建硬链接,则target文件必须存在,且不能是目录
硬链接没存建立新文件,相当于文件有一个别名(多个文件名使用一个inode,硬连接数+1)
rm会使得硬链接数-1,硬链接数为0则会从文件系统中删除
inode号为系统唯一,linux挂载多个文件系统,创建硬链接不能跨文件系统也不能跨分区
七、软链接(符号链接,类似于Windows上的快捷方式)
1、ln -s 目标目录(用绝对路径如$HOME/xuan/tmp) 新建目录(如temp)
2、创建符号链接会创建一个文件,记录了另一个文件的路径
如果删除源文件或目录,则只删除数据,不删除软连接,一旦以同样的文件名创建了源文件,链接将继续指向该文件
3、符号链接的大小是指向文件名称的字节数
可以跨分区跨文件系统
第九讲 进程管理
一、基本概念
进程:运行中的程序,系统会给每一个进程分配一个数字标记,为进程ID(PID)
父进程:进程B由进程A创建,则进程A就是进程B的父进程,进程B就是进程A的子进程
(在shell中输入命令,则shell就是父进程,运行的程序就是shell的子进程,守护进程除外,守护进程的父进程是init,pid=1)
PPID:父进程的ID
UID(user id):每个进程都有所属的一个用户ID,运行程序的用户ID,每个进程都有一个父进程,其UID继承自父进程
EUID(effitive user id)有效ID,表示进程对于文件和资源的访问权限,大多数时候EUID=UID,但是对于设置了相关标志位的程序,运行时会改变EUID。代理运行的用户权限
GID(groud id):进程组的ID
EGID(effective group id):有效组ID
二、常见相关命令
ps 查看进程信息(前台正在运行的程序)
ps -e 查看所有进程的信息
ps -aux 查看详细信息
ps -ejH 显示进程树
kill 向进程发信号,终止进程
pgrep 搜索进程
top/htop 动态监控进程情况,系统资源使用情况
nice/renice 调整进程优先级
shell内建命令:
bg 后台任务继续执行
fg 后台任务转换到前台运行
jobs 显示后台运行的任务
三、进程搜索
pgrep -a sh 搜索含有sh的进程并列出详细信息
或者
ps -e | grep 进程名
四、kill进程
kill -l 查看命令详情
kill +pid kill指定pid的进程
kill -9 +pid 强制kill进程
五、后台任务
一个任务运行时间太长,或者需要长期运行,如果想获得终端控制权,可以直接将其转入后台
后台暂停:
control+z 转入后台
jobs 查看后台任务
fg 编号 把后台任务转入前台执行
后台运行:
在命令后面加&可以使任务直接后台运行
find / -iname *curl* 2>/dev/null >tmp/findtmp
bg 进程号 转入后台运行
如果在bash里显示,需要重定向来取消显示
六、优先级
nice 返回当前进程的优先级,一般情况下子进程会继承父进程的优先级,系统内核在运行进程时会动态调整
nice ps会在当前优先级上加上一个数值(默认为10)运行ps,nice调整的范围是-20~19,数字越小优先级越高
renice 增加或减少的优先级 PID 调整优先级
增加或减少的优先级是一个整数,如果是负数,则只有root权限才可以执行
七、动态监控进程
使用top命令动态查看进程(Linux内建)
saidar 动态监控资源占用,但不显示进程信息
pstree 树形结构显示进程信息
第十讲 网络管理
ip 显示ip地址
ss 显示套接字信息,可以替代netstat
nethogs 网络监控工具
为eth0网卡分配ip地址
ip address add 192.168.180.102/24 dev eth0
iftop
第十一章 shell脚本基础——变量
shell是用户和系统交互的桥梁
shell是linux的一个程序,实现版本有很多,shell的主要工作是运行命令
sh是shell的缩写,实现方式有sh、bash等
多数Linux的默认shell是bash,登录以后,会运行一个shell等待用户输入命令
一、shell环境变量
环境变量是一个名称和值对应的列表。
一种shell是启动时自动解析的命令
取得环境变量的值:echo $环境变量(如:echo $PWD)
真正执行命令的是系统内核而不是shell
二、shell脚本
shell可以从一个文件中读取命令并逐条执行,文件称为脚本
大多数linux发行版的默认shell为bash
反引号``取得命令变量的值
分号设置两个变量
输入文件名直接执行 rm 当前文件 /bin
第十二章 程序结构
一、test
是shell内建的命令,可以处理脚本内的各类工作,产生的不是一般形式的输出,而是可用的退出状态
test返回true或false 但是true是0,false是1(和其他相反)
test命令有其他形式,[]在&& ||使用会出错,需要用[[]]
二、if语句
if [ command ] ;then
command
elif [ command ] ;then
command
else
command
fi
注意:if [ command ] ;then command ;fi 写在一起时要加分号
三、case
case $1 in
"hello")
echo "hey!"
;;
"time")
date
;;
*) --默认选项
echo "nothing to do"
esac
四、for
for i in a b c
do
echo $i
done
第十三章 vim和C语言编程
一、vim配置文件
在/etc/vim/vimrc 中,但是用户主目录下的.vimrc会覆盖当前的配置
使用"标记注释
第十四章 Linux系统编程基础
一、简介
系统编程是调用系统的API完成的任务
man2 查看系统接口文档
man3 是程序库函数文档
man syscalls 查看所有的系统调用
二、调用实例
1、获取自己的pid :getpid()
2、用fork创建子进程:fork() 新创建的进程会和父进程一样继续执行(出错返回-1.正常返回0)
3、等待子进程退出:wait(int *status)(相当于waitpid(-1,&status,0))
等待子进程退出,并把子进程退出状态设置到status状态,返回退出进程的PID
在调用wait()时父进程挂起,直到子进程退出
3、父进程先于子进程退出,子进程被init接管(pid=1)
服务器版的守护进程 init为1
桌面版的守护进程为 初始终端的进程(pid不能确定)
4、open函数(用于打开文件操作)
int open(const char *pathname,int flags(标志位),mode_t mode(打开模式))
flag(标志位)选项:
O_CREAT 没有则创建文件
O_WRONLY 写模式打开
O_RDONLY 读模式打开
O_RDWR 读写方式打开
mode选项:
S_IRWXU 可读可写可执行
S_IRUSR 可读权限
S_IWUSR 可写权限
5、write函数(用于写入数据)
ssize_write(int fd,const void *buf,int count)
参数为:打开文件的描述符,指向数据的指针,要写入的字节数
返回值:成果写入的字节数,错误则返回-1
文件操作后要使用close关闭打开的文件:int close(int fd),成果返回0,错误返回-1
三、IO重定向
最低可用文件描述符原则(Lowest Available fd):
1、文件描述符是一个数组索引号,每一个进程都有一组打开的文件,打开的文件保存在一个数组中,文件描述符就是数组的索引号
2、打开文件时,分配的描述符总是数组中最低可用的索引位置(索引数字最小的位置)
3、Linux中使用标准输入(0),标准输出(1),标准错误输出(2)作为文件描述符,如果关闭描述符1,打开其他文件,这个文件就被分配了文件描述符1,标准输出就会写入到新打开的文件中
4、编程实现:
(1)close-open-close方式:先close(1),再open(filename,O_RDWR,S_IWUSR),close关闭打开的文件
(2)open-close-dup-close:open打开文件,返回的文件描述符不是1,然后 close(1),现在最低可用描述符是1,dup(fd)会把新打开的描述符复制到1,然后 close(fd)关闭新打开的文件
(3)open-dup2-close方式:dup2(oldfd, newfd),关闭newfd,把oldfd复制到 newfd,close关闭新打开的描述符
第十六章 系统服务
显示系统服务和运行状态 service --stauts-all
查看开机启动的程序 l /etc/init.d/ |less
查看启动级别 runlevel
0 关机
1 安全模式
2,3,4 多用户模式
5 图形化环境
6 重启
安装桌面环境 sudo apt install gnome
sudo apt install gnome-core gnome-common gnome-desktop3-data
Linux桌面与终端相互独立,互不影响
期末复习
一、uname -a 查看系统信息
Linux全称 GNU/Linux 使用GPL开源协议
二、目录的组织结构
/bin /sbin 系统命令存放 有些软件放在/usr/中的bin、sbin中
echo $PATH 查看环境变量
/home/xuan/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
找不到环境变量解决方法:/usr/bin/vim .profile
查看用户主目录:echo $HOME 或者 echo ~
查看当前工作目录 $PWD 或 pwd
三、重要命令
ls -l 显示详细信息
ls -a显示所有文件(包括隐藏文件(.开头的文件))
ls /usr -R 显示该路径下所有目录(包括内容)
mkdir 创建文件夹
cp a xy -R 将a复制到文件夹xy中
rmdir 删除空目录
rm -rf 强制删除
touch 新建文件
chmod 改变权限 权限掩码 -rxwrxwrxw
chown 改变所有者 改用户 sudo chown user: file
改用户组 sudo chown :group file
支持递归操作
find / -iname *gcc* 查找所有 含有gcc的文件
标准错误输出不会重定向
不显示错误信息: find /-iname *gcc* 2> dev/null | wc -l
四、
用户信息 /etc/passwd
find
五、进程管理
ps -e 显示所有进程
查找特定进程 ps -e | grep 关键词
kill PID 有些命令不能中断
sudo kill -9 PID 强制中断进程
六、文件管理
unmask 设置、显示权限掩码,规则:用0777按位减去umask,如果是文件还要去掉可执行权限(默认不具有可执行权限)
--0表示八进制数字
ln -s ~tmp/tmp/b.sh bin/tmpb (ln -s 目标文件(最好是绝对路径) 链接路径位置)
ln b.sh hb.sh (创建硬链接,ln b.sh hb.sh)没有建立新文件(只是多了一条记录,实际是文件的硬链接数加1),相当于起了别名
七、shell编程基础
1、变量使用_或字母开头,等号左右两侧不能有空格
2、获取变量需要加$,如 echo $a
3、
if[ $a=$b ];then 注意:中括号前后加空格,判等用一个等号
echo
fi
------------------------
if test -d "if.sh" ;then 注意:test不一定必须
echo 'is not a dir'
elif [ -f "if.sh" ];then
cat if.sh
fi
-------------------------
if [ $# -gt 0 ];then
$comm | grep "$1" | grep -v "$0" |grep -v "grep"
else
$comm | grep -v "$0"
fi
-------------------------
while
sleep -1
4、getpid()
fork() 有几个fork就是几个的2次方
5、创建规定个数子进程
close(1); //最低可用文件描述符
dup2(fd,1);
fork 和 wait 组合逻辑
父进程先于子进程退出,子进程被init接管(pid=1)
6、open read