参考书籍《Linux命令行与shell脚本编程大全》
复制文件
cp 1.sh -i 13.sh
cp -i 在覆盖前询问用户
cp -v 告诉用户正在做什么
创建目录
mkdir
创建多级目录
mkdir -p New_Dir/Sub_Dir/Under_Dir
删除文件夹
rmdir (只能删除空目录)
查看文件类型
file
file 【文件名】
[newcs@dsszbyz-etl-inf7 day]$ file *
exec_bbzx_agent_work_operate_dd.sh: Bourne-Again shell script, UTF-8 Unicode text executable
exec_bbzx_daducha_day.sh: Bourne-Again shell script, UTF-8 Unicode text executable, with very long lines
查看文件内容
cat
cat -n 【文件名】 空行也有行号
cat -b 【文件名】 只给有效行加行号
[newcs@dsszbyz-etl-inf7 day]$ cat -b exec_bbzx_agent_work_operate_dd.sh
1 #!/bin/bash
2 #功能: 循环跑数据
3 #参数:
4 ##输入日期,格式:20190101,不带参数默认前一天
5 cd /home/newcs/kfyy/rpt_src/bash/hour
6 if [ ! -n "$1" ] ;then
7 v_day=`date -d "-1 day" "+%Y-%m-%d"`
8 else
9 inday="$1"
10 v_day="${inday:0:4}-${inday:4:2}-${inday:6:2}"
11 fi
12 gap=3600 #间隔1800秒
more 分页显示文件内容
less 功能比moer 更强大("less is moer")
tail 指定显示最后多行
tail -n 50 【文件名】 显示末尾50行 (简写tail-20)
tail -f 【文件名】 实时显示文件中的新增内容(多用于实时监测系统日志)
ctrl +c 退出
head 显示开头多行
head -n 20 【文件名】 显示开头50行 (简写head -20)
查看进程
ps
单独的ps命令,只会显示运行在当前控制台下的属于当前用户的进程
[newcs@dsszbyz-etl-inf7 ~]$ ps
PID TTY TIME CMD
4285 pts/66 00:00:00 bash
10616 pts/66 00:00:00 ps
[newcs@dsszbyz-etl-inf7 ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2018 ? 00:35:21 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 2018 ? 00:00:12 [kthreadd]
root 3 2 0 2018 ? 00:00:05 [ksoftirqd/0]
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:启动的程序名称。
ps -l 参数 l ,会显示更多的列。如下
F:内核分配给进程的系统标记。
S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵
化,进程已结束但父进程已不存在;T代表停止)。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:进程休眠的内核函数的地址。
Unix 风格: -ef
BSD 风格: f
GUN长参数 风格:-forest
显示层级父子关系
挂载、移除其他存储设备
mount 挂载到某个文件路径下
umount 卸载移动存储设备
查看设备上的磁盘剩余空间
df
df -h 以M、G为单位显示剩余空间
设备的设备文件位置;
能容纳多少个1024字节大小的块;
已用了多少个1024字节大小的块;
还有多少个1024字节大小的块可用;
已用空间所占的比例;
设备挂载到了哪个挂载点上。
du
显示文件夹目录、文件夹大小、文件大小
-a #显示目录中文件的大小 单位 KB 。
-b #显示目录中文件的大小,以字节byte为单位。
-c #显示目录中文件的大小,同时也显示总和;单位KB。
-k 、 -m 、#显示目录中文件的大小,-k 单位KB,-m 单位MB.
-s #仅显示目录的总值,单位KB。
-h
显示文件夹大小
排序 sort
默认按照字符串排序
管道命令 “|”
将du命令的输出传给 sort 命令
搜索数据
grep 自动模糊匹配
-v 反向搜索
-n 显示匹配模式的行所在的行号
-c 有多少行含有匹配
-e 指定多个条件,可用正则表达式代替
例:查询 包含t 或 f的文件
压缩文件(.bz2 .Z .gz .zip)
gzip
gzip:用来压缩文件。
gzcat:用来查看压缩过的文本文件的内容。
gunzip:用来解压文件
归档数据 tar(较压缩更常用),
通常文件以'*.tgz' 结尾 '*.tar.gz'
tar 【文件名】.tar.gz
外部命令(文件系统命令)
并不是shell程序的一部分,例如:ps
找到命令路径
[newcs@dsszbyz-etl-inf7 hour]$ type -a ps
ps is /bin/ps
ps is /usr/bin/ps
[newcs@dsszbyz-etl-inf7 hour]$ which ps
/bin/ps
当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)
[newcs@dsszbyz-etl-inf7 hour]$ ps --forest
PID TTY TIME CMD
10083 pts/117 00:00:00 bash
2658 pts/117 00:00:00 \_ ps
内建命令(不用创建子进程)
有些命令有多种实现方式(内建、外部命令)例如:pwd 、 echo
[newcs@dsszbyz-etl-inf7 day]$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
pwd is /usr/bin/pwd
[newcs@dsszbyz-etl-inf7 day]$ which pwd
/bin/pwd
type
which 查找文件的(会在环境变量$PATH设置的目录里查找符合条件的文件)
内建命令history(最近使用的命令列表)
环境变量
env printenv
显示变量
打印 echo $【变量名】 例:echo $JAVA_HOME
直接显示环境变量,对应的文件夹内容
[newcs@dsszbyz-etl-inf7 day]$ ll $JAVA_HOME
total 25928
drwxr-xr-x 2 root root 4096 Mar 16 2018 bin
-rw-r--r-- 1 root root 3244 Dec 20 2017 COPYRIGHT
drwxr-xr-x 4 root root 147 Mar 16 2018 db
drwxr-xr-x 3 root root 4096 Mar 16 2018 include
-rw-r--r-- 1 root root 5202881 Dec 20 2017 javafx-src.zip
drwxr-xr-x 5 root root 4096 Mar 16 2018 jre
drwxr-xr-x 5 root root 4096 Mar 16 2018 lib
-rw-r--r-- 1 root root 40 Dec 20 2017 LICENSE
drwxr-xr-x 4 root root 60 Mar 16 2018 man
-rw-r--r-- 1 root root 159 Dec 20 2017 README.html
-rw-r--r-- 1 root root 424 Dec 20 2017 release
-rw-r--r-- 1 root root 21095860 Dec 20 2017 src.zip
-rw-r--r-- 1 root root 63933 Dec 20 2017 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 145180 Dec 20 2017 THIRDPARTYLICENSEREADME.txt
设置局部用户定义变量
[newcs@dsszbyz-etl-inf7 ~]$ myParm="parm1" //定义变量
[newcs@dsszbyz-etl-inf7 ~]$ echo $myParm
parm1
[newcs@dsszbyz-etl-inf7 ~]$ unset myParm //删除变量
[newcs@dsszbyz-etl-inf7 ~]$ echo $myParm
[newcs@dsszbyz-etl-inf7 ~]$
定义数组
mytest=("one" "two" "three" "four" "five")
${mytest[1]} //two
//打印数组所有值
echo ${mytest[*]}
parm1=("day_id" "${v_dayid}")
parm2=("hour_id" "${v_hourid}")
parmlist=(${parm1} ${parm2})
追加环境变量 PATH
环境变量的本质是方便运行程序命令。
例如,运行java。没有配置PATH时会报找不到的错误,必须要使用全路径才能找到。
多个路径是用“:”分割,追加在末尾时。
PATH = $PATH:【路径】
PATH变量的修改只能持续到退出或重启系统
环境变量持久化
/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变
量设置放在这个文件中。
在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一
点适用于所有类型的shell进程。
但如果设置了BASH_ENV变量,那么记住,除非它指向的是$HOME/.bashrc,否则你应该将非交互式shell的用户变量放在别的地方
系统权限设置
查看用户账号文件
登录用户名
用户密码
用户账户的UID(数字形式)
用户账户的组ID(GID)(数字形式)
用户账户的文本描述(称为备注字段)
用户HOME目录的位置
用户的默认shell
[newcs@dsszbyz-etl-inf7 ~]$ cat /etc/passwd | grep newcs
newcs:x:2007:2007::/home/newcs:/bin/bash
文件权限码
权限问题,实际应用 java https://www.cnblogs.com/hihtml5/p/6483783.html
改变权限
chmod
安装软件
处理损坏的包依赖关系
有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作
损坏的包依赖关系(broken dependency)。
如果系统出现了这个问题,先试试下面的命令:
yum clean all
然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。
如果这还解决不了问题,试试下面的命令:
yum deplist package_name
这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。
在vi 、vim编辑器中,向下翻页 (ctrl+f) 向上翻页 (ctrl+b)
查找字符串 斜杆“/”,再输入查找内容。 “n”下一个。
wc 统计文本
[newcs@dsszbyz-etl-inf7 half_hour]$ wc exec_hlw_agent_call_condition_fh-2.sh
92 417 5850 exec_hlw_agent_call_condition_fh-2.sh
文本的行数
文本的词数
文本的字节数
重定向
"<" 、">"、 "<<"