Linux路径命令及shell脚本

路径树

绝对路径都以 / 开头
相对路径是以 . 开头,  .   代表当前目录(./是可以省略的)
                      ..   代表上一级目录
                   (还可以连着用 ../../,当然用cd / 直接回到根目录更简单)
cd -                 回到原来的目录
touch .aa            #创建隐藏文件
mkdir .mydir         #创建隐藏目录
ls -a                #查看所有文件,包括隐藏文件
cat index.html        #查看文件内容
less index.html       #分页查看文件内容
ctrl++               #放大字体
ctrl--                #缩小字体
z                   #向下滚动
k                   #向上滚动
/字符串             #查找相关字符串
 
三个重要文件(系统一直打开的)
三个文件描述符
stdin 0     标准输入文件(键盘输入的会保持到标准输入文件中)
 
stdout1    标准输出文件
stderr2    标准错误输出文件
这两个文件放数据但不会写入硬盘,而是会输出到屏幕
程序启动后会从标准输入文件中读取数据,然后执行后会放入标准输出的两个文件中
 
重定向(每次重定向之前会清空,所以后面重定向的内容会覆盖前面的内容)
输出重定向 >            将原来显示的信息 > 到一个文件
(如果需要追加重定向输出就需要两个>>)  例如:cat file1 >file   cat file1 >> file
cat file1 file2       #组合两个文件的内容
因此需要追加内容,也可以    cat file1 file2 >files
标准错误输出重定向(一般需要直接显示,但也可以重定向输出)
ls shit 2>out.txt        #需要在>前面加标准错误输出的文件描述符2
cat out.txt
echo hello > out.txt 
标准输入也是可以重定向的(<  这个不常用)
cowsay <out.txt
管道符(有了管道符,各个命令才能更好的协同作战,程序设计可以更精巧)
executing x 执行权限
 
ls -l file
-rw-rw-r-- 1   文件模式
- file         文件
l sym link     软链接
d directory    目录
1            表示硬链接的数量
ls -ld mydir
drwxrwxr-x 2
 
ps aux | less    分页查看进程列表
ps aux | grep vim
双击选中的内容  → ctrl+shift+c → ctrl+shift+v   复制粘贴
firefox &
bg           #放入后台
fg           #回到前台
kill 9 vim
 
Linux是有7个工作台
ctrl+alt+f1  到达第一个工作台
ctrl+alt+f7  回到图形界面的工作台
 
find .|grep .txt
find . -type f         #查找文件
find . -type d         #查找目录
 
happygrep   下载地址:https://github.com/happypeter/happygrep
sudo apt-get -y install libncuresw5 libncursesw5-dev
make
ls
mv happygrep ~/bin
 
不用每次输入密码进入远程服务器
ssh-keygen            #在本地服务器上运行这个命令
回车保留默认值
cd ~/.ssh
ls                    #发现多了id_rsa(私钥)文件、 id_rsa.pub(公钥)文件
将公钥放到远程服务器的位置:/home/peter/.ssh/authorized_keys
ssh-copy-id petter@happycasts.net         #复制公钥到远程机器
yes
输入密码
ssh happycasts.net                 #可以正常不输入密码远程登陆
 
 
tmux 强大的终端窗口管理器软件
tmux a              #重回服务器操作现场
 
rsync -r mydir happycasts.net:       #注意空格与冒号,上传mydir到服务器
rsync -r happycasts.net:mydir .       #从服务器上面下载文件夹
rsync -r mydir/ happycasts.net:mydir/   #同步更新增加文件到服务器
rsync -av mydir/ happycasts.net:mydir/  #同步更新增加到服务器(会打印信息)
rsync -av --delete mydir/ happycasts.net:mydir/     #完全同步更新文件到服务器
 
shell 脚本       
 指定解析器      (可以识别多种语言,所以一定要指定解析器)
   #!/usr/bin/env ruby
 语句即命令(命令对空格敏感,脚本语句对空格变态的敏感)
   echo "hello"
 位置参数
   $0  $1  $2
 脚本不在当前shell执行
   如果需要在当前shell下执行:source kk.sh         #kk为脚本名称
 循环控制
   第一个脚本(这个脚本不通用)
   ls mydir/
   a b c                #显示的结果
   vim rename.sh
   #!/usr/bin/env bash
   cd $1
   for file in a b c
   do
      mv $file $file.txt
   done
   :wq
   chmod +x rename.sh
   ./rename.sh mydir/
   ls
   a.txt b.txt c.txt
   第二个脚本(适当更改上面的脚本让其通用)
   #!/usr/bin/env bash
   cd $1
   echo I am in 'pwd'
   for file in 'ls'
   do
      mv $file $file.txt
   done
   :wq
 远程执行
 确认执行
   上面两个用到的自动同步远程服务器脚本如下
#!/usr/bin/env bash
sync_dryrun()
{
   echo
   echo -e  "\033[1m ...dryrun...\033[0m"
   rsync -av --delete ~/yourdir/ peter@happycasts.net:~/yourdir/ --dry-run
   echo -e  "\033[1m ...dryrun...\033[0m"
}
sync_dryrun
 
sync_server()
{
   echo
   echo -e  "\033[1m ...syncing...\033[0m"
   rsync -av --delete ~/yourdir/ peter@hqppycasts.net:~/yourdir/
   echo -e "\033[1m ...done...\-33[0m"
   echo
}
 
echo -n "wang to sync? (Y/n): "
read AAA
if [ "${AAA:-y}" = "y" ];then
    sync_server
else
    echo Nothing done,bye.
fi
 其他语言写脚本
请按F5,刷新后再评论
  • 全部评论(0
    还没有评论,快来抢沙发吧!