-------------------------------------------------------------------------------
1. 关闭bash 语句的控制台输出, 用重定向即可。
--------------------------------------------------------------------------------
2. linux 环境变量问题
env 查询环境变量。 (env 配合grep 查询特定类变量)
也可以用echo $部分环境变量 加tab 显示相关变量
set 显示本地所有shell变量。
export 导出环境变量,
unset 清除环境变量
--------------------------------------------------------------------------------
问:gcc 的文件包含路径
答:/usr/include, /usr/local/include 等
--------------------------------------------------------------------------------
问:如何清除dmesg 信息,
答:dmesg -c
--------------------------------------------------------------------------------
问:查看是32 bits or 64 bits
答:uname -a
--------------------------------------------------------------------------------
问:linux 下查看机器cpu是几核的
答:cat /proc/cpuinfo |grep "processor"
lscpu 命令
--------------------------------------------------------------------------------
问:linux 下查看机器cpu 频率
答:cat /proc/cpuinfo |grep MHz|uniq
--------------------------------------------------------------------------------
问:添加一个ip 地址,
答:示例
ifconfig eth0:1 192.168.1.253 broadcast 192.168.1.255 netmask 255.255.255.0 up
route add -host 192.168.1.253 dev eth0:1
ifconfig eth0:2 192.168.1.252 broadcast 192.168.1.255 netmask 255.255.255.0 up
route add -host 192.168.1.252 dev eth0:2
通过ifconfig, route 配置的IP 会在系统重启时丢失。
可以放在/etc/rc.local 中
linux setup 真是一个非常好的系统配置工具
我从bond状态退到非bond状态,手工编辑一次网络配置怎么也不正确, 而用setup轻松搞定
可能是devicename 加了引号所致。
--------------------------------------------------------------------------------
问:查看活动进程
答: ps -ef
ps -aux //可以看到进程的状态
用树形显示进程和线程 pstree
------------------------------------------------------------------------------
问: 如何安装内核文件man 文档
答:在linux 内核代码下
1. make mandocs
2. make installmandocs
// 注意install 和mandocs 之间没有空格,否则变成两个目标install, mandocs了。
安装在/usr/local/man/man9 下,
----------------------------------------
linux PS1 帮助手册在哪?如何查找
----------------------------------------
man 的用法, 你可以用 man man 来查阅
如果不知道所要打开的手册页名称,可以用 “man -k”命令搜索相关的手册页,比如:
man -k bash
会给出一堆 bash 相关的命令, 方面你查看。
man -K 可以打开man 页搜索内容。不过这可能会比较慢, 你最好指定man 页搜索。
例如:
man -K 1 PS1
然后对你感兴趣的页打开来查看。
--------------------------------------------------------------------------------
gcc -O0 引起的错误
/usr/src/linux-2.6.32/drivers/serial/serial_core.c:759: undefined reference to `tty_port_users'
还有许多类似的奇怪的错误, 皆有-O0 引起,
gcc 也有bug, 很可怕!, -O2 能编译过, -O0 不能。 只好修改 Makefile, 使各取所需。 又多了一种处理问题的经验
gdb /usr/src/linux/vmlinux /proc/kcore
warning: unrecognized item "timeout" in "qSupported" response
--------------------------------------------------------------------------------
修改用户名,密码
----------------------------------------
1. 修改密码。
a. 用root 登陆, passwd <用户名> 可以输入简单密码
b. 当前用户登陆, passwd , 可以直接修改密码,但简单密码不被接受
2. 修改用户名。
用 root 登陆。
usermod -l <newuser> <olduser>
不过还有手工修改 /etc/passwd, /etc/group, 把旧名都改成新名。
有必要也对应改变一下用户家目录。
==========================================================================
ANSI 是什么意思
American National Standards Institute(ANSI——美国国家标准学会)
ANSI字符集称为窄字符,8位,C语言用unsigned char表示,不能存放世界上所有语言所有文字。
UNICODE字符集称为宽字符,16位,C语言用unsigned short表示,可以存放世界上所有语言所有文字
并口设备文件名: parport0, 从dmesg 中可以查看
========================================
grep 的或条件
grep -E "abc|xyz"
或者
egrep "abc|xyz"
========================================
find --help 有帮助,常用的还是要用熟。
find 的或条件
错误用法
root@hjj ~/software]# find romfs64 -name "*.c" -o "*.h"
正确用法
root@hjj ~/software]# find romfs64 -name "*.c" -o -name "*.h"
查找大于100M的文件
find . -type f -size +100M
查找最近一小时修改的文件
find . -name -mmin -60
查找最近2天修改的文件
find . -name 'ifcfg*' -mtime -2
创建一个指定时间戳的文件。
touch -t <timestamp>
删除一切比指定文件旧的文件
find ./* ! -newer ref_file
========================================
tar 只打包某类文件
tar -czvf foo.tar.gz `find ...`
tar 打包目录,不包含莫类文件
tar -czvf foo.tar.gz --exclude=.svn --exclude=*.img
tar 解压到当前目录或指定目录
#tar -xzvf mysql.tar.gz -C /home/aaa
scp -r /dir/* DstIP:/mnt/
-p 保留原文件的修改时间,访问时间和访问权限。
preserve modification time, access time and modes
file 查看文件类型
comm 是一个很好的比较2个文件内容的 命令行工具, 借助于sort, awk 可以进行抽取列比较
sed 返回值只表示命令是否执行,语法是否有错误。不代表是否找到或找不到。 也不代表替换是否找到并完成。
grep 命令返回值可以表示匹配是否找到
========================================
****************************************
linux 清理缓存命令
****************************************
1. 清理前最好先sync 一下,以防丢失数据
sync
2.清理前内存使用情况
free -m
3.开始清理 , 往伪文件中写个数就可以了。
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
4.清理后内存使用情况
free -m
------------------------------------------------------------
sudo找不到命令:修改sudoers 的secure_path 路径
------------------------------------------------------------
首先,都要打开sudo的配置文件:sudo vim sudoers
看到如下配置:
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
我们知道, sudo 重设了环境变量, path 通过 secure_path 也被重设,
如果找不到命令,可以在这里重新设置路径。 例如添加上 /usr/local/bin 目录
---------------------------------------------------------
ls 列表某个目录慢的原因
---------------------------------------------------------
今天发现,ls 列表莫个目录特别的慢。 du 莫个目录也特别慢。决定探个究竟。
[hjj@hjj ~/temp1]$ ls
createfile* createfile.cpp Makefile
[hjj@hjj ~/temp1]$ du -a -b
1602 ./createfile.cpp
45 ./Makefile
55724 ./createfile
177094683 . <--- 这是个问题, 文件不多,但. 目录很大,因而查看慢
一般正常的目录. 只占用4096 字节, 而这个占用169M. 这说明这个目录曾经存储过
大量的文件。(是啊,我创建的,又删除了),虽然删除了,但还是留下了痕迹。
ls 时, . 目录下所以inode 都会被扫描,虽然它们删除了。 因而第一次会很慢。
以后再用ls 速度正常,说明有缓存,第二次没有真正读磁盘。
解决这个问题的办法是。另见一个目录,把有用的文件copy 走, 再删掉旧目录。
[ ~/temp]$ du -a
4 .
[hjj@hjj ~/temp]$ cp ../temp1/* .
[hjj@hjj ~/temp]$ du -a -h
4.0K ./createfile.cpp
4.0K ./Makefile
56K ./createfile
68K .
我不知道对于一个全空的文件夹,这个. 目录都装了些什么。有空再研究。
-
----------------------------------------
查看机器资源的一些常用命令, 活用
----------------------------------------
查看机器装了几块硬盘, 硬盘的型号,大小.
在root 用户下运行
#cat /proc/scsi/scsi
dmesg |grep scsi 可以做个验证
lsblk 显示设备名称,大小
blkid 显示设备的ID, 文件系统
fdisk -l |grep disk 可以看设备名称和磁盘大小
查看已用未用空间
df
du
查看网卡千兆还是百兆
lspci
dmesg |grep -i eth0
ethtool <dev> // 实现,创建一个socket, 向这个socket 发送ioctl 字取返回值
如何查询LINUX启动会开那些服务?
chkconfig --list
service --status-all
/etc/init.d/目录里面去看
查看一下/etc/services里面有端口对照表
w,who,是查看当前在线的用户
last是查看最近用户的登录记录
查看所有用户列表是cat /etc/passwd
机器性能监测。 nmon 是一个很好的图形化性能监视软件
----------------------------------------
创建文件,不仅需要数据空间,也需要inode 空间
----------------------------------------
touch -t 201308050000 <time-file>
编脚本创建旧文件,0大小
当我创建大量的小文件时,终于出现了
touch: cannot touch `time6999999': No space left on device
[hjj@hjj ~/temp1]$ df -h # 看到磁盘还有空间
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 22G 26G 46% /
tmpfs 930M 232K 930M 1% /dev/shm
/dev/sda1 485M 161M 299M 35% /boot
/dev/mapper/VolGroup-lv_home
94G 27G 63G 30% /home
[hjj@hjj ~/temp1]$ df -i # inode 空间已经耗尽
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root
3276800 400528 2876272 13% /
tmpfs 237900 7 237893 1% /dev/shm
/dev/sda1 128016 70 127946 1% /boot
/dev/mapper/VolGroup-lv_home
6201344 6201344 0 100% /home
linux 文件系统的结构,,
当你在 Linux 中进行 IO 操作的时候,需要的资源除了磁盘空间以外,还要有剩余的 Inode 才行。
缺省情况下, Linux 在系统安装过程中按照1个 Inode 对应 2k 磁盘空间来计算每个分区的最大 Inode 数。
一旦文件系统创建之后,每个分区可用 Inode 数就无法进行动态调整。
正常来说,一般不太会出现某个分区的 Inode 耗尽而磁盘空间尚余的情况,
除非是有太多的小文件(<2k), 例如像我创建的0大小的小文件。
但如果确实需要的话,
可以在创建文件系统(比如用mke2fs)的时候根据实际需要来调整这个参数,多创建一些Inode.
如何复制文件并保持创建日期不变 cp -a 即可
---------------------------------------
提示无法加载libxxxx.so共享库。路径问题的解决办法:
---------------------------------------
1. 在/lib 或 /usr/lib 下建立软链接
2. export LD_LIBRARY_PATH 添加共享库路径
3. 编辑/etc/ld.so.conf 增加共享库路径,执行ldconfig 生效
---------------------------------------
1.查看当前的输入设备
ls /dev/input
2.查看输入设备的名称
cat /proc/bus/input/devices
---------------------------------------
用户命令
------------------------------------------------------------
想把一个用户加入一个组?
以把用户加入dialout组为例
一般默认情况下,只有root用户和dialout组的用户会有读写的权限,所以可以将用户加入到dialout组中获取串口读取权限。
如何将用户加入一个组,2种方法, usermod 或 gpasswd
$ sudo usermod -a -G dialout your_user_name
或者
$ sudo gpasswd -a your_user_name dialout
------------------------------------------------------------
1.开机自动挂载磁盘
-----------------------------------------------------------
使用命令:vim /etc/fstab
最后一行增加配置: 例如:把/dev/sda1 mount 到/storage目录下
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda1 /storage ext4 defaults 0 0
设备文件名称 可以是设备文件名称(即/dev/xxx),也可以是设备的label或uuid。建议用设备文件名称
挂载目录
文件系统类型 ubuntu14.04上用的最多的是ext4,
挂载选项 一般设置为defaults
是否备份 一般设置为0,即不备份
开机时是否对文件系统进行自检 一般设置为0。即不自检,挂载点为根目录的设备,设置为1,其它需要自检的设备,设置为2
-----------------------------------------------------------
测试硬盘读速度
-----------------------------------------------------------
sudo hdparm -tT /dev/sda
-t :直接读硬盘
-T:读cache中速度
我的ata硬盘就有个毛病,开始读取的时候速度很慢,然后才恢复正常,用vim 编辑文件有时都感觉到卡了一下才反应,好在它只是个数据盘,也就只用它来存存数据了.
用hdparm 查看
$ sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 4 MB in 3.87 seconds = 1.03 MB/sec
正常应该在200MB,连敲3遍即可.
sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 646 MB in 3.01 seconds = 214.85 MB/sec
此时的电源状态是active.
sudo hdparm -C /dev/sda1
/dev/sda1:
drive state is: active/idle
而慢速时,电源状态是 standby. 我不确认这是否正常.
因为我在另一台机器上测试另一块usb硬盘, 其电源状态总是standby, 但速度始终是40MB/s,这显然是正确的.