Linux基础语法:
1. / :绝对路径:/home/anaconda3
相对路径:anaconda3
用户home: ~
2. pwd :输出当前工作目录的全名
3. ls :列出目录内容
ls -l :长清单格式
ls -a :所有条目
ls -d :列表目录
ls -R :列出子目录
ls -1 :一行显示一个名字
ls -F :有分类的目录,名字后面加字符(*【可执行的文件】、/【路径】、@【链接】、|【两个进程要用这个链接】、=【网络连接socket】)
4. gedit :编辑文本文件
5. echo :查找环境变量
echo $PATH 环境变量(里面全是路径,分号是分隔符,Windows和Linux都是path作为环境变量)
6. printenv :打印出所有的环境变量(都是XXX=xxx的格式)
7. grep :帮助查找(printenv | grep PATH 把前面的的输出作为后面的输入)
grep -i :不区分大小写的搜索
grep -w :只匹配完整的单词
grep -l :只显示匹配的文件名
grep -r :在当前目录和所有子目录中搜索
grep -n :用行号列出匹配的行
grep -v :反操作,显示不匹配的项目
grep --color :显示匹配的颜色
grep --include :通过名字类型查找文件
举例子:
printenv | grep path :查找名字是path的环境变量
printenv | grep -i path :不区分大小写的查找名字是path的环境变量
grep -ir python . :从当前路径开始找所有包含python的文件;r是一直找下去;.是很特殊的路径指当前路径;..是指父亲的路径;要是想查找一段文字要用引号引起来 ”python path name”
grep -ir python file1 :在file1中找到python文件
grep -ir “python$” . :从当前路径查找以python结尾的
grep -ir --include *.py math ~ :--include *.py表示只看.py结尾的文件,其他不看;math是要找的东西;~是从home里面找
8. man :说明书菜单,可以解释命令的用法
9. env :也是查询(env | less :只显示一页可以用键盘的上一页下一页来控制页面的显示;env | more和less功能一样,但是less更强大,因为more要把所有的文件都缓存到内存里才开始显示,而less是有多少先显示多少)
10. | :是管道的意思,把前面的输出作为后面的输入,可以接很多个
11. clear :把屏幕清掉
12. file :鉴定文件类型,是个链接,连接到另外一个地方去,看文件里面是什么
13. wc :统计命令
wc -w :统计有多少字
wc -I :统计有多少行
wc -L :统计最长的一行有多长
ls –1F | grep “*” | wc –I(*是特殊字符,所以使用时候要加””)
【很常用,统计有多少条命令】
ls –1F | grep “@” | wc –I(*是特殊字符,所以使用时候要加””)
【很常用,统计有多少条链接】
14. head : 列举文件的头几行,查看文件时会用到
head -5 zipfile.py:显示开始的几行
15. tail :显示尾巴上的几行
tail -f file:实时跟踪文件的最后几行
16. mkdir :创建目录路径;要创造一整套的路径
mkdir –p ~/tmp3/abc/xyz不用分别创建,直接输命令就可以
17. tree ;可以吧当前路径写成树的形式
18. cp :复制文件或者路径
cp ~/anaconda3/lib/python3.6/zip* . 复制该文件到当前文件夹下
cp f1 f2 复制f1到f2中
cp –r d1 d2 把d1和它的子文件都复制到d2中
19. cat :把几个文件合并为同一个文件生成一个新的
cat zip* > my.py 把cat和zip合起来公洞放到my.py中去
cat –n my.py 显示一个文件,把行号也显示出来
20. 标准输入stdin标识为0输出,输出要输出两个,一个是正常输出stdout标识为1,一个输出错误信息stderr标识为2
< 重定向进命令
> 重定向输出到文件中去,并且重写
>> 重定向输出到文件中去,但是不重写,附加
2> 重定向输出到文件中去,输出的是错误的,并且重写
2>>重定向输出到文件中去,输出的是错误的,但是不重写
ls ~ /Toronto > ~/out.txt 2> ~/err.txt
生成两个新的文件,错误信息输到err.txt,正确信息输到out.txt
21. hexdump :把文件原始的数字显示出来,十六进制
hexdump -C my.py 按字符把所有的数字输出出来
22. which :给出命令的原始路径
23. ln :软链接连接到文件,可以直接到那个位置
24. sudo :升级成超级root用户
sudo ls -alR /root
显示root下的所有文件,并且包含所有子路径
25. tar :打包和解压
tar czvf demo.tar.gz * 把当前路径下所有东西打包放到demo.tar.gz中
tar xzvf demo.tar.gz * 把demo.tar.gz中的所有东西都取出来放到当前路径下
# extract all files in demo.tar.gz into current directory
26. find :找文件
find / -name 'tar' 从/这个文件下找名字是tar的文件
find ~/tmp -name '*.txt' -type f -exec d -C {} \; 从~/tmp 文件下找名字是*.txt类型是文件并且执行命令
-name 后面加名字
-type 后面加类型
-exec 后面加想要执行的命令,前面找到的东西是后面命令的输
\; 表示命令的结束
27. date :输出或者设置日期和时间
date +%Y-%m-%d 年月日2017-12-23和%F一样
date +%H:%M:%S 时分秒13:29:03和%T一样
date +%I:%M:%S 以12小时来显示当前的时分秒
date +%c 当前的本地系统时间
date -u UTC的日期和时间
date -R RFC-2822格式的时间
date -Iseconds ISO-8601格式的时间输出到秒,如果最后是Iminutes就是输出到分钟,注意是大写的i:I
28. cut :把一串字符串切开
date -u | cut -d ' ' -f2,3,6 把时间,以空格为工具来切并且取出第2个,第3个和第六个域但是空格和空格相连也会把空格选出来
cut -d ' ' -f1,2 /etc/mtab 把/etc/mtab里的文件,以空格为工具来切并且取出第1个,第2个
29. tr :转换,压缩,删除字符串
date -u | tr 'a-z' 'A-Z'将所有的输出都转换成大写
echo 'abcdefg' | tr7 -d 'b-e' 把b到e之间的都删掉
echo 'abbbbg' | tr -s 'b' 把中间重复的b压缩成一个
30. nohup :当窗口退出的时候,使得命令继续执行;该命令将不接收输入,所有输出,包括任何错误消息,都将写入文件nohu .out;该命令将作为前台进程运行,后面跟着&时在后台处理
nohup jupyter notebook & 在后台运行jupyter notebook
nohup comm >/dev/null 2>&1 & 在后台运行comm >/dev/null:把输出输到/dev/null;2>&1:把错误输出和标准输出输出到一起
31. ps :显示当前进程的信息
ps aux 显示所有的进程
ps -x 只是显示自己的进程
ps -e --forest 用树的形式显示进程
ps -eo pid,user,cmd 有选择的查看进程。Pid:进程id;user:哪个用户启动的;cmd:查看命令行
32. kill :送一个信号给进程,用来关闭或者其他操作
kill -l 显示可以使用的信号
kill -9 1234 发送无条件终止信号给ID为1234的进程
kill 1234 发送终止信号给ID为1234的进程
33. passwd :设置、修改或者管理用户密码
34. 权限:
chmod :改变文件的权限
+ 增加权限
- 减少权限
= 设置权限
U,g,o,a user,group,other,all
1=x;3=wx;2=w;5=rx;4=r;6=rw;7=rwx
35. rm :移除文件或者路径
rm dir/file 删除dir中的文件
rm -r dir 删除dir和他的内容
rm -d dir 删除空的dir
36. rmdir :删除路径
rmdir tmp/d1/d2 d2会被删除
rmdir -p tmp/d1/d2 tmp,d1,d2都会删除
37. ping :发送ICMP ECHO_REQUEST给网络用户
Shell脚本:
是一个包含一系列命令的文本文件
1. for循环
$*给你一个包含所有参数的字符串,不能在for循环中提供字符串列表,必须以"$*"开头
echo "Command-line parameters: $*" 这是一个反射命令
$@提供for循环中的字符串列表
for arg in "$@" 这是一个for循环语句,arg是一个变量
do 从do到done是“for循环”主体
echo "arg: $arg" arg会被变量的值取代
done
2. while循环
$#提供参数的数量 -gt是大于0的意思
$0是命令本身
第一个参数是$1,第二个参数是$2
while [ $# -gt 0 ]; do 这是“while循环”,从do到done是它的主体
case $1 in 这是case语句,以esac结尾
-a | --aA )echo "Got $1" 如果$1的值是-a或-aA,则执行此块;|:或者
;;
-b | --bB )echo "Got $1" 如果$1的值是-b或-bB,执行这个block
;;
* ) echo "Received $1" 所有其他情况执行此块
esac
shift shift将删除第一个参数,依次往后删
done
3. var变量
本质上,Bash变量是字符串。
varA=1234 我们不需要声明变量
varB=${varA/23/'A B C'} 把A中的23编程A B C并且输出
var=${MYTEST} 环境变量可以直接使用
设置环境变量使用export MYTEST=233;想要查看使用env | grep MYTEST
thatVar=varA thatVar的值是一个变量的名字
var=${!thatVar} 间接引用;将varA的值赋给var,如果不加!就会直接取出thatVar中的值;加了!就是取出变量里面变量的值
var=`ls -l` 将命令的结果赋值给变量
$? 上一个命令执行的结果
$$ 本身进程的ID
展开并计算(())之间的整数表达式
Bash允许对变量进行算术操作和比较。
决定因素是该值是否只含有数字
v1=123 v2=567
((var=$v1+$v2*890))
echo "var is: $var" 最后值是504753
4. 引号的使用
var=`ls -l` `用来执行,把结果给变量
echo $var 里面空格作为分隔符的值的集合,变量里可以存放很多值
echo "$var" 双引号括起来之后就是一个值了,变量里原来是什么就是什么
echo '$var' 单引号括起来,输出单引号里面的值
for a in $var; do 循环里的不加引号就是用空格分割开的值的集合
echo "=> $a"
done
for a in "$var"; do 用双引号引起来里面就一个值,就是$var一个值
echo "=> $a"
done
5. if语句(命令和参数之间一定要用空格隔开)
if 结束妆台 0代表真,其他代表假
then
if test 比较表达式或文件测试
then
if [ 比较表达式或文件测试 ] 单括号其实就是test
then
建议使用扩展测试命令。[[和]]是语言里保留的字,并不是一个命令
if [[比较表达式或文件测试]]
then
实际操作中并不需要if语句
v1="Toronto" v2="Beijing"
[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"
如果前面为真就会执行后面的
v1=123 v2=45
[[ "$v1" -gt "$v2" ]] && echo "$v1 is greater than $v2"
数字比较大小使用-gt,123更大
[[ "$v1" > "$v2" ]] || echo "$v2 is greater than $v1"
字符串比较使用符号。45更大,因为4比1大
dir=~/xyz
[[ -d "$dir" ]] || echo "directory $dir does not exist"
-d表示看看后面的是不是可以执行成一个路径,如果前面为假才会执行后面的
file=~/tmp/readMe.txt
[[ ! -f "$file" ]] && echo "file $file not found."
-f表示看看后面的是不是一个文件
v1=$1 && [[ -z "$v1" ]] && v1=DEFAULT
-z表示查询后面的里面有没有值,如果命令行有值就用命令行里的值,如果没值就用给的值