导图社区 linux常用知识和命令思维导图
这是一篇关于linux常用知识和命令的思维导图,包含了文件创建、用户及文件权限管理、环境变量与文件查找。
编辑于2021-06-27 18:08:36linux
文件创建
文件创建
例如: touch file touch {1..10}_love.txt
下载软件
sudo apt-get install xxx
用户及文件权限管理
用户
创建
adduser
sudo adduser hujie 切换su -l lilei 退出:exit
删除
删除用户
sudo deluser lilei --remove-home
用户组
很多用户,他们拥有一些共同的资源
查看所属组
1.groups name
文件格式说明
1.文件格式 group_name:password :GID:user_list 2.查看etc/group/文件 (1)cat etc/group |sort 如果太多就过滤一下 cat etc/etc/group |grep e "shiyanlou"
将其它用户加入sudo组
使用usermod 命令 例如sudo usermod -G sudo lilei
查看
print information about user who are currently logged in.
文件
查看文件权限
command:ls -l
文件类型
修改文件权限
二进制修改文件权限
chmod 777 name chmod +x bash.sh
加减赋值操作
连接数
文件大小
du -h filepath
变更文件所有者
sudo chown [name] filename
linux目录结构及文件基本操作
liunx的文件组织目录结构
Linux目录结构
windows是各种系统盘, linux是一以目录为结构的目录结构
不可变的
可分享/use(软件放置处)
/etc(配置文件
可分享/第三方软件
/boot(开机及内核文件
可变动的
/var/mail(用户邮寄信箱)
/var/run
/var/news
/var/lock(文件锁相关)
相对路径和绝对路径
绝对路径
以/为起点的完整路径
相对路径
相对于当前目录的路径
文件的移动,复制,重命名,编辑等操作
新建
新建空白文件
touch test
新建目录
mkdir mydir
创建多级目录
mkdir -p father/son/grandson
复制
复制文件
cp test fater
复制目录
cp -r fater family
删除
删除文件
rm test
删除目录
rm -r family
移动和重命名
移动
mv file1 Document(剪切)
重命名文件
mv jie.jpg hu.jpg
批量重命名
查看文件
使用cat,tac,nl
cat -n passwd nl passwd
more和less
查看多行
head和tail
查看头尾 或者查看一行 head tail -n 1 passwd
查看文件类型
file /bin/name
文件的压缩解压工具的使用
压缩和解压
zip命令
zip -r -q - o name.zip /path/target 解压 unzip -q shiyanlou.zip -d ziptest 如果只是想看内容 unzip -l shiyanlou.zip
tar命令
创建压缩文件 tar -c(create)f (指定文件名)shiyanlou.tar/home/shiyanlou/Desktop 解压: tar -xf shiyanlou.tar -C tardir
压缩与解压缩常用组合
zip: 打包 :zip something.zip something (目录请加 -r 参数) 解包:unzip something.zip 指定路径:-d 参数 tar: 打包:tar -cf something.tar something 解包:tar -xf something.tar 指定路径:-C 参数
技巧
1.~是目录
可以cd ~ 或者mv jie.jpg ~/jie.jpg
环境变量与文件查找
环境变量
指定操作系统运行环境的一些参数,如文件夹的位置等信息
变量类型
1.自定义变量 2.shell本身自建的变量 3.从自定义变量导出的环境变量
打印环境变量
set:当前shell的所有变量 env:显示与当前用户相关的环境变量 export:显示从shell中导出成环境变量的变量
命令的查找路径与顺序
查看环境变量
echo $PATH
添加自定义路径到“PATH”环境变量
添加自定义路径到path环境变量
添加当前环境变量: PATH=$PATH:/home/shiyanlou/mybin 添加环境变量一直有效: 写入.zshrc(每次启动时的自动配置脚本)文件中 echo “PATH=$PATH:/home/shiyanlou/mybin” >> .zshrc
删除和修改已有变量
环境变量修改
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据 ${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据 ${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据 ${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据 ${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串 ${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串
删除
unset temp
如何让环境变量立即生效
搜索文件
whereis简单快速
查看文件的位置
locate块而全
配合数据库查看文件的位置
which小而精
查看可执行文件的意思
find细而精
查询文件名称,(size,time,正则表达式) 显示最近的改动文件: find ~ mtime 0(24小时以内)
文件操作与磁盘管理
查看磁盘和目录的容量
使用df命令查看磁盘的容量
df -h
命令执行顺序控制和管道
顺序执行多条命令
各条命令用 ; 隔开 例如: sudo apt-get update ; sudo apt-get install vim; vim
选择执行命令
两个命令: && 当前面的返回值为0时执行后面的命令 ||当前面的返回值不为0时,执行后面的命令 如: which cowsay >/dev/null &&echo "exsit" || echo "not exist"
管道
管道是一种通信机制 将上一个进程的输出作为下一个进程的输入
匿名管道
具名管道
有名字的管道,通常在源程序中才会用到具名管道
cut命令
打印某一行的某一个字段: cut /etc/passwd -d ‘:’ -f 1,6 打印以:为分隔符的第1,6字段 显示前n个字符 cut /etc/passwd -c -n 前n个之后的 n- 第n个 n m-n之间的 n-m
grep命令
在文本中查找或stdin中查找匹配字符串
wc 命令
wc 用于统计并输出一个文件中的行,单词,和字节信息 如: 行 wc -l /etc/passwd 单词数: -w 字节数: -c 字符数 -m 具体行字节数 -L
sort命令
sort line of text files -n 按照数字排序 -r 反序 command: cat /etc/passwd |sort means default dictionary sort cat /etc/passwd |sort -r reverse the result of comparisons cat /etc/passwd | sort -t ':' -k 3 用于指定字段分隔符,这里“:”作为分割符,-k指定对第几个字段排序,如果想按照数字排序需要加上-n
unique comand
report or omit repeated lines(only omit the duplicate rows ) 找以空格为分隔符的 第一个字段 such as : history | cut -c 8- |cut -d ' ' -f 1 |uniq
简单的磁盘管理
创建虚拟磁盘
帮助命令
内建命令与外部命令
查看是什么命令方法: type name 例如: type vim(外部) #得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中 xxx is /usr/bin/xxx xxx is a shell builtin(内部命令)
内建命令
shell自带的命令,包含在shell中,比较简单 如:history,cd ,exit;
外部命令
不在shell之内,
help,man,info命令的使用以及区别
help
显示内建命令的简要帮助信息 help cd (无效) 用help显示外部命令 ls --help comman --help
man
显示的帮助信息更详细,并且没有内外之分 如:man ls
info
更详尽的命令信息,需要安装
linux任务计划crontab
定期的去做一件事
安装日志服务
sudo apt-get install -y rsyslog
开启服务
sudo service rsyslog start sudo cron -f &
添加个人任务计划
1.crontab -e 进入编辑任务 2.编辑 3.查看添加是否成功: crontal -l 4.ps aux |grep cron查看守护进程是否执行 5.sudo tail -f /var/log/syslog查看执行信息 (实际是在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档)
命令格式
第1列分钟1~59 第2列小时1~23(0表示子夜) 第3列日1~31 第4列月1~12 第5列星期0~6(0表示星期天) 第6列要运行的命令 例如: 30 21 * * * /usr/local/apache/bin/apachectl restart 上面的例子表示每晚的21:30重启apache。
添加系统任务计划
编辑/etc/crontab的文件 具体文件的作用: 1./etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行; 2./etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行; 3./etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行; 4./etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;
小玩意
小眼睛
nohup xeyes
数字雨
小火炉
sudo apt-get install libaa-bin aafire
character image
sudo apt-get inatall -y aview imagemagick asciiview phonename
a game:Space invaders
sudo apt-get install ninvaders /usr/games/ninvaders
彩色照片
sudo apt-get install caca-utils cacaview cacademo cacafire
命令行网页
sudo apt-get install w3m
simple text processing
common text processing
tr command
translate or delete characters synopsis: tr [option] ...set1 [set2] -d means delete characters in set1 -s means replace each sequence of a repeated character such as echo ‘hello shiyanlou’ |tr -d 'olh'
col command
can be used to process text. it can be easy to view such as: col -x Output multiple spaces instead of tabs col h not Output multiple spaces instead of tabs cat /etc/protocols | col -x | cat -A | tail -n 5
join command
join lines of two files on a common filed
paste command
merge lines files such : paste fille1 file2
how to easily process text?
date flow redirection
how to use redirection
such as : echo 'hello word' >test >> append
标准错误重定向
把信息重定向到文件中并打印
用tee命令 例如: echo 'hello shiyanlou' |tee hello
永久重定向
让后面的操作的输出信息,全部重定向到一个文件中,到退出子shell为止
创建文件输出描述符
文件描述符是什么: linux下所有操作都是对文件进行操作,而对问进行操作是利用文件描述符来实现的。 每个文件进程控制块中都有一份文件描述符表(可以把它看成一个数组,里面的元素是指向file结构体指针类型),而这个数组的下标就是文件描述符; 1.创建文件描述符 exec 3>somefile 2.查看是否成功 cd /dev/fd/;ls -Al;cd - 3.重定向 echo “this is test" >&3 4.显示 cat &3 5.关闭文件描述符 exec 3>&-
完全屏蔽命令的输出
linux中有个被称为‘黑洞’ 的设备文件,所有导入它的数据都将被“吞噬” /dev/null 是一个特殊的设备,通常用于丢弃不需要的文件,这些操作通常由重定向完成 cat Documents/test.c nefile 1>/dev/null 2>&1
xargs --分割参数列表
cut -d: -f1
Bash
什么是bash shell是一个命令解释器
什么是shell脚本
shell脚本的创建和执行
创建 vim name.sh 执行:4种方法: 1.sh执行 sh name.sh 2.bash执行 bash hello.sh 3.用. 来执行 . ./hello.sh 4.用source来执行 source hello.sh
命令date
shell脚本中的变量
局部变量
只有在代码块中或函数中才可见
环境变量
环境变量中存有运行进程需要的信息
位置参数
在执行脚本时获取,命令行输入的参数信息 语法: $n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) $@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) $#(功能描述:这个变量代表命令行中所有参数的个数) 例如: #!/bin/bash # 作为用例, 调用这个脚本至少需要10个参数, 比如: # bash test.sh 1 2 3 4 5 6 7 8 9 10 MINPARAMS=10 echo echo "The name of this script is \"$0\"." echo "The name of this script is \"`basename $0`\"." echo if [ -n "$1" ] # 测试变量被引用. then echo "Parameter #1 is $1" # 需要引用才能够转义"#" fi if [ -n "$2" ] then echo "Parameter #2 is $2" fi if [ -n "${10}" ] # 大于$9的参数必须用{}括起来. then echo "Parameter #10 is ${10}" fi echo "-----------------------------------" echo "All the command-line parameters are: "$*"" if [ $# -lt "$MINPARAMS" ] then echo echo "This script needs at least $MINPARAMS command-line arguments!" fi echo exit 0
运算
数学运算
bash不支持数学运算但是可以用expr 例如: val=`expr $a + $b` + - \* / % = if [ $a == $b ] then echo "a ==b" fi == !=
关系运算符
关系运算符只支持数字,不支持字符串 -eq检测两个数是否相等,相等返回true -ne ,不相等返回true -gt 检测左边的数是否大于右边的 -lt 检测左边的数是否小于右边的 -ge 大于等于 -le 小于等于 例如: if 【 $a -eq $b ] then
逻辑运算符
&& and || or 例如: if [[ $a -lt 100 && $b -gt 100 ]]
字符串运算符
= 检测两个字符串是否相等, != -z 字符串长度为0,为0返回true -N 检测字符串长度是否为0,不为0返回true str 是否为空,不为空返回true 例如 : if [ -n $a ]
文件测试运算符
-e 文件存在 -a 文件存在,这个选项的效果与e相同。但是它已经被“弃用了,并且不鼓励使用。 -f 表示这个文件是一个一般文件(并不是目录或者设备文件) -s 文件大小不为零 -d表示这是一个目录 -b 表示这是一个块设备(软盘,光驱,等等) -c 表示这是一一个字符设备(键盘,modem, 声卡,等等) -p 这个文件是一个管道 -h 这是一个符号链接 -L这是一个符号链接 -s表示这是一一个socket -t 文件(描述符)被关联到一一个终端设备上,这个测试选项一般被用来检测脚本中 的stdin([ to I)或者stdout(-1 ])是否来自于一个终端 -r 文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限) -w 文件是否具有可写权限(指的是正在运行这个测试命令的I用户是否具有写权限) -x 文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限) -g set-group-id(sgid)标记被设置到文件或目录上 -k 设置粘贴位 -O 判断你是否是文件的拥有者 -G文件的group-id是否与你的相同 -N 从文件上一次被读取到现在为止,文件是否被修改过 f1 -nt f2 文件f1比文件2新 f1 -ot f2文件f1比文件f2旧 f1 -ef f2文件f1和文件[2是相同文件的硬链接 ! “非”,反转上边所有测试的结果(如果没给出条件,那么返回真) 例如: file ="/home/shiyanlou/test.sh" if [ -r $file ] then echo "The file is readable"
流程控制
if else
在sh中流程控制不能为空 if else用法: if condition then command1 command2 ...... elif command else command fi
for循环
用法: for var in item1 item2.... do command1 command2 ... done
while语句
用于不断执行一系列命令 while condition do command done 例如; whle (( $int do echo $int let "int++" done
无限循环
while : do command done 或者 while true do command done 或者 for((;;))
until循环
直到条件为真时停止 until condition do command done
case多选择语句
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac 例如: echo 'Enter a number between 1 and 4:' echo 'The number you entered is:' read aNum case $aNum in 1) echo 'You have chosen 1' ;; 2) echo 'You have chosen 2' ;; 3) echo 'You have chosen 3' ;; 4) echo 'You have chosen 4' ;; *) echo 'You did not enter a number between 1 and 4' ;; esac
跳出循环
break运行跳出所有循环 例如: #!/bin/bash while : do echo -n "Enter a number between 1 and 5:" read aNum case $aNum in 1|2|3|4|5) echo "The number you entered is $aNum!" ;; *) echo "The number you entered is not between 1 and 5! game over!" break ;; esac done
continue
continue仅跳出当前的循环 下面的代码 game over永远不会执行 #!/bin/bash while : do echo -n "Enter a number between 1 and 5: " read aNum case $aNum in 1|2|3|4|5) echo "The number you entered is $aNum!" ;; *) echo "The number you entered is not between 1 and 5!" continue echo "game over" ;; esac done
esac
测试题目
打印金字塔: #!/bin/bash n=1 for (( i=1;i do for ((k=$i;n do echo -n " " done for ((j=1;j )) do echo -n "*" done echo -e "\n" done" 收获: echo -n 不换行 echo -e 启用\转义 即 echo -e “\n” 换行
函数
函数定义
#!/bin/bash funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !"
函数参数
#!/bin/bash funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
生成随机数
#!/bin/bash function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd=$(rand 1 50) echo $rnd exit 0
正则表达式
用单个字符来描述,和匹配一系列符合某个语法规则的字符串
基本语法
选择
| 表示选择 如“boy|girl” 可以匹配“boy” 或者 “gril”
数量限定
不加数量限定符表示出现一次 + 出现多次。如goo+gle 可以匹配 gooooogle等 ?前面的字符最多出现一次(0|1) 如colou?r 可以匹配color或者colour *前面的字符可以不出现,也可以出现一次或者多次。 如0*42 可以是042,0042等等
范围和优先级
()里的内容可以作为一个整体
语法
基本操作
grep
-c
统计以模式匹配的数目
-i
ignore
-n
number
-v
invert
使用正则表达式
sed流编辑器
软件安装
重新安装
sudo apt-get --reinstall install w3m
更新软件源
sudo apt-get update
升级没有依赖问题的软件包
sudo apt-get upgrade
升级并解决依赖关系
sudo apt-get dist-upgrade
卸载软件
sudo apt-get remove w3m
不保留配置文件
sudo apt-get purge w3m
删除依赖
sudo apt-get autoremove
软件搜索
sudo apt-cache search name
安装dpkg包
进程概念
进程与程序
进程的衍生
当你打开终端,就启动了bash进程, 当输入bash就再启动了一个进程。 第二个进程是第一个进程的子进程。 系统通过fork()函数创建新进程 exec不清楚。。。
PCB
进程存在的唯一标志,储存进程的信息
PID
进程标识号
PPID
PPID 父进程的进程标识号
僵尸进程
如果父进程没有释放子进程的PCB,一直留在系统中成为僵尸进程。
工作管理
使用命令并让后台运行
command &
暂停当前工作
ctrl + z
查看后台任务
jobs
任务放到前台
fg %jobnumber
放到后台工作
bg %jobnumber
杀死任务
kill -signail %jobnumber -1 restart -2 ctrl+c -9 强制终止该任务 -15正常终止该任务
进程的分类
进程的功能和服务的对象
用户进程
内核之外的进程
系统进程
系统内核产生的进程,比如内存资源的分配,和进程的切换
以应用程序的服务类型来分
交互进程
shell启动的进程
批处理进程
进程集合,按照顺序启动其他的进程
守护进程
周期的执行任务,或者等待任务的发生
进程组与session
进程组
PGID,每一个进程都会是一个进程的成员
session
每当一个进程被创建时,它便会成为,其父进程所在session的一员
进程的管理
进程的查看
top
ps
常用: ps aux //列出所有信息 ps axjf //显示的同时,以进程数的方式显示出来 把想要的信息放在一起,如: ps -afxo user,ppid,pid,pgid,command
pstree
-u 列出账户所属名称 -p 列出pid -A 各个程序树之间以ascii字元来连接
进程的管理
kill command
ps aux kill -9 pid
日志系统
常见日志
在 /var/log里
配置的日志