日常工作中的的Linux操作-Wiki

本文记录日常工作中涉及到的Linux命令以及常见的相关操作。持续更新

basename

basename命令用于打印目录或者文件的基本名称

1
2
3
4
[root@HGH1000059721 test]# basename a.tar .tar  #后缀:可选参数,指定要去除的文件后缀字符串。
a
[root@HGH1000059721 test]# basename /tmp/test/a.tar #不带后缀,获取文件名
a.tar

参考:

cp

将目录src复制到dest目录下,复制好后,dest/src:

1
cp -r src dest

将目录src下的内容复制到dest目录下:

1
cp -r src/* dest

复制文件,覆盖不询问:

1
cp -nrf a.txt b.txt

参考:

crontab

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

任务执行文件所在位置:

1
/var/spool/cron/crontabs

每隔2分钟执行/tmp/test.sh脚本:

1
2
crontab -e
*/2 * * * * /tmp/test.sh

第星期六、星期日的时10分重启smb-也就是每周六、周日

1
10 1 * * 6,0 /etc/init.d/smb restart

实例4:每隔两天的上午8点到11点的第3和第15分钟执行:

1
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

示例

1
2
3
4
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命令很容易发现那个磁盘的存储空间快没了。查看挂载状态和硬盘使用量信息:

1
df -hT

du

du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以判断系统上某个目录下是不是有超大的文件。

查看当前文件夹的文件大小:

1
du -sh *

env

查看环境变量值,例:
查看带有SVN的环境变量值:

1
env|grep SVN

fdisk

fdisk -l看到目前系统中所有分区的信息
https://blog.csdn.net/cc_net/article/details/2894510

grep

在大文件中找一行数据,用grep命令帮助查询。

1
grep [options] pattern [file]

例如:

1
grep three file1

gzip

gzip是GNU项目的产物。这个软件下买呢含有下面的工具:

  • gzip :用来压缩文件
  • gzcat:用来查看压缩过的文本文件的内容
  • gunzip:用来解压文件。
1
gzip xxx

显示前n行内容:
head -n
https://www.linuxdaxue.com/linux-command-intro-head.html

ls

  • ll -d:仅显示目录

mount

mount可以显示全部挂载情况。

将分区挂载到目录:

1
mount /dev/xvde /data

netstat 检查端口占用

1
netstat -anp|grep 80

rm

只删除当前文件夹下的隐藏文件和隐藏文件夹:

1
rm -rf .*

https://blog.csdn.net/ficksong/article/details/52447729

rpm

我的系统中安装了那些rpm软件包

1
rpm -qa

如果要查找所有安装过的包含某个字符串sql的软件包

1
rpm -qa | grep sql

一个rpm包中的文件安装到那里去了?

1
rpm -ql 包名

软件包的卸载

1
rpm -e

参考:http://man.linuxde.net/rpm

sed

eg1:

1
nl passwd|sed "1d;10d" #删除第1行,第10

eg2:

1
2
sed -i -e "1i%define upstream_version $UPSTREAMVERSION\\" *.spec #第一行插入
sed -i -e "s/UPSTREAMVERSION/$UPSTREAMVERSION/g" *.spec #替换

sort

对之前提到的密码文件/etc/passwd根据用户ID进行数值排序。-k-t参数在对安字段分割的数据进行排序时非常有用。

1
sort -t ":" -k 3 -n /etc/passwd

tar

目前Unix和Linux上最广泛使用的归档工具是tar命令。

1
tar function [options] object1 object2 ……

首先,创建一个归档文件:

1
tar -cvf test.tar test/ test2/

创建了名为test.tar归档文件,含有test和test2目录内容。

接着,列出tar文件test.tar内容(但并不提取文件):

1
tar -tf test.tar

最后用命令提取文件:

1
tar -xvzf test.tar

tar命令是给整个目录创建归档文件的简便方法

窍门:下载开源软件之后,经常会看到文件名以.tgz结尾。这些事gzip压缩过的tar文件,可以用tar -zxvf filename.tgz来解压

tee

tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

eg1 在终端打印stdout同时重定向到文件中:

1
ls | tee out.txt | cat -n

eg2 创建daemon.json文件,EOF之间内容作为stdin:

1
2
3
4
5
tee /etc/docker/daemon.json << EOF
{
"insecure-registries" : [ "", ""]
}
EOF

<< EOF …… EOF的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。

EOF妙用:

1
2
3
4
5
[root@ecs-6b86 tmp]# cat << EOF >tt.sh
123123123
345345
asdfasds
EOF

自定义EOF,比如自定义为michael
[root@slave-server opt]# cat << michael > haha.txt

ggggggg
4444444
6666666
michael

参考:

wc

1
wc [-clw][--help][--version][文件...]

参数:

1
2
3
4
5
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
--help 在线帮助。
--version 显示版本信息。

wget

将远程目录下的全部内容下载到save目录下。-nd参数表示,如果远程目录下也有子目录,会将子目录中的文件下载下来而不创建多余目录。

1
wget -r -nd -np -P save http://xxx/repo/FusionNova/master/euler/20180604195327/

示例2:

将远程文件夹原封不动下载下来,并且下载下来的本地路径也是远程目录,而不会创建多级目录。-nH表示不会创建
xxx.com目录,--cut-dirs将其余多余层级目录不下载,实现效果下载到本地就只是DLRN_RPMS目录。

1
wget -r -p -k -np -nH --cut-dirs=4 http://xxx.com/cps/FusionNetwork-for-fc/master/suse/DLRN_RPMS/

参考:

who

who //显示当前登录系统的用户
显示标题栏

1
# who -H

只显示当前用户

1
# 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

1
unzip -l demo1-0.1-py2.7.egg
1
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新增硬盘之后的操作

1
2
fdisk -l #查看磁盘情况,发现有磁盘没有分区,比如是/dev/xvde
fdisk /dev/xvde #进行磁盘分区的操作

fdisk磁盘分区时,可以输入m,会有提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)

我依次这么输入的:

1
2
3
4
5
6
7
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

分区完成之后,需要格式化

1
mkfs -t ext4 /dev/xvde1

将新建分区挂载到/data目录下:

1
2
3
cd /home
mkdir data
mount /dev/xvde /data

挂载完毕,输入df -hT可以查看到新建的分区

设置文件系统的自动挂载

1
vi /etc/fstab

添加/dev/xvde1 /data ext4 defaults 0 1
在 fstab 配置文件中加入挂载点之后其实就已经是开机自动挂载了,不需要用 mount 命令挂载。但是还是用 mount 实在,因为最后还是需要写入/etc/fstab
第一段可以用分区名,也可以用blkid的方式获取UUID的值

参考:

备份原有配置文件

只将不带注释的内容提取出来,作为配置文件

1
2
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

-v 参数表示反选

修改主机名

查看Linux系统版本

1
2
3
4
5
lsb_release -a # 适用于所有Linux系统
cat /etc/os-release #推荐
cat /etc/redhat-release # 仅适用于Redhat系列的Linux系统
uname -a # 查看Linux内核
cat /proc/version # 查看Linux内核

显示shell执行过程

1
set -x

如果想隐藏某一行的内容:

1
2
3
4
5
set -x
xxxx
set +x
yyyy
set -x

查看端口占用

1
2
3
[root@centos7.4 software]# netstat -apn                查看当前运行的所有进程的端口使用情况
[root@centos7.4 software]# netstat -apn | grep 端口号 查看指定端口使用情况
[root@centos7.4 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
clipboard.png

Q:Linux各目录的作用


本文由 Michael翔 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。

我知道是不会有人点的,但万一有人想不开呢👇