Linux
Linux体系结构
==》内核 -》系统调用-》应用层
-
内核管理硬件资源(内存管理,进程调度,文件管理,网络通讯,设备驱动……)
-
系统调用:内核给上层应用提供的接口
- 库函数:通常把系统调用封装成库函数(malloc, printf,)
- shell是一个命令解释器
命令:一些简单的可执行程序
脚本(script):命令的集合
三种方式访问内核
常用命令
查看手册
man mkdir 手册的第一卷 shell命令
man 3 mkdir 手册第三卷
sudo shutdown -r 重启
sudo shutdown
sudo shutdown now
用户子系统
root 超级用户
sudoers 管理用户 可以临时提权
其他用户
sudo cat /etc/passwd
添加用户
sudo useradd test1 不会创建home目录 默认bin/sh/登陆项
sudo useradd -m -s /bin/bash test2
设置密码 sudo passwd test1
切换用户 su test1 (switch user) test1新进程创建
exit 退出
删除用户 sudo userdel test1
sudo userdel -r test1 家目录一起删除
文件子系统
Linux文件是一个树结构 ‘ / ’ 根节点
目录相关命令
cd 改变工作目录
man pwd
pwd 查看当前工做目录
cd 切换到用户家目录
cd ~ 回到家
cd - 切换到上一次目录 通过env环境变量中OLDPWD 记录上一次目录
创建目录
mkdir dir
mkdir dir1 dir2 dir3
//父目录不存在,创建父目录
mkdir -p a/b/c
删除空目录
rmdir dir
rmdir dir1 dir2 dir3
//递归删除空目录
rmdir -p a/b/c
通配符
rmdir dir? //?匹配任意一个字符
rmdir dir* //*匹配任意多个字符
//匹配集合内任意一个字符 [0-9] [a-z]
rmdir [abc]
rmdir [!abc] //删除abc之外的字符
查看目录内容
ls //查看当前工作目录
ls dir
ls dir1 dir2 dir3
ls -a dir //查看dir中所有目录 包括.开头文件
ls -i //inode 前面显示文件唯一编号
ls -l //以长格式显示文件信息
ls -lh //人类可读方式显示
ls -ilh dir //显示详细信息
长格式文件信息
树状结构显示
tree
tree dir
tree dir1 dir2 dir3
复制文件或目录
cp text1 text2 //将text1 复制到text2中
cp text1 text2 text3 dir //将text1 text2 text3 复制到dir目录中
cp -n text1 text2 //文件存在,不覆盖
cp -i text1 text2 //文件存在,询问是否覆盖
cp -r dir1 dir2 //递归复制目录
移动文件和目录
mv text1 text2 //将text1重命名为text2 如果文件存在覆盖text2
mv dir1 dir2 //将dir1重命名为dir2
mv -n text1 text2 //文件存在不覆盖
mv -i text1 text2 //文件存在询问是否覆盖
mv text2 dir/text1 //将text2移动到dir/text1 重命名为text1
删除文件和目录
rm text1
rm text*
rm -r dir1 //递归删除dir1目录
rm -i *.txt //删除当前目录下所有以.txt结尾的文件,并提示用户是否删除
-f //永远不提示
rm -rf text1 //text1不存在,不提示
文件相关命令
创建文件
echo "Hello Linus Torvalds" > text //创建text,并且把内容重定向到文件中
touch a.text text2 text3//创建空文件
vim hello.c //创建文件
查找文件
//查找可执行程序路径
which bash //查看bash路径
which ls tree //查看命令ls和tree的路径
which -a vim //查看所有匹配的路径
env //查看环境
find命令
//在目录里边递归的查找
find -name "hello*"
//在路径里面找stdio.h
find /usr/include -name "stdio.h"
find /dev -type b //查找块设备类型文件 c字符设备文件
find . -size 5M //当前目录下查找大小为5M的文件 向上取整4.2M
find . -size -4M //查找小于4M的
find . -size 0 //只能找到空的文件 空的目录默认是4k
find . -empty //查找空文件或目录
find . -user root //查找哪些用户属于root
find . -gid 0 //查找组id是0的用户 group
// 664 --> rw-rw-r-- 如果奇数的话有执行权限771
find . -perm 644 //查找用户权限是644的文件 permission
//根据内容改变的时间查找
find . -mtime 2 //前[2,3)天
find . -mtime +1 //前[2,+∞]
find . -mmin 10 //10分钟之前修改的文件
//与或非 -a -o !
find /dev -type c -a -name "tty*" //在/dev目录下查找以tty开头的字符设备文件
find /dev -type c -a ! -name "tty*" //在/dev目录下查找不是以tty开头的字符设备文件
查看文件内容
cat /etc/passwd
cat -n /etc/passwd //显示行号
man head
//head命令查看文件前几行
head text1 text2 //显示文件前10行
head -n 5 text1 //显示文件前5行
//tail命令查看文件后几行
man tail
tail text1 //默认显示文件后10行
tail -n 5 text1 //显示文件后5行
tail -F server.log //显示
//less(more)浏览
less text1 text2 //浏览text1 n浏览下一个文件 p查看上一个文件
文件重定向
who > users
cat users file1 > test //清空覆盖
echo "liu yi fei" >> users //重定向到users 追加写入
cat users file1 2> text // file1不存在
cat users file1 >& text // file1不存在,out和err两个&都写入text
搜索文件内容
man grep
//按正则表达式去搜索文件
grep -nE "firmament" text1 //在文件text1中查找“正则表达式” ,-n并显示行号 E正则扩展
-i 忽略大小写
-v 显示不匹配正则表达式的行
-c 统计匹配行的个数
grep -cvinE "GOD" text
正则表达式
grep -nE "\<f [^ \t]*t\>" text1
命令组合
//命令组合
mkdir dir1; cd dir1
//cmd1 | cmd2 (管道)
history | tail -n 5 //history 输出的结果通过管道传输到tail中
//cmd1 | xargs cmd2 将cmd1输出结果的每一行作为参数传给cmd2,依次打开每一行文件查找
find . -name "*.c" | xargs grep -nE "\<main\(" //查找根目录下以.c结尾的文件含有main(的文件
改变文件权限
chmod [ugoa][+=-][rwx] file/dir //文字设定
chmod 664 text1 //数字设定
目录读写依赖于执行权限x
r w x
4 2 1
文件掩码
umask //查看
umask 0023 //设置为0023
So, 目录:777&(~umask)
文件:666&(~umask)
链接
//创建硬链接
ln text1 h_link //硬链接数变为2
ls -li
rm text1 //硬链接数变为1
//创建符号链接
ln -s text s_link //它们指向不同的文件
ls -li
rm text //s_link符号链接 悬空指针
其他命令
远程复制
//本地复制
scp
//远程复制
scp liyf@192.168.0.124:~/text.txt . //下载
scp -r text.txt liyf@192.168.0.124:~ //上传
打包压缩
//主选项 c r x
//辅选项 f v z
tar cvf package.tar text* //c创建 f包名package.tar
tar rvf package.tar text1.txt //r追加
tar xvf package.tar //x释放
tar czvf package.tar.gz * //z通过gzip压缩
tar xzvf package.tar.gz //解压缩
别名
alias //查看所有别名
alias ll='ls -alF' //设置命令别名
alias ls='ls --color=auto'
vim /bash.sc