Shell 入门
1. 目录结构
- Unix 和 Linux 的设计初衷就是多用户操作系统,多个用户共同享用系统的全部硬件和软件资源。
root
: 超级管理员目录;etc
: 存放配置文件;usr
: 存放系统配置文件; (unix shared resource);
2. Terminal 快捷方式
commond + +
: 放大 terminal 窗口;commond + 0
: 调整为默认大小;commond + D
: 新建窗口;commond + [
: 前一个标签;man + 具体命令(例如:ls)
: 查看"ls"的用法,可以使用 "f",向下翻页;使用"b"向上翻页;"q"退出
3. 操作目录
1. 切换目录(change directory): cd
cd .
: 切换到当前目录;cd ..
: 返回当前目录的上一层;cd ./A
: 打开当前目录下的A文件夹;cd /
: 返回 root 目录;cd ~
: 返回 home 目录;cd -
: 返回上一次操作的目录;
2. 创建目录或删除目录
- 创建新目录:
mkdir [dir]
; - 创建多级目录:
mkdir -p a/b/c
; - 移除空目录:
rmdir [dir]
; - 移除目录及内容:
rm -r [dir]
; - 创建文件:
touch 文件名
;
3. 展示目录下的文件列表
- 显示非隐藏文件:
ls
- 显示所有文件(包含隐藏文件):
ls -a
- 显示文件详细信息:
ls -l
, 简写方式:ll
- 以友好的方式显示文件详细信息:
ls -lh
- 显示所有文件:
ls -lha
ls *.t[xn]t
: * 表示匹配任意多个字符,也可以没有; 中括号表示其中的任意一个字符.- 以目录树的方式显示文件:
tree
4. 查看文件中具体内容
cat
: 显示文件的所有内容,不会分页;more
: 每次只显示一页, 使用空格键查看下一页, 按"q"退出, 回车显示下一行数据;less
: 分页显示; 可以通过"pageDown(Up)"上下翻页tail
: 查看一个文件的末尾几行.tail -2 a.txt
, 表示查看 a.txt 的末尾两行;
tail -f 文件名
, 表示动态的查看文件内容. 通过ctrl + c
结束查看.
4. 文件操作
1. 创建一个文件: touch 文件名
2. 复制文件
cp 文件 目录/文件名
cp 1.txt 2.txt
, 表示将 1.txt 复制到当前文件夹
cp 1.txt a/2.txt
, 表示将 1.txt 复制到 a 目录下,重命名为 2.txt- 软连接(类似于"快捷方式"):
ln -s 1.txt 1-softlink.txt
; - 硬连接:
ln 1.txt 1-hard.txt
;
3. 移动文件(重命名)
mv 文件名 目录/文件名
mv 1.txt 2.txt
, 表示将 1.txt 重命名为 2.txt
mv 1.txt a/1.txt
, 表示将 1.txt 剪切到 a 目录下
4. 删除文件
rm 文件名
, 表示删除文件;rm -i 文件名
, 移除时,出现确认提示;rm -r 目录
, 移除目录及目录下的内容(递归删除);rm -rf 文件名
, 强制移除;
5. 文件的打包或解压
tar -cvf test.tar *.py
: 表示把当前路径下所有".py"文件打包到 test.tar;tar -xvf test.tar
: 解包, 不是解压缩;gzip tets.tar
: 将打包之后的文件,进行压缩;gzip -d test.tar.gz
: 解压缩;tar -zcvf test.tar.gz *.py
: 表示把当前路径下所有以"py"结尾的文件打包到 test.tar, 并进行压缩;tar -zxvf test.tar.gz
: 解压缩并且解包;tar -zxvf test.tar.gz -C 指定路径
: 往指定路径下,解压缩解包;tar -jcvf xxx.tar.bz2 *
: 使用 bzip2 的方式压缩;tar -jxvf xxx.tar.bz2
: 使用 bzip2 的方式解压缩;
6. 文本搜索
- 搜索文件中内容符合条件的字符串 (与正则表达式相结合)
grep 'lang' a.txt
, 表示在 a.txt 中查找 "lang";grep 'lang' a.txt --color
, 高亮显示;grep 'lang' a.txt --color -A3
, 表示显示查找到的"lang"和后三行(after)grep 'lang' a.txt --color -B3
, 表示显示查找到的"lang"和前三行(before)
find
find /temp -name test.txt
: 在/temp
目录下查找所有名为test.txt
的文件;find /temp -size 2M
: 在/temp
目录下查找大小等于2M的文件;
5.其他命令
- 查看当前路径(print word directory):
pwd
; - 下载资料:
wget 资源路径
; - 查看"python"命令所在位置:
which python
5.1 重定向输出 >
和 >>
- 0 :表示标准输入
- 1 :表示标准输出
- 2 : 表示标准错误输出
>
:默认为标准输出重定向,与>1
相同;2>&1
: 把标准错误输出和标准输出,输出到同一个文件;&>file
:把标准错误输出和标准输出,都重定向到文件 file 中;rm -f $(find / -name core) &> /dev/null
:/dev/null
是一个特殊文件,所有传给它的东西,都会被丢弃。
echo a> a.txt
: 将 a 写入到 a.txt, 会覆盖原文件中的内容;ls > a.txt
: 将"ls"显示的内容,写入到 a.txt, 会覆盖原文件中的内容;
echo a >> a.txt
: 在 a.txt 文件的末尾追加 a 字符;echo
颜色输出:echo -e "\033[31m test content 红 \033[0m"
echo -e "\033[32m test content 绿 \033[0m"
echo -e "\033[34m test content 蓝色 \033[0m"
echo -e "\033[35m test content 紫色 \033[0m"
5.2 管道 |
- 管道的作用是将一个命令的输出可以通过管道作为另一个命令的输入;
ifconfig | grep 192.168
, 在 ifconfig 的结果里查找 192.168 字符串;
ps -ef | grep java
, 查找和 java 相关的进程;
5.3 &&
命令执行控制
- 命令直接使用 && 连接,实现逻辑与的功能.
mkdir test && cd test
,只有在 test 文件夹创建完成后,才会打开test文件夹.
5.4 系统管理命令
1. 与时间相关
cal
: 查看当前月份日历cal -y
: 显示整年日历date
: 显示当前系统时间date -s "2017-01-01 00:00:00"
: 设置系统时间
2. 与进程相关
ps
: 查看进程信息;ps -ef
: 查看所有进程(以标准格式);ps -aux
: 查看所有进程(以BSD格式);ps -ef | grep java
: 查找 java 进程;top
: 显示当前进程, 按 "q" 退出;kill 2868
: 终止2868编号的进程;kill -9 2868
: 强制终止 2868编号的进程;pkill 正在运行的程序名
3. 与磁盘相关信息
df
: 检测磁盘空间;df -h
: 以友好格式显示文件大小;du
: 检测目录所占磁盘空间;free
:显示内存状态;free -m
: 以1024字节为单位显示文件大小;
4. 关机和重启
reboot
: 重新启动操作系统;shutdown
: 关机;init 0
: 关机;init 6
: 重启;
5.5 查看用户相关信息
ssh 用户名@ip地址
: 远程登录;who
: 查看当前登录的用户信息;who -q
: 只显示用户的登录账户和登录用户的数量;who -u
: 显示列表题;whoami
: 查看当前用户的身份;exit
: 退出登录;hostname
: 查看当前主机名;
5.6 网络通讯命令
ifconfig
: 显示或设置网络设备
ifconfig eth0 up
: 启用 eth0 网卡;
ifconfig eth0 down
: 停用 eth0 网卡;ping ip地址
: 测试网络连接是否正常;netstat
: 查看网络端口
netstat -an | grep 3306
: 查询 3306 端口占用情况;
5.7 用户管理
- 添加用户:
useradd [参数] 新建用户帐号
-m
: 自动建立目录;-d
: 指定用户登录系统时的主目录, 如果不使用该参数, 系统自动在/home
目录下建立与用户名同名目录为主目录;-g
: 指定用户组;
- 设置用户密码:
passwd 密码
- 删除用户:
userdel
userdel 用户名
: 只删除用户, 不会自动删除用户的主目录;userdel -r 用户名
: 删除用户, 同时删除用户的主目录;
- 切换账户:
su - u2
, 并且将环境也切换到 u2 用户的环境; - 直接切换到 root 用户:
sudo -s
5.8 组管理
- 添加用户组:
groupadd 组名
; - 删除用户组:
grouopdel 组名
; 注意:组下不能有用户. - 修改用户所在组:
usermod -g 用户组 用户名
; - 添加至其他组:
usermod -a -G 用户组 用户名
; - 查看有哪些用户组:
cat /etc/group
或者groupmod 三次 tab 键
5.9 文件权限
1. 修改文件权限: chmod
u
: 表示该文件的所有者;g
: 表示与该文件的所有者属于同一组的人具有的权限;o
: 表示其他以外的人;a
: 表示三者皆是r
: 表示可读取,对应数字是 4;w
: 表示可写入, 对应数字是 2;x
: 表示可执行, 对应数字是 1;chmod 755 a.txt
和chmod u=rwx,g=rx,o=rx a.txt
作用一样;
2. 变更文件或目录文件所属用户和组
chown 用户名:用户组 a.txt
: 变更当前的目录或文件的所属用户名和用户组;chown -R 用户名:用户组 dir
: 变更目录中的所有的子目录及文件的所属用户和组;chgrp
: 修改文件所属组;
6. 快捷键
Ctrl + A
: 移动光标至行首;Ctrl + E
: 移动光标至行尾;Ctrl + L
: 清屏, 即翻页;Command + K
: 彻底清屏;Ctrl + U
: 删除光标前的所有文字;Ctrl + H
: 与退格键相同;Ctrl + R
: 检索使用过的命令;Ctrl + C
: 终止当前执行;Ctrl + D
: 退出当前 shell;Ctrl + Z
: 将执行中的任何东西放入后台进程, fg 可以将其恢复;Ctrl + W
: 删除光标之前的单词;Ctrl + K
: 删除光标后的所有文字;Ctrl + T
: 将光标前的两个文字进行互换;Ctrl + F
: 光标向前移动一个单词;Ctrl + B
: 光标向后移动一个单词;Esc + T
: 将光标前的两个单词进行互换;Tab
: 自动补全文件或文件夹的名称;Command + T
: 新增 terminal 窗口;clear
: 表示清屏;q
: 退出 terminal;!!
: 执行最近执行过的命令;![命令名首单词]
: 执行最近以该单词开始的命令;history n
:列出最近执行过的 n 条命令;- 搜索上次输入的
tail
命令:history | grep 'tail'
- 搜索上次输入的
7. LINUX 上的 Shebang 符号(#!)
#!
这个符号叫做Shebang
或者Sha-bang
Shebang
通常在Unix
系统脚本中的 第一行开头 使用- 用于指明执行这个脚本文件的解释程序
8. alias
功能
- 查看系统已有别名:
alias
- 设置别名:
- 临时设置,即关闭当前控制台,别名失效:
alias wlg=tail -f /home/weblogic/user_project/domains/base_domain/service.log
- 永久有效
- 临时设置,即关闭当前控制台,别名失效:
# 1, 将所有待添加的别名保存到 `~/.bash_aliases` 中;
# 2, `~/.bashrc`中添加如下语句:
if [ -f $HOME/.alias ]; then
. $HOME/.bash_aliases
fi
参考资料