Linux常用命令笔记
不打开文件而替换字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl /pathto/file`
不解压查看压缩包里的内容
tar tvf compress_folder
进入root权限
Ubuntu: sudo su -
CentOS/Fedora: su
列出home目录下的子目录及子目录里的文件
ls /home/*
ls -la /home/*
正规文件-,链接文件l,目录文件d,字符设备文件c,块设备文件b
在根目录下查找某个文件
find / -name xxx
搜索当前目录(含子目录)中所有文件名以wqx开头的文件
find . -name 'wqx*' -ls
搜索当前目录中,所有过去10分钟更新过的普通文件
find . -type f -mmin 10
搜索用户主目录下,所有以wqx开头的文件
locate ~/wqx
locate相当于find -name,但速度更快,因为它不搜索具体目录,而是搜索数据库/var/lib/locatedb,这个数据库含有本地所有文件信息。Linux自动创建这个数据库,每天更新一次,所以locate查不到最新变动过的文件,为避免这种情况,可以在使用locate之前,先用updatedb命令手动更新数据库。
搜索一个命令,比如cd
where cd
whereis只搜索程序名,而且只搜索二进制文件(参数-b),man说明文件(参数-m),源代码文件(参数-s)。如果省略参数,则返回所有信息。
which cd
在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,用which就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
type cd
type其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
统计某个文件夹下某类文件的个数
find /home/qyddbear -name "*.txt" | wc -l
统计某个文件夹下某类文件中的行数
find /home/qyddbear -name "*.txt" | xargs cat | wc -l
统计某个文件夹下某类文件中的行数,过滤掉空行
find /home/qyddbear -name "*.txt" | xargs cat | grep -v ^$ | wc -l
输出每行第2到5列内容
cut -b 2-5 filename
Ubuntu搜索某个软件包
sudo apt-cache search filename
查找包含某个字符串的文件
grep “yourstring”查找的目录 -r
find 查找目录 -type f -print | xargs grep -l 字符串
grep -l:每个匹配的文件名只显示一次(不管有几个匹配存在)
或grep -F yourstring -R yourdir | less
或find yourdir | xargs grep yourstring | less
递归修改目录下的所有文件权限
chmod -R 777 /xxx/xxx
把命令写入文件
命令 > 文件
命令在屏幕输出的同时也写入文件
命令 | tee 文件
或xxx.sh 2>&1 | tee 文件
比较文件改动前后
diff former_fiile later_file
第1个数字表示第几行有变化,c表示内容变动,a表示增加,d表示删除,第3个数字表示变动后变成later_file的第几行。<号表示要从former_file中取出该行,后面表示该行的内容。>号表示增加了该行,后面表示该行的内容。
diff -c former_fiile later_file
diff -u former_fiile later_file
列出所有被用户x所使用的进程
ps -aux
如果用户x不存在,ps就会解释为ps aux来代替ps -aux并且打印出警告信息,这样做是为了与旧版本和习惯兼容。
查看系统进程
ps -ef
列出全部进程
ps -A
打包并压缩
zip: zip -r archive_name.zip directory_to_compress或zip -r archive_name.zip files_to_compress
tar.gz: tar zcvf archive_name.tar.gz directory_to_compress
tar.bz2: tar jcvf archive_name.tar.bz2 directory_to_compress
解压
zip: unzip xxx.zip
tar.gz: tar zxvf xxx.tar.gz -C /extract_here 这样会解压到指定目录
tar.bz2: tar jxvf xxx.tar.bz2 这样会在解压到当前目录
在LinuxA上登录LinuxB
ssh B_username@B_ip
如果本地用户与远程用户名一致,登录时可以省略用户名 ssh B_ip
ssh是加密的网络协议,默认22端口,ssh -p 端口号 B_username@B_ip可以连接指定端口
想把A机(192.128.168.1)/home/file1文件拷到B机(192.128.168.2)的/home/qy下,在B机上输入命令
scp 192.128.168.1:/home/file1 /home/qy
查看哪个进程占用了xxx端口
lsof -i:xxx
查看远程主机是否运行进程httpd
ssh remote_username@remote_ip 'ps ax | grep [h]ttpd'
让8080端口的数据都通过SSH传向远程主机
ssh -D 8080 remote_username@remote_ip
添加环境变量
gedit ~/.bashrc
在最后添加export PATH="/xxx/xxxx:$PATH"
退出,source ~/.bashrc
以ls -lh方式显示查找出来的libvirtd
find / -name 'libvirtd' -exec ls -lh {} \;
从网络上自动下载某个包
wget http://xxx
查看系统服务的开启状态
chkconfig
如果没有安装,则apt-get install chkconfig
查看CPU信息
cat /proc/cpuinfo
返回CPU总核心数
grep -c 'model name' /proc/cpuinfo
查看系统负荷
uptime
查看交换分区情况
swapon -s
cat /proc/swaps
free -m
/proc存放系统核心与执行程序的一些信息
查看系统是32位还是64位
echo $HOSTTYPE
getconf LONG_BIT
file /sbin/init
uname -a
file /bin/cat
查看当前使用的是什么Shell
echo $SHELL
查看当前文件夹的总大小
du -sh
查看当前文件夹内文件的大小
du -h
查看磁盘使用情况
df -lh
查看磁盘信息
cat /proc/partitions
查看磁盘型号等信息
cat /proc/scsi/scsi
创建新用户user1
useradd user1
为创建的用户设置密码或修改
passwd user1
让某用户登录系统
login
删除用户
userdel user1
切换用户
su username
修改用户名(@前面的)
修改/etc/passwd,再重新登录终端
Ubuntu永久修改主机名
修改/etc/hostname
将file1输出为file2,并为file2加上行号
cat -n file1 > file2
comm比较两个文本文件的不同
comm file1 file2
sort排序后将文本文件的内容输出到终端
sort file1
查看eth0网卡的信息
ip -s link show eth0
查看某端口
netstat -antulp | grep 80
有些端口通过netstat查不出来,更可靠的方法是nmap -sT -O localhost
挂载U盘
1. 在虚机菜单VM里选择Connect或Disconnect。
2. fdisk -l看U盘是什么盘符,一般是sdb几。(hd是IDE硬盘,sd是SCSI硬盘,第一块硬盘a,第二块b)
mount -t vfat /dev/sdb4 /mnt
卸载时,要退出/mnt, 再umount /mnt
netstat显示与IP,TCP,UDP,ICMP协议相关的统计数据,一般用于检测本机各端口的网络连接情况。
route查看并编辑计算机的IP路由表
查看到www.baidu.com主机的路由情况
traceroutewww.baidu.com
traceroute显示数据包到主机间的路径,可以让用户追踪网络数据包的路由途径。
查看www.baidu.com对应的主机IP地址
hostwww.baidu.com
host把一个主机名解析到一个网络地址或把一个网络地址解析到一个主机名
Ubuntu查看防火墙状态
ufw status
Ubuntu关闭防火墙
ufw disable
Ubuntu启动防火墙
ufw enable
Ubuntu查看防火墙版本
ufw version
每天晚上11点执行一次某脚本
0 23 * * * /path/name.sh
每周日晚上11点执行一次某脚本
0 23 * * 7 /path/name.sh
查看source tarball里是否有RPM SPEC档案
tar fzt xxx.tar.gz | grep .spec
tar fjt xxx.tar.bz2 | grep .spec
安装rpm包
rpm -ivh xxx.rpm
或rpm -ivh http://xxxxxx/xxx.rpm
i是install,v是查看更细节的安装信息画面,h是以安装信息列显示安装进度
列出所有已安装的以x开头的软件
rpm -qa | grep ^x | wc -l
q仅查询后面直接接的软件是否安装。qR列出与该软件的Required。ql列出该软件所有档案与目录所在的完整文件名。qf由后面接的文件名找出该档案属于哪一个已安装的软件。qc列出该软件的所有在/etc下的配置文件,qd列出该软件所有说明文件。qi勒出该软件的详细信息,包含开发商、版本、说明等。
查询xxx软件是否被改动过
rpm -V xxx
Vf是列出某个档案是否被改动过。Va列出系统上可能被改动过的档案。Vp后面加文件名,列出该软件内可能被改动的档案。
删除某个rpm安装的软件
rpm -e xxx
让进程转入后台
Ctrl+z
将进程转入前台
fg
一次创建多个目录
mkdir -p /home/wqx/{test1, teset2, test3}
查看是KDE还是GNOME
env|grep DESKTOP
常见问题
如果服务器上装了openssh-server,且是root用户,但是WinSCP依然连接不上
解决方法:用命令passwd root修改root密码后即可连接。
apt-get install找不到软件包,没有可用的源
解决方法:在/etc/apt/sources.list里添加可用的源,再apt-get update
Source Insight打开文件中文乱码
解决方法:先用记事本打开,另存为ANSI格式,再在Source Insight中打开
UltraEdit编辑的sh脚本在linux下无法运行
解决方法:在UltraEdit里文件->转换->DOS转UNIX。原因是CR/LF问题,在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以linux下运行时就会报错找不到命令。
xxx is not in the sudoers file. This incident will be reported
CentOS下用sudo时遇到的问题,解决方法如下:
1. 进入超级用户模式。也就是输入"su -",按系统提示输入超级用户密码。
2. 添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。
3. 编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存(就是先摁一 下Esc键,然后输入":wq")退出。
4. 撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。
configure出问题,可以用./configure --help | grep xxx查看帮助