Linux Shell
小知识汇总。
basename
获取文件名
描述:从带路径的字符串中获取文件名称,或者截取字符串。
1 | var1=/usr/lib/abcdefg.so.bak |
screen
的使用
作用:后台开启终端,执行各种命令。即使当前终端已经退出,不会影响 screen
的后台终端命令的执行。
新建和连接
1 | screen -dmS back_xmt // 新建 |
断开连接
断开连接只是回到当前终端,后台 screen
命令会继续执行。
- 断开
连接后,同时按下ctrl+a
进入,再接着按d
,断开连接。 - 关闭
连接后,同时按下ctrl+a
进入,再接着按k
,关闭连接。
&
挂后台
示例:vi 1.txt &
。
查看:jobs
查看挂后台有几个进程。
前置切换:fg 1
,其中 1 表示 jobs
查看到的第一个程序。
管理普通用户
创建和删除用户
1 | adduser fcopyuser |
查看用户所在组 groups
1 | root@ubuntu1404:~# groups xmt |
管理用户组 gpasswd
- 将用户加入管理员组:
1 | gpasswd -a xmt sudo |
再次查看,账号已经具有管理员权限:
1 | root@ubuntu1404:~# groups xmt |
- 将用户移出某个组
gpasswd -d xmt rootgroup
expect
功能
linux shell
命令行自动交互,比如自动登录,或者自动输入密码,可以使用 expect
功能。
安装
sudo apt-get install expect
示例
自动输入 scp
需要的密码:
1 | !/bin/bash |
crontab
定时任务
格式
格式:M H D m d cmd
。其中:
M
: 分钟(0-59)H
:小时(0-23)D
:天(1-31)m
: 月(1-12)d
: 一星期内的天(0~6,0为星期天)cmd
要运行的程序,程序被送入sh
执行。
该命令中只有
USER, HOME, SHELL
这三个环境变量,如果需要使用其他环境变量,需要在cmd
中export
这些变量。
使用方法
crontab –l
:查看当前的任务crontab –e
:编辑(新建)任务crontab –r
:删除任务表sudo service cron restart
:重启crontab
服务
示例
定时执行脚本:
1 | 定时每天 10 点 21 分执行脚本 |
TAR
常用命令
- 压缩:
tar zcf dest.tgz source
注意:source
不要带路径,否则会将路径目录也压缩进去。如/home/source
,会把home
这个目录也压缩到包中。
压缩命令z
表示用gzip
压缩;如果不带z
表示仅打包。 - 解压:
tar zxf dest.tgz
- 不解压,直接查看压缩包有哪些文件:
tar tvf dest.tgz
- 分卷压缩
tar zcf - test.pdf | split -b 5M - dir/test.tar.gz
,注意两个短横不能漏掉;-b
后面表示每卷最大值。
字符串操作
获取字符串中的数字
如:echo "ere1j32kk4" | tr -cd '[0-9\n]' #1324
。
当前时间 date
命令:date +%Y%m%d%H%M%S # 20141126104053
。格式:Y
年,m
月,d
日,H
小时,M
分,S
秒。
查看服务器上用户登录日志
cat /var/log/auth.log
把自己的命令添加到环境变量中
- 新建
bin
目录:mkdir –p $HOME/bin
- 新建可执行命令:
touch my.sh ;chmod +x my.sh
bin
目录加入到环境变量中1
2
3root@ubuntu1404:~# vi ~/.bashrc
add my exec bin
PATH=$PATH:$HOME/bin- 重新加载环境变量:
source ~/.bashrc
- 至此
bin
目录下所有可执行文件都加入到环境变量了
7z
格式文件操作
解压缩
示例 1 :当前目录解压:7za x po9041_20141202.7z
示例 2 :解压到指定目录:7za x po9041_20141202.7z -opo9041_20141202
其中 -o
后面不能有空格。
压缩
使用 du
查看大小并按照大小排序
1 | du -sh `du -s * | sort -rn| awk '{print $2}'` |
开机自启动脚本
新建脚本
创建脚本后,并将脚本拷贝到 /etc/init.d/
目录下。
1 | sudo -s |
update-rc.d
命令
update-rc.d
命令用来设置开机启动的优先级。
1 | update-rc.d <basename> start|stop <order> <runlevels> |
其中:update-rc.d sample_init_script defaults
命令等效于(中间是一个英文句点符号):update-rc.d sample_init_script start 20 2 3 4 5 . stop 20 0 1 6 .
,表示在 2, 3, 4, 5
这五个运行级别中,由小到大第 20 个开始运行 sample_init_script
;在 0 1 6 这 3 个运行级别中,第 20 个关闭 sample_init_script
。这是合并起来的写法,注意它有 2 个点号。
比如,我们将 gerrit_start
脚本放在第 99 顺位命令后执行:
1 | root@gm-20180529:/etc/init.d# update-rc.d gerrit_start defaults 99 |
sysv-rc-conf
命令
sysv-rc-conf
命令可以直观的查看,并勾选运行级别。
- 安装:
apt-get install sysv-rc-conf
- 查看
1 | root@gm-20180529:~# sysv-rc-conf |
grep
常见操作
在指定文件类型中搜索
比如在 cpp, java, h
文件中搜索字符串 adjustment
,命令如下:
1 | grep --include=*.{cpp,java,h} -irsn "adjustment" frameworks/ |
设置代理
在当前用户 shell
环境下设置代理,打开 ~/.bashrc
文件,添加如下代码:
1 | # http_proxy |
其中 ip:port
是代理服务器的地址以及开放的端口;重新连接或者执行 source ~/.bashrc
生效!验证结果:
1 | xmt@server138:~$ wget https://www.google.com |
数组
常用方法
数组:用一对括号来表示,并使用空格分隔。
- 元素可以是使用双引号或者单引号,但都会当作字符串处理;如果数组元素中包含了空格,必须使用双引号
${#array[*/@]}
获取数组长度,*
或者@
都可以- 数组可以通过下标来访问指定元素,也可以修改指定下标元素的值
1 | array=("a" b 'c') # 等号两边不能空格 |
数组遍历的几种方式
1 | # 标准 for 循环 |
数组配置在 conf
文件中
注意:在 conf
配置文件中,换行需要使用斜杠 \
来作为分隔符,而在 sh
文件中是不需要的。
1 | ARRAY_CONFIGS=(\ |
数组变量赋值
数组变量赋值给另一个变量:
- 如果当前数组元素中没有空格(空格是数组分隔符,如果单个元素包含空格,可能会被判断为两个或多个元素)
- 如果当前数组中包含空格,只能采取遍历方式赋值
1 | # 数组元素不包含空格 |