Quản lý File, thư mục
• Xem danh sách các file : ls
• # ls –l /
• Một số option thường dùng với lệnh ls
-L
Hiển thị danh sách file (chỉ hiện thị tên)
-l
Hiển thị danh sách file (gồm nhiều cột: filename, size,date….)
-a
Liệt kê tất cả các file, bao gồm những file ẩn
-R
Cấu trúc hệ thống tập tin
• Khái niệm tập tin được chia làm 3 loại chính:
• Tập tin chứa dữ liệu bình thường
• Tập tin thư mục
• Tập tin thiết bị
• Ngoài ra còn các Link và Pipe như là các tập tin đặc biệt
# root@solaris11-test:~# ls -l /
total 1826
drwxr-xr-x 3 root root 8 Feb 24 2017 IPS
drwxr-xr-x 3 root root 8 Feb 27 2017 IPS_PUBLIC
drwxr-xr-x 2 root root 3 Sep 11 10:12 backup
lrwxrwxrwx 1 root root 9 Feb 24 2017 bin -> ./usr/bin
drwxr-xr-x 5 root sys 9 Feb 24 2017 boot
drwxr-xr-x 2 root root 4 Aug 7 15:28 cdrom
drwxr-xr-x 2 root root 2 Sep 7 15:18 data3
drwxr-xr-x 205 root sys 205 Aug 7 15:26 dev
drwxr-xr-x 4 root sys 12 Aug 7 15:26 devices
drwxr-xr-x 97 root sys 194 Sep 17 14:32 etc
drwxr-xr-x 3 root sys 3 Feb 24 2017 export
dr-xr-xr-x 1 root root 1 Sep 2 22:59 home
drwxr-xr-x 19 root sys 19 Feb 24 2017 kernel
drwxr-xr-x 12 root bin 335 Feb 24 2017 lib
• Một số tập tin thư mục cơ bản:
/bin, /sbin
Chữa các tập tin nhị phân hỗ trợ cho việc boot và thực thi các lệnh
/boot
Chứa kernel, file hỗ trợ cho việc load hệ điều hành
/dev
Chứa các tập tin thiết bị (CDRom, HDD…)
/etc
Chứa các tập tin cấu hình hệ thống
/export
Chứa các home directory mặc định của người dùng
/lib
Chứa kernel module, và các thư viện chia sẻ cho các tập tin nhị phân trong /bin và /sbin
/mnt
Chứa các mount point cửa các thiệt bị được mount vào hệ thống
/proc
Lưu trữ thông tin về kernel, các tiến trình
/root
Lưu trữ home directory cho user root
/tmp
Chứa file tạm
/usr
Chứa các chương trình đã được cài đặt
/var
Chứa các log file, hàng đợi các chương trình, mailbox của users
Quản lý và thao tác với file/thưc mục
• Tạo thư mục : mkdir
# mkdir /data
# mkdir –p /data/backup/solaris
• Tạo tập tin :
# echo "ABC" > /data/test.txt
# echo “XYZ" >> /data/test.txt
Tạo tập tin rỗng
# touch /text.txt
• Xem nội dung tập tin:
# cat /etc/passwd
# cat /etc/passwd /etc/shadow
Ngoài ra sử dụng more,less,head,tail…
# tail -f /var/adm/messages
• Sao chép : cp,scp
# cp /export/home/binhtv/file1.txt /data/
# cp /var/mail/* /maillog
# cp –R /export/home/binhtv/test /data/backup/
scp source_file username@destination_host:/destination_folder
# scp test1 root@192.168.1.165:/data/backup
• Di chuyển: mv
# mv /export/home/haivx/file1.txt /data/
# mv /export/home/haivx/test/ /data/backup/
• Đổi tên:
# mv /export/home/haivx/test/ /export/home/haivx/test1
# cp /export/home/haivx/file1.txt /data/file2.txt
• Xóa tập tin : rm
# rm –rf /export/home/haivx/test1.txt
# rm –rf /export/home/haivx/data
• Liên kết tập tin: ls
# ln /data.txt /data1.txt --hardlink
# ln –s /export/home/haivx/test.txt /data/ --Symbolic link
• Vào ra thư mục : cd
# cd /export/home/haivx
# cd ../
• Xem thư mục hiện hành: pwd
# pwd
/root
• Đồng bộ file, thư mục : rsync
• # rsync options source destination
-v
hiển thị trạng thái kết quả
-r
copy dữ liệu recursively, nhưng không đảm bảo thông số của file và thư mục
-a
cho phép copy dữ liệu recursively, đồng thời giữ nguyên được tất cả các thông số của thư mục và file
-z
nén dữ liệu trước khi truyền đi giúp tăng tốc quá trình đồng bộ file.
-h
kết hợp với -v để định dạng dữ liệu show ra
--delete
xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
--exclude
loại trừ ra những dữ liệu không muốn truyền đi, nếu bạn cần loại ra nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm –exclude tương ứng.
• Đồng bộ local server
# rsync -zvh backup.tar /tmp/backups/
# rsync -avzh /root/rpmpkgs /tmp/backups/
• Đồng bộ giữa các server:
# rsync -avz backup/ root@192.168.1.165:/home/ --local to remote
# rsync -avzh root@192.168.1.165:/root/data /backup/data1 --remote to local
• Đồng bộ qua SSH:
# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/ --local to remote
# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/ --remote to local
• Tìm kiếm : find
# find /data –name test.txt
# find /data –name test*
# find /data3 -type f -exec grep -l '123' {} \;
# find /data -type f -name "*.dup" -mtime +3 -exec rm -rf {} \;
Ngoài ra còn nhiều tùy chọn –size, -user, -perm
# man find
• Tìm thư mục chứa lệnh : which
# which ls
/usr/bin/ls
• Tìm 1 chuôi trong file
• # cat /data/test.txt | grep 123
• Nén/giải nén dùng gzip/gunzip:
# gzip /data/test1.txt
# gunzip /data/test1.txt.gz
• Dùng tar
# tar –cvf test.tar test.txt
# tar –cvfz test.tar.gz test.txt
# tar –vxf test.tar –C /data
# tar –xvfz test.tar.gz
• Tao/sửa tập tin văn bản : vi
# vi test.txt
:wq Thoát và lưu văn bản
:q! Thoát và không lưu
i Vào mode insert từ ký tự bên trái
a Vào mode insert từ ký tự bên phải
x Xóa 1 ký tự
dd Xóa 1 dòng
yy Sao chép 1 dòng
p Paste
1-99% Đi tới số % của văn bản
g Đi tới đầu văn bản
G Đi tới cuối văn bản
Chay background #nohup test_nohup.sh &
Folder
1. Check dung lượng thư mục
# du -hs *
# du -hs /u02/app
2. Copy thư mục
# cp -Rf /data/app1/ /u02/app2/ -- copy các file, thư mục trong app1 vào app2
# cp -Rf /data/app1 /u02/app2/ -- copy thư mục app1 vào thư mục app2
3. Xóa thư mục
# rm -rf /data/icc/app
4. Chuyển thư mục
# mv -f app /u02/ -- cung thư mục cha
5. SCP
# scp -r mc root@192.168.1.42:/u01/app/
6. Xóa file theo ngày
Solaris, AIX:
$ find /path/to/folder -mtime +3 -exec rm -f {} \;
Linux:
find /u01/app/oracle/diag/rdbms/gold/gold1/trace -type f -mtime +1 -print |xargs rm
File
1. Null file
Giải phóng dung lượng
# /dev/null > log.txt
# cat /dev/null <file_name>
# rm <file_name>
2. Ls
# ls [cf]* // start c or f
# ls [c-f]* // start c-f
# ls touchtone.?.au //?: ky tu bat ky
3. Tạo file với dung lượng cho trước
# mkfile 2m /export/home/binhtv/test.dat
Lệnh VD Mô tả, ghi chú
cat cat /dev/null > /usr/local/apache2/logs/access_log Đưa file về dung lượng 0 KB
rm Folder:
rm -rf /u01/app/*
rm -rf /u01/app
rm -rf /u01/app/
File:
rm -r /u01/app/test_file.txt
rm -rf /u01/app/*
mv mv file_name.txt file_new.txt
mv -rf /u01/app /u02/
tar Nén thư mục, file Khi nén folder đường dẫn dài (/u01/…/qlhs1/stage/qlhs/qlhs/) sau đó giải nén thì sẽ tạo đúng thư mục trước khi nén.
tar -cvf folder.tar.gz folder for backing up, you use
tar -cvf folder.tar folder [/backups]# tar -cvf /dev/rmt/tx5 /home/*.*
tar cf folder.tar folder1 folder2 folder3/onlythispart & then you restore using
tar -cvf folder.tar file.txt [/backups]# tar -xvf /dev/rmt/tx5 *
tar cvf - cdc |gzip > cdc.tar.gz the files will be restored to /home & not /backups, but
# backup configurations of WebLogic if you backup using
export v_date=`date +%Y%m%d` [/home]# tar -cvf /dev/rmt/tx5 *.*
echo "Start backup configurations of WebLogic at $(date)" >> /u02/backup/log.txt & then restore using
cd /u01; tar -cvf /u02/backup/oracle_wl_$v_date.tar oracle [/backups]# tar -xvf /dev/rmt/tx5 *
echo "Finish backup configurations of WebLogic at $(date)" >> /u02/backup/log.txt the files will be restored to /backups
Giải nén file tar
-- Giải nén thư mục hiện tại
tar -xvf folder.tar.gz
-- Giải nén sang thư mục khác
cd /u01/weblogic; tar -xvf /export/home/binhtv/ttcp.tar
List file từ tar
tar -tvf folder.tar.gz
gzip cp /u01/app/oracle/diag/rdbms/db*/trace/alert_gold* .
cp /u01/app/oracle/diag/asm/+asm/+ASM*/trace/alert_+ASM* .
gzip alert*log
gunzip cd /tmp
--Extract VMware Tools.
gunzip -c /cdrom/vmwaretools/vmware-solaris-tools.tar.gz | tar xf -
grep grep ErrorLog /etc/httpd/conf/httpd.conf Tìm kiếm nội dung từ file
find /usr/local/apache2 -type f -exec grep 'error' {} +
grep -R 'error' /usr/local/apache2
-- Tìm string trong các file ở đường dẫn /u01/app
find /u01/app -type f -exec grep -l "mc_update_info.delete_info" {} \;
find /u01/app -type f |wc -l
find find /path -mtime +10 -exec rm -f {} \;
# find . -name listener.log -exec ls -l {} \;
find / -perm -4000 -exec ls -ld {} \; > /tmp/output.log // {}: đặt kết quả câu lênh, \; kết thúc câu lệnh
--
find -maxdepth 1 -type d | while read dir; do
count=$(find "$dir" -maxdepth 1 -iname \*.jpg | wc -l)
echo "$dir ; $count"
done
Pasted from <http://stackoverflow.com/questions/628662/unix-command-to-list-folders-with-file-counts>
down vote
You can do it without external commands:
for d in */; do
set -- "$d"*.jpg
printf "%s: %d\n" "${d%/}" "$#"
done
Or you can use awk (nawk or /usr/xpg4/bin/awk on Solaris):
printf "%s\n" */*jpg |
awk -F\/ 'END {
for (d in _)
print d ":",_[d]
}
{ _[$1]++ }'
tail $ tail -5000l /u01/oracle/log/alert.log > /tmp/test.log // Tạo file test.log chứa 5000 dòng cuối cùng
wc wc # Word count (characters, words, lines).
wc -w # Word count only.
wc -l # Line count.
mkfile $ date && mkfile 1G test.dat && date Tạo file dung lượng 1G
# mkfile 500m testfile&
# iostat -x 5
dd dd commands Tạo file dung lượng 80MB
dd -- dataset definition, useful for taking backup of votedisks/Voting Disks
Arguments:
if -- input file
of -- output file
bs -- block size
dd if=/dev/zero of=testfile bs=1024 count=1024000 --1G
dd if=/dev/zero of=testfile bs=1024 count=102400 --100MB
dd if=/dev/zero of=/tmp/test.dat bs=8k count=10000
dd if=/u02/ocfs2/vote/VDFile_0 of=$ORACLE_BASE/bkp/VDFile_0
dd if=/dev/hdb2 of=/dev/sda5 bs=8192
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
dd if=/dev/zero of=/abc bs=1 count=1 conv=notrunc,ucase
dd if=/dev/cdrom of=/home/satya/myCD.iso bs=2048 conv=sync,notrunc,lcase
dd if=/dev/hda3 skip=9200 of=/home/satya/backup_set_3.img bs=1M count=4600
dd if=/home/satya/1Gb.file bs=64k | dd of=/dev/null
From <http://satya-racdba.blogspot.com/2013/03/dd-votedisks-voting-disk.html>
scp scp -r mc root@192.168.1.42:/u01/app/
scp -f *.datroot@192.168.1.42:/u01/app/
# scp -r /home/binhtv root@192.168.1.114:/home/ // Copy toàn bộ thư mục /home/binhtv tới máy 114, thư mục /home
scp -o StrictHostKeyChecking=no -r /u01/oracle/app/fmw/10.3.2/user_projects/domains/VMS_CLUSTER_DOMAIN_2 root@192.168.1.205:/u01/oracle/app/fmw/10.3.2/user_projects/domains/
for root@crmweb03 # more bk_apache.sh Copy loại trừ 1 thư mục
for file in "/usr/local/apache2/"*
do
[[ $file = /usr/local/apache2/logs ]] && continue
echo "Copying $file"
scp -r $file root@192.168.1.42:/s02/backup_toht/crm_web2_48/apache
done
for file in $(find /u02/icc/app/ICC_MSC/FTPFILE/service/log/tmp/ -name 2013*.log) Tìm các file 2013*.log trong thư mục ../tmp
do
rm -rf $file
done
man # man <cmd>
Ctr + F: forward 1 trang
Ctrl + B: backward 1 trang
sed Commands
sed 's/txt/TXT/g' # Scan and replace text, replace txt --> TXT
sed 's/txt//' # Scan and delete text (deleted txt)
sed '/txt/q' # Scan and then quit.
# echo '/s01!@#$%^&*()' | sed 's/[!@#\/$%^&*()]//g'
Hoặc:
# echo '/s01!@#$%^&*()' | sed "s/[^a-zA-Z0-9]*//g";
Hoặc:
# echo '/s01!@#$%^&*()' | sed 's/[^a-zA-Z0-9]*//g';
#ls -la |sed 's/txt/TXT/g' // Hiển thị mọi file trong thư mục hiện tại và thay txt bằng TXT
Vi i insert
dd: xóa dòng hiện tại
esc: Thoát khỏi chế độ edit
:x hoặc :wq lưu và thoát
:q! thoát ko lưu
/string: tìm kiếm string
G: Chuyển đến dòng cuối dùng
Thư mục hiện tại, thư mục all format Fix tên file có ký tự Ctr+M (^M)
for f in $(find . -name "*.*
")
do
filename=${f%.*}
ext=${f##*.}
#echo ${filename} ${ext}
mv "${f}"* "${filename}.${ext}"
done
Thư mục hiện tại, thư mục con file JPG
for f in $(find . -name "*.jpg*")
do
filename=${f%.*}
echo ${f}
echo ${filename}
mv "${f}"* "${filename}.jpg"
done
Thư mục hiện tại
for f in $(ls *.jpg*)
do
filename=${f%.*}
echo ${f}
echo ${filename}
mv "${f}"* "${filename}.jpg"
done
Metacharacters
(*) ls f* // hiển thị file bắt đầu bằng f
(-) su - // đăng nhập với username trước đó
cd - // về thư mục trước đó
(?) ls dir? // liệt kê các file, thư mục bắt đầu bằng dir theo sau là 1 ký tự
(~) Về thư mục home của user hiện tại
([]) Ls [a-f]* // liệt kê các file/folder bắt đầu bằng a-f
Ls [af]* // liệt kê các file/folder bắt đầu bằng a hoac f
(.) . .bash_profile: // chạy file cấu hình
(!)
> --Tạo file mới
Cat /etc/hosts > /tmp/hosts
>> -- Thêm New vào /tmp/hosts
Echo "New" >> /tmp/hosts