文章目录
Shell——命令行解释器
history 查询用户的过往操作
alias 别名
给原命令设置别名,alias 别名=‘原命令’
alias a='ls -l' # 给命令ls -l 设置别名a
unalias a # 取消别名
command & 后台进行
在命令后面加上一个 & 后,表示将一个进程直接丢入后台运行
nohub command & 将进程丢入后台,且控制台退出后,进程不断
ctrl+z 将正在运行的前台命令暂停,丢入后台
nohup python /opt/tensorflow_object_detection/bin/train.py \
--logtostderr \
--pipeline_config_path=/opt/tensorflow_object_detection/data/ssd_mobilenet_v2_coco.config \
--train_dir=/opt/tensorflow_object_detection/data/model \
--num_clones=3 \
--ps_tasks=1 &> /opt/tensorflow_object_detection/log/train.log &
# nohub & 将训练模型进程丢入后他运行,关闭控制台后,进程不断
# &> 将训练的日志信息,全部写入到train.log中
# 其中的反斜杠 \ 表示命令行太长了,换个行
echo 回显
(回声)用于在屏幕上打印出指定的字符
echo arg #在屏幕上打印字符arg
name="OK"
echo "$name It is a test" # OK It is a test
mouth=8
echo "${mouth}-1-2009" # 8-1-2009
echo "OK!\n"
echo "It is a test" # 打印OK! 换行后打印 It is a test
echo "OK!\c"
echo "It is a test" # 不换行打印 OK!It is a test
echo `date` # 打印日期
rm (remove) 删除
命令用于删除一个文件或者目录
-
-i 删除前逐一询问确认。
-
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-
-r 将目录及以下之档案亦逐一删除。
rm test.txt # rm:是否删除 一般文件 "test.txt"? y rm dirname # rm: 无法删除目录"dirname": 是一个目录 rm -r dirname # rm:是否删除 目录 "dirname"? y rm -r * # 删除当前目录下的所有文件及目录 rm -rf dirname # 删除当前目录下所有文件,且无需确认
mv (move file) 移动
用来为文件或目录改名、或将文件或目录移入其它位置
-
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-
-n: 不要覆盖任何已存在的文件或目录。
-
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
# 目标目录与原目录一致,指定了新文件名,效果就是仅仅重命名 # 目标目录与原目录不一致,没有指定新文件名,效果就是仅仅移动 # 目标目录与原目录一致, 指定了新文件名,效果就是:移动 + 重命名 # mv source_file(文件) dest_file(文件) # 将源文件名 source_file 改为目标文件名 dest_file mv aaa bbb # 将文件aaa 改名bbb # mv source_file(文件) dest_directory(目录) # 将文件 source_file 移动到目标目录 dest_directory 中 # 批量移动,但是注意需要先执行显示隐藏文件命令,否则,隐藏文件以及隐藏文件夹不会被移动到新目录 $ mv /usr/runoob/* dirname # 如果dirname为空,则将/usr/runoob 下的所有文件和目录移到当前目录下,否则移到dianame下 # mv source_directory(目录) dest_directory(目录) # 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中 # 目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory mv info/ logs # 将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logsls (list files) 用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
ls (list files) 查询文件内容
用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
- -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r 将文件以相反次序显示(原定依英文字母次序)
- -t 将文件依建立时间之先后次序列出
- -A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”
- -R 若目录下有文件,则以下之文件亦皆依序列出
> 定向保存
将 > 前的执行结果保存到 > 后的文件中
-
使用 > ,执行命令时,每次都会新生成一个 > 后面的文件,将之前生成的文件替换掉(文件创建时间也会跟着改变)
-
使用 >> 向>>后的文件中追加内容
ls /home/genius01/chenmq/image/train/*/*.jpg > /home/genius01/chenmq/file/train.txt # 查询train目录下,每个类别目录下的所有jpg文件,并将文件路径写入到train.txt中 ls /home/genius01/chenmq/image/*/*/*.jpg >> /home/genius01/chenmq/file/all.txt # 查询image下所有图片,并将其绝对路径追加写入到all.txt文件中
cp (copy file) 复制
用于复制文件或目录
-
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-
-f:覆盖已经存在的目标文件而不给出提示。
-
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-
-l:不复制文件,只是生成链接文件。
cp –r test/ newtest # 将test目录下的所有子目录和文件(包括test目录)到newtest目录下 cp -r /opt/tensorflow_object_detection/bin/* /home/genius01/chenmq/bin # 将bin目录下的所有文件复制到chenmq/bin目录下
&和&&, |和|| ,&> 与 >的区别
& 表示任务在后台执行,如要在后台运行,放在命令行后边
java -jar test.jar > log.txt &
#运行 test.jar程序 ,并且置于后台执行,执行的日志重定向 到当前默认的log.txt文件中
&& 表示前一条命令执行成功时,才执行后一条命令
ls -l && cd ..
| 表示管道,上一条命令的输出,作为下一条命令参数(输入)
ps -aux | grep aux
|| 表示上一条命令执行失败后,才执行下一条命令
als -l || cd ..
>符号是指:将正常信息重定向
find / -name “*.txt” > /tmp/log.txt
# 在根目录下根据名字来查找*.tx输入的日志放置/tmp/log.txt文件中
&>可以将错误信息或者普通信息都重定向输出
$ 用法
-
引用变量
# 直接引用 (cctf14) genius01@a4c6495c0f2f:~$ x=2014 (cctf14) genius01@a4c6495c0f2f:~$ echo $x 2014 # 利用双引号 " 将括起来的字符串支持变量插值 [root@localhost ~]# x=1024 [root@localhost ~]# echo "x = $x" x = 1024 # 使用{}作为单词边界 [root@localhost ~]# x=1024 [root@localhost ~]# echo "x = ${x}xy" x = 1024xy #使用 ${#} 获取变量字符串长度 [root@localhost etc]# s=helloworld [root@localhost etc]# echo "s.length = ${#s}" s.length = 10 #使用$[] 中括号中的表达式会被数学计算 echo $[3+5] # 显示8
-
上条命令返回值
# 使用 $? 上条命令的返回值 # 0 -表示没有错误 # 其他任何值 -表示有错误 [root@localhost ~]# true 1024 [root@localhost ~]# echo $? 0 [root@localhost ~]# false 2048 [root@localhost ~]# echo $? 1
-
获取当前进程ID
(cctf14) genius01@a4c6495c0f2f:~$ echo $$ 114306
\ 反斜杠
- 将特殊符号字符的特殊含义屏蔽掉,使其还是原字符
- 用于表示一行未结束,通常一行命令很长时,用\表示换行,但命令未结束
; 分隔符
用于在一行内分隔两个命令,相当于回车
pwd ; ls -l
# 先执行pwd,再执行ls -l
’ ’ ” “ 单引号和双引号的区别
" " ,将一串字符当作一个字符串对待,包含特俗含义,则进行转义
’ ’ ,作用同上,但不进行转义
genius01@a4c6495c0f2f:~$ echo "hello,$HOSTNAME" # 显示 hello,a4c6495c0f2f
genius01@a4c6495c0f2f:~$ echo 'hello,$HOSTNAME' # hello,$HOSTNAME显示
`` 反引号
反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用shell编程时经常用的到将系统命令的执行结果赋给一个变量
genius01@a4c6495c0f2f:~$ echo `pwd` # /home/genius01