1. uname -a Unbuntu16.4版本 使用的系统是Ubuntu16.04.4
2. Linux全称GNU/Linux,属于GNU组织,开源有很多协议,Linux使用的是GPL协议
开源协议:MIT,Apache,Linux用的是GPL
3. l / usr/ 下有bin和sbin,一般执行sudo安装时放在这些目录下,需要root的放在sbin下。如 usr/bin/vim.profile
l /usr/local/ l /usr/games/ 也有些放下面
l相当于输入了ls –CF
修改默认搜索路径:echo $PATH
4. l /etc/ 保存系统和脚本等 下面的passwd文件保存用户信息
/root root的主目录
/home 其他用户的主目录
Notes:查看用户主目录echo $HOME 或echo ~ ;查看当前工作目录echo $PWD 或pwd
5. 一些简单的命令
ls -a 显示所有选项,包含隐藏的
ls -l 显示详细信息
ls -al = ls -a -l
ls /usr 只显示一层的内容
ls /usr -R 递归显示所有的内容(Note:-R都是执行递归操作)
cd 切换目录
mkdir 创建目录 如mkdir xy
cp a.sh ext xy/ 最后一个必须是路径,复制到这个目录下
cp a.sh xy/b.sh
cp a xy -R 目录整体复制,必须加-R
Note:复制目录要加上-R cp a xy -R(-R的位置没有严格的顺序要求)
rmdir 删除空目录,非空删不了
rm -rf xy 删除目录,可空可不空,目录也是文件
mv a xy 移动可以直接移动
mv be ./bd 移动文件并且重命名
touch 创建空文件
ls -l ext 显示权限
如 -rw-rw-r-- 转化为数字664,分别对应用户、用户组、其他用户,一般可写就可读。rwx分别对应一个位
添加权限:chmod +x ext (给所有人加上x权限)
chmod 753 ext
改变所有者:[sudo] chown ok:ok ext (用户:用户组)
Note:可以省略其中一个,表示只改变一个,但冒号必须保留
其它相关的权限操作不用太多的背,用户管理adduser不考
必须知道最关键的2点
echo 输出后面的字符串
cat /etc/group 输出用户组信息
l /etc/passwd 保存的是基本信息
cat /etc/passwd
echo /etc/passwd
6. 重定向(重点)
一般重定向都是指输出重定向
> 输出重定向;2> 标准错误输出重定向
find /搜索文件有严格的顺序要求
find / -iname *gcc* > tmp/findtmp 2> /dev/null黑洞文件,重定向到这个文件都会消失
find / -iname *gcc* | wc -l 管道是个文件,还是重定向的技术,标准错误输出在管道内不会重定向
find / -iname *gcc* 2> /dev/null | wc -l 错误信息不输出
7. 进程(要知道进程管理)
ps -e 显示所有进程
ps -e | grep ssh 搜索文件中所有含ssh的文件
Note:这两个一定要记住
8. 后台任务
jobs 查看后台任务
ctrl+z 放到后台等待,挂起状态
fg 2 把2号任务放到前台执行,命令后面加&是放到后台
bg 1 放到后台执行
9. 终止
kill 4075(进程的PID) 有时候kill不了
kill -9 4075 强制终止(必要的话加sudo)
10. umask 显示/设置权限掩码,默认0002
规则:0777按位减去umask,得到各种权限的值.默认创建的文件权限是775
umask 022 设置权限掩码为022
文件还要减去可执行权限,默认是644 rw-r--r--(777-默认掩码-可执行权限)
linux新建文件非可执行文件默认权限怎么算?
11. ln 链接
ln -s 创建软连接(没有目标文件或链接路径也可以,创建了新文件
ls -s ~/tmp/b.sh bin/tmpb (目标路径最好是绝对路径)
ln 硬链接(没有创建文件,仅仅是多一条记录,实际是文件的链接计数加1
ln b.sh hd.sh
Notes:一个PID对应一个文件,和文件名无关。只有硬链接为0才删除文件。删文件只是硬链接数-1,直到硬链接数为0.复制的话会多出一个新文件。
12. shell编程
变量:字母或下划线开头的全部以文本形式来保存 a=1234567
=左右不能有空格,可用来判等
a=1
输出变量的值 echo $a
set 查看所有已经设置好的变量
unset a 清楚变量,输出为空
if [],【】里的字,左右两头有空格
fi 结尾表结束
[]是test的等效写法
if识别0为true,非0为false
判断、循环的条件必须是命令,所以也不一定用test。不用刻意比较返回的值,if可以直接判断
(grep -v xxx过滤掉某些关键字)
if [ $# -gt 0 ]; then
while循环要看一下
13. wait、fork
getid() 获取进程id
getpid() 输出父进程id
fork()会创建子进程,调用后,新创建的进程会和父进程一样继续执行。出错返回-1且不创建新进程,成功则再父进程返回创建子进程的PID,在子进程返回0
有几个fork()就输出2的几次方次
wait(&status) //等待子进程退出,不退出父进程就一直挂起
main(void){
fork();fork();fork();
printf("123456"); //会打印2^3次123456
}
wait等待子进程退出,并把子进程推出状态设置到status变量。返回退出进程的PID。
dup(fd,1) 精确控制 将fd文件都复制到文件描述符1去。若关闭直接复制,否则关闭后再复制; 就成功重定向啦
dup2(fd,1) 追加重定向
子进程被接管的话,父进程变为init,PID=1 -> 实现守护进程的基础
printf是向 标准输出 输出,不是向 屏幕 输出,关联什么就输出什么
Linux C编程
fork()、wait()、forkwait、fread、fwrite
close函数:在文件操作最后用close关闭打开的文件:int close(int id); close函数成功返回0,错误返回-1
IO 重定向实现方法
编程实现的方式(以文件描述符 1 为例):
close-open-close 方式,先 close(1),然后 open(filename, O_RDWR, S_IWUSR); 操作完成,close 关闭新打开的文件。
open-close-dup-close 方式,open 打开文件,返回的文件描述符不是 1,然后 close(1),现在最低可用描述符是 1, dup(fd)会把新打开的描述符复制到 1,然后 close(fd)关闭新打开的文件。
open-dup2-close 方式,dup2(oldfd, newfd),关闭 newfd,把 oldfd 复制到 newfd,close 关闭新打开的描述符。