绝对路径都以 / 开头
相对路径是以 . 开头, . 代表当前目录(./是可以省略的)
.. 代表上一级目录
(还可以连着用 ../../,当然用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
其他语言写脚本