本文记录日常工作中涉及到的Linux命令以及常见的相关操作。持续更新
basename
basename命令用于打印目录或者文件的基本名称
[root@HGH1000059721 test]# basename a.tar .tar #后缀:可选参数,指定要去除的文件后缀字符串。
a
[root@HGH1000059721 test]# basename /tmp/test/a.tar #不带后缀,获取文件名
a.tar
参考:
cp
将目录src
复制到dest
目录下,复制好后,dest/src
:
cp -r src dest
将目录src
下的内容复制到dest
目录下:
cp -r src/* dest
复制文件,覆盖不询问:
cp -nrf a.txt b.txt
参考:
crontab
[图片描述][1]
在以上各个字段中,还可以使用以下特殊字符:
- 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
任务执行文件所在位置:
/var/spool/cron/crontabs
每隔2分钟执行/tmp/test.sh
脚本:
crontab -e
*/2 * * * * /tmp/test.sh
第星期六、星期日的时10分重启smb-也就是每周六、周日
10 1 * * 6,0 /etc/init.d/smb restart
实例4:每隔两天的上午8点到11点的第3和第15分钟执行:
3,15 8-11 */2 * * myCommand
参考:
date
选项
不加: 显示当前的时间.
-d
<字符串>
:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s
<字符串>
:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT;
--help:在线帮助;
--version:显示版本信息。
字符串>
字符串>
参数 <+时间日期格式>:指定显示时使用的日期时间格式。
就是格式化字符串处理.当需要用到空格时要使用双引号,如"+%Y-%m-%d %H:%M:%S"
.
一般,%Y %m %d %H %M %S
是最基本的. 使用星期月份时也会用到%a %b
示例
VERSION=$(date +%Y%m%d%H%M%S) #20180410192702 #date后面有空格
time=$(date "+%Y-%m-%d %H:%M:%S") #时间格式中有空格,需要加引号
» date "+%Y-%m-%d %T %a %A"
2018-06-04 11:31:25 Mon Monday
参考:
df
通过df
命令很容易发现那个磁盘的存储空间快没了。查看挂载状态和硬盘使用量信息:
df -hT
du
du
命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以判断系统上某个目录下是不是有超大的文件。
查看当前文件夹的文件大小:
du -sh *
env
查看环境变量值,例:
查看带有SVN的环境变量值:
env|grep SVN
fdisk
fdisk -l
看到目前系统中所有分区的信息
https://blog.csdn.net/cc_net/article/details/2894510
grep
在大文件中找一行数据,用grep命令帮助查询。
grep [options] pattern [file]
例如:
grep three file1
gzip
gzip是GNU项目的产物。这个软件下买呢含有下面的工具:
- gzip :用来压缩文件
- gzcat:用来查看压缩过的文本文件的内容
- gunzip:用来解压文件。
gzip xxx
head
显示前n行内容:
head -n
https://www.linuxdaxue.com/linux-command-intro-head.html
ls
ll -d
:仅显示目录
mount
mount
可以显示全部挂载情况。
将分区挂载到目录:
mount /dev/xvde /data
netstat 检查端口占用
netstat -anp|grep 80
rm
只删除当前文件夹下的隐藏文件和隐藏文件夹:
rm -rf .*
https://blog.csdn.net/ficksong/article/details/52447729
rpm
我的系统中安装了那些rpm软件包
rpm -qa
如果要查找所有安装过的包含某个字符串sql的软件包
rpm -qa | grep sql
一个rpm包中的文件安装到那里去了?
rpm -ql 包名
软件包的卸载
rpm -e
参考:http://man.linuxde.net/rpm
sed
eg1:
nl passwd|sed "1d;10d" #删除第1行,第10行
eg2:
sed -i -e "1i%define upstream_version $UPSTREAMVERSION\\" *.spec #第一行插入
sed -i -e "s/UPSTREAMVERSION/$UPSTREAMVERSION/g" *.spec #替换
sort
对之前提到的密码文件/etc/passwd
根据用户ID进行数值排序。-k
和-t
参数在对安字段分割的数据进行排序时非常有用。
sort -t ":" -k 3 -n /etc/passwd
tar
目前Unix和Linux上最广泛使用的归档工具是tar命令。
tar function [options] object1 object2 ……
首先,创建一个归档文件:
tar -cvf test.tar test/ test2/
创建了名为test.tar归档文件,含有test和test2目录内容。
接着,列出tar文件test.tar内容(但并不提取文件):
tar -tf test.tar
最后用命令提取文件:
tar -xvf test.tar
tar命令是给整个目录创建归档文件的简便方法
窍门:下载开源软件之后,经常会看到文件名以.tgz结尾。这些事gzip压缩过的tar文件,可以用tar -zxvf filename.tgz来解压
wc
wc [-clw][--help][--version][文件...]
参数:
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
--help 在线帮助。
--version 显示版本信息。
wget
将远程目录下的全部内容下载到save目录下。-nd
参数表示,如果远程目录下也有子目录,会将子目录中的文件下载下来而不创建多余目录。
wget -r -nd -np -P save http://xxx/repo/FusionNova/master/euler/20180604195327/
示例2:
将远程文件夹原封不动下载下来,并且下载下来的本地路径也是远程目录,而不会创建多级目录。-nH
表示不会创建
xxx.com
目录,--cut-dirs
将其余多余层级目录不下载,实现效果下载到本地就只是DLRN_RPMS
目录。
wget -r -p -k -np -nH --cut-dirs=4 http://xxx.com/cps/FusionNetwork-for-fc/master/suse/DLRN_RPMS/
参考:
who
who //显示当前登录系统的用户
显示标题栏
# who -H
只显示当前用户
# who -m -H
last/lastlog
查看最近登录用户的信息
scp
免密访问,互传文件
systemctl
任务 | 旧指令 | 新指令 |
---|---|---|
使某服务自动启动 | chkconfig –level 3 httpd on | systemctl enable httpd.service |
使某服务不自动启动 | chkconfig –level 3 httpd off | systemctl disable httpd.service |
检查服务状态 | service httpd status | systemctl status httpd.service |
显示所有已启动的服务 | chkconfig –list | systemctl list-units –type=service |
启动某服务 | service httpd start | systemctl start httpd.service |
停止某服务 | service httpd stop | systemctl stop httpd.service |
重启某服务 | service httpd restart | systemctl restart httpd.service |
stty
利用stty -a
列出目前环境中所有的按键列表。
除了stty
之外,其实bash
还有自己的一些终端机设置值。利用set
来设置的。之前提到的一些变量,可以利用set
来显示。
unzip
unzip -l demo1-0.1-py2.7.egg
unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解压到 /home/sunny/
-o
:不提示的情况下覆盖文件;
-d
:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;
参考:
yum
通配符与特殊符号
符号 | 意义 |
---|---|
* | 代表0个到无穷多个任意字符 |
? | 代表一定有一个任意字符 |
[] | 同样是代表一定有一个在中括号内的字符(非任意字符)。例如,[abcd]代表一定有一个字符,可能是这四个中的一个 |
[-] | 若减号在括号内,代表在编码顺序内的所有字符。例如,[0-9]代表0-9之间所有数字,因为数字的语系编码是连续的 |
[^] | 若中括号第一个字符是^ ,表示原向选择,例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接收 |
示例:
- 找出
/etc/
目录下文件夹名字刚好有5个字母的文件名:ll -d /etc/?????
- 找出
/etc/
下面文件名含有数字的的文件名:ll -d /etc/*[0-9]*
- 找出
/etc/
下面文件名开头非小写字母的文件名:ll -d /etc/[^a-z]*
- 将上面例子找到的文件复制到
/tmp
中:`
bash中的特殊符号
符号 | 内容 |
---|---|
# | 注释符号 |
|转义符号,将特殊字符或通配符还原成一般字符
竖线|管道
;|连续命令执行分隔符,连续命令的界定
~|用户的主文件夹
\(|使用变量的前导符 &|作业控制,将命令变成背景下工作 !|逻辑运算意义上的“非” \>,>>|数据流重定向,输出导向,分别是“替换”与“累加” <,<<|数据流重定向,输入导向 ''|但因哈,**不具有变量置换的功能** ""|**具有变量置换的功能** ``|两个“`”中间为可以先执行的命令,也可以使用\)()
()|中间为子shell的起始与结束
{}|中间为命令块的组合
常用处理
给Linux新增硬盘之后的操作
fdisk -l #查看磁盘情况,发现有磁盘没有分区,比如是/dev/xvde
fdisk /dev/xvde #进行磁盘分区的操作
fdisk
磁盘分区时,可以输入m
,会有提示:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
我依次这么输入的:
add a new partition:n
partion type:p
Partion number:分区个数 1
First sector默认值:Enter
Lase sector默认值:Enter
print the partion table:p
write table to disk and exit:w
分区完成之后,需要格式化
mkfs -t ext4 /dev/xvde1
将新建分区挂载到/data目录下:
cd /home
mkdir data
mount /dev/xvde /data
挂载完毕,输入df -hT
可以查看到新建的分区
设置文件系统的自动挂载
vi /etc/fstab
添加/dev/xvde1 /data ext4 defaults 0 1
在 fstab 配置文件中加入挂载点之后其实就已经是开机自动挂载了,不需要用 mount 命令挂载。但是还是用 mount 实在,因为最后还是需要写入/etc/fstab
第一段可以用分区名,也可以用blkid
的方式获取UUID
的值
参考:
- www.jianshu.com/p/7b8c3509d5fe
- http://support.huawei.com/huaweiconnect/enterprise/zh/thread-157187-1-1.html
备份原有配置文件
只将不带注释的内容提取出来,作为配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
-v 参数表示反选
修改主机名
查看Linux系统版本
lsb_release -a # 适用于所有Linux系统
cat /etc/os-release #推荐
cat /etc/redhat-release # 仅适用于Redhat系列的Linux系统
uname -a # 查看Linux内核
cat /proc/version # 查看Linux内核
显示shell执行过程
set -x
如果想隐藏某一行的内容:
set -x
xxxx
set +x
yyyy
set -x
查看端口占用
[[email protected] software]# netstat -apn 查看当前运行的所有进程的端口使用情况
[[email protected] software]# netstat -apn | grep 端口号 查看指定端口使用情况
[[email protected] software]# kill 指定端口的pid号 杀死指定进程(端口号对应的pid)
FAQ
Q:http://blog.csdn.net/u011109356/article/details/54928955
/dev/xvda1 占满
Q:Pseudo-terminal will not be allocated because stdi
https://www.jianshu.com/p/e66014b67506